diff --git a/.github/workflows/ci_suite.yml b/.github/workflows/ci_suite.yml index 47f8b1df9941..915b6021e98c 100644 --- a/.github/workflows/ci_suite.yml +++ b/.github/workflows/ci_suite.yml @@ -11,7 +11,7 @@ on: - master jobs: run_linters: - if: "!contains(github.event.head_commit.message, '[ci skip]')" + if: ${{ ! contains(github.event.head_commit.message, '[ci skip]') }} name: Run Linters runs-on: ubuntu-22.04 steps: @@ -70,6 +70,7 @@ jobs: ~/dreamchecker > ${GITHUB_WORKSPACE}/output-annotations.txt 2>&1 - name: Annotate Lints + if: always() uses: yogstation13/DreamAnnotate@v2 with: outputFile: output-annotations.txt @@ -83,7 +84,7 @@ jobs: cat check_regex_output.txt compile_all_maps: - if: "!contains(github.event.head_commit.message, '[ci skip]')" + if: ${{ ! contains(github.event.head_commit.message, '[ci skip]') }} name: Compile Maps runs-on: ubuntu-latest steps: @@ -105,7 +106,7 @@ jobs: tools/build/build --ci dm -DCIBUILDING -DCITESTING -DALL_MAPS -DFULL_INIT run_all_tests: - if: "!contains(github.event.head_commit.message, '[ci skip]')" + if: ${{ ! contains(github.event.head_commit.message, '[ci skip]') }} name: Integration Tests strategy: fail-fast: false @@ -135,7 +136,7 @@ jobs: # minor: ${{ matrix.minor }} test_windows: - if: "!contains(github.event.head_commit.message, '[ci skip]')" + if: ${{ ! contains(github.event.head_commit.message, '[ci skip]') }} name: Windows Build runs-on: windows-latest steps: diff --git a/.github/workflows/rerun_flaky_tests.yml b/.github/workflows/rerun_flaky_tests.yml new file mode 100644 index 000000000000..e3cbda05749b --- /dev/null +++ b/.github/workflows/rerun_flaky_tests.yml @@ -0,0 +1,37 @@ +name: Rerun/Report Flaky Tests +on: + workflow_run: + workflows: [Checks] + types: + - completed + +permissions: + actions: write + contents: write + issues: write + +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/BeachRuins/beach_ancient_ruin.dmm b/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm index be52f6a67f46..cfe522aeb415 100644 --- a/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_ancient_ruin.dmm @@ -606,7 +606,7 @@ /area/ruin/beach/complex) "kK" = ( /obj/structure/closet/crate/bin, -/obj/item/reagent_containers/food/snacks/breadslice/moldy, +/obj/item/food/breadslice/moldy, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/concrete/slab_4, /area/ruin/beach/complex) @@ -1458,7 +1458,7 @@ /turf/open/floor/plasteel/mono, /area/ruin/beach/complex) "wV" = ( -/obj/item/kitchen/knife/hunting{ +/obj/item/melee/knife/hunting{ name = "machete"; pixel_y = 8; desc = "Space vines HATE this one simple trick!" diff --git a/_maps/RandomRuins/BeachRuins/beach_crashed_engineer.dmm b/_maps/RandomRuins/BeachRuins/beach_crashed_engineer.dmm index 998e43b9085a..971fde63cb03 100644 --- a/_maps/RandomRuins/BeachRuins/beach_crashed_engineer.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_crashed_engineer.dmm @@ -1232,7 +1232,7 @@ /obj/machinery/atmospherics/components/unary/passive_vent{ dir = 1 }, -/obj/item/fireaxe{ +/obj/item/melee/axe/fire{ name = "rusty fire axe" }, /turf/open/floor/engine/airless, diff --git a/_maps/RandomRuins/BeachRuins/beach_fishing_hut.dmm b/_maps/RandomRuins/BeachRuins/beach_fishing_hut.dmm index ab5a6bb58d84..ea1a18b11c4b 100644 --- a/_maps/RandomRuins/BeachRuins/beach_fishing_hut.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_fishing_hut.dmm @@ -203,8 +203,7 @@ "kj" = ( /obj/structure/closet/cabinet, /obj/item/pneumatic_cannon/speargun, -/obj/item/storage/backpack/magspear_quiver, -/obj/item/kitchen/knife/hunting, +/obj/item/melee/knife/hunting, /turf/open/floor/wood, /area/ruin/beach) "kr" = ( @@ -529,7 +528,7 @@ dir = 6 }, /obj/structure/table/reinforced, -/obj/item/kitchen/knife/butcher, +/obj/item/melee/knife/butcher, /turf/open/floor/plastic, /area/ruin/beach) "wg" = ( @@ -1032,7 +1031,7 @@ "Os" = ( /obj/structure/table/wood/reinforced, /obj/effect/turf_decal/corner/opaque/pink/diagonal, -/obj/item/kitchen/knife{ +/obj/item/melee/knife/kitchen{ pixel_y = 12; pixel_x = 9 }, @@ -1051,8 +1050,7 @@ "PB" = ( /obj/structure/closet/cabinet, /obj/item/pneumatic_cannon/speargun, -/obj/item/storage/backpack/magspear_quiver, -/obj/item/kitchen/knife/hunting, +/obj/item/melee/knife/hunting, /obj/machinery/light/small/directional/east{ light_color = "#d8b1b1" }, @@ -1244,7 +1242,6 @@ /turf/open/water/beach/deep, /area/overmap_encounter/planetoid/beachplanet/explored) "Vt" = ( -/obj/item/nullrod/carp, /obj/structure/bed/dogbed, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood/walnut, diff --git a/_maps/RandomRuins/BeachRuins/beach_float_resort.dmm b/_maps/RandomRuins/BeachRuins/beach_float_resort.dmm index 29ad64707d84..b2c39404d641 100644 --- a/_maps/RandomRuins/BeachRuins/beach_float_resort.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_float_resort.dmm @@ -193,7 +193,7 @@ /turf/open/water/beach, /area/overmap_encounter/planetoid/beachplanet/explored) "eZ" = ( -/obj/item/melee/roastingstick, +/obj/item/roastingstick, /turf/open/floor/wood{ light_range = 2 }, @@ -1314,10 +1314,10 @@ /area/ruin/beach/float_resort) "Ja" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/condiment/ketchup{ +/obj/item/reagent_containers/condiment/ketchup{ pixel_y = 18 }, -/obj/item/reagent_containers/food/condiment/mayonnaise{ +/obj/item/reagent_containers/condiment/mayonnaise{ pixel_x = -8; pixel_y = 16 }, diff --git a/_maps/RandomRuins/BeachRuins/beach_ocean_town.dmm b/_maps/RandomRuins/BeachRuins/beach_ocean_town.dmm index a751740c08a2..d1a3ff05cf04 100644 --- a/_maps/RandomRuins/BeachRuins/beach_ocean_town.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_ocean_town.dmm @@ -1628,7 +1628,7 @@ /obj/effect/turf_decal/weather/sand{ dir = 5 }, -/obj/item/melee/roastingstick, +/obj/item/roastingstick, /obj/item/reagent_containers/food/snacks/sausage, /turf/open/floor/plating/dirt{ light_range = 2 @@ -2304,7 +2304,7 @@ /obj/effect/turf_decal/weather/sand{ dir = 8 }, -/obj/item/melee/roastingstick, +/obj/item/roastingstick, /turf/open/floor/plating/dirt{ light_range = 2 }, diff --git a/_maps/RandomRuins/BeachRuins/beach_pirate_crash.dmm b/_maps/RandomRuins/BeachRuins/beach_pirate_crash.dmm index 2b2479ffe0fb..67ac69292603 100644 --- a/_maps/RandomRuins/BeachRuins/beach_pirate_crash.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_pirate_crash.dmm @@ -16,7 +16,7 @@ /area/ruin/beach/piratecrash/storage) "af" = ( /obj/structure/table/wood, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /obj/effect/turf_decal/corner/opaque/black/diagonal, /obj/effect/turf_decal/siding/wood{ dir = 1 @@ -37,7 +37,7 @@ }, /obj/structure/table/wood, /obj/item/reagent_containers/food/snacks/fishfry, -/obj/item/kitchen/knife/shiv{ +/obj/item/melee/knife/shiv{ pixel_x = -6; pixel_y = 5 }, diff --git a/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm b/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm index 6e70a81ace49..997f6bb56703 100644 --- a/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm +++ b/_maps/RandomRuins/BeachRuins/beach_treasure_cove.dmm @@ -240,7 +240,7 @@ }, /obj/structure/table/wood/reinforced, /obj/effect/decal/cleanable/dirt/dust, -/obj/item/reagent_containers/food/snacks/breadslice/moldy{ +/obj/item/food/breadslice/moldy{ pixel_x = 3; pixel_y = 6 }, @@ -393,7 +393,7 @@ pixel_x = 9; pixel_y = -1 }, -/obj/item/gun/ballistic/automatic/assault/p16/minutemen{ +/obj/item/gun/ballistic/automatic/assault/cm82{ pixel_y = 7; pixel_x = -9 }, diff --git a/_maps/RandomRuins/IceRuins/icemoon_crashed_holemaker.dmm b/_maps/RandomRuins/IceRuins/icemoon_crashed_holemaker.dmm index 82c054f8fabf..707be4573d13 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_crashed_holemaker.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_crashed_holemaker.dmm @@ -887,7 +887,7 @@ /area/ruin/unpowered/crashed_holemaker) "oC" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /turf/open/floor/wood{ icon_state = "wood-broken7" }, diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm index 06d6a8e9fd27..29710e094f64 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_abandoned_village.dmm @@ -242,9 +242,9 @@ /obj/item/reagent_containers/food/snacks/fishmeat/carp, /obj/item/reagent_containers/food/snacks/fishmeat/carp, /obj/item/reagent_containers/food/snacks/fishmeat/carp, -/obj/item/reagent_containers/food/condiment/pack/ketchup, -/obj/item/reagent_containers/food/condiment/pack/ketchup, -/obj/item/reagent_containers/food/condiment/pack/ketchup, +/obj/item/reagent_containers/condiment/pack/ketchup, +/obj/item/reagent_containers/condiment/pack/ketchup, +/obj/item/reagent_containers/condiment/pack/ketchup, /obj/effect/turf_decal/corner/opaque/black{ dir = 1 }, @@ -332,7 +332,7 @@ /obj/item/restraints/legcuffs/beartrap, /obj/item/reagent_containers/glass/bottle/venom, /obj/item/reagent_containers/glass/bottle/curare, -/obj/item/kitchen/knife/combat/survival, +/obj/item/melee/knife/survival, /obj/effect/decal/cleanable/dirt, /obj/item/reagent_containers/food/snacks/meat/slab/human, /obj/item/reagent_containers/food/snacks/meat/slab/human, @@ -384,7 +384,7 @@ /obj/effect/decal/cleanable/blood/gibs/torso, /obj/structure/safe, /obj/item/ammo_box/a12g/slug, -/obj/item/kitchen/knife/combat, +/obj/item/melee/knife/combat, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /turf/open/floor/wood, diff --git a/_maps/RandomRuins/IceRuins/icemoon_underground_brazillianlab.dmm b/_maps/RandomRuins/IceRuins/icemoon_underground_brazillianlab.dmm index 4954a9a5aaf4..d560e98b2f20 100644 --- a/_maps/RandomRuins/IceRuins/icemoon_underground_brazillianlab.dmm +++ b/_maps/RandomRuins/IceRuins/icemoon_underground_brazillianlab.dmm @@ -367,23 +367,6 @@ initial_gas_mix = "ICEMOON_ATMOS" }, /area/ruin/unpowered) -"sf" = ( -/obj/structure/table/wood, -/obj/item/nullrod{ - block_chance = 50; - desc = "This massive chart appears to be the layout of a SolGov outpost. It's covered in marks, scribbles in a language you don't recognize, and several stains. It's unusually sturdy."; - icon_state = "blueprints"; - item_state = "blueprints"; - lefthand_file = 'icons/mob/inhands/items_lefthand.dmi'; - name = "facility blueprints"; - pixel_y = 10; - righthand_file = 'icons/mob/inhands/items_righthand.dmi'; - w_class = 5 - }, -/turf/open/floor/wood{ - initial_gas_mix = "ICEMOON_ATMOS" - }, -/area/ruin/unpowered) "si" = ( /obj/structure/flora/rock/jungle, /obj/structure/flora/grass/jungle/b, @@ -1248,13 +1231,6 @@ }, /turf/open/floor/plating/snowed/smoothed/icemoon, /area/ruin/unpowered) -"Zs" = ( -/obj/structure/table/wood, -/obj/item/banhammer, -/turf/open/floor/wood{ - initial_gas_mix = "ICEMOON_ATMOS" - }, -/area/ruin/unpowered) (1,1,1) = {" aW @@ -2252,7 +2228,7 @@ Hb aW WH jy -Zs +ib WH WH WH @@ -2284,7 +2260,7 @@ Hb aW Br ib -sf +ib WH WH fB diff --git a/_maps/RandomRuins/JungleRuins/jungle_abandoned_library.dmm b/_maps/RandomRuins/JungleRuins/jungle_abandoned_library.dmm index 12fdf42c7d44..9fc8444c5dd3 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 f5214804dbbd..77c280d07e90 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_cavecrew.dmm b/_maps/RandomRuins/JungleRuins/jungle_cavecrew.dmm index dec4c65755f9..d40ca2c82b27 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_cavecrew.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_cavecrew.dmm @@ -1034,7 +1034,7 @@ /obj/item/reagent_containers/food/snacks/rationpack, /obj/item/reagent_containers/food/snacks/rationpack, /obj/item/reagent_containers/food/snacks/rationpack, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ pixel_x = -8; pixel_y = 5 }, @@ -1509,10 +1509,6 @@ }, /area/ruin/jungle/cavecrew/dormitories) "sJ" = ( -/obj/item/clothing/head/crown/fancy{ - pixel_y = 9; - pixel_x = 6 - }, /obj/structure/table/reinforced{ color = "#c1b6a5" }, diff --git a/_maps/RandomRuins/JungleRuins/jungle_interceptor.dmm b/_maps/RandomRuins/JungleRuins/jungle_interceptor.dmm index 057b0cbdbe8f..aab9b566f78e 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_interceptor.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_interceptor.dmm @@ -41,7 +41,7 @@ dir = 5 }, /obj/item/stack/cable_coil/cut/green, -/obj/item/reagent_containers/food/condiment/peppermill, +/obj/item/reagent_containers/condiment/peppermill, /turf/open/floor/plating/rust, /area/ruin/jungle/interceptor/starhall) "au" = ( @@ -992,9 +992,9 @@ /obj/structure/closet/wall/directional/east, /obj/item/reagent_containers/food/snacks/meat/slab/monkey, /obj/item/reagent_containers/food/snacks/meat/slab/monkey, -/obj/item/reagent_containers/food/condiment/sugar, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/rice, +/obj/item/reagent_containers/condiment/sugar, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/rice, /turf/open/floor/plasteel/tech/techmaint, /area/ruin/jungle/interceptor/starhall) "hO" = ( @@ -2887,7 +2887,7 @@ icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt/dust, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = 5; pixel_y = 5 }, diff --git a/_maps/RandomRuins/JungleRuins/jungle_medtech_outbreak.dmm b/_maps/RandomRuins/JungleRuins/jungle_medtech_outbreak.dmm index fce0a7d6904d..75b7e390c540 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_paradise.dmm b/_maps/RandomRuins/JungleRuins/jungle_paradise.dmm index 9457e639c5ce..47455933ec16 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_paradise.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_paradise.dmm @@ -798,7 +798,7 @@ /area/ruin/jungle/paradise/construction) "eY" = ( /obj/structure/table/reinforced, -/obj/item/kitchen/knife/butcher, +/obj/item/melee/knife/butcher, /obj/item/clothing/gloves/butchering, /turf/open/floor/pod/dark, /area/overmap_encounter/planetoid/cave/explored) @@ -1465,19 +1465,19 @@ pixel_x = 9 }, /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ pixel_x = -3; pixel_y = 6 }, /obj/item/reagent_containers/glass/beaker{ pixel_x = -2 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ desc = "Often used to flavor food or make people sneeze. Fashionably moved to the left side of the table."; pixel_x = -8; pixel_y = 2 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ desc = "Salt. From space oceans, presumably. A staple of modern medicine."; pixel_x = -8; pixel_y = 12 @@ -5181,7 +5181,7 @@ pixel_x = 7; pixel_y = 6 }, -/obj/structure/fireaxecabinet{ +/obj/structure/cabinet/fireaxe{ pixel_y = 28 }, /turf/open/floor/mineral/titanium, @@ -5381,7 +5381,7 @@ "Ih" = ( /obj/structure/table/wood, /obj/machinery/light/directional/south, -/obj/item/reagent_containers/food/snacks/breadslice/moldy{ +/obj/item/food/breadslice/moldy{ pixel_x = -8 }, /obj/item/reagent_containers/food/snacks/grown/berries/poison{ @@ -7509,7 +7509,7 @@ }, /obj/effect/mob_spawn/human/corpse/nanotrasensoldier, /obj/effect/decal/cleanable/vomit/old, -/obj/item/reagent_containers/food/snacks/breadslice/moldy{ +/obj/item/food/breadslice/moldy{ pixel_x = -4; pixel_y = 16 }, diff --git a/_maps/RandomRuins/JungleRuins/jungle_syndicate.dmm b/_maps/RandomRuins/JungleRuins/jungle_syndicate.dmm index ce83713f82bb..2eba13537777 100644 --- a/_maps/RandomRuins/JungleRuins/jungle_syndicate.dmm +++ b/_maps/RandomRuins/JungleRuins/jungle_syndicate.dmm @@ -308,7 +308,7 @@ /turf/open/floor/plating/rust, /area/ruin/jungle/syndifort/jerry) "ik" = ( -/obj/item/kitchen/knife/combat{ +/obj/item/melee/knife/combat{ name = "bushcutter"; force = 18 }, @@ -627,7 +627,7 @@ /area/ruin/jungle/syndifort/jerry) "ud" = ( /obj/structure/table, -/obj/item/kitchen/knife/combat{ +/obj/item/melee/knife/combat{ name = "bushcutter"; force = 18 }, @@ -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 new file mode 100644 index 000000000000..8cc99b4a591a --- /dev/null +++ b/_maps/RandomRuins/LavaRuins/lavaland_abandonedlisteningpost.dmm @@ -0,0 +1,3947 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ae" = ( +/obj/structure/sign/poster/contraband/c20r, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/listening_post/canteen) +"aw" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/railing, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plasteel/tech, +/area/ruin/unpowered/listening_post/engineering) +"aD" = ( +/obj/effect/turf_decal/spline/fancy/opaque/syndiered, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"aU" = ( +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/canteen) +"bm" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/railing, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post/engineering) +"bv" = ( +/obj/structure/window/reinforced/spawner/north, +/obj/machinery/telecomms/receiver, +/obj/machinery/door/window/eastleft, +/turf/open/floor/plasteel/freezer, +/area/ruin/unpowered/listening_post/operations) +"bw" = ( +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered/corner{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/listening_post) +"bA" = ( +/obj/effect/turf_decal/trimline/opaque/syndiered/arrow_ccw, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/commons) +"bL" = ( +/obj/structure/flora/tree/dead/tall, +/turf/open/floor/plating/grass/lava, +/area/ruin/unpowered) +"bT" = ( +/obj/structure/chair/plastic{ + dir = 1 + }, +/turf/open/floor/plating/asteroid/basalt/lava, +/area/ruin/unpowered) +"cb" = ( +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 10 + }, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered/corner{ + dir = 4 + }, +/obj/machinery/vending/snack/random, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/listening_post) +"cm" = ( +/obj/effect/turf_decal/trimline/opaque/syndiered/corner, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/thinplating/dark/corner, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post) +"cr" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/commons) +"cv" = ( +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/listening_post) +"cB" = ( +/obj/effect/turf_decal/trimline/opaque/syndiered/arrow_ccw{ + icon_state = "trimline" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/machinery/light/directional/south, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/commons) +"cM" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/tech, +/area/ruin/unpowered/listening_post/engineering) +"cX" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/blackbox_recorder, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"db" = ( +/obj/effect/turf_decal/trimline/opaque/syndiered/arrow_ccw{ + icon_state = "trimline"; + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/commons) +"dm" = ( +/obj/effect/turf_decal/trimline/opaque/syndiered/arrow_ccw{ + icon_state = "trimline"; + dir = 8 + }, +/obj/structure/fluff/paper/stack{ + dir = 5; + pixel_y = 25; + layer = 2.89 + }, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"dJ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/wood{ + dir = 2 + }, +/turf/open/floor/carpet/nanoweave/red, +/area/ruin/unpowered/listening_post/commons) +"dM" = ( +/obj/effect/turf_decal/siding/thinplating/dark/end{ + dir = 4 + }, +/obj/machinery/vending/coffee, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ruin/unpowered/listening_post/canteen) +"dT" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/layer2{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/tech, +/area/ruin/unpowered/listening_post/engineering) +"dY" = ( +/obj/item/ammo_casing/spent, +/obj/effect/decal/cleanable/blood/splatter{ + icon_state = "bubblegumfoot" + }, +/turf/open/floor/plating/asteroid/basalt/lava, +/area/ruin/unpowered) +"eN" = ( +/obj/effect/turf_decal/corner/opaque/syndiered/half, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/turf/open/floor/hangar/plasteel/white, +/area/ruin/unpowered/listening_post) +"eU" = ( +/obj/machinery/button/door{ + id = "cafeteriashutters"; + name = "Window Shutters"; + dir = 1; + pixel_y = -20 + }, +/obj/structure/closet/crate/bin, +/obj/item/cigbutt{ + pixel_y = -3 + }, +/obj/item/cigbutt{ + pixel_y = -3; + pixel_x = -7 + }, +/obj/item/cigbutt{ + pixel_y = 17; + pixel_x = -10 + }, +/obj/item/cigbutt{ + pixel_y = 1; + pixel_x = 7 + }, +/obj/item/cigbutt{ + pixel_y = 1; + pixel_x = -7 + }, +/obj/item/cigbutt{ + pixel_y = 15; + pixel_x = -7 + }, +/obj/item/storage/fancy/cigarettes/derringer/gold, +/obj/item/trash/can, +/obj/item/trash/sosjerky{ + pixel_y = 9; + pixel_x = -5 + }, +/obj/item/trash/sosjerky{ + pixel_y = 2; + pixel_x = 6 + }, +/obj/item/trash/syndi_cakes, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/canteen) +"eW" = ( +/obj/machinery/door/airlock/external/glass{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post) +"eX" = ( +/obj/effect/turf_decal/corner/opaque/syndiered/three_quarters{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/tracks, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/hangar/plasteel/white, +/area/ruin/unpowered/listening_post) +"fa" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 2 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/canteen) +"fd" = ( +/obj/effect/turf_decal/spline/fancy/opaque/syndiered, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/listening_post) +"fg" = ( +/obj/structure/sign/poster/contraband/bulldog, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/listening_post/commons) +"fl" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/stairs, +/area/ruin/unpowered/listening_post/engineering) +"fo" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/canteen) +"fz" = ( +/obj/machinery/suit_storage_unit/open, +/turf/open/floor/plasteel/tech/grid, +/area/ruin/unpowered/listening_post) +"fG" = ( +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 8 + }, +/obj/structure/chair/bench/red/directional/east, +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/listening_post) +"fQ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post) +"fZ" = ( +/obj/effect/turf_decal/trimline/opaque/bar/filled/warning{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/listening_post) +"gr" = ( +/obj/effect/turf_decal/trimline/opaque/syndiered/arrow_ccw{ + icon_state = "trimline"; + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"gN" = ( +/obj/structure/table/reinforced, +/obj/item/paper/crumpled/ruins{ + pixel_y = 7; + pixel_x = -8 + }, +/obj/item/paper/crumpled/ruins, +/obj/item/toy/prize/ripley{ + pixel_y = 13; + pixel_x = 4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"gT" = ( +/obj/effect/turf_decal/trimline/opaque/syndiered/arrow_ccw{ + icon_state = "trimline" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/structure/fluff/paper/stack{ + dir = 4; + pixel_y = -4; + pixel_x = 11 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/commons) +"gY" = ( +/obj/effect/turf_decal/trimline/opaque/syndiered/arrow_ccw{ + icon_state = "trimline" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/commons) +"hh" = ( +/obj/structure/sign/poster/contraband/cybersun, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/listening_post) +"hy" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/carpet/nanoweave/red, +/area/ruin/unpowered/listening_post/commons) +"hA" = ( +/obj/structure/cable{ + icon_state = "0-1" + }, +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/machinery/power/port_gen/pacman/super/not_very, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post/engineering) +"hC" = ( +/obj/effect/turf_decal/trimline/opaque/syndiered/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"hE" = ( +/obj/structure/curtain, +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/structure/grille, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post) +"hX" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post/engineering) +"ih" = ( +/obj/effect/turf_decal/trimline/opaque/syndiered/corner{ + dir = 8 + }, +/obj/machinery/door/window/brigdoor/northleft{ + dir = 2 + }, +/obj/structure/window/reinforced/spawner/east, +/obj/structure/safe{ + pixel_y = 9; + pixel_x = -4 + }, +/obj/item/spacecash/bundle/loadsamoney, +/obj/item/documents/syndicate, +/obj/machinery/light/small/directional/north, +/obj/item/folder/documents/syndicate/red, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 9 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"iR" = ( +/obj/effect/turf_decal/trimline/opaque/syndiered/arrow_ccw{ + icon_state = "trimline"; + dir = 1 + }, +/obj/machinery/light_switch{ + pixel_y = 22 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/commons) +"jz" = ( +/obj/effect/turf_decal/corner/opaque/syndiered/three_quarters, +/obj/structure/table/chem, +/obj/item/tank/internals/anesthetic{ + pixel_y = 3; + pixel_x = 6 + }, +/obj/item/clothing/mask/breath/medical{ + pixel_y = 6; + pixel_x = -4 + }, +/turf/open/floor/hangar/plasteel/white, +/area/ruin/unpowered/listening_post) +"jN" = ( +/obj/structure/curtain, +/obj/effect/turf_decal/techfloor/hole, +/obj/effect/turf_decal/techfloor/hole/right, +/obj/structure/window/reinforced/spawner/west, +/obj/machinery/shower{ + pixel_y = 19 + }, +/obj/item/soap/syndie, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 5 + }, +/turf/open/floor/plasteel/freezer, +/area/ruin/unpowered/listening_post/canteen) +"kb" = ( +/obj/item/kirbyplants/dead{ + desc = "It doesn't look very healthy..."; + name = "potted plant"; + pixel_y = 10 + }, +/obj/item/cigbutt{ + pixel_y = -3; + pixel_x = -7 + }, +/obj/item/cigbutt{ + pixel_y = 17; + pixel_x = -10 + }, +/obj/item/cigbutt{ + pixel_y = 1; + pixel_x = 7 + }, +/obj/item/cigbutt{ + pixel_y = 15; + pixel_x = -4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 9 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/canteen) +"kk" = ( +/obj/machinery/door/airlock/hatch{ + dir = 4; + name = "Bathroom" + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/canteen) +"kz" = ( +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"kA" = ( +/obj/machinery/door/airlock/hatch{ + name = "Engineering" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post/engineering) +"kB" = ( +/obj/structure/flora/tree/dead/tall, +/turf/open/floor/plating/grass/lava/purple, +/area/ruin/unpowered) +"lb" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post/canteen) +"lj" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 9 + }, +/turf/open/floor/plating/asteroid/basalt/lava, +/area/ruin/unpowered) +"ls" = ( +/obj/item/toy/figure/syndie{ + pixel_y = -1; + pixel_x = -33 + }, +/turf/open/floor/plating/asteroid/basalt/lava, +/area/ruin/unpowered) +"lu" = ( +/obj/machinery/airalarm/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating/dark/end{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/commons) +"lK" = ( +/obj/structure/railing/corner, +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plasteel/tech, +/area/ruin/unpowered/listening_post/engineering) +"lZ" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/listening_post/operations) +"mc" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_y = 7 + }, +/obj/item/pen{ + pixel_y = 9 + }, +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"mf" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post/engineering) +"mh" = ( +/obj/structure/flora/ausbushes/sparsegrass/hell, +/turf/open/floor/plating/asteroid/basalt/lava, +/area/ruin/unpowered) +"mj" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/carpet/nanoweave/red, +/area/ruin/unpowered/listening_post/commons) +"mp" = ( +/obj/structure/flora/ausbushes/sparsegrass/hell, +/turf/open/floor/plating/grass/lava/purple, +/area/ruin/unpowered) +"mF" = ( +/obj/structure/flora/tree/dead/tall/grey, +/turf/open/floor/plating/grass/lava, +/area/ruin/unpowered) +"mG" = ( +/obj/structure/table/reinforced, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post) +"mU" = ( +/obj/machinery/door/airlock/hatch{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post/operations) +"na" = ( +/obj/structure/table/reinforced, +/obj/machinery/fax{ + pixel_y = 7 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"nc" = ( +/obj/structure/mirror{ + pixel_x = 28; + icon_state = "mirror_broke"; + name = "Shattered Mirror" + }, +/obj/structure/sink{ + dir = 8; + pixel_x = 13 + }, +/obj/effect/decal/cleanable/vomit/old, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 6 + }, +/turf/open/floor/plasteel/freezer, +/area/ruin/unpowered/listening_post/canteen) +"np" = ( +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/listening_post) +"nD" = ( +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/plating/asteroid/basalt/lava, +/area/ruin/unpowered) +"nY" = ( +/obj/effect/turf_decal/trimline/opaque/syndiered/arrow_ccw, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/commons) +"oi" = ( +/obj/effect/turf_decal/trimline/opaque/syndiered/arrow_ccw{ + dir = 1 + }, +/mob/living/simple_animal/hostile/human/syndicate/ranged/space, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/commons) +"op" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/listening_post) +"ot" = ( +/obj/structure/closet/cabinet{ + name = "Alcohol Closet" + }, +/obj/item/reagent_containers/food/drinks/bottle/vodka, +/obj/item/reagent_containers/food/drinks/bottle/absinthe/premium, +/obj/structure/sign/poster/contraband/syndiemoth{ + pixel_y = -31 + }, +/obj/item/reagent_containers/food/drinks/bottle/rum, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/canteen) +"ou" = ( +/obj/effect/turf_decal/corner/opaque/syndiered/three_quarters{ + dir = 4 + }, +/obj/structure/bed/roller, +/obj/effect/decal/cleanable/blood{ + icon_state = "floor2-old" + }, +/turf/open/floor/hangar/plasteel/white, +/area/ruin/unpowered/listening_post) +"oC" = ( +/obj/effect/turf_decal/corner/opaque/syndiered/half{ + dir = 8 + }, +/obj/effect/decal/cleanable/blood/tracks, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/hangar/plasteel/white, +/area/ruin/unpowered/listening_post) +"oG" = ( +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/listening_post) +"oO" = ( +/obj/structure/toilet{ + pixel_y = 31; + dir = 1 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/listening_post/canteen) +"oS" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post) +"oT" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/hatch{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post/canteen) +"oX" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post/canteen) +"pa" = ( +/obj/structure/fluff/paper/stack{ + dir = 1; + pixel_x = -16; + pixel_y = -2 + }, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered/corner{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"pt" = ( +/obj/machinery/light/directional/east, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/wideplating/dark/end, +/obj/structure/table/reinforced, +/obj/item/storage/box/cups{ + pixel_y = 8; + pixel_x = 7 + }, +/obj/item/reagent_containers/food/drinks/colocup{ + pixel_y = 6; + pixel_x = -7 + }, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ruin/unpowered/listening_post/canteen) +"pw" = ( +/obj/effect/turf_decal/trimline/opaque/syndiered/arrow_ccw{ + icon_state = "trimline" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/commons) +"px" = ( +/obj/effect/turf_decal/trimline/opaque/syndiered/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post) +"pS" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plasteel/tech, +/area/ruin/unpowered/listening_post/engineering) +"pW" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"pZ" = ( +/obj/machinery/door/airlock/hatch{ + name = "Medbay" + }, +/obj/effect/decal/cleanable/blood/tracks, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post) +"qo" = ( +/obj/effect/turf_decal/trimline/opaque/syndiered/arrow_ccw{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"qq" = ( +/obj/structure/girder/reinforced, +/turf/open/floor/plating/ashplanet, +/area/ruin/unpowered) +"qv" = ( +/obj/structure/window/reinforced/spawner, +/obj/machinery/telecomms/server, +/obj/machinery/door/window/eastright, +/turf/open/floor/plasteel/freezer, +/area/ruin/unpowered/listening_post/operations) +"qC" = ( +/obj/item/kirbyplants/dead{ + desc = "It doesn't look very healthy..."; + name = "potted plant"; + pixel_y = 10 + }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 6 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"qJ" = ( +/obj/effect/turf_decal/trimline/opaque/syndiered/arrow_ccw{ + dir = 4 + }, +/obj/machinery/airalarm/directional/east, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post) +"qV" = ( +/turf/template_noop, +/area/template_noop) +"qW" = ( +/obj/structure/chair/bench/beige/directional/east, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 9 + }, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ruin/unpowered/listening_post/canteen) +"qX" = ( +/obj/structure/table/wood/reinforced, +/obj/item/toy/figure/secofficer{ + pixel_y = 10; + pixel_x = 7 + }, +/obj/item/toy/figure/head_of_personnel{ + pixel_y = 13; + pixel_x = -9 + }, +/obj/item/toy/figure/engineer{ + pixel_y = 5; + pixel_x = -7 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/carpet/nanoweave/red, +/area/ruin/unpowered/listening_post/commons) +"rb" = ( +/obj/structure/table/reinforced, +/obj/machinery/computer/secure_data/laptop, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post) +"rG" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/listening_post/canteen) +"rQ" = ( +/obj/structure/fluff/paper/stack{ + dir = 4; + pixel_y = -4; + pixel_x = 11 + }, +/obj/item/trash/can{ + pixel_y = -24; + pixel_x = -16 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"sd" = ( +/obj/structure/closet/crate/grave/loot, +/obj/effect/mob_spawn/human/skeleton, +/turf/open/floor/plating/asteroid/basalt/lava, +/area/ruin/unpowered) +"sr" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20; + pixel_y = 11 + }, +/obj/effect/turf_decal/siding/thinplating/dark/end{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/commons) +"sM" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 10 + }, +/turf/open/floor/plasteel/freezer, +/area/ruin/unpowered/listening_post/canteen) +"sP" = ( +/obj/machinery/door/airlock/external{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 8 + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post) +"sX" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post) +"te" = ( +/obj/item/gun/ballistic/automatic/smg/cobra{ + spawnwithmagazine = 0 + }, +/obj/item/ammo_box/magazine/m45_cobra{ + start_empty = 1 + }, +/obj/structure/guncloset, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"tf" = ( +/obj/effect/turf_decal/corner/opaque/syndiered/half, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/hangar/plasteel/white, +/area/ruin/unpowered/listening_post) +"th" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 8 + }, +/obj/machinery/light/small/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ruin/unpowered/listening_post) +"tk" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/hangar/plasteel/white, +/area/ruin/unpowered/listening_post) +"to" = ( +/obj/machinery/atmospherics/components/binary/volume_pump/on/layer4{ + dir = 4 + }, +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/tech, +/area/ruin/unpowered/listening_post/engineering) +"tG" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/decal/cleanable/vomit/old{ + pixel_y = 8; + pixel_x = 18 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/canteen) +"tJ" = ( +/obj/structure/sign/departments/engineering, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/listening_post/engineering) +"tM" = ( +/obj/structure/flora/ausbushes/sparsegrass/hell, +/turf/open/floor/plating/grass/lava/orange, +/area/ruin/unpowered) +"tS" = ( +/turf/open/floor/hangar/plasteel/white, +/area/ruin/unpowered/listening_post) +"tV" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table/reinforced, +/obj/machinery/newscaster/directional/north, +/obj/item/trash/plate{ + pixel_y = -27; + pixel_x = 1 + }, +/obj/item/reagent_containers/food/drinks/beer/light{ + pixel_y = 10; + pixel_x = 8 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ruin/unpowered/listening_post/canteen) +"tY" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/listening_post/operations) +"uv" = ( +/obj/machinery/atmospherics/components/unary/tank/air, +/obj/structure/railing/corner, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/tech, +/area/ruin/unpowered/listening_post/engineering) +"vu" = ( +/obj/effect/turf_decal/trimline/opaque/syndiered/arrow_ccw{ + icon_state = "trimline"; + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/commons) +"vC" = ( +/obj/structure/flora/ausbushes/grassybush/hell, +/turf/open/floor/plating/grass/lava/orange, +/area/ruin/unpowered) +"vG" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/commons) +"vJ" = ( +/obj/machinery/suit_storage_unit/mining/eva, +/turf/open/floor/plasteel/tech/grid, +/area/ruin/unpowered/listening_post) +"vR" = ( +/obj/effect/decal/cleanable/blood/splatter{ + icon_state = "floor7" + }, +/turf/open/floor/plating/asteroid/basalt/lava, +/area/ruin/unpowered) +"vU" = ( +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 8 + }, +/obj/item/kirbyplants/dead{ + desc = "It doesn't look very healthy..."; + name = "potted plant"; + pixel_y = 10 + }, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/listening_post) +"vY" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/listening_post/operations) +"wn" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/poddoor/shutters{ + id = "commsshutters" + }, +/obj/structure/grille, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post/operations) +"wr" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 5 + }, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ruin/unpowered/listening_post/canteen) +"wz" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/grille, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post/engineering) +"wL" = ( +/obj/effect/turf_decal/corner/opaque/syndiered/half{ + dir = 1 + }, +/obj/structure/table/chem, +/obj/item/stack/medical/gauze/improvised{ + pixel_y = 9 + }, +/obj/item/stack/medical/gauze/improvised{ + pixel_y = 11; + pixel_x = -4 + }, +/obj/item/scalpel, +/obj/machinery/light/directional/north, +/turf/open/floor/hangar/plasteel/white, +/area/ruin/unpowered/listening_post) +"wO" = ( +/obj/effect/decal/cleanable/vomit/old{ + pixel_x = 15 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 9 + }, +/turf/open/floor/plasteel/freezer, +/area/ruin/unpowered/listening_post/canteen) +"xv" = ( +/obj/structure/flora/ausbushes/grassybush/hell, +/turf/open/floor/plating/grass/lava/purple, +/area/ruin/unpowered) +"xR" = ( +/obj/structure/table/reinforced, +/obj/item/cutting_board{ + anchored = 1 + }, +/obj/item/melee/knife/kitchen, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ruin/unpowered/listening_post/canteen) +"ya" = ( +/obj/item/trash/can{ + pixel_y = 35; + pixel_x = -26 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"yp" = ( +/obj/effect/turf_decal/trimline/opaque/syndiered/arrow_ccw, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/fluff/paper/stack{ + dir = 5; + pixel_y = 25; + layer = 2.89 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/commons) +"ys" = ( +/obj/structure/bed, +/obj/structure/curtain, +/obj/item/bedsheet/syndie, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/carpet/nanoweave/red, +/area/ruin/unpowered/listening_post/commons) +"yN" = ( +/turf/open/floor/plating/grass/lava/purple, +/area/ruin/unpowered) +"yZ" = ( +/obj/item/trash/can{ + pixel_y = -12; + pixel_x = -7 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"zd" = ( +/obj/effect/turf_decal/trimline/opaque/bar/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20; + pixel_y = 11 + }, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/listening_post) +"zj" = ( +/obj/effect/decal/cleanable/vomit/old{ + pixel_y = -5; + pixel_x = 33 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/canteen) +"zA" = ( +/obj/structure/table/greyscale, +/obj/structure/window/reinforced/spawner/east, +/obj/effect/turf_decal/corner/opaque/syndiered/half{ + dir = 1 + }, +/obj/item/storage/firstaid{ + pixel_y = -17; + pixel_x = -9 + }, +/obj/item/stack/medical/bruise_pack, +/obj/item/stack/medical/bruise_pack{ + pixel_x = 6; + pixel_y = 4 + }, +/obj/item/stack/medical/ointment{ + pixel_y = 6; + pixel_x = -6 + }, +/obj/item/clothing/neck/stethoscope, +/turf/open/floor/hangar/plasteel/white, +/area/ruin/unpowered/listening_post) +"zF" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ruin/unpowered/listening_post) +"zI" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/listening_post/canteen) +"Ao" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/canteen) +"Ap" = ( +/turf/open/floor/plating/asteroid/basalt/lava, +/area/ruin/unpowered) +"Ax" = ( +/obj/structure/table/reinforced, +/obj/structure/fluff/paper/stack{ + dir = 4; + pixel_y = -1 + }, +/obj/item/trash/chips{ + pixel_y = 5 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"AB" = ( +/obj/effect/turf_decal/trimline/opaque/syndiered/corner{ + dir = 8 + }, +/obj/structure/fluff/paper/stack{ + dir = 6; + pixel_y = 11; + pixel_x = 7 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered/corner, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"Bb" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/decal/cleanable/cobweb, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20; + pixel_y = 11 + }, +/mob/living/simple_animal/hostile/human/syndicate/ranged/smg/space, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post/engineering) +"Bg" = ( +/obj/effect/turf_decal/corner/opaque/syndiered/three_quarters{ + dir = 8 + }, +/obj/structure/table/chem, +/obj/item/clothing/gloves/color/latex, +/turf/open/floor/hangar/plasteel/white, +/area/ruin/unpowered/listening_post) +"BB" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"BF" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post/engineering) +"BL" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/poddoor/shutters{ + id = "commsshutters"; + dir = 8 + }, +/obj/structure/grille, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post/operations) +"BM" = ( +/obj/machinery/telecomms/processor, +/obj/machinery/door/window/eastright, +/turf/open/floor/plasteel/freezer, +/area/ruin/unpowered/listening_post/operations) +"BO" = ( +/obj/structure/flora/ausbushes/sparsegrass/hell, +/turf/open/floor/plating/grass/lava, +/area/ruin/unpowered) +"Cx" = ( +/obj/machinery/door/airlock/hatch{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post/operations) +"Di" = ( +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/listening_post) +"Dr" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/directional/west, +/obj/structure/rack, +/obj/item/reagent_containers/food/snacks/canned/beans{ + pixel_y = 11; + pixel_x = 4 + }, +/obj/item/reagent_containers/food/snacks/canned/beans{ + pixel_y = 8; + pixel_x = -8 + }, +/obj/item/reagent_containers/food/snacks/canned/peaches{ + pixel_y = 7; + pixel_x = 7 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/canteen) +"DE" = ( +/obj/effect/turf_decal/trimline/opaque/bar/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 9 + }, +/obj/effect/decal/cleanable/blood/tracks, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered/corner, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/listening_post) +"DI" = ( +/obj/structure/table, +/obj/item/reagent_containers/food/drinks/beer{ + pixel_y = 8; + pixel_x = 6 + }, +/obj/item/reagent_containers/food/drinks/beer{ + pixel_y = 6; + pixel_x = -7; + list_reagents = null + }, +/turf/open/floor/plating/asteroid/basalt/lava, +/area/ruin/unpowered) +"DS" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/vending/cigarette/syndicate, +/obj/effect/turf_decal/siding/thinplating/dark/end{ + dir = 8 + }, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ruin/unpowered/listening_post/canteen) +"Ef" = ( +/obj/structure/closet/crate/bin, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"Eh" = ( +/obj/machinery/airalarm/directional/north, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/canteen) +"El" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/hangar/plasteel/white, +/area/ruin/unpowered/listening_post) +"Eq" = ( +/obj/structure/table/wood/reinforced, +/obj/item/book/random{ + pixel_y = 3 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/carpet/nanoweave/red, +/area/ruin/unpowered/listening_post/commons) +"Ey" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/structure/curtain, +/obj/item/bedsheet/syndie{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/carpet/nanoweave/red, +/area/ruin/unpowered/listening_post/commons) +"EA" = ( +/obj/machinery/door/airlock/hatch{ + name = "Dormitories" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post/commons) +"EB" = ( +/obj/item/ammo_casing/spent, +/turf/open/floor/plating/asteroid/basalt/lava, +/area/ruin/unpowered) +"EH" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"EJ" = ( +/obj/effect/turf_decal/trimline/opaque/bar/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered/corner{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/listening_post) +"EM" = ( +/obj/structure/sign/syndicate, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/listening_post) +"Fs" = ( +/obj/structure/chair/bench/beige/directional/east, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 10 + }, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ruin/unpowered/listening_post/canteen) +"FN" = ( +/obj/structure/table/wood/reinforced, +/obj/item/flashlight/lamp{ + pixel_y = 6 + }, +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/carpet/nanoweave/red, +/area/ruin/unpowered/listening_post/commons) +"FQ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"FW" = ( +/obj/structure/cable{ + icon_state = "0-1" + }, +/obj/machinery/power/smes/engineering, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post/engineering) +"Gy" = ( +/obj/machinery/computer/telecomms/monitor{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"GB" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/listening_post/engineering) +"GH" = ( +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/plating/asteroid/basalt/lava, +/area/ruin/unpowered) +"Ip" = ( +/obj/effect/turf_decal/trimline/opaque/syndiered/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"IA" = ( +/obj/structure/chair/bench/beige/directional/west, +/obj/effect/decal/cleanable/vomit/old{ + pixel_y = -1; + pixel_x = -8 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 6 + }, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ruin/unpowered/listening_post/canteen) +"ID" = ( +/obj/structure/dresser, +/obj/item/radio/old{ + pixel_y = 10 + }, +/obj/effect/turf_decal/siding/thinplating/dark/end{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/commons) +"Jj" = ( +/obj/effect/turf_decal/trimline/opaque/syndiered/arrow_ccw{ + icon_state = "trimline"; + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/structure/fluff/paper/stack{ + dir = 1; + pixel_x = -16; + pixel_y = -2 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/commons) +"Jn" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plasteel/tech, +/area/ruin/unpowered/listening_post/engineering) +"Jq" = ( +/obj/machinery/atmospherics/components/binary/pump/on/layer2{ + dir = 1; + name = "distribution output pump" + }, +/obj/machinery/light/small/directional/west, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post/engineering) +"Js" = ( +/obj/machinery/door/airlock/hatch{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post) +"JD" = ( +/obj/structure/chair/bench/beige/directional/west, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 5 + }, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ruin/unpowered/listening_post/canteen) +"KB" = ( +/obj/structure/sign/departments/restroom, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/listening_post/canteen) +"KJ" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post) +"KS" = ( +/obj/effect/turf_decal/trimline/opaque/bar/filled/warning{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post) +"KV" = ( +/obj/machinery/telecomms/bus, +/obj/machinery/door/window/eastleft, +/turf/open/floor/plasteel/freezer, +/area/ruin/unpowered/listening_post/operations) +"KW" = ( +/obj/effect/turf_decal/corner/opaque/syndiered/half{ + dir = 4 + }, +/obj/structure/table/chem, +/obj/structure/sink/chem{ + dir = 8 + }, +/obj/item/cautery{ + pixel_x = -9; + pixel_y = 14 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/hangar/plasteel/white, +/area/ruin/unpowered/listening_post) +"Li" = ( +/obj/effect/turf_decal/trimline/opaque/syndiered/arrow_ccw{ + icon_state = "trimline"; + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"Ln" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/listening_post/commons) +"LB" = ( +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/poddoor/shutters{ + id = "cafeteriashutters" + }, +/obj/structure/grille, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post/canteen) +"LD" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/canteen) +"LE" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/canteen) +"LI" = ( +/obj/structure/flora/tree/dead/barren, +/turf/open/floor/plating/grass/lava/orange, +/area/ruin/unpowered) +"LV" = ( +/obj/structure/sign/warning/gasmask, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/listening_post) +"Mg" = ( +/mob/living/simple_animal/hostile/human/syndicate/ranged/space, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ruin/unpowered/listening_post/canteen) +"Mr" = ( +/obj/structure/fluff/paper/stack{ + dir = 5; + pixel_y = 25; + layer = 2.89 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 8 + }, +/mob/living/simple_animal/hostile/human/syndicate/ranged/shotgun/space, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"MF" = ( +/obj/effect/turf_decal/trimline/opaque/syndiered/corner{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"MN" = ( +/obj/structure/flora/tree/dead/barren, +/turf/open/floor/plating/grass/lava, +/area/ruin/unpowered) +"MU" = ( +/obj/machinery/computer/security{ + dir = 8 + }, +/obj/item/trash/pistachios{ + pixel_y = 4; + pixel_x = -8 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 5 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"MX" = ( +/obj/machinery/light/small/directional/east, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/mopbucket, +/obj/item/mop, +/turf/open/floor/plasteel/tech, +/area/ruin/unpowered/listening_post/engineering) +"MZ" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/ration, +/obj/structure/sign/poster/official/high_class_martini{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/canteen) +"Nb" = ( +/obj/item/toy/plush/moth/firewatch{ + name = "Syndiemoth plushie" + }, +/obj/item/toy/nuke{ + pixel_x = 12; + pixel_y = -5 + }, +/obj/item/toy/sword{ + pixel_y = 2; + pixel_x = 2 + }, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post/canteen) +"Nt" = ( +/obj/structure/chair/office/light{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"NI" = ( +/obj/structure/filingcabinet/double/grey{ + pixel_y = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 5 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"NK" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/listening_post/operations) +"NP" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/carpet/nanoweave/red, +/area/ruin/unpowered/listening_post/commons) +"NV" = ( +/obj/effect/turf_decal/trimline/opaque/syndiered/arrow_ccw{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/commons) +"NZ" = ( +/obj/structure/table/reinforced, +/obj/item/trash/plate{ + pixel_y = 29; + pixel_x = -2 + }, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_y = 17; + pixel_x = -3 + }, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_y = 17; + pixel_x = 4 + }, +/obj/item/reagent_containers/food/drinks/beer/light{ + pixel_y = 16; + pixel_x = -9 + }, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ruin/unpowered/listening_post/canteen) +"Oe" = ( +/obj/structure/dresser, +/obj/effect/turf_decal/siding/thinplating/dark/end{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/commons) +"Om" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/canteen) +"On" = ( +/obj/effect/turf_decal/corner/opaque/syndiered/half{ + dir = 1 + }, +/obj/structure/closet/wall/med/directional/north, +/obj/item/storage/firstaid/regular, +/obj/item/storage/box/masks, +/turf/open/floor/hangar/plasteel/white, +/area/ruin/unpowered/listening_post) +"Oo" = ( +/obj/effect/turf_decal/trimline/opaque/syndiered/arrow_ccw{ + icon_state = "trimline"; + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/commons) +"Op" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"OI" = ( +/obj/structure/noticeboard, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/listening_post/commons) +"OP" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/canteen) +"OS" = ( +/obj/machinery/airalarm/directional/east, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"OW" = ( +/obj/effect/turf_decal/spline/fancy/opaque/syndiered, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/listening_post) +"Pe" = ( +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 8 + }, +/obj/structure/chair/bench/red/directional/east, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/listening_post) +"Pj" = ( +/obj/structure/flora/rock/hell, +/turf/open/floor/plating/asteroid/basalt/lava, +/area/ruin/unpowered) +"PC" = ( +/obj/structure/plaque/listeningpost, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/listening_post) +"PQ" = ( +/obj/machinery/door/airlock/hatch, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 2 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post/canteen) +"Qq" = ( +/obj/structure/table/reinforced, +/obj/machinery/microwave{ + pixel_y = 5 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 10 + }, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ruin/unpowered/listening_post/canteen) +"QC" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/canteen) +"QD" = ( +/obj/effect/turf_decal/trimline/opaque/syndiered/arrow_ccw{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/commons) +"QP" = ( +/turf/open/floor/plating/grass/lava/orange, +/area/ruin/unpowered) +"QS" = ( +/obj/effect/turf_decal/trimline/opaque/syndiered/arrow_ccw{ + icon_state = "trimline"; + dir = 8 + }, +/obj/machinery/vending/snack/random, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 10 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"QY" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/listening_post/operations) +"Rb" = ( +/obj/machinery/atmospherics/components/unary/passive_vent/layer4{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/basalt/lava, +/area/ruin/unpowered) +"Ri" = ( +/obj/structure/closet/cabinet, +/obj/item/storage/backpack/duffelbag/syndie, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/carpet/nanoweave/red, +/area/ruin/unpowered/listening_post/commons) +"RV" = ( +/obj/effect/turf_decal/trimline/opaque/bar/filled/warning{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post) +"SC" = ( +/obj/effect/turf_decal/trimline/opaque/syndiered/arrow_ccw{ + icon_state = "trimline"; + dir = 10 + }, +/obj/machinery/button/door{ + dir = 4; + id = "commsshutters"; + name = "Window Shutters"; + pixel_x = -23; + pixel_y = -6 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 10 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"Ta" = ( +/turf/closed/mineral/random/volcanic, +/area/ruin/unpowered) +"To" = ( +/obj/structure/sign/departments/medbay/alt, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/listening_post) +"Tp" = ( +/obj/structure/flora/ausbushes/grassybush/hell, +/turf/open/floor/plating/grass/lava, +/area/ruin/unpowered) +"Ty" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post/engineering) +"TI" = ( +/obj/effect/turf_decal/spline/fancy/opaque/syndiered/corner, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/listening_post) +"TK" = ( +/obj/machinery/door/airlock/hatch{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post) +"TM" = ( +/obj/structure/closet/cabinet, +/obj/item/ammo_box/magazine/m10mm_ringneck, +/obj/item/gun/ballistic/automatic/pistol/ringneck, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/turf/open/floor/carpet/nanoweave/red, +/area/ruin/unpowered/listening_post/commons) +"TS" = ( +/turf/open/floor/plating/grass/lava, +/area/ruin/unpowered) +"Ut" = ( +/obj/effect/turf_decal/trimline/opaque/syndiered/arrow_ccw{ + icon_state = "trimline"; + dir = 9 + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20; + pixel_y = 11 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 9 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"UB" = ( +/obj/structure/flora/ausbushes/sparsegrass/hell, +/obj/structure/flora/ausbushes/sparsegrass/hell, +/turf/open/floor/plating/grass/lava/orange, +/area/ruin/unpowered) +"UV" = ( +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"Wa" = ( +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/bar/filled/corner, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/listening_post) +"Wc" = ( +/obj/structure/table/reinforced, +/obj/item/paper/crumpled/ruins{ + pixel_y = 1; + pixel_x = 6 + }, +/obj/item/paper/pamphlet{ + pixel_x = -7; + pixel_y = 4 + }, +/obj/item/trash/cheesie{ + pixel_y = 4 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 5 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"Wo" = ( +/obj/structure/table/wood/reinforced, +/obj/machinery/light/small/directional/east, +/obj/item/trash/can/food/beans{ + pixel_y = 16 + }, +/obj/item/trash/can/food/beans{ + pixel_y = 12; + pixel_x = -8 + }, +/obj/item/trash/can/food/beans{ + pixel_y = 9; + pixel_x = 5 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/carpet/nanoweave/red, +/area/ruin/unpowered/listening_post/commons) +"Wq" = ( +/obj/structure/chair/office{ + name = "tactical swivel chair"; + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/syndiered/arrow_ccw{ + dir = 4 + }, +/mob/living/simple_animal/hostile/human/syndicate/ranged/space, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post) +"WL" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/falsewall/plastitanium, +/turf/open/floor/plating, +/area/ruin/unpowered/listening_post/canteen) +"WU" = ( +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/listening_post) +"Xi" = ( +/obj/structure/flora/ausbushes/fullgrass/hell, +/turf/open/floor/plating/grass/lava, +/area/ruin/unpowered) +"Xk" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 2 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/canteen) +"Xm" = ( +/obj/machinery/light_switch{ + pixel_y = 22; + pixel_x = -8 + }, +/obj/structure/reagent_dispensers/water_cooler, +/obj/effect/turf_decal/siding/thinplating/dark/end{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ruin/unpowered/listening_post/canteen) +"XE" = ( +/obj/item/trash/chips{ + pixel_y = 5 + }, +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"XY" = ( +/obj/effect/turf_decal/trimline/opaque/bar/filled/warning{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/listening_post) +"Yh" = ( +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 5 + }, +/obj/structure/closet/crate/bin, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/white, +/area/ruin/unpowered/listening_post) +"YK" = ( +/obj/structure/table/reinforced, +/obj/machinery/reagentgrinder{ + pixel_y = 12 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 9 + }, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ruin/unpowered/listening_post/canteen) +"YL" = ( +/obj/item/paper/crumpled/ruins, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) +"YP" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/food/snacks/ration{ + pixel_x = -8; + pixel_y = 1 + }, +/obj/item/reagent_containers/food/snacks/ration{ + pixel_y = 4 + }, +/obj/item/reagent_containers/food/snacks/ration{ + pixel_y = 7; + pixel_x = -9 + }, +/obj/item/reagent_containers/condiment/bbqsauce{ + pixel_y = 6; + pixel_x = 7 + }, +/obj/effect/turf_decal/siding/thinplating/dark, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 6 + }, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ruin/unpowered/listening_post/canteen) +"Zb" = ( +/obj/effect/turf_decal/corner/opaque/syndiered/half, +/turf/open/floor/hangar/plasteel/white, +/area/ruin/unpowered/listening_post) +"Zd" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/canteen) +"ZY" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/syndiered/corner{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ruin/unpowered/listening_post/operations) + +(1,1,1) = {" +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +"} +(2,1,1) = {" +qV +qV +qV +Ap +Ap +Ap +Ap +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +Ap +Ap +Ap +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +"} +(3,1,1) = {" +qV +qV +Ap +Ap +Ap +Ap +Ap +TS +TS +Xi +Xi +Xi +Xi +Xi +TS +Ap +Ap +qV +qV +qV +Ap +Ap +Ap +Ap +Ap +Ap +Ap +Ap +Ap +Ap +TS +TS +TS +qV +qV +qV +"} +(4,1,1) = {" +qV +Ap +Ap +Ap +TS +TS +TS +TS +Xi +Xi +MN +Xi +Xi +Xi +TS +Ap +Pj +Ap +Ap +Ap +Ap +Ap +Ap +Ap +Ap +Ap +Ap +dY +Ap +TS +Tp +BO +BO +TS +qV +qV +"} +(5,1,1) = {" +qV +Ap +Ap +TS +TS +Xi +Xi +Xi +Xi +Xi +Xi +Xi +TS +Ap +Ap +Ap +Ap +Ap +Ap +Ap +Ap +Ap +Ap +nD +EB +Ap +EB +Ap +EB +Ap +TS +mF +BO +TS +qV +qV +"} +(6,1,1) = {" +qV +Ap +Ap +TS +Xi +Xi +Xi +Tp +Xi +TS +Ap +Ap +Ap +Ap +Ap +Ap +Ap +lj +GH +vR +Ap +Ap +Ap +Ap +Ap +EB +Ap +Ap +Ap +Ap +Ap +Ap +Tp +TS +qV +qV +"} +(7,1,1) = {" +qV +qV +Xi +Xi +Xi +Xi +TS +TS +Ap +Ap +Ap +Ap +Ap +Ap +Ap +op +op +sP +op +Ta +Ta +Ap +Ap +Ap +Ap +Ta +Ta +Ta +Ta +Ap +Ap +Ap +Ap +Ap +qV +qV +"} +(8,1,1) = {" +qV +Ap +TS +TS +TS +TS +Ap +Ap +Ap +Ap +Ap +Ap +Ta +Ta +Ta +op +fz +th +op +Ta +Ta +Ta +Ta +Ta +Ta +Ta +Ta +Ta +Ta +Ta +Ta +Ap +Ap +Ap +Ap +qV +"} +(9,1,1) = {" +Ap +Ap +Ap +Ap +Ap +Ap +Ap +Ap +Ap +Ap +Ta +Ta +Ta +Ta +Ta +op +vJ +zF +op +Ta +Ta +Ta +Ta +zI +zI +zI +zI +zI +Ta +Ta +Ta +Ta +Ap +Pj +Ap +qV +"} +(10,1,1) = {" +Ap +Ap +Ap +Ap +Ap +Ap +bT +Ap +Ap +Ta +Ta +op +op +op +op +op +LV +eW +op +op +op +op +op +zI +Om +lb +Dr +zI +zI +zI +Ta +Ta +Ap +Ap +Ap +qV +"} +(11,1,1) = {" +Ap +Ap +Ap +Ap +Ap +Ap +DI +Ap +Ap +Ta +Ta +op +ou +oC +eX +pZ +DE +fZ +zd +vU +fG +Pe +cb +zI +MZ +oX +ot +WL +Nb +zI +Ta +Ta +Ap +Ap +Ap +qV +"} +(12,1,1) = {" +qV +Ap +Ap +Ap +Ap +Ap +sd +Ap +Ap +Ta +Ta +op +zA +El +tf +To +np +fQ +KJ +sX +oS +oS +fd +zI +zI +oT +zI +rG +zI +zI +Ta +Ta +yN +Ap +Ap +qV +"} +(13,1,1) = {" +qV +Ap +Pj +Ap +Ap +Ap +ls +Ap +Ap +Ta +Ta +op +wL +tk +eN +hE +bw +TI +cv +WU +Wa +XY +EJ +zI +kb +LD +QC +YK +Qq +zI +Ta +yN +yN +Ap +qV +qV +"} +(14,1,1) = {" +qV +qV +Ap +QP +Ap +Ap +Ap +Ap +Ap +Ta +Ta +op +On +tS +Zb +hE +Di +OW +mG +mG +EM +RV +KS +zI +qW +Fs +Ao +Mg +xR +LB +Ap +mp +kB +yN +qV +qV +"} +(15,1,1) = {" +qV +qV +QP +QP +QP +QP +QP +Ap +Ap +Ta +Ta +op +Bg +KW +jz +hE +Yh +oG +rb +Wq +qJ +px +cm +zI +tV +NZ +Ao +wr +YP +LB +Ap +mp +yN +yN +qV +qV +"} +(16,1,1) = {" +qV +qV +QP +tM +tM +QP +QP +Ap +Ap +Ta +Ta +op +op +op +op +op +op +hh +op +PC +op +Js +TK +zI +JD +IA +zj +Zd +aU +LB +Ap +mp +yN +Ap +qV +qV +"} +(17,1,1) = {" +qV +qV +QP +QP +tM +tM +QP +QP +Ap +Ap +Ta +Ta +Ta +Ta +Ta +Ta +Ta +Ta +Ta +Ta +Ln +iR +pw +zI +Eh +Zd +Ao +Zd +eU +zI +Ta +mh +mp +yN +qV +qV +"} +(18,1,1) = {" +qV +qV +QP +QP +QP +tM +tM +QP +Ap +Ta +Ta +Ta +Ta +Ln +Ln +Ln +Ln +Ln +Ln +Ln +Ln +QD +yp +PQ +fa +Xk +fo +OP +DS +ae +Ta +Ap +yN +Ap +qV +qV +"} +(19,1,1) = {" +qV +qV +QP +QP +LI +QP +tM +QP +Ap +Ap +Ta +Ta +Ta +Ln +ID +Ey +FN +qX +Ri +sr +Ln +db +pw +zI +Xm +pt +tG +LE +dM +zI +Ta +Ta +Ap +Ap +qV +qV +"} +(20,1,1) = {" +qV +qV +QP +QP +QP +vC +QP +tM +QP +Ap +Ta +Ta +Ta +Ln +vG +mj +NP +hy +dJ +cr +EA +Jj +cB +zI +zI +zI +kk +KB +zI +zI +Ta +Ta +Ap +Ap +qV +qV +"} +(21,1,1) = {" +qV +qV +Ap +tM +tM +QP +QP +QP +QP +Ap +Ta +Ta +Ta +Ln +Oe +ys +Wo +Eq +TM +lu +Ln +oi +bA +fg +Ta +zI +wO +sM +oO +Ta +Ta +Ta +Ap +Ap +qV +qV +"} +(22,1,1) = {" +qV +qV +Ap +QP +tM +QP +LI +vC +QP +Ap +Ta +Ta +Ta +Ln +Ln +Ln +Ln +Ln +Ln +Ln +OI +vu +gY +Ln +Ta +zI +jN +nc +zI +Ta +Ta +Ta +Pj +Ap +qV +qV +"} +(23,1,1) = {" +qV +Ap +Ap +QP +QP +tM +QP +QP +QP +Ap +Ta +Ta +Ta +Ta +Ta +Ta +Ta +Ta +Ta +Ta +Ln +Oo +gT +Ln +Ta +zI +zI +zI +zI +Ta +Ta +Ta +Ap +Ap +qV +qV +"} +(24,1,1) = {" +qV +Ap +Ap +Ap +QP +tM +QP +vC +QP +Ap +Ap +Ta +Ta +Ta +Ta +Ta +Ta +Ta +Ta +Ta +Ln +NV +nY +Ln +Ta +Ta +Ta +Ta +Ta +Ta +Ta +Ta +Ap +qV +qV +qV +"} +(25,1,1) = {" +qV +qV +Ap +Ap +QP +QP +UB +QP +QP +Ap +Ap +Ta +lZ +lZ +lZ +lZ +lZ +lZ +lZ +lZ +lZ +Cx +mU +lZ +GB +GB +GB +GB +GB +Ta +Ta +Ta +Ap +qV +qV +qV +"} +(26,1,1) = {" +qV +qV +Pj +Ap +Ap +QP +QP +QP +Ap +Ap +Ap +Ta +lZ +ih +gr +SC +bv +BM +KV +qv +Ut +hC +MF +QS +GB +Bb +Jq +uv +GB +GB +GB +Ta +Ap +qV +qV +qV +"} +(27,1,1) = {" +qV +qV +Ap +Ap +Ap +Ap +QP +QP +Ap +Ap +Ap +Ap +lZ +na +EH +AB +Li +Li +qo +dm +Ip +pa +yZ +Ef +GB +hX +dT +bm +FW +hA +GB +Ta +TS +Ap +qV +qV +"} +(28,1,1) = {" +qV +qV +qV +Ap +Ap +Ap +Ap +Ap +Ap +Pj +Ap +Ap +wn +Wc +Nt +aD +vY +NK +QY +tY +tY +FQ +rQ +ya +tJ +Ty +pS +lK +fl +mf +GB +Ta +TS +TS +qV +qV +"} +(29,1,1) = {" +qV +qV +qV +qV +Ap +Ap +Ap +Ap +Ap +Ap +Ap +Ap +BL +wn +MU +gN +Op +Mr +pW +UV +YL +ZY +kz +BB +kA +BF +cM +aw +FW +hA +GB +Ta +Tp +TS +qV +qV +"} +(30,1,1) = {" +qV +qV +qV +qV +qV +Ap +Ap +Ap +Ap +Ap +Ap +Ap +Ap +BL +wn +NI +XE +cX +Ax +Gy +mc +te +OS +qC +GB +Jn +MX +to +GB +GB +GB +Ta +BO +TS +qV +qV +"} +(31,1,1) = {" +qV +qV +qV +qV +qV +Ap +Ap +Ap +Pj +Ap +Ap +Ap +Ap +Ap +lZ +lZ +lZ +lZ +lZ +lZ +lZ +lZ +lZ +lZ +GB +GB +GB +wz +GB +Ta +Ta +Ta +TS +BO +qV +qV +"} +(32,1,1) = {" +qV +qV +qV +qV +qV +Ap +Ap +Ap +Ap +Ap +Ap +Ap +yN +yN +yN +Ap +Ta +Ta +Ta +Ta +Ta +Ta +Ta +Ta +Ta +Ta +qq +Rb +qq +Ta +Ta +Tp +TS +BO +qV +qV +"} +(33,1,1) = {" +qV +qV +qV +qV +qV +qV +Ap +Ap +Ap +Ap +Ap +yN +mp +mp +mp +yN +yN +Ap +Ta +Ta +Ta +Ta +Ta +Ta +Ta +Ap +Ap +Ap +Ap +Ap +Ap +Ap +bL +BO +qV +qV +"} +(34,1,1) = {" +qV +qV +qV +qV +qV +qV +qV +Ap +Ap +Ap +yN +mp +mp +mp +mp +mp +yN +Ap +Ap +Ap +Ap +Ap +Ap +Ap +Ap +Ap +Ap +Ap +Ap +Ap +Pj +Ap +Ap +Tp +qV +qV +"} +(35,1,1) = {" +qV +qV +qV +qV +qV +qV +qV +Ap +Ap +Ap +yN +mp +mp +xv +yN +Ap +Ap +Ap +Pj +Ap +Ap +Ap +Ap +Ap +Ap +Ap +Ap +Pj +Ap +Ap +Ap +Ap +Ap +Ap +qV +qV +"} +(36,1,1) = {" +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +Ap +Ap +Ap +Ap +Ap +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +qV +"} diff --git a/_maps/RandomRuins/LavaRuins/lavaland_crashed_starwalker.dmm b/_maps/RandomRuins/LavaRuins/lavaland_crashed_starwalker.dmm index 138b1e9d31ed..4d63ae26b5bb 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_crashed_starwalker.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_crashed_starwalker.dmm @@ -637,7 +637,7 @@ /obj/structure/table, /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/directional/east, -/obj/item/kitchen/knife{ +/obj/item/melee/knife/kitchen{ pixel_x = 7; pixel_y = 10 }, @@ -721,7 +721,7 @@ /obj/structure/cable/green{ icon_state = "1-4" }, -/obj/item/reagent_containers/food/snacks/breadslice/moldy{ +/obj/item/food/breadslice/moldy{ pixel_x = 5 }, /turf/open/floor/pod, @@ -3133,7 +3133,7 @@ /obj/structure/closet/secure_closet/freezer/kitchen/wall{ pixel_y = 29 }, -/obj/item/reagent_containers/food/condiment/rice, +/obj/item/reagent_containers/condiment/rice, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, /area/ruin/unpowered/crashed_starwalker) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_biodome_winter.dmm index a4b07632face..a53bebe1ff01 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" = ( @@ -829,7 +829,7 @@ /area/ruin/unpowered/winter_biodome) "kb" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/breadslice/plain, +/obj/item/food/breadslice/plain, /obj/item/reagent_containers/food/snacks/grown/cabbage, /turf/open/floor/wood, /area/ruin/unpowered/winter_biodome/cabin) @@ -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" = ( @@ -1006,8 +1006,8 @@ "oR" = ( /obj/effect/turf_decal/corner/opaque/solgovblue/diagonal, /obj/structure/closet/secure_closet/freezer, -/obj/item/reagent_containers/food/snacks/store/bread/plain, -/obj/item/reagent_containers/food/snacks/store/bread/plain, +/obj/item/food/bread/plain, +/obj/item/food/bread/plain, /obj/item/reagent_containers/food/snacks/grown/cabbage, /obj/item/reagent_containers/food/snacks/grown/cabbage, /obj/effect/decal/cleanable/dirt/dust, @@ -1072,7 +1072,7 @@ "qj" = ( /obj/effect/turf_decal/corner/opaque/solgovblue/diagonal, /obj/structure/table/wood, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /turf/open/floor/plasteel/white, /area/ruin/unpowered/winter_biodome/living_quarters) "qr" = ( @@ -1081,7 +1081,7 @@ }, /obj/effect/turf_decal/corner/opaque/solgovgold/diagonal, /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/spawner/burrow/lava_planet, +/mob/living/simple_animal/hostile/asteroid/hivelord/legion/nest, /turf/open/floor/plasteel/white, /area/ruin/unpowered/winter_biodome/engineering) "qt" = ( @@ -1467,10 +1467,10 @@ }, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/blood/gibs/up, -/obj/structure/spawner/burrow/lava_planet, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 4 }, +/mob/living/simple_animal/hostile/asteroid/hivelord/legion/nest, /turf/open/floor/wood, /area/ruin/unpowered/winter_biodome/entrance) "Ar" = ( @@ -1925,7 +1925,7 @@ /turf/open/floor/wood, /area/ruin/unpowered/winter_biodome/sauna) "Lf" = ( -/obj/structure/spawner/burrow/lava_planet, +/mob/living/simple_animal/hostile/asteroid/hivelord/legion/nest, /turf/open/floor/grass/snow, /area/ruin/unpowered/winter_biodome) "Lt" = ( diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_buried_shrine.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_buried_shrine.dmm index b71bfb250aee..17094a2d2bff 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" = ( @@ -1803,7 +1807,7 @@ /area/ruin/unpowered/buried_shrine) "UF" = ( /obj/structure/stone_tile/block, -/obj/item/claymore/bone{ +/obj/item/melee/sword/bone{ pixel_x = 8; pixel_y = 21 }, @@ -1819,7 +1823,7 @@ /area/ruin/unpowered/buried_shrine) "VG" = ( /obj/structure/table/wood, -/obj/item/kitchen/knife/combat/bone, +/obj/item/melee/knife/bone, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/ruin/unpowered/buried_shrine) "Wd" = ( @@ -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_elephant_graveyard.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_elephant_graveyard.dmm deleted file mode 100644 index 9babc1631c8f..000000000000 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_elephant_graveyard.dmm +++ /dev/null @@ -1,1788 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/template_noop, -/area/template_noop) -"ab" = ( -/turf/closed/mineral/volcanic/lava_land_surface, -/area/overmap_encounter/planetoid/cave/explored) -"ac" = ( -/turf/closed/mineral/volcanic/lava_land_surface, -/area/ruin/unpowered/elephant_graveyard) -"ad" = ( -/obj/effect/decal/cleanable/cobweb, -/obj/structure/closet/crate/grave/loot/lead_researcher, -/obj/effect/decal/cleanable/blood/gibs/old, -/obj/effect/mob_spawn/human/skeleton, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"ae" = ( -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"af" = ( -/obj/effect/decal/cleanable/blood/drip, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"ag" = ( -/obj/effect/decal/cleanable/vomit, -/obj/item/shovel, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"ah" = ( -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"ai" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"aj" = ( -/obj/effect/decal/cleanable/blood/tracks{ - dir = 4 - }, -/obj/item/paper/fluff/ruins/elephant_graveyard/final_message, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"ak" = ( -/turf/open/floor/plating/asteroid/basalt/wasteland{ - icon_state = "wasteland_dug" - }, -/area/ruin/unpowered/elephant_graveyard) -"al" = ( -/obj/structure/table, -/obj/item/clipboard, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"an" = ( -/obj/item/reagent_containers/food/snacks/deadmouse, -/obj/item/assembly/mousetrap, -/turf/open/floor/plating/asteroid/basalt/wasteland{ - icon_state = "wasteland_dug" - }, -/area/ruin/unpowered/elephant_graveyard) -"ao" = ( -/obj/structure/statue/bone/skull/half, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"ap" = ( -/obj/structure/statue/bone/skull/half{ - dir = 1 - }, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"ar" = ( -/obj/structure/flora/rock, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"at" = ( -/turf/closed/mineral/strong/wasteland, -/area/overmap_encounter/planetoid/cave/explored) -"av" = ( -/obj/structure/barricade/wooden/crude, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"ax" = ( -/obj/structure/statue/bone/rib{ - dir = 1 - }, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"ay" = ( -/obj/structure/statue/bone/rib, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"az" = ( -/obj/structure/table, -/obj/item/pen, -/obj/item/pen, -/obj/item/pen, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"aA" = ( -/turf/closed/wall, -/area/ruin/unpowered/elephant_graveyard) -"aB" = ( -/obj/item/chair, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"aC" = ( -/obj/effect/decal/remains/human, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"aE" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"aG" = ( -/obj/structure/table, -/obj/effect/spawner/lootdrop/glowstick, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"aH" = ( -/turf/closed/wall/mineral/titanium, -/area/ruin/powered/graveyard_shuttle) -"aI" = ( -/obj/effect/spawner/structure/window/shuttle, -/obj/structure/grille, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/powered/graveyard_shuttle) -"aK" = ( -/obj/item/cigbutt, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"aL" = ( -/obj/machinery/power/floodlight, -/obj/structure/cable, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"aM" = ( -/obj/structure/table, -/obj/item/clothing/gloves/color/black, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"aN" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ruin/powered/graveyard_shuttle) -"aO" = ( -/obj/effect/decal/cleanable/glass, -/obj/machinery/computer, -/turf/open/floor/mineral/titanium/white, -/area/ruin/powered/graveyard_shuttle) -"aP" = ( -/obj/structure/bed, -/obj/item/flashlight/lantern, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"aR" = ( -/obj/structure/table, -/obj/item/taperecorder, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"aS" = ( -/obj/structure/table, -/obj/item/tape/random, -/obj/item/tape/random, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"aT" = ( -/obj/structure/closet/crate/bin, -/obj/item/trash/candle, -/obj/item/trash/can/food/beans, -/obj/item/trash/can, -/obj/effect/decal/cleanable/dirt/dust, -/obj/item/cigbutt, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"aU" = ( -/obj/structure/bed, -/obj/item/bedsheet/brown, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"aV" = ( -/obj/structure/bed, -/obj/item/bedsheet/brown, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"aW" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/item/clothing/mask/gas/explorer/folded, -/turf/open/floor/mineral/titanium/white, -/area/ruin/powered/graveyard_shuttle) -"aX" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"aY" = ( -/obj/structure/sign/warning/nosmoking/circle, -/turf/closed/wall, -/area/ruin/unpowered/elephant_graveyard) -"aZ" = ( -/obj/item/organ/brain, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"ba" = ( -/obj/structure/headpike/bone, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"bb" = ( -/obj/effect/decal/cleanable/oil/streak, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"bc" = ( -/obj/structure/sign/poster/ripped, -/turf/closed/wall, -/area/ruin/unpowered/elephant_graveyard) -"bd" = ( -/obj/item/organ/heart, -/obj/item/organ/eyes, -/obj/item/organ/ears, -/obj/effect/decal/cleanable/blood/gibs/old, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"be" = ( -/obj/item/organ/lungs, -/obj/item/organ/liver, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"bf" = ( -/turf/closed/mineral/strong/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"bg" = ( -/obj/structure/sign/warning/securearea, -/turf/closed/wall/mineral/titanium, -/area/ruin/powered/graveyard_shuttle) -"bh" = ( -/obj/effect/decal/cleanable/oil, -/obj/structure/chair/office/light, -/turf/open/floor/mineral/titanium/white, -/area/ruin/powered/graveyard_shuttle) -"bi" = ( -/obj/effect/turf_decal/industrial/hatch, -/turf/open/floor/circuit/off, -/area/ruin/powered/graveyard_shuttle) -"bj" = ( -/obj/structure/barricade/wooden, -/obj/structure/mineral_door/wood, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"bk" = ( -/obj/item/kitchen/knife/combat/bone, -/obj/item/organ/tongue, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"bl" = ( -/obj/effect/decal/cleanable/shreds, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"bm" = ( -/obj/structure/closet/wardrobe/curator, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"bn" = ( -/obj/structure/sink/oil_well, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"bo" = ( -/obj/item/stack/medical/gauze/improvised, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"bp" = ( -/turf/open/floor/mineral/titanium/white, -/area/ruin/powered/graveyard_shuttle) -"bq" = ( -/obj/machinery/iv_drip, -/turf/open/floor/mineral/titanium/white, -/area/ruin/powered/graveyard_shuttle) -"br" = ( -/obj/structure/sign/warning/nosmoking/circle, -/turf/closed/wall/mineral/titanium, -/area/ruin/powered/graveyard_shuttle) -"bs" = ( -/obj/structure/fence/door, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"bt" = ( -/obj/structure/table, -/turf/closed/mineral/strong/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"bu" = ( -/obj/structure/bed, -/obj/item/trash/pistachios, -/obj/item/trash/chips, -/obj/item/bedsheet/brown, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"bv" = ( -/obj/effect/decal/remains/human, -/obj/item/clothing/mask/bandana/green, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"bx" = ( -/obj/machinery/power/port_gen/pacman, -/obj/structure/cable, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"by" = ( -/obj/structure/closet/emcloset, -/obj/item/light/bulb, -/obj/effect/turf_decal/box/white, -/turf/open/floor/mineral/titanium/purple, -/area/ruin/powered/graveyard_shuttle) -"bz" = ( -/obj/item/paper/crumpled/muddy/fluff/elephant_graveyard/mutiny, -/obj/item/cigbutt, -/obj/item/cigbutt, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"bA" = ( -/obj/machinery/suit_storage_unit/mining/eva, -/obj/effect/turf_decal/box/white, -/turf/open/floor/mineral/titanium/purple, -/area/ruin/powered/graveyard_shuttle) -"bB" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"bC" = ( -/obj/structure/barricade/sandbags, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"bD" = ( -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/elephant_graveyard) -"bE" = ( -/obj/structure/shuttle/engine/heater, -/obj/structure/window{ - dir = 1 - }, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/mineral/titanium/purple, -/area/ruin/powered/graveyard_shuttle) -"bF" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/elephant_graveyard) -"bG" = ( -/obj/effect/decal/remains/human, -/obj/item/tank/internals/emergency_oxygen/empty, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"bH" = ( -/obj/item/paper/fluff/ruins/elephant_graveyard, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/cave/explored) -"bI" = ( -/obj/structure/shuttle/engine/propulsion, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/powered/graveyard_shuttle) -"bJ" = ( -/obj/structure/sign/warning/xeno_mining, -/turf/closed/wall, -/area/ruin/unpowered/elephant_graveyard) -"bK" = ( -/obj/structure/sign/warning/explosives, -/turf/closed/wall, -/area/ruin/unpowered/elephant_graveyard) -"bL" = ( -/obj/effect/decal/cleanable/blood/gibs/old, -/obj/effect/decal/cleanable/blood/splatter, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"bM" = ( -/obj/item/storage/fancy/cigarettes/cigpack_mindbreaker, -/obj/structure/closet/crate/grave/loot, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"bN" = ( -/obj/structure/sign/warning/securearea, -/turf/closed/mineral/strong/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"bO" = ( -/obj/item/paper/fluff/ruins/elephant_graveyard, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"bP" = ( -/obj/structure/barricade/wooden/crude, -/obj/item/paper/fluff/ruins/elephant_graveyard, -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/elephant_graveyard) -"bQ" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/effect/decal/cleanable/cobweb, -/obj/item/paper/fluff/ruins/elephant_graveyard/hypothesis, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/mineral/titanium/white, -/area/ruin/powered/graveyard_shuttle) -"bR" = ( -/obj/effect/decal/cleanable/generic, -/obj/item/cigbutt, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"bS" = ( -/obj/effect/decal/cleanable/oil/slippery, -/obj/machinery/rnd/destructive_analyzer, -/turf/open/floor/mineral/titanium/white, -/area/ruin/powered/graveyard_shuttle) -"bT" = ( -/obj/structure/barricade/wooden, -/obj/item/paper/fluff/ruins/elephant_graveyard, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"bU" = ( -/obj/item/light/bulb/broken, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/mineral/titanium/white, -/area/ruin/powered/graveyard_shuttle) -"bV" = ( -/obj/effect/decal/cleanable/dirt, -/turf/closed/mineral/volcanic/lava_land_surface, -/area/ruin/unpowered/elephant_graveyard) -"bW" = ( -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/door/airlock/shuttle{ - name = "Archaeology Shuttle Airlock" - }, -/turf/open/floor/mineral/titanium/purple, -/area/ruin/powered/graveyard_shuttle) -"bX" = ( -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/dirt/dust, -/obj/item/clothing/head/fedora/curator, -/obj/item/clothing/suit/armor/curator, -/turf/open/floor/mineral/titanium/white, -/area/ruin/powered/graveyard_shuttle) -"bY" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/item/cigbutt, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"bZ" = ( -/turf/open/floor/plating/asteroid/basalt/lava_land_surface, -/area/overmap_encounter/planetoid/cave/explored) -"ca" = ( -/obj/structure/table, -/obj/item/storage/firstaid/o2, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"cc" = ( -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/shreds, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"cd" = ( -/obj/item/trash/can, -/obj/structure/bedsheetbin/empty, -/obj/structure/table, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"ce" = ( -/obj/structure/stone_tile/slab/cracked, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"cf" = ( -/obj/structure/bed, -/obj/item/wirecutters, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"cg" = ( -/obj/structure/stone_tile/center/cracked, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"ch" = ( -/obj/effect/decal/remains/human, -/obj/item/restraints/handcuffs/cable/zipties/used, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"ci" = ( -/obj/structure/stone_tile/surrounding_tile, -/turf/open/floor/plating/asteroid/basalt/wasteland{ - icon_state = "wasteland_dug" - }, -/area/ruin/unpowered/elephant_graveyard) -"cj" = ( -/obj/structure/stone_tile/block/cracked, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"ck" = ( -/obj/structure/reagent_dispensers/water_cooler, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"cl" = ( -/obj/structure/closet/crate/grave/loot, -/obj/effect/mob_spawn/human/skeleton, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"cm" = ( -/obj/structure/table/optable, -/obj/item/storage/backpack/explorer, -/obj/item/reagent_containers/food/drinks/soda_cans/cola, -/obj/item/restraints/handcuffs/cable/zipties/used, -/turf/open/floor/mineral/titanium/white, -/area/ruin/powered/graveyard_shuttle) -"cn" = ( -/obj/structure/stone_tile/cracked, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"co" = ( -/obj/effect/decal/cleanable/blood/drip, -/obj/structure/stone_tile/cracked, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"cq" = ( -/obj/structure/stone_tile/block/cracked{ - dir = 4 - }, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"cr" = ( -/obj/structure/bonfire/prelit, -/obj/effect/decal/cleanable/ash, -/obj/item/organ/tail/lizard, -/obj/effect/decal/cleanable/blood/old, -/obj/structure/stone_tile/slab/cracked, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"cs" = ( -/obj/structure/ore_box, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"ct" = ( -/obj/structure/stone_tile, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"cu" = ( -/obj/structure/stone_tile{ - dir = 8 - }, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"cv" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/mineral/titanium/white, -/area/ruin/powered/graveyard_shuttle) -"cw" = ( -/obj/structure/closet/crate/grave/loot, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/mob_spawn/human/skeleton, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"cx" = ( -/obj/item/light/bulb/broken, -/obj/effect/turf_decal/industrial/stand_clear/white, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/mineral/titanium/purple, -/area/ruin/powered/graveyard_shuttle) -"cz" = ( -/obj/structure/stone_tile, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"fy" = ( -/obj/structure/table, -/obj/item/paper_bin, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"lO" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"oR" = ( -/obj/item/reagent_containers/glass/bottle/frostoil{ - desc = "A small bottle. Contains cold sauce. There's a label on here: APPLY ON SEVERE BURNS."; - volume = 10 - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"rb" = ( -/obj/structure/rack, -/obj/item/shovel, -/obj/item/wrench, -/obj/structure/cable{ - icon_state = "1-8" - }, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"vS" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"Bi" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"BF" = ( -/obj/structure/flora/rock, -/obj/item/pickaxe{ - layer = 2.5; - pixel_x = -8; - pixel_y = 5 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"Gb" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"GT" = ( -/obj/item/reagent_containers/food/snacks/deadmouse, -/obj/item/assembly/mousetrap, -/obj/structure/cable{ - icon_state = "1-8" - }, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"GY" = ( -/obj/machinery/power/floodlight, -/obj/structure/cable{ - icon_state = "0-4" - }, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"Hq" = ( -/obj/structure/table, -/obj/item/reagent_containers/glass/bottle/plasma{ - volume = 25 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"MV" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "1-8" - }, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"NJ" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"Qk" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"QG" = ( -/obj/structure/table, -/obj/item/paper/crumpled/muddy/fluff/elephant_graveyard/rnd_notes, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"QZ" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"WG" = ( -/obj/structure/table, -/obj/machinery/power/floodlight, -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) -"XX" = ( -/obj/structure/table, -/obj/item/t_scanner/adv_mining_scanner/lesser, -/obj/structure/cable{ - icon_state = "1-4" - }, -/turf/open/floor/plating/asteroid/basalt/wasteland, -/area/ruin/unpowered/elephant_graveyard) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -at -ab -ab -ab -ac -ac -ac -ac -bf -ac -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -bf -bf -bf -bf -bf -ac -ac -ac -ac -bf -bf -bf -ac -ac -ab -ab -ab -aa -aa -aa -aa -aa -aa -aa -aa -"} -(4,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -bf -bf -aT -bR -bf -bf -bf -ac -bf -bf -bf -bf -bf -bf -bf -ac -ac -ab -ab -aa -aa -aa -aa -aa -aa -aa -"} -(5,1,1) = {" -aa -aa -aa -aa -aa -ab -ab -ab -bf -bf -bf -bz -aK -bY -ae -bf -bf -bf -cs -aE -bJ -bf -bf -bf -ac -ac -ac -ab -ab -ab -aa -aa -aa -aa -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -ab -ab -bf -bf -bf -bf -aA -bc -aA -aY -ae -bv -ae -cl -ae -ae -aC -bs -bO -ae -ae -ac -ac -ac -ac -ab -ab -ab -aa -aa -aa -"} -(7,1,1) = {" -aa -aa -aa -aa -ab -bf -bf -bf -oR -vS -vS -vS -aL -ae -ae -ak -ae -ae -ae -ae -bK -bf -bf -bf -ae -ac -ac -ac -ac -ac -ac -ab -ab -aa -aa -"} -(8,1,1) = {" -aa -aa -ab -ab -ab -bf -bf -Gb -Bi -ar -ae -ae -ae -ar -aZ -ae -ba -ae -ba -ae -ae -ae -ae -bf -ae -ac -ac -ac -ac -ac -ac -ac -ab -ab -aa -"} -(9,1,1) = {" -aa -ab -ab -bf -bf -bf -Gb -Bi -ak -ae -aE -ae -ae -ae -ba -ae -af -ae -ae -ae -ba -ae -ak -bf -ae -ae -ac -ac -ac -ac -ac -ac -ac -ac -aa -"} -(10,1,1) = {" -ab -ab -bf -bf -bf -Gb -MV -ae -ae -ae -ae -cl -ae -ae -ae -co -bd -bk -ae -ae -ae -ae -aE -bf -bf -ae -ae -ac -ac -ac -ac -bG -bM -ac -ac -"} -(11,1,1) = {" -at -bf -bf -bf -bf -lO -ae -ae -ao -ae -ax -ax -ax -ax -ae -ae -be -cr -ae -cz -ae -ae -bn -cw -bf -bf -bB -ac -ac -ac -ac -bL -ae -ae -ac -"} -(12,1,1) = {" -at -bf -bf -bf -bf -lO -cl -ae -ae -ae -ae -ci -cj -ce -ae -cj -ae -cq -ae -ae -cu -ae -ae -ae -bf -bf -bC -ac -ac -ac -ac -ac -ac -bD -ac -"} -(13,1,1) = {" -bf -ad -ae -bf -cl -lO -ae -ae -ae -ae -cg -ae -ak -ak -cn -ae -cq -ae -ct -ar -ae -cl -ae -ae -bf -bf -ae -ac -ac -ac -ac -ac -ac -ae -ac -"} -(14,1,1) = {" -bf -aj -ae -bf -ae -lO -aE -ae -ap -ae -ay -ay -ay -ay -ae -ae -ak -ae -ae -bn -ae -ae -aE -GY -bf -cl -bB -ae -ac -ac -ac -ac -ac -ae -ac -"} -(15,1,1) = {" -bf -ai -ag -bf -an -lO -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -ae -cw -ae -ae -ae -ae -ae -lO -bf -ac -ae -ae -bB -ac -ac -ac -ac -bD -ac -"} -(16,1,1) = {" -bf -ai -bf -bf -bf -Qk -vS -QZ -ae -ae -aE -ae -ar -ae -ba -ae -ae -ae -ae -ae -ba -ae -ae -lO -bf -ac -ac -ae -ae -bB -ac -ac -ac -bB -bP -"} -(17,1,1) = {" -bf -ae -af -bf -bf -aE -bf -Qk -BF -XX -az -aG -aM -aR -ae -ae -ba -ae -ba -ae -ae -aE -cl -lO -bf -bf -ac -ac -ae -bD -ac -ac -ac -bF -bT -"} -(18,1,1) = {" -at -bf -ah -bf -bf -af -bf -ae -ae -QG -aB -ae -ae -aS -ae -ae -aE -ae -ae -ae -ae -ae -ae -NJ -bx -bf -ac -ac -ac -ae -bB -bB -bF -bB -bP -"} -(19,1,1) = {" -ab -bf -af -av -af -ae -bf -ae -bt -Hq -ch -ae -ae -ca -ae -Gb -vS -vS -vS -vS -vS -vS -vS -GT -bf -bf -ac -ac -ac -ac -bF -bB -bV -ac -ac -"} -(20,1,1) = {" -aa -at -bf -bf -bf -bf -bf -bj -bf -WG -al -fy -vS -vS -vS -rb -bf -ac -bm -ae -bn -bf -bf -bf -bf -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -"} -(21,1,1) = {" -aa -aa -ab -ac -ac -bf -aU -aE -bf -bf -bf -bf -ck -aX -ae -bf -bf -bf -bf -bf -bf -bf -bf -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -"} -(22,1,1) = {" -aa -aa -ab -ab -ac -bf -aU -ae -bl -cd -bf -bf -bf -bN -ae -bf -bf -bf -bf -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -ab -ab -ab -bZ -bZ -"} -(23,1,1) = {" -aa -aa -aa -ab -ab -bf -aV -bl -aE -bu -bf -bf -bf -bf -bb -bf -bf -bf -bf -ab -ab -ab -ab -ab -ab -ab -ab -bZ -bZ -bZ -bH -bZ -bZ -bZ -ab -"} -(24,1,1) = {" -aa -aa -aa -aa -ab -at -aP -bo -cc -cf -bf -aH -aH -bg -bW -bg -aH -aH -aH -bH -bZ -bZ -bZ -bZ -bZ -bZ -bZ -bZ -bZ -bZ -bZ -bZ -ab -ab -ab -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -at -bf -bf -bf -bf -aH -aN -bQ -bh -cv -bU -by -aH -aH -bI -bZ -bZ -bZ -bZ -bZ -bZ -bZ -bZ -bZ -ab -ab -ab -ab -ab -ab -"} -(26,1,1) = {" -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -aI -aO -bX -bi -bp -bi -cx -bE -aH -bI -bZ -bZ -bZ -bZ -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -"} -(27,1,1) = {" -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -aH -aN -aW -cm -bq -bS -bA -aH -aH -bI -bZ -bZ -bZ -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(28,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -aH -aH -aH -br -aH -aH -aH -aH -bZ -bZ -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -"} -(29,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -"} diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm index 3efc7429d803..92fa7dfb9203 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_lava_canyon.dmm @@ -150,10 +150,6 @@ pixel_x = -5; pixel_y = 12 }, -/obj/item/clothing/head/witchunter{ - pixel_y = 13; - pixel_x = -5 - }, /obj/effect/decal/cleanable/blood/old, /turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, /area/overmap_encounter/planetoid/lava/explored) @@ -345,7 +341,7 @@ /obj/effect/mob_spawn/human/corpse{ mob_species = /datum/species/lizard/ashwalker }, -/obj/item/spear/bonespear{ +/obj/item/melee/spear/bone{ pixel_x = 10; pixel_y = -2 }, @@ -611,7 +607,7 @@ /turf/open/floor/plating/asteroid/basalt/lava_land_surface/lit, /area/overmap_encounter/planetoid/lava/explored) "pX" = ( -/obj/item/claymore/bone{ +/obj/item/melee/sword/bone{ pixel_x = -12; pixel_y = 11 }, @@ -1101,7 +1097,7 @@ pixel_y = -11; pixel_x = -7 }, -/obj/item/kitchen/knife/combat/bone{ +/obj/item/melee/knife/bone{ pixel_x = 10; pixel_y = -10 }, @@ -1474,7 +1470,7 @@ /turf/closed/mineral/random/volcanic, /area/overmap_encounter/planetoid/cave/explored) "PP" = ( -/obj/item/kitchen/knife/combat/bone{ +/obj/item/melee/knife/bone{ pixel_x = -2; pixel_y = 4 }, @@ -1706,7 +1702,7 @@ pixel_x = -2; pixel_y = 1 }, -/obj/item/spear/bonespear{ +/obj/item/melee/spear/bone{ pixel_x = 8; pixel_y = 14 }, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_wrecked_factory.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_wrecked_factory.dmm index 0064e874017d..fda16098a148 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_wrecked_factory.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_wrecked_factory.dmm @@ -705,11 +705,11 @@ /obj/item/reagent_containers/food/snacks/meat/slab, /obj/item/reagent_containers/food/snacks/meat/slab, /obj/item/reagent_containers/food/snacks/meat/slab, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/rice, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/rice, /obj/item/storage/fancy/egg_box, -/obj/item/reagent_containers/food/condiment/soymilk, -/obj/item/reagent_containers/food/condiment/milk, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/reagent_containers/condiment/milk, /obj/item/storage/box/ingredients/vegetarian, /turf/open/floor/wood, /area/ruin/lavaland/factory/adminstrative) @@ -1098,7 +1098,7 @@ /obj/effect/decal/cleanable/blood{ icon_state = "drip1" }, -/obj/item/spear, +/obj/item/melee/spear, /obj/item/bodypart/l_arm, /turf/open/floor/plasteel/dark, /area/ruin/lavaland/factory/dorms) @@ -1578,11 +1578,11 @@ /obj/effect/turf_decal/corner/opaque/bar, /obj/machinery/light/directional/east, /obj/item/storage/box/ingredients/vegetarian, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/soymilk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/soymilk, /obj/item/storage/fancy/egg_box, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/rice, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/rice, /obj/item/reagent_containers/food/snacks/meat/slab, /obj/item/reagent_containers/food/snacks/meat/slab, /obj/item/reagent_containers/food/snacks/meat/slab, @@ -2691,8 +2691,8 @@ /turf/open/floor/carpet/blue, /area/ruin/lavaland/factory/manager_office) "zl" = ( -/obj/item/kitchen/knife/combat/survival, -/obj/item/kitchen/knife/combat/survival, +/obj/item/melee/knife/survival, +/obj/item/melee/knife/survival, /obj/structure/closet/crate/secure/gear, /turf/open/floor/plasteel/mono, /area/ruin/lavaland/factory/warehouse) @@ -2982,7 +2982,7 @@ dir = 1 }, /obj/machinery/light/directional/west, -/obj/item/kitchen/knife/hunting, +/obj/item/melee/knife/hunting, /obj/item/clothing/suit/hooded/cloak/goliath, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plasteel/white, @@ -3828,7 +3828,7 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/item/kitchen/knife/shiv, +/obj/item/melee/knife/shiv, /turf/open/floor/plasteel/white, /area/ruin/lavaland/factory/adminstrative) "LX" = ( @@ -4302,7 +4302,7 @@ "QM" = ( /obj/structure/table/wood, /obj/item/cutting_board, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /turf/open/floor/wood, /area/ruin/lavaland/factory/adminstrative) "QR" = ( @@ -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/ReebeRuins/reebe_arena.dmm b/_maps/RandomRuins/ReebeRuins/reebe_arena.dmm index 448690c0e77a..6e7e5131b640 100644 --- a/_maps/RandomRuins/ReebeRuins/reebe_arena.dmm +++ b/_maps/RandomRuins/ReebeRuins/reebe_arena.dmm @@ -45,10 +45,6 @@ "pm" = ( /turf/open/floor/bronze, /area/ruin/reebe) -"pW" = ( -/obj/item/nullrod/spear, -/turf/open/floor/bronze, -/area/ruin/reebe) "qj" = ( /mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient/crystal, /obj/structure/fans/tiny/invisible, @@ -56,7 +52,6 @@ /area/ruin/reebe) "qC" = ( /obj/structure/chair/comfy/shuttle/bronze, -/obj/item/nullrod/spear, /turf/open/floor/bronze, /area/ruin/reebe) "vz" = ( @@ -91,7 +86,6 @@ /area/ruin/reebe) "Ag" = ( /obj/structure/table/bronze, -/obj/item/nullrod/spear, /turf/open/floor/bronze, /area/ruin/reebe) "AT" = ( @@ -220,17 +214,13 @@ /turf/open/floor/bronze, /area/ruin/reebe) "Ux" = ( -/obj/item/spear, +/obj/item/melee/spear, /obj/item/grenade/c4, /turf/open/floor/bronze, /area/ruin/reebe) "UU" = ( /turf/open/chasm/reebe_void, /area/ruin/reebe) -"VT" = ( -/obj/structure/table/bronze, -/turf/open/floor/bronze, -/area/ruin/reebe) "Xr" = ( /obj/machinery/door/airlock/bronze/seethru{ name = "Summoning Chamber" @@ -2127,7 +2117,7 @@ Cj Cj Fz pm -VT +Ag Ib Cj FD @@ -2186,7 +2176,7 @@ IC IC Cj Cj -VT +Ag Fz pm pm @@ -2251,7 +2241,7 @@ la la pm pm -pW +pm pm xy pm @@ -2505,7 +2495,7 @@ pm pm pm Cj -VT +Ag pm pm pm @@ -2559,7 +2549,7 @@ pm Cj pm pm -pW +pm JC pm JC @@ -2567,7 +2557,7 @@ pm JC pm De -VT +Ag pm pm pm @@ -2815,7 +2805,7 @@ pm JC pm De -VT +Ag pm pm pm @@ -2877,7 +2867,7 @@ pm pm pm Cj -VT +Ag pm pm pm @@ -2996,11 +2986,11 @@ JC pm pm Rc -VT +Ag Cj Ag -VT -VT +Ag +Ag pm pm pm @@ -3053,7 +3043,7 @@ IC IC IC De -VT +Ag pm pm pm @@ -3127,7 +3117,7 @@ pm pm pm pm -VT +Ag Cj pm pm @@ -3178,7 +3168,7 @@ IC IC Cj Cj -VT +Ag hO pm hO @@ -3188,7 +3178,7 @@ pm pm pm pm -VT +Ag Cj Cj pm @@ -3242,14 +3232,14 @@ IC Cj Cj Pn -VT +Ag Pn -VT +Ag Cj -VT +Ag pm pm -VT +Ag Cj Cj pm diff --git a/_maps/RandomRuins/ReebeRuins/reebe_decayed_sm.dmm b/_maps/RandomRuins/ReebeRuins/reebe_decayed_sm.dmm index c768b54fe0ab..e1b0f36f687c 100644 --- a/_maps/RandomRuins/ReebeRuins/reebe_decayed_sm.dmm +++ b/_maps/RandomRuins/ReebeRuins/reebe_decayed_sm.dmm @@ -7,7 +7,6 @@ /turf/open/floor/bronze, /area/ruin/reebe) "d" = ( -/obj/item/nullrod/spear, /turf/open/floor/bronze, /area/ruin/reebe) "e" = ( @@ -57,9 +56,6 @@ "O" = ( /turf/closed/wall/mineral/bronze, /area/ruin/reebe) -"Y" = ( -/turf/open/floor/bronze, -/area/ruin/reebe) "Z" = ( /obj/effect/decal/remains/human, /turf/open/floor/bronze, @@ -78,8 +74,8 @@ a a "} (2,1,1) = {" -Y -Y +d +d C C x @@ -102,19 +98,19 @@ a o "} (4,1,1) = {" -Y +d O e C C O -Y +d O -Y +d E "} (5,1,1) = {" -Y +d B e C @@ -122,23 +118,23 @@ M v Z v -Y +d a "} (6,1,1) = {" -Y +d O C e e O -Y +d O -Y +d a "} (7,1,1) = {" -Y +d C y C @@ -154,19 +150,19 @@ E C C C -Y -Y -Y +d +d +d E a a "} (9,1,1) = {" -Y -Y +d +d E E -Y +d E a a diff --git a/_maps/RandomRuins/ReebeRuins/reebe_floating_island.dmm b/_maps/RandomRuins/ReebeRuins/reebe_floating_island.dmm index 2313a8e91d96..d1d0cc588c9a 100644 --- a/_maps/RandomRuins/ReebeRuins/reebe_floating_island.dmm +++ b/_maps/RandomRuins/ReebeRuins/reebe_floating_island.dmm @@ -28,9 +28,7 @@ /obj/item/ammo_casing/caseless/arrow/bronze, /obj/item/ammo_casing/caseless/arrow/bronze, /obj/item/ammo_casing/caseless/arrow/bronze, -/obj/item/clothing/suit/bronze, /obj/item/clothing/head/bronze, -/obj/item/clothing/shoes/bronze, /mob/living/simple_animal/hostile/asteroid/goliath/beast/ancient/crystal, /turf/open/floor/bronze, /area/ruin/reebe) diff --git a/_maps/RandomRuins/ReebeRuins/reebe_swarmers.dmm b/_maps/RandomRuins/ReebeRuins/reebe_swarmers.dmm deleted file mode 100644 index 7c864f829fda..000000000000 --- a/_maps/RandomRuins/ReebeRuins/reebe_swarmers.dmm +++ /dev/null @@ -1,471 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"a" = ( -/turf/template_noop, -/area/template_noop) -"t" = ( -/turf/open/floor/grass/fairy/reebe, -/area/overmap_encounter/planetoid/reebe) -"u" = ( -/obj/structure/flora/tree/jungle{ - icon = 'icons/obj/flora/chapeltree.dmi'; - icon_state = "churchtree"; - pixel_x = -16; - pixel_y = 0 - }, -/turf/open/floor/grass/fairy/reebe, -/area/overmap_encounter/planetoid/reebe) -"x" = ( -/mob/living/simple_animal/hostile/asteroid/hivelord/legion/crystal, -/turf/open/floor/grass/fairy/reebe, -/area/overmap_encounter/planetoid/reebe) -"N" = ( -/turf/closed/mineral/random/reebe, -/area/ruin/reebe) -"R" = ( -/mob/living/simple_animal/hostile/megafauna/swarmer_swarm_beacon, -/turf/open/floor/grass/fairy/reebe, -/area/ruin/reebe) -"X" = ( -/turf/closed/mineral/random/reebe, -/area/overmap_encounter/planetoid/reebe) - -(1,1,1) = {" -a -a -a -a -a -a -a -a -t -t -t -a -a -a -a -a -a -a -a -a -"} -(2,1,1) = {" -a -a -t -t -t -t -a -a -N -u -t -t -N -N -t -t -t -t -a -a -"} -(3,1,1) = {" -a -t -N -t -N -x -t -t -t -N -N -t -t -t -t -N -N -t -a -a -"} -(4,1,1) = {" -a -t -t -N -N -N -N -N -N -N -N -N -N -N -N -N -N -t -a -a -"} -(5,1,1) = {" -t -t -N -N -N -N -N -N -N -N -N -N -N -N -N -N -t -u -a -a -"} -(6,1,1) = {" -a -t -N -N -N -N -N -N -N -N -N -N -N -N -N -N -t -t -t -a -"} -(7,1,1) = {" -a -t -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -t -a -"} -(8,1,1) = {" -a -t -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -t -a -"} -(9,1,1) = {" -a -t -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -t -a -"} -(10,1,1) = {" -t -t -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -t -a -"} -(11,1,1) = {" -t -u -t -N -N -N -N -N -N -R -N -N -N -N -N -N -N -t -t -a -"} -(12,1,1) = {" -t -t -t -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -t -a -"} -(13,1,1) = {" -t -N -t -N -N -N -N -N -N -N -N -N -N -N -N -N -N -t -t -a -"} -(14,1,1) = {" -t -t -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -t -a -a -"} -(15,1,1) = {" -a -t -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -t -t -a -"} -(16,1,1) = {" -t -t -t -N -N -N -N -N -N -N -N -N -N -N -N -N -N -N -t -a -"} -(17,1,1) = {" -t -t -t -t -N -N -N -N -N -N -N -N -N -N -N -N -N -N -t -a -"} -(18,1,1) = {" -a -a -a -t -N -N -N -N -N -N -N -t -t -t -t -N -N -t -t -a -"} -(19,1,1) = {" -a -a -a -t -t -t -t -t -t -t -t -t -N -X -u -t -t -t -a -a -"} -(20,1,1) = {" -a -a -a -a -a -a -a -a -a -a -a -a -t -t -t -a -a -a -a -a -"} diff --git a/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm b/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm index b837eff979f7..ef9240170e41 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_budgetcuts.dmm @@ -47,7 +47,7 @@ /obj/machinery/reagentgrinder{ pixel_y = 5 }, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ pixel_x = -2; pixel_y = 6 }, @@ -517,7 +517,7 @@ pixel_x = -1; pixel_y = 3 }, -/obj/item/reagent_containers/food/condiment/sugar{ +/obj/item/reagent_containers/condiment/sugar{ pixel_x = 5; pixel_y = 5 }, @@ -769,12 +769,12 @@ "mO" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ desc = "Often used to flavor food or make people sneeze. Fashionably moved to the left side of the table."; pixel_x = -8; pixel_y = 2 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ desc = "Salt. From space oceans, presumably. A staple of modern medicine."; pixel_x = -8; pixel_y = 12 diff --git a/_maps/RandomRuins/RockRuins/rockplanet_distillery.dmm b/_maps/RandomRuins/RockRuins/rockplanet_distillery.dmm new file mode 100644 index 000000000000..2fd3caa4c42f --- /dev/null +++ b/_maps/RandomRuins/RockRuins/rockplanet_distillery.dmm @@ -0,0 +1,6628 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ah" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/wood/rockplanet{ + icon_state = "wood-broken7" + }, +/area/ruin/rockplanet/distillery) +"aj" = ( +/obj/structure/cable/yellow{ + icon_state = "2-10" + }, +/turf/open/floor/plating/asteroid/rockplanet/cracked/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"av" = ( +/obj/effect/turf_decal/industrial/traffic{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/traffic{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 9 + }, +/turf/open/floor/pod, +/area/ruin/rockplanet/distillery/crew) +"aB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/structure/chair/sofa/brown/old/right/directional/south, +/turf/open/floor/carpet, +/area/ruin/rockplanet/distillery/crew) +"aC" = ( +/obj/structure/catwalk/over, +/obj/structure/railing{ + layer = 4.1 + }, +/turf/open/floor/plating, +/area/overmap_encounter/planetoid/rockplanet/explored) +"aE" = ( +/obj/structure/catwalk/over, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table/glass, +/obj/item/reagent_containers/condiment/sugar{ + pixel_y = 13; + pixel_x = -2; + layer = 2.8 + }, +/obj/item/stock_parts/micro_laser{ + pixel_y = 16; + pixel_x = 6; + layer = 2.8 + }, +/obj/machinery/reagentgrinder, +/obj/item/stock_parts/scanning_module{ + pixel_x = -6; + pixel_y = 6; + layer = 2.8 + }, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_y = 10; + pixel_x = 10 + }, +/turf/open/floor/plating/rockplanet/lit, +/area/ruin/rockplanet/distillery) +"aG" = ( +/obj/structure/cable/yellow{ + icon_state = "5-8" + }, +/obj/structure/cable/yellow{ + icon_state = "4-5" + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating/rust/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"aJ" = ( +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/pod, +/area/ruin/rockplanet/distillery/office) +"ba" = ( +/obj/structure/chair/office, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 5 + }, +/mob/living/simple_animal/hostile/human/frontier/ranged/internals/neutered, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"bd" = ( +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/structure/reagent_dispensers/watertank/high, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/crew) +"be" = ( +/obj/machinery/light/floor, +/turf/open/floor/plating/rockplanet/lit{ + icon_state = "platingdmg3" + }, +/area/overmap_encounter/planetoid/rockplanet/explored) +"bm" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/neutral/filled/line{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"br" = ( +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/obj/machinery/door/airlock/external, +/turf/open/floor/pod, +/area/ruin/rockplanet/distillery/crew) +"bu" = ( +/obj/structure/chair/sofa/brown/corpo/left/directional/west, +/turf/open/floor/plating/rust/rockplanet/lit, +/area/ruin/rockplanet/distillery) +"bz" = ( +/obj/effect/turf_decal/ntlogo{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 9 + }, +/obj/effect/decal/cleanable/crayon{ + icon_state = "f"; + pixel_x = 6; + color = "#0094FF" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ruin/rockplanet/distillery/crew) +"bH" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 6 + }, +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 4; + target_pressure = 500; + name = "Air to Distro" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/patterned/brushed, +/area/ruin/rockplanet/distillery/engineering) +"bI" = ( +/obj/structure/window/reinforced, +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/traffic{ + dir = 1 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/machinery/light/small/directional/east{ + pixel_y = -6 + }, +/obj/machinery/light_switch{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor, +/obj/machinery/light_switch{ + pixel_x = 22; + pixel_y = 5; + dir = 8 + }, +/obj/effect/decal/cleanable/generic, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable/yellow{ + icon_state = "2-5" + }, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/shuttle) +"bS" = ( +/obj/machinery/washing_machine, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/catwalk/over, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "5-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 9 + }, +/turf/open/floor/plating/rust, +/area/ruin/rockplanet/distillery/crew) +"bT" = ( +/obj/effect/turf_decal/trimline/opaque/neutral/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white/corner{ + dir = 8 + }, +/obj/structure/railing/corner{ + dir = 8; + layer = 4.1 + }, +/turf/open/floor/plasteel/patterned/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"bX" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/chair/sofa/brown/old/left/directional/west, +/turf/open/floor/wood, +/area/ruin/rockplanet/distillery/crew) +"bY" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/carpet, +/area/ruin/rockplanet/distillery/office) +"cf" = ( +/obj/machinery/shower{ + dir = 1 + }, +/obj/structure/catwalk/over, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/machinery/door/window/northleft, +/turf/open/floor/plating, +/area/ruin/rockplanet/distillery/crew) +"co" = ( +/obj/structure/catwalk/over, +/obj/structure/fermenting_barrel, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plating/rust/rockplanet/lit, +/area/ruin/rockplanet/distillery) +"cp" = ( +/obj/effect/turf_decal/industrial/traffic{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/traffic, +/obj/machinery/light/small/directional/east, +/turf/open/floor/pod, +/area/ruin/rockplanet/distillery/office) +"cw" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4 + }, +/obj/effect/decal/cleanable/glass, +/obj/structure/grille/broken, +/obj/structure/barricade/wooden, +/turf/open/floor/plating/rockplanet/lit, +/area/ruin/rockplanet/distillery/saloon) +"cA" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 5 + }, +/obj/effect/decal/cleanable/generic, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/plasteel/patterned/brushed, +/area/ruin/rockplanet/distillery/crew) +"cP" = ( +/obj/effect/turf_decal/industrial/outline/red, +/obj/item/reagent_containers/food/snacks/grown/corn, +/obj/item/reagent_containers/food/snacks/grown/corn, +/obj/item/reagent_containers/condiment/sugar, +/obj/item/reagent_containers/condiment/sugar, +/obj/item/reagent_containers/food/snacks/grown/corn{ + pixel_y = 3 + }, +/obj/item/reagent_containers/food/snacks/grown/corn{ + pixel_y = 3 + }, +/obj/structure/closet/crate/freezer, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery) +"cQ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"cS" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 6 + }, +/obj/structure/table, +/obj/item/clothing/gloves/color/yellow{ + pixel_y = -16 + }, +/obj/item/stock_parts/capacitor{ + pixel_x = -6; + pixel_y = -4 + }, +/obj/item/weldingtool/largetank{ + pixel_y = 3 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/obj/machinery/light/dim/directional/east, +/turf/open/floor/plasteel/patterned/brushed, +/area/ruin/rockplanet/distillery/engineering) +"dn" = ( +/obj/structure/flora/rock/rockplanet{ + icon_state = "redrock3" + }, +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating/rockplanet/lit{ + icon_state = "foam_plating" + }, +/area/overmap_encounter/planetoid/rockplanet/explored) +"dw" = ( +/obj/structure/flora/ash/cacti, +/turf/open/floor/plating/asteroid/rockplanet/cracked/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"dE" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"dI" = ( +/obj/structure/cable/yellow{ + icon_state = "4-9" + }, +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/rifle/internals, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"dJ" = ( +/obj/effect/turf_decal/ntlogo{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery) +"dK" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/power/port_gen/pacman/super, +/obj/effect/turf_decal/siding/white/end{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/pod, +/area/ruin/rockplanet/distillery/engineering) +"dP" = ( +/obj/machinery/shower{ + pixel_y = 12 + }, +/obj/structure/catwalk/over, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/machinery/door/window/southright, +/turf/open/floor/plating, +/area/ruin/rockplanet/distillery/crew) +"dU" = ( +/obj/structure/flora/ash/cacti, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"dZ" = ( +/obj/machinery/vending/cola/random, +/obj/effect/turf_decal/spline/fancy/opaque/white, +/turf/open/floor/plasteel/patterned/brushed, +/area/ruin/rockplanet/distillery/crew) +"ed" = ( +/turf/closed/wall/rust, +/area/ruin/rockplanet/distillery) +"eh" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/carpet, +/area/ruin/rockplanet/distillery/office) +"em" = ( +/obj/structure/flora/ash/leaf_shroom, +/turf/open/floor/plating/asteroid/rockplanet/wet/cracked/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"en" = ( +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/item/storage/bottles/moonshine/sealed, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/crew) +"eF" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 8 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken6" + }, +/area/ruin/rockplanet/distillery/crew) +"eG" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/generic, +/turf/open/floor/carpet, +/area/ruin/rockplanet/distillery/crew) +"fl" = ( +/obj/structure/reagent_dispensers/cooking_oil{ + name = "moonshine vat"; + desc = "A huge metal vat with a tap on the front. Filled with moonshine."; + reagent_id = /datum/reagent/consumable/ethanol/moonshine + }, +/obj/structure/fermenting_barrel/distiller{ + pixel_y = -14; + density = 0 + }, +/turf/open/floor/pod/rockplanet, +/area/ruin/rockplanet/distillery) +"fs" = ( +/obj/structure/fermenting_barrel, +/obj/effect/decal/cleanable/greenglow, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/broken/directional/south, +/turf/open/floor/plating/rockplanet/lit{ + icon_state = "platingdmg3" + }, +/area/ruin/rockplanet/distillery) +"fv" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/button/door{ + dir = 8; + id = "frontier_door"; + name = "Door Lock"; + pixel_x = 23; + pixel_y = -2; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/turf/open/floor/plasteel/stairs{ + dir = 1 + }, +/area/ruin/rockplanet/distillery) +"fF" = ( +/obj/structure/cable{ + icon_state = "1-10" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "1-5" + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"fJ" = ( +/obj/structure/catwalk/over, +/obj/machinery/light/small/broken/directional/west, +/turf/open/floor/plating/rust/rockplanet/lit, +/area/ruin/rockplanet/distillery) +"fM" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white{ + dir = 6 + }, +/obj/effect/decal/cleanable/vomit/old, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/pod/rockplanet, +/area/ruin/rockplanet/distillery) +"fO" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/neutral/filled/line{ + dir = 10 + }, +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"fW" = ( +/obj/structure/rack, +/obj/item/storage/bottles/moonshine{ + pixel_y = 6 + }, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery) +"gg" = ( +/obj/structure/flora/ausbushes/sunnybush{ + layer = 3 + }, +/obj/structure/flora/ausbushes/sparsegrass, +/turf/open/floor/plating/asteroid/rockplanet/cracked/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"gk" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 6 + }, +/obj/structure/mopbucket, +/obj/item/holosign_creator/janibarrier, +/obj/item/mop, +/obj/machinery/light/directional/east, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"gu" = ( +/obj/item/mine/pressure/explosive/rusty/live, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"gv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/pod, +/area/ruin/rockplanet/distillery/office) +"gw" = ( +/obj/structure/table/wood/poker, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 9 + }, +/obj/item/toy/cards/deck{ + pixel_x = 6; + pixel_y = -4 + }, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"gA" = ( +/obj/structure/table/wood/reinforced, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/ammo_box/magazine/m9mm_rattlesnake{ + pixel_y = 6; + pixel_x = 12; + layer = 3.1 + }, +/obj/item/ammo_box/magazine/m9mm_rattlesnake{ + pixel_y = 6; + pixel_x = 6; + start_empty = 1; + layer = 3.1 + }, +/obj/item/ammo_casing/c9mm, +/obj/item/ammo_casing/c9mm, +/obj/item/ammo_casing/c9mm, +/obj/item/ammo_casing/c9mm, +/obj/item/ammo_casing/c9mm, +/turf/open/floor/carpet, +/area/ruin/rockplanet/distillery/office) +"gM" = ( +/obj/machinery/door/airlock, +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/turf/open/floor/pod, +/area/ruin/rockplanet/distillery/crew) +"gU" = ( +/obj/structure/catwalk/over, +/obj/structure/table/glass, +/obj/item/cigbutt{ + pixel_x = 4 + }, +/obj/item/cigbutt{ + pixel_x = -3; + pixel_y = 4 + }, +/obj/item/electronics/firealarm{ + pixel_y = 6; + pixel_x = -4 + }, +/obj/item/reagent_containers/food/drinks/soda_cans/sol_dry{ + pixel_y = 6; + pixel_x = 6 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/rockplanet/lit{ + icon_state = "panelscorched" + }, +/area/ruin/rockplanet/distillery) +"gX" = ( +/obj/structure/reagent_dispensers/beerkeg{ + reagent_id = /datum/reagent/consumable/ethanol/moonshine; + name = "moonshine keg"; + desc = "A keg full of liver-shredding spirits brewed by amateur bootleggers." + }, +/obj/effect/turf_decal/industrial/loading/white{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"hi" = ( +/turf/open/floor/plating/rockplanet/lit{ + icon_state = "platingdmg1" + }, +/area/overmap_encounter/planetoid/rockplanet/explored) +"hq" = ( +/obj/structure/table/wood/reinforced, +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ + pixel_y = 12; + pixel_x = 8 + }, +/obj/item/clothing/head/beret/sec/frontier{ + pixel_x = -4 + }, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"hy" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/neutral/filled/line{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/patterned/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"hA" = ( +/obj/structure/table/wood/reinforced, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/item/reagent_containers/food/snacks/chips{ + pixel_y = 4; + pixel_x = -3 + }, +/obj/item/reagent_containers/food/drinks/beer{ + pixel_y = 8; + pixel_x = 6 + }, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"hH" = ( +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/obj/machinery/door/airlock/external/glass, +/turf/open/floor/pod, +/area/ruin/rockplanet/distillery/crew) +"hN" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 9 + }, +/obj/structure/chair/sofa/brown/old/right/directional/south, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"hP" = ( +/obj/structure/catwalk/over, +/obj/machinery/computer/atmos_alert/retro{ + dir = 1 + }, +/turf/open/floor/plating/rust/rockplanet/lit, +/area/ruin/rockplanet/distillery) +"hS" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"hY" = ( +/turf/closed/mineral/random/rockplanet, +/area/overmap_encounter/planetoid/cave/explored) +"ih" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/machinery/light/dim/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/safe/floor, +/obj/effect/decal/cleanable/crayon{ + icon_state = "credit" + }, +/obj/item/spacecash/bundle/loadsamoney, +/turf/open/floor/wood, +/area/ruin/rockplanet/distillery/office) +"ir" = ( +/obj/structure/cable/yellow{ + icon_state = "0-1" + }, +/obj/machinery/porta_turret/ship/weak, +/turf/open/floor/plating/asteroid/rockplanet/cracked/lit, +/area/ruin/rockplanet/distillery/office) +"iy" = ( +/obj/effect/turf_decal/trimline/opaque/neutral/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/splatter, +/turf/open/floor/plasteel/patterned/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"iT" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating/rockplanet/lit{ + icon_state = "platingdmg2" + }, +/area/overmap_encounter/planetoid/rockplanet/explored) +"ji" = ( +/turf/open/floor/plating/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"jm" = ( +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/power/smes/shuttle/micro/precharged{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "pod_window" + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/open/floor/engine/hull/reinforced, +/area/ruin/rockplanet/distillery/shuttle) +"jE" = ( +/obj/structure/catwalk/over, +/turf/closed/mineral/random/rockplanet, +/area/overmap_encounter/planetoid/cave/explored) +"jF" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2, +/turf/open/floor/plasteel/patterned/brushed, +/area/ruin/rockplanet/distillery/crew) +"jI" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/chair/sofa/brown/corpo/right/directional/west, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery) +"jM" = ( +/turf/closed/wall, +/area/ruin/rockplanet/distillery/office) +"jO" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Input to Air" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/pod, +/area/ruin/rockplanet/distillery/engineering) +"jS" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/plating/asteroid/rockplanet/cracked/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"jX" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2, +/obj/effect/decal/cleanable/ash, +/obj/item/cigbutt{ + pixel_y = 3; + pixel_x = 6 + }, +/turf/open/floor/wood, +/area/ruin/rockplanet/distillery/crew) +"kd" = ( +/obj/structure/curtain/cloth/grey, +/obj/structure/bed{ + dir = 8; + icon_state = "dirty_mattress" + }, +/obj/item/bedsheet/dorms, +/turf/open/floor/wood, +/area/ruin/rockplanet/distillery/crew) +"kn" = ( +/obj/effect/turf_decal/trimline/opaque/neutral/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 4 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"kq" = ( +/obj/effect/turf_decal/industrial/traffic, +/obj/effect/turf_decal/industrial/traffic{ + dir = 1 + }, +/obj/machinery/light/dim/directional/south, +/turf/open/floor/pod/rockplanet, +/area/ruin/rockplanet/distillery/crew) +"ky" = ( +/obj/structure/flora/ausbushes/sparsegrass/hell{ + name = "dead grass"; + desc = "A sparse patch of grass without color."; + light_range = 0; + light_power = 1 + }, +/turf/open/floor/plating/asteroid/rockplanet/wet/cracked/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"kC" = ( +/obj/structure/curtain/cloth/grey, +/obj/structure/bed{ + dir = 1 + }, +/turf/open/floor/wood, +/area/ruin/rockplanet/distillery/crew) +"kO" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 9 + }, +/obj/structure/table, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/machinery/airalarm/directional/north, +/obj/machinery/light/small/directional/west, +/obj/machinery/microwave{ + pixel_y = 6 + }, +/obj/item/trash/plate{ + pixel_y = 16 + }, +/obj/item/reagent_containers/food/snacks/donkpocket/warm/pizza{ + pixel_y = 18 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ruin/rockplanet/distillery/crew) +"kT" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white, +/obj/effect/turf_decal/trimline/opaque/neutral/filled/line{ + dir = 1 + }, +/obj/structure/railing{ + layer = 4.1 + }, +/turf/open/floor/plasteel/patterned/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"kU" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/machinery/light/dim/directional/north, +/obj/structure/chair/sofa/brown/old/directional/south, +/turf/open/floor/carpet, +/area/ruin/rockplanet/distillery/crew) +"kZ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery) +"lc" = ( +/obj/structure/flora/rock/pile/rockplanet, +/turf/open/floor/plating/asteroid/rockplanet/wet, +/area/overmap_encounter/planetoid/rockplanet/explored) +"lD" = ( +/turf/closed/wall/r_wall, +/area/overmap_encounter/planetoid/cave/explored) +"lE" = ( +/turf/closed/wall, +/area/ruin/rockplanet/distillery/crew) +"lK" = ( +/obj/structure/dresser, +/obj/effect/turf_decal/siding/wood/end{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/clothing/neck/stethoscope{ + pixel_y = 8 + }, +/obj/item/toy/plush/carpplushie{ + pixel_y = 8 + }, +/turf/open/floor/wood, +/area/ruin/rockplanet/distillery/office) +"lL" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/turretid/lethal{ + pixel_y = 24 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/ruin/rockplanet/distillery/office) +"lQ" = ( +/obj/structure/cable{ + icon_state = "4-9" + }, +/turf/open/floor/plating/rockplanet/lit{ + icon_state = "platingdmg3" + }, +/area/overmap_encounter/planetoid/rockplanet/explored) +"lS" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/neutral/filled/line{ + dir = 4 + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/plasteel/patterned/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"lU" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ruin/rockplanet/distillery/shuttle) +"me" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating/rockplanet/lit{ + icon_state = "panelscorched" + }, +/area/overmap_encounter/planetoid/rockplanet/explored) +"mk" = ( +/obj/machinery/door/airlock{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/turf/open/floor/pod, +/area/ruin/rockplanet/distillery/crew) +"mp" = ( +/obj/structure/cable/yellow{ + icon_state = "2-6" + }, +/turf/open/floor/plating/asteroid/rockplanet/cracked/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"mq" = ( +/obj/item/kirbyplants{ + icon_state = "plant-14"; + layer = 3.8 + }, +/obj/effect/decal/cleanable/glass, +/obj/item/broken_bottle{ + pixel_x = 8 + }, +/obj/item/shard{ + pixel_x = -4 + }, +/obj/item/pushbroom{ + pixel_y = -12; + pixel_x = 5; + layer = 3.9 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/machinery/light/small/broken/directional/west, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery) +"mv" = ( +/obj/structure/table/wood/reinforced, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/item/folder/red{ + pixel_x = -2; + pixel_y = 3 + }, +/obj/item/folder/yellow{ + pixel_y = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/carpet, +/area/ruin/rockplanet/distillery/office) +"mE" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 9 + }, +/obj/structure/railing{ + dir = 1; + layer = 2.7 + }, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"mF" = ( +/obj/effect/turf_decal/siding/white, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/oil/streak, +/turf/open/floor/pod/rockplanet, +/area/ruin/rockplanet/distillery/shuttle) +"mK" = ( +/turf/open/floor/plasteel/stairs/wood{ + color = "#5B3E1D" + }, +/area/ruin/rockplanet/distillery/saloon) +"mX" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery) +"mY" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/neutral/filled/corner{ + dir = 4 + }, +/obj/structure/railing{ + layer = 4.1 + }, +/turf/open/floor/plasteel/patterned/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"ne" = ( +/obj/structure/table, +/obj/item/stack/cable_coil/yellow, +/obj/item/stack/cable_coil/red{ + pixel_y = 3 + }, +/obj/item/stock_parts/manipulator{ + pixel_y = 5; + pixel_x = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 8 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ruin/rockplanet/distillery/engineering) +"nf" = ( +/obj/item/stack/ore/salvage/scrapmetal/five, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ + dir = 8 + }, +/obj/machinery/button/door{ + dir = 4; + pixel_y = 6; + pixel_x = -22; + name = "Window Shutter"; + id = "engi_window" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/binary/volume_pump/on/layer2{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ruin/rockplanet/distillery/engineering) +"ng" = ( +/obj/effect/turf_decal/industrial/loading, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 8 + }, +/turf/open/floor/plasteel/patterned/rockplanet, +/area/ruin/rockplanet/distillery/crew) +"nm" = ( +/obj/machinery/door/airlock{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/turf/open/floor/pod, +/area/ruin/rockplanet/distillery/crew) +"nr" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/wood, +/area/ruin/rockplanet/distillery/crew) +"nA" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/carpet, +/area/ruin/rockplanet/distillery/crew) +"nR" = ( +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"nT" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/neutral/filled/line{ + dir = 8 + }, +/turf/open/floor/plasteel/patterned/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"nU" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/neutral/filled/corner{ + dir = 8 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"nX" = ( +/obj/effect/turf_decal/industrial/outline/red, +/obj/structure/closet/crate/medical, +/obj/item/storage/firstaid/regular, +/obj/item/reagent_containers/glass/bottle/bicaridine{ + pixel_x = -6 + }, +/obj/item/reagent_containers/syringe, +/obj/item/reagent_containers/glass/bottle/bicaridine{ + pixel_x = 6 + }, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/crew) +"nY" = ( +/obj/structure/fermenting_barrel, +/obj/effect/decal/cleanable/wrapping, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery) +"oh" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"om" = ( +/obj/structure/catwalk/over, +/obj/structure/closet/crate/hydroponics, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_y = 8; + pixel_x = -8 + }, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_y = 8; + pixel_x = -8 + }, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_y = 8 + }, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_y = 8 + }, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_y = 8 + }, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_x = -8 + }, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_x = -8 + }, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_x = 8 + }, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_x = 8 + }, +/turf/open/floor/plating/rockplanet/lit, +/area/ruin/rockplanet/distillery) +"oq" = ( +/obj/structure/flora/ash/garden/waste, +/turf/open/floor/plating/asteroid/rockplanet/wet/cracked/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"oD" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"oO" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/item/mine/pressure/explosive/live{ + layer = 2.8 + }, +/turf/open/floor/plating/asteroid/rockplanet/cracked/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"oU" = ( +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white/corner{ + dir = 8 + }, +/obj/effect/turf_decal/siding/white/corner{ + dir = 1 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"oY" = ( +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/structure/frame, +/obj/item/circuitboard/machine/shuttle/engine/electric, +/obj/item/stack/cable_coil/cut/red, +/obj/item/stock_parts/capacitor, +/turf/open/floor/engine/hull/reinforced, +/area/ruin/rockplanet/distillery/shuttle) +"pa" = ( +/obj/structure/reagent_dispensers/water_cooler{ + pixel_x = -4 + }, +/obj/effect/turf_decal/siding/wood/end{ + dir = 8 + }, +/turf/open/floor/wood/rockplanet{ + icon_state = "wood-broken7" + }, +/area/ruin/rockplanet/distillery/saloon) +"pm" = ( +/obj/structure/barricade/sandbags, +/obj/effect/turf_decal/sand/plating, +/obj/structure/cable/yellow{ + icon_state = "2-9" + }, +/turf/open/floor/plating/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"pD" = ( +/obj/structure/fermenting_barrel/distiller{ + pixel_y = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/paper/crumpled/muddy/fluff/distillery{ + name = "note"; + default_raw_text = "Scored this from an SRM ship passing through the sector. Handy if anything happens to our current still." + }, +/turf/open/floor/plating/rockplanet/lit{ + icon_state = "panelscorched" + }, +/area/ruin/rockplanet/distillery) +"pL" = ( +/obj/effect/turf_decal/siding/white/end{ + dir = 1 + }, +/obj/structure/toilet, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/directional/west, +/mob/living/simple_animal/hostile/human/frontier, +/turf/open/floor/pod, +/area/ruin/rockplanet/distillery/crew) +"pM" = ( +/obj/structure/girder/displaced, +/obj/structure/cable/yellow{ + icon_state = "4-5" + }, +/obj/item/stack/ore/salvage/scrapmetal, +/turf/open/floor/plating/rust, +/area/overmap_encounter/planetoid/rockplanet/explored) +"pQ" = ( +/obj/structure/table/wood/reinforced, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/item/stamp{ + pixel_y = 16; + pixel_x = 5 + }, +/obj/item/stamp/denied{ + pixel_y = 16; + pixel_x = -5 + }, +/obj/item/kirbyplants{ + icon_state = "plant-11"; + pixel_y = 10 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/carpet, +/area/ruin/rockplanet/distillery/office) +"qe" = ( +/obj/structure/reagent_dispensers/water_cooler{ + pixel_y = 6; + pixel_x = 6 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/turf/open/floor/wood/rockplanet{ + icon_state = "wood-broken7" + }, +/area/ruin/rockplanet/distillery) +"qj" = ( +/obj/structure/flora/ash/stem_shroom, +/turf/open/floor/plating/asteroid/rockplanet/wet/cracked/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"ql" = ( +/obj/effect/turf_decal/industrial/loading{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned, +/area/ruin/rockplanet/distillery/office) +"qm" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "pod_window" + }, +/obj/machinery/power/terminal{ + dir = 8 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ruin/rockplanet/distillery/shuttle) +"qo" = ( +/obj/structure/curtain/cloth/grey, +/obj/structure/bed{ + dir = 8; + icon_state = "dirty_mattress" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/wood, +/area/ruin/rockplanet/distillery/crew) +"qu" = ( +/obj/effect/turf_decal/ntlogo{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 9 + }, +/obj/effect/decal/cleanable/vomit/old, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery) +"qw" = ( +/obj/structure/flora/tree/cactus, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"qQ" = ( +/turf/open/floor/plating/asteroid/rockplanet/wet/cracked/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"qX" = ( +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/door/airlock/grunge, +/turf/open/floor/pod/rockplanet, +/area/ruin/rockplanet/distillery/crew) +"qY" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood{ + icon_state = "wood-broken6" + }, +/area/ruin/rockplanet/distillery/office) +"re" = ( +/obj/structure/flora/ausbushes/sunnybush{ + layer = 3 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"rh" = ( +/obj/structure/flora/tree/dead/tall, +/turf/open/floor/plating/asteroid/rockplanet/cracked/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"rs" = ( +/obj/effect/turf_decal/trimline/opaque/neutral/filled/line, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 1 + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned/ridged/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"rF" = ( +/obj/structure/catwalk/over, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/chair/sofa/brown/old/corner, +/turf/open/floor/plating/rust/rockplanet/lit, +/area/ruin/rockplanet/distillery/saloon) +"rH" = ( +/turf/closed/wall, +/area/ruin/rockplanet/distillery) +"rJ" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 4 + }, +/obj/item/ammo_casing/spent{ + pixel_x = 12; + pixel_y = 6 + }, +/obj/item/ammo_casing/spent{ + pixel_x = 14 + }, +/obj/machinery/light/small/broken/directional/east, +/obj/structure/chair/sofa/brown/old/directional/west, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"rT" = ( +/obj/effect/turf_decal/industrial/traffic, +/obj/effect/turf_decal/industrial/traffic{ + dir = 1 + }, +/turf/open/floor/pod/rockplanet, +/area/ruin/rockplanet/distillery/crew) +"rW" = ( +/obj/item/mine/pressure/explosive/live{ + layer = 2.8 + }, +/turf/open/floor/plating/asteroid/rockplanet/cracked/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"sb" = ( +/obj/machinery/vending/cola/space_up, +/obj/effect/decal/cleanable/wrapping, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery) +"si" = ( +/obj/structure/table/wood/poker, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 5 + }, +/obj/item/spacecash/bundle/c10, +/obj/item/spacecash/bundle/c1{ + pixel_x = 8; + pixel_y = 4 + }, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"sm" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4; + filter_types = list("co2","bz","water_vapor","miasma","freon","pluox","tritium","n20","no2","nob"); + widenet = 1 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ruin/rockplanet/distillery/crew) +"sx" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-9" + }, +/turf/open/floor/wood, +/area/ruin/rockplanet/distillery/crew) +"sy" = ( +/obj/structure/chair/stool/bar{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/rockplanet{ + icon_state = "wood-broken6" + }, +/area/ruin/rockplanet/distillery/saloon) +"sE" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/item/kirbyplants{ + icon_state = "plant-20"; + pixel_y = 8 + }, +/turf/open/floor/wood/rockplanet{ + icon_state = "wood-broken2" + }, +/area/ruin/rockplanet/distillery/saloon) +"sQ" = ( +/obj/effect/turf_decal/industrial/outline/red, +/obj/structure/closet/crate/freezer, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/crew) +"tc" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"te" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/carpet, +/area/ruin/rockplanet/distillery/office) +"to" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table/glass, +/obj/item/lighter/greyscale{ + pixel_x = 7; + pixel_y = -1 + }, +/obj/item/reagent_containers/glass/beaker{ + pixel_x = -5; + list_reagents = list(/datum/reagent/oxygen = 50) + }, +/obj/item/reagent_containers/glass/beaker{ + pixel_y = 12; + list_reagents = list(/datum/reagent/carbon = 50) + }, +/obj/item/reagent_containers/syringe{ + pixel_y = 6 + }, +/turf/open/floor/plating/rust/rockplanet/lit, +/area/ruin/rockplanet/distillery) +"tw" = ( +/obj/effect/decal/cleanable/garbage, +/obj/effect/decal/cleanable/generic, +/turf/open/floor/plating/asteroid/rockplanet/wet/cracked/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"tx" = ( +/obj/effect/turf_decal/trimline/opaque/neutral/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white/corner{ + dir = 1 + }, +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"tA" = ( +/obj/effect/turf_decal/siding/white/end{ + dir = 8 + }, +/obj/item/storage/bottles{ + icon_state = "bottlecrate_0" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/pod/rockplanet, +/area/ruin/rockplanet/distillery) +"tB" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table, +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ + pixel_y = 12; + pixel_x = 10 + }, +/obj/item/newspaper{ + pixel_x = -4; + pixel_y = 2 + }, +/turf/open/floor/carpet, +/area/ruin/rockplanet/distillery/crew) +"tP" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/on/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ruin/rockplanet/distillery/crew) +"tQ" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/rockplanet{ + icon_state = "wood-broken" + }, +/area/ruin/rockplanet/distillery/saloon) +"uf" = ( +/obj/effect/turf_decal/trimline/opaque/neutral/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 8 + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/plasteel/patterned/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"uk" = ( +/obj/structure/barricade/sandbags, +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"ut" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/directional/west, +/turf/open/floor/carpet, +/area/ruin/rockplanet/distillery/office) +"uv" = ( +/obj/effect/turf_decal/industrial/traffic{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/traffic{ + dir = 8 + }, +/obj/machinery/door/poddoor/preopen{ + dir = 4; + id = "pod_fore" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/engine/hull/reinforced/interior, +/area/ruin/rockplanet/distillery/shuttle) +"uw" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/wood/rockplanet{ + icon_state = "wood-broken5" + }, +/area/ruin/rockplanet/distillery) +"uy" = ( +/obj/machinery/shower{ + pixel_y = 12 + }, +/obj/structure/catwalk/over, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/machinery/door/window/southleft, +/turf/open/floor/plating, +/area/ruin/rockplanet/distillery/crew) +"uE" = ( +/obj/structure/flora/ash/garden/arid, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"uG" = ( +/turf/open/floor/plating/rockplanet/lit{ + icon_state = "panelscorched" + }, +/area/overmap_encounter/planetoid/rockplanet/explored) +"uL" = ( +/turf/closed/wall/r_wall, +/area/ruin/rockplanet/distillery/engineering) +"uP" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 9 + }, +/obj/effect/decal/cleanable/vomit/old, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"uS" = ( +/obj/machinery/power/smes/engineering, +/obj/effect/turf_decal/siding/white/end{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/pod, +/area/ruin/rockplanet/distillery/engineering) +"uU" = ( +/obj/effect/turf_decal/ntlogo, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery) +"uX" = ( +/turf/closed/wall/rust, +/area/overmap_encounter/planetoid/rockplanet/explored) +"vf" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = "dist_cargo" + }, +/turf/open/floor/pod/rockplanet, +/area/ruin/rockplanet/distillery) +"vo" = ( +/obj/effect/turf_decal/industrial/traffic{ + dir = 1 + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor, +/obj/machinery/door/window/brigdoor/southleft{ + req_one_access_txt = "10" + }, +/obj/structure/closet/wall/red/directional/west{ + secure = 1; + locked = 1 + }, +/obj/item/storage/toolbox/emergency/shuttle/electric, +/obj/item/ammo_box/a44roum_speedloader, +/obj/item/gun/ballistic/revolver/shadow, +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/shuttle) +"vC" = ( +/obj/effect/turf_decal/trimline/opaque/neutral/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white/corner{ + dir = 4 + }, +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"vD" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/fluff/glowshroom, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery) +"vF" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/table/glass, +/obj/item/seeds/corn{ + pixel_y = 6; + pixel_x = -2 + }, +/obj/item/seeds/corn{ + pixel_y = 6 + }, +/obj/item/reagent_containers/food/snacks/grown/corn{ + pixel_y = 6 + }, +/obj/item/reagent_containers/food/snacks/grown/corn{ + pixel_y = -2; + pixel_x = 3 + }, +/obj/item/reagent_containers/food/snacks/grown/corn{ + pixel_y = 3; + pixel_x = 4 + }, +/turf/open/floor/plating/rockplanet/lit{ + icon_state = "panelscorched" + }, +/area/ruin/rockplanet/distillery) +"vX" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/structure/filingcabinet/double/grey, +/obj/machinery/light/dim/directional/north, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/folder/yellow, +/obj/item/folder/documents, +/obj/item/folder/red, +/turf/open/floor/wood, +/area/ruin/rockplanet/distillery/office) +"wb" = ( +/obj/structure/railing{ + layer = 4.1 + }, +/obj/structure/sign/warning/gasmask{ + pixel_y = -32 + }, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/overmap_encounter/planetoid/rockplanet/explored) +"wd" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/opaque/neutral/filled/corner{ + dir = 1 + }, +/obj/structure/railing{ + dir = 6 + }, +/turf/open/floor/plasteel/patterned/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"wk" = ( +/obj/effect/turf_decal/trimline/opaque/neutral/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 8 + }, +/turf/open/floor/plasteel/patterned/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"ws" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating/rust/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"wx" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/table/wood/reinforced, +/obj/item/paper_bin, +/obj/item/pen/fountain, +/turf/open/floor/wood, +/area/ruin/rockplanet/distillery/office) +"wy" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating/rust/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"wz" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/neutral/filled/line, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"wB" = ( +/obj/structure/flora/rock/rockplanet{ + icon_state = "redrock3" + }, +/turf/open/floor/plating/asteroid/rockplanet/cracked/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"wH" = ( +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/poddoor/shutters{ + id = "engi_window" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer2{ + dir = 1 + }, +/obj/structure/grille, +/turf/open/floor/plating, +/area/ruin/rockplanet/distillery/engineering) +"wT" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/pod/rockplanet, +/area/ruin/rockplanet/distillery) +"wU" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/neutral/filled/line, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plasteel/patterned/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"wV" = ( +/obj/structure/catwalk/over, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plating/rust, +/area/ruin/rockplanet/distillery/engineering) +"wX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery) +"xc" = ( +/obj/structure/table/wood/reinforced, +/obj/item/paper_bin{ + pixel_y = 8; + pixel_x = -4 + }, +/obj/item/pen{ + pixel_y = 8; + pixel_x = -4 + }, +/obj/item/hand_labeler{ + pixel_y = -4 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ + pixel_y = 12; + pixel_x = 8 + }, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery) +"xf" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/item/wrench, +/obj/item/wirecutters, +/obj/machinery/cell_charger, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer2{ + dir = 9 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ruin/rockplanet/distillery/engineering) +"xs" = ( +/obj/machinery/door/airlock{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/pod/rockplanet, +/area/ruin/rockplanet/distillery) +"xA" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/catwalk/over, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-6" + }, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/ruin/rockplanet/distillery/crew) +"xM" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"xN" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/sign/poster/retro/smile{ + pixel_y = 32 + }, +/obj/effect/decal/cleanable/dirt/dust, +/mob/living/simple_animal/hostile/netherworld/migo{ + name = "Dog"; + faction = list("Frontiersmen") + }, +/obj/structure/bed/dogbed, +/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/wood, +/area/ruin/rockplanet/distillery/crew) +"xO" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/machinery/airalarm/directional/west, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/turf/open/floor/wood, +/area/ruin/rockplanet/distillery/office) +"xT" = ( +/turf/closed/wall, +/area/ruin/rockplanet/distillery/engineering) +"yf" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/rack, +/obj/item/reagent_containers/condiment/sugar{ + pixel_y = 13; + pixel_x = -2; + layer = 2.8 + }, +/obj/item/reagent_containers/condiment/sugar{ + pixel_y = 7; + pixel_x = -2; + layer = 2.8 + }, +/obj/item/wrench{ + pixel_y = 4 + }, +/obj/item/screwdriver, +/turf/open/floor/plating/rust/rockplanet/lit, +/area/ruin/rockplanet/distillery) +"yr" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/turf/open/floor/plating/asteroid/rockplanet/cracked/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"yw" = ( +/obj/structure/cable{ + icon_state = "1-10" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"yI" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/hydroponics/constructable, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery) +"yL" = ( +/obj/structure/closet/crate/bin, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/spawner/lootdrop/maintenance/two, +/turf/open/floor/pod, +/area/ruin/rockplanet/distillery/office) +"yO" = ( +/obj/effect/turf_decal/siding/white{ + dir = 9 + }, +/obj/effect/turf_decal/siding/white/corner, +/obj/structure/sink{ + pixel_y = 16 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/insectguts, +/turf/open/floor/pod, +/area/ruin/rockplanet/distillery/crew) +"yS" = ( +/turf/closed/wall/r_wall/rust, +/area/ruin/rockplanet/distillery/crew) +"yW" = ( +/obj/effect/turf_decal/industrial/outline/red, +/obj/structure/guncloset, +/obj/item/gun/ballistic/automatic/pistol/commander/no_mag, +/turf/open/floor/plasteel/patterned/brushed, +/area/ruin/rockplanet/distillery/office) +"ze" = ( +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating/rockplanet/lit{ + icon_state = "foam_plating" + }, +/area/ruin/rockplanet/distillery) +"zk" = ( +/obj/structure/window/reinforced/fulltile, +/obj/structure/grille, +/turf/open/floor/plating, +/area/ruin/rockplanet/distillery/crew) +"zn" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/obj/machinery/light/broken/directional/south, +/turf/open/floor/plasteel/patterned/brushed, +/area/ruin/rockplanet/distillery/crew) +"zw" = ( +/obj/machinery/autolathe, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer2{ + dir = 5 + }, +/turf/open/floor/pod, +/area/ruin/rockplanet/distillery/engineering) +"zx" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 6 + }, +/turf/open/floor/wood, +/area/ruin/rockplanet/distillery/crew) +"zy" = ( +/obj/structure/catwalk/over, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plating/rust, +/area/ruin/rockplanet/distillery/crew) +"zJ" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 10 + }, +/obj/structure/reagent_dispensers/fueltank, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/layer_manifold/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ruin/rockplanet/distillery/engineering) +"zX" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = "dist_cargo" + }, +/turf/open/floor/pod/rockplanet, +/area/ruin/rockplanet/distillery) +"zZ" = ( +/obj/structure/girder, +/obj/item/stack/ore/salvage/scrapmetal, +/turf/open/floor/plating/rust, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Ag" = ( +/obj/effect/turf_decal/siding/white/end, +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small/directional/west, +/turf/open/floor/pod/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"Ai" = ( +/obj/structure/grille, +/obj/structure/cable/yellow, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "pod_window" + }, +/obj/machinery/power/terminal{ + dir = 8 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ruin/rockplanet/distillery/shuttle) +"Am" = ( +/obj/machinery/door/airlock/grunge{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/turf/open/floor/pod, +/area/ruin/rockplanet/distillery/office) +"At" = ( +/obj/structure/cable/yellow{ + icon_state = "1-6" + }, +/obj/structure/cable/yellow{ + icon_state = "1-5" + }, +/turf/open/floor/plating/asteroid/rockplanet/cracked/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Aw" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plating/rockplanet/lit{ + icon_state = "platingdmg1" + }, +/area/ruin/rockplanet/distillery) +"AC" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating/rockplanet/lit{ + icon_state = "platingdmg1" + }, +/area/overmap_encounter/planetoid/rockplanet/explored) +"AE" = ( +/obj/machinery/door/airlock/engineering, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/warning, +/turf/open/floor/pod, +/area/ruin/rockplanet/distillery/engineering) +"AI" = ( +/obj/structure/cable/yellow{ + icon_state = "1-10" + }, +/turf/open/floor/plating/asteroid/rockplanet/cracked/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"AJ" = ( +/obj/structure/table/wood/reinforced, +/obj/machinery/chem_dispenser/drinks{ + dir = 8 + }, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"AV" = ( +/obj/machinery/atmospherics/components/unary/passive_vent/layer2, +/obj/structure/railing{ + layer = 4.1 + }, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/overmap_encounter/planetoid/rockplanet/explored) +"AY" = ( +/obj/item/stack/ore/salvage/scrapgold/five{ + pixel_x = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/catwalk/over, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/ruin/rockplanet/distillery/engineering) +"Be" = ( +/obj/structure/railing{ + layer = 4.1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/sign/poster/retro/nanotrasen_logo_80s{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/stairs{ + dir = 4 + }, +/area/ruin/rockplanet/distillery) +"Bk" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/opaque/neutral/filled/corner{ + dir = 2 + }, +/turf/open/floor/plasteel/patterned/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Bn" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Bq" = ( +/obj/item/chair/stool/bar{ + pixel_y = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"Bs" = ( +/obj/structure/barricade/sandbags, +/turf/open/floor/plating/asteroid/rockplanet/cracked/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Bx" = ( +/obj/structure/flora/ash/cap_shroom, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"BD" = ( +/obj/effect/turf_decal/siding/white, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/wrapping, +/obj/item/storage/bottles/moonshine, +/turf/open/floor/pod/rockplanet, +/area/ruin/rockplanet/distillery/shuttle) +"BJ" = ( +/obj/machinery/door/airlock{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/pod/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"BO" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"BT" = ( +/obj/effect/turf_decal/siding/wood, +/obj/structure/sign/poster/retro/radio{ + pixel_y = -32 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 1; + filter_types = list("co2","bz","water_vapor","miasma","freon","pluox","tritium","n20","no2","nob"); + widenet = 1 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken4" + }, +/area/ruin/rockplanet/distillery/crew) +"Ch" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/table/glass, +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ + pixel_y = 12; + pixel_x = 8 + }, +/obj/item/clipboard{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/item/paper{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/item/pen, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery) +"Cn" = ( +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating/rockplanet/lit{ + icon_state = "foam_plating" + }, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Cp" = ( +/turf/closed/wall/r_wall/rust, +/area/overmap_encounter/planetoid/cave/explored) +"Cr" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/mob/living/simple_animal/hostile/human/frontier/internals, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery) +"Cz" = ( +/obj/effect/turf_decal/trimline/opaque/neutral/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"CA" = ( +/obj/machinery/door/airlock/grunge, +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/turf/open/floor/pod, +/area/ruin/rockplanet/distillery/office) +"CL" = ( +/obj/structure/fluff/glowshroom, +/obj/machinery/button/door{ + pixel_y = 26; + name = "Cargo Door"; + id = "dist_cargo" + }, +/turf/open/floor/plating/rockplanet/lit, +/area/ruin/rockplanet/distillery) +"CM" = ( +/obj/machinery/door/airlock/grunge, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/warning, +/turf/open/floor/pod/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"CN" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating/rockplanet/lit{ + icon_state = "foam_plating" + }, +/area/overmap_encounter/planetoid/rockplanet/explored) +"CQ" = ( +/obj/structure/table/wood/poker, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 6 + }, +/obj/item/spacecash/bundle/c1{ + pixel_x = 8; + pixel_y = 4 + }, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"CR" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating/rockplanet/lit{ + icon_state = "platingdmg1" + }, +/area/overmap_encounter/planetoid/rockplanet/explored) +"CS" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery) +"CW" = ( +/obj/machinery/fax/admin/frontiersmen, +/obj/structure/table/wood/reinforced, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/patterned/brushed, +/area/ruin/rockplanet/distillery/office) +"Dk" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery) +"Dw" = ( +/obj/effect/turf_decal/sand/plating, +/turf/open/floor/plating/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"DE" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/closed/wall/rust, +/area/overmap_encounter/planetoid/rockplanet/explored) +"DW" = ( +/obj/effect/turf_decal/siding/white/end{ + dir = 4 + }, +/obj/structure/toilet{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/directional/north, +/turf/open/floor/pod, +/area/ruin/rockplanet/distillery/crew) +"DX" = ( +/obj/structure/cable{ + icon_state = "0-1" + }, +/obj/structure/cable/yellow{ + icon_state = "1-10" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Ef" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/item/kirbyplants{ + icon_state = "plant-21" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/ruin/rockplanet/distillery/crew) +"Ei" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/structure/fluff/glowshroom, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"Ej" = ( +/obj/structure/table/wood/reinforced, +/obj/structure/railing{ + dir = 1; + layer = 2.7 + }, +/obj/item/reagent_containers/food/drinks/beer{ + pixel_y = 8; + pixel_x = 4 + }, +/obj/item/reagent_containers/food/drinks/mug/coco{ + pixel_x = -6; + pixel_y = 8 + }, +/obj/item/spacecash/bundle/c1{ + pixel_x = -4 + }, +/obj/item/spacecash/bundle/c10{ + pixel_y = -2 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 5 + }, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"Ex" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating/rockplanet/lit{ + icon_state = "panelscorched" + }, +/area/overmap_encounter/planetoid/rockplanet/explored) +"EF" = ( +/obj/structure/chair/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/mob/living/simple_animal/hostile/human/frontier/internals, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"EI" = ( +/obj/effect/turf_decal/ntlogo{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 6 + }, +/obj/effect/decal/cleanable/crayon{ + icon_state = "skull"; + pixel_x = -16; + color = "#FF7742" + }, +/obj/effect/decal/cleanable/garbage, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/patterned/brushed, +/area/ruin/rockplanet/distillery/crew) +"Fk" = ( +/obj/machinery/light/floor, +/turf/open/floor/plating/rust/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Fm" = ( +/obj/effect/turf_decal/trimline/opaque/neutral/filled/line, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 1 + }, +/obj/machinery/light/small/directional/east, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned/ridged/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Fn" = ( +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Fs" = ( +/obj/structure/flora/rock/rockplanet{ + icon_state = "redrock2" + }, +/turf/open/floor/plating/asteroid/rockplanet/cracked/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Ft" = ( +/obj/effect/turf_decal/industrial/outline/red, +/obj/structure/salvageable/machine, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery) +"FA" = ( +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/carpet, +/area/ruin/rockplanet/distillery/office) +"FB" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/neutral/filled/line{ + dir = 5 + }, +/obj/structure/railing/corner{ + dir = 8; + layer = 4.1 + }, +/turf/open/floor/plasteel/patterned/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"FD" = ( +/obj/effect/turf_decal/siding/wood/end{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/power/apc/auto_name/directional/east, +/turf/open/floor/wood/rockplanet{ + icon_state = "wood-broken7" + }, +/area/ruin/rockplanet/distillery/saloon) +"FI" = ( +/obj/structure/table/wood/reinforced, +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ + pixel_y = 12; + pixel_x = 8 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ + pixel_y = 14; + pixel_x = -4 + }, +/obj/item/newspaper{ + pixel_x = -4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 8 + }, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"Gb" = ( +/obj/structure/chair/stool/bar{ + dir = 4; + pixel_x = 6 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"Gc" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ruin/rockplanet/distillery/crew) +"Gd" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/turf/open/floor/wood, +/area/ruin/rockplanet/distillery/crew) +"Gg" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 9 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ruin/rockplanet/distillery/crew) +"Go" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ + dir = 1 + }, +/turf/open/floor/wood, +/area/ruin/rockplanet/distillery/crew) +"GE" = ( +/obj/effect/turf_decal/industrial/traffic{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/traffic{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/light/small/directional/east, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 9 + }, +/turf/open/floor/pod, +/area/ruin/rockplanet/distillery/crew) +"GH" = ( +/obj/structure/catwalk/over, +/obj/structure/closet/crate/hydroponics, +/obj/item/reagent_containers/food/snacks/grown/corn, +/obj/item/reagent_containers/food/snacks/grown/corn, +/obj/item/reagent_containers/food/snacks/grown/corn{ + pixel_y = 2 + }, +/obj/item/reagent_containers/food/snacks/grown/corn{ + pixel_y = 2 + }, +/obj/item/seeds/corn, +/obj/item/seeds/corn, +/obj/item/seeds/corn, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_x = -8 + }, +/obj/item/reagent_containers/condiment/enzyme, +/obj/item/reagent_containers/food/snacks/grown/corn{ + pixel_y = 4 + }, +/obj/item/reagent_containers/food/snacks/grown/corn{ + pixel_y = 4 + }, +/turf/open/floor/plating/rockplanet/lit, +/area/ruin/rockplanet/distillery) +"Hf" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4; + layer = 3.3 + }, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/traffic, +/obj/machinery/button/door{ + dir = 4; + pixel_y = -6; + pixel_x = -22; + name = "Aft Door"; + id = "pod_aft" + }, +/obj/machinery/button/door{ + dir = 4; + pixel_x = -32; + name = "Window Shutters"; + id = "pod_window" + }, +/obj/machinery/door/window/brigdoor/northleft{ + req_one_access_txt = "10" + }, +/obj/machinery/button/door{ + dir = 4; + pixel_y = 6; + pixel_x = -22; + name = "Fore Door"; + id = "pod_fore" + }, +/obj/effect/decal/cleanable/oil, +/mob/living/simple_animal/hostile/human/frontier/ranged/internals, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/shuttle) +"Hg" = ( +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/poddoor/shutters, +/obj/structure/grille, +/turf/open/floor/plating/rockplanet/lit, +/area/ruin/rockplanet/distillery) +"Hi" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"Hu" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/item/mine/pressure/explosive/rusty/live{ + layer = 2.8 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Hv" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plating/rust/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"HB" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"HM" = ( +/obj/structure/table, +/obj/item/reagent_scanner{ + pixel_y = 18 + }, +/obj/item/reagent_containers/glass/bucket{ + pixel_x = 3; + pixel_y = 8 + }, +/obj/item/reagent_containers/glass/bucket{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery) +"HO" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"HT" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/rockplanet{ + icon_state = "wood-broken4" + }, +/area/ruin/rockplanet/distillery/saloon) +"Ig" = ( +/obj/structure/cable{ + icon_state = "1-6" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Ir" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/rockplanet{ + icon_state = "wood-broken7" + }, +/area/ruin/rockplanet/distillery/saloon) +"Iz" = ( +/obj/structure/closet/crate, +/obj/effect/turf_decal/industrial/outline/red, +/obj/effect/spawner/lootdrop/random_computer_circuit_common, +/obj/effect/spawner/lootdrop/maintenance/four, +/obj/effect/spawner/lootdrop/random_machine_circuit_common, +/obj/effect/spawner/lootdrop/random_machine_circuit_common, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/crew) +"IA" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"IN" = ( +/obj/effect/turf_decal/trimline/opaque/neutral/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white/corner{ + dir = 1 + }, +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"IS" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"IZ" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/neutral/filled/line{ + dir = 8 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned/ridged/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Ja" = ( +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/structure/closet/crate/secure/weapon{ + name = "ammo crate" + }, +/obj/item/ammo_box/a357{ + pixel_x = -3 + }, +/obj/item/ammo_box/magazine/illestren_a850r, +/obj/item/ammo_box/c9mm/ap, +/obj/item/ammo_box/magazine/illestren_a850r, +/obj/item/ammo_box/magazine/co9mm{ + start_empty = 1 + }, +/obj/item/ammo_box/magazine/co9mm{ + start_empty = 1 + }, +/obj/item/ammo_box/a357{ + pixel_x = 3 + }, +/obj/machinery/button/door{ + name = "Armory Door Lock"; + pixel_y = -6; + pixel_x = -22; + normaldoorcontrol = 1; + specialfunctions = 4; + id = "frontier_armory"; + dir = 4 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ruin/rockplanet/distillery/office) +"Jc" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"Je" = ( +/obj/structure/railing{ + layer = 4.1 + }, +/turf/open/floor/plasteel/stairs{ + dir = 8 + }, +/area/ruin/rockplanet/distillery/saloon) +"JC" = ( +/obj/item/chair, +/obj/structure/railing{ + layer = 4.1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 10 + }, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"JD" = ( +/obj/structure/table/wood/reinforced, +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/reagent_containers/food/drinks/bottle/moonshine{ + pixel_x = -6; + pixel_y = 12 + }, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"JI" = ( +/obj/structure/barricade/sandbags, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"JN" = ( +/obj/structure/flora/driftlog{ + pixel_y = -15; + pixel_x = 9; + layer = 2.8 + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"JO" = ( +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"JP" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/neutral/filled/corner{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "5-8" + }, +/turf/open/floor/plasteel/patterned/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"JS" = ( +/obj/structure/table, +/obj/item/kirbyplants{ + icon_state = "plant-11"; + pixel_y = 6 + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/wood, +/area/ruin/rockplanet/distillery/crew) +"JZ" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/neutral/filled/line{ + dir = 8 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Ka" = ( +/obj/structure/reagent_dispensers/beerkeg{ + anchored = 1; + reagent_id = /datum/reagent/consumable/ethanol/moonshine; + name = "moonshine keg"; + desc = "A keg full of liver-shredding spirits brewed by amateur bootleggers."; + pixel_x = -8; + layer = 2.8 + }, +/obj/structure/reagent_dispensers/beerkeg{ + anchored = 1; + reagent_id = /datum/reagent/consumable/ethanol/moonshine; + name = "moonshine keg"; + desc = "A keg full of liver-shredding spirits brewed by amateur bootleggers."; + pixel_x = 8; + pixel_y = -2 + }, +/obj/structure/reagent_dispensers/beerkeg{ + anchored = 1; + reagent_id = /datum/reagent/consumable/ethanol/moonshine; + name = "moonshine keg"; + desc = "A keg full of liver-shredding spirits brewed by amateur bootleggers."; + pixel_x = -4; + pixel_y = 14; + layer = 3 + }, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"Kf" = ( +/obj/structure/table/wood/reinforced, +/obj/item/reagent_containers/food/drinks/bottle/whiskey{ + pixel_y = 12; + pixel_x = 6 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass{ + pixel_x = -8; + pixel_y = 2 + }, +/obj/item/cigbutt{ + pixel_y = 3 + }, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"Km" = ( +/obj/effect/turf_decal/siding/white, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/item/radio/intercom/directional/south, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/structure/cable/yellow{ + icon_state = "4-9" + }, +/obj/structure/cable/yellow{ + icon_state = "4-10" + }, +/turf/open/floor/pod/rockplanet, +/area/ruin/rockplanet/distillery/shuttle) +"Kt" = ( +/turf/open/floor/plating/asteroid/rockplanet/wet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Kx" = ( +/obj/structure/salvageable/machine, +/obj/effect/decal/cleanable/greenglow, +/turf/open/floor/plating/asteroid/rockplanet/wet, +/area/overmap_encounter/planetoid/rockplanet/explored) +"KA" = ( +/turf/closed/wall/r_wall, +/area/ruin/rockplanet/distillery/office) +"KF" = ( +/obj/structure/flora/ash/cacti, +/obj/machinery/light/directional/north, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"KV" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/neutral/filled/line{ + dir = 6 + }, +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Ld" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery) +"Lm" = ( +/obj/structure/bed, +/obj/item/bedsheet/brown, +/obj/effect/turf_decal/siding/wood/end{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/ruin/rockplanet/distillery/office) +"LB" = ( +/turf/open/floor/plating/rust/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"LD" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/fluff/glowshroom, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/light/dim/directional/north, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ruin/rockplanet/distillery/crew) +"LM" = ( +/obj/item/shard{ + pixel_x = 12 + }, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 9 + }, +/obj/structure/holosign/barrier/wetsign/infinite, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"LW" = ( +/obj/structure/flora/ash/garden/arid, +/turf/open/floor/plating/asteroid/rockplanet/wet/cracked/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Md" = ( +/obj/machinery/door/airlock/grunge{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/turf/open/floor/pod/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"Mf" = ( +/obj/effect/turf_decal/siding/white{ + dir = 9 + }, +/obj/effect/turf_decal/siding/white/corner, +/obj/structure/railing/corner{ + layer = 4.1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/pod/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"Mm" = ( +/obj/structure/flora/ausbushes/sunnybush{ + layer = 3 + }, +/obj/structure/flora/ausbushes/sparsegrass, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Mr" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/plastic, +/obj/machinery/hydroponics/constructable, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery) +"Mx" = ( +/obj/structure/cable{ + icon_state = "1-10" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating/rust/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"MA" = ( +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = "mudskipper_engine" + }, +/obj/structure/grille, +/turf/open/floor/plating/rockplanet/lit, +/area/ruin/rockplanet/distillery/saloon) +"MD" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/broken/directional/east, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"MS" = ( +/obj/structure/closet/crate/bin, +/obj/machinery/firealarm/directional/south{ + buildstage = 0 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/structure/cable/yellow{ + icon_state = "1-5" + }, +/obj/machinery/light/small/directional/west, +/obj/effect/spawner/lootdrop/maintenance/four, +/turf/open/floor/wood/rockplanet{ + icon_state = "wood-broken6" + }, +/area/ruin/rockplanet/distillery) +"Nj" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/secure_closet/freezer/wall/directional/east, +/obj/item/reagent_containers/food/snacks/chips, +/obj/item/food/butterdog, +/obj/item/reagent_containers/food/snacks/chips{ + pixel_x = 2 + }, +/obj/item/reagent_containers/food/drinks/bottle/rum{ + pixel_x = -6 + }, +/obj/item/reagent_containers/food/snacks/canned/beans, +/obj/item/spacecash/bundle/c500, +/obj/item/reagent_containers/food/drinks/bottle/whiskey{ + pixel_x = 8 + }, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"Nk" = ( +/obj/structure/window/reinforced/fulltile, +/obj/structure/grille, +/turf/open/floor/plating/rockplanet/lit, +/area/ruin/rockplanet/distillery) +"Nr" = ( +/turf/template_noop, +/area/template_noop) +"Ns" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/table, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/cigbutt, +/obj/item/cigbutt{ + pixel_y = 8; + pixel_x = 6 + }, +/obj/item/reagent_containers/food/drinks/bottle/moonshine{ + pixel_x = -6; + pixel_y = 6 + }, +/turf/open/floor/carpet, +/area/ruin/rockplanet/distillery/crew) +"Nx" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/holopad/emergency/bar, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"NC" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 1 + }, +/obj/effect/decal/cleanable/ash{ + pixel_x = -6 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/rifle/internals, +/turf/open/floor/plasteel/patterned/brushed, +/area/ruin/rockplanet/distillery/crew) +"NE" = ( +/obj/structure/flora/ausbushes/sparsegrass/hell{ + name = "dead grass"; + desc = "A sparse patch of grass without color."; + light_range = 0; + light_power = 1 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/plating/asteroid/rockplanet/wet/cracked/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"NM" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/computer/helm{ + dir = 8; + layer = 3.3; + name = "Locked Helm Console"; + desc = "No way you're getting this thing off the ground." + }, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/traffic, +/obj/structure/cable/yellow{ + icon_state = "1-6" + }, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/shuttle) +"NR" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/neutral/filled/line{ + dir = 4 + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/plasteel/patterned/ridged/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"NU" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-10" + }, +/turf/open/floor/wood{ + icon_state = "wood-broken2" + }, +/area/ruin/rockplanet/distillery/crew) +"Ob" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ruin/rockplanet/distillery/crew) +"Od" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/chair/sofa/brown/old/corner/directional/south, +/mob/living/simple_animal/hostile/human/frontier/ranged/internals/neutered, +/turf/open/floor/wood, +/area/ruin/rockplanet/distillery/crew) +"Oe" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "1-9" + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating/rockplanet/lit{ + icon_state = "panelscorched" + }, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Os" = ( +/obj/machinery/vending/snack/random{ + tilted = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white, +/turf/open/floor/plasteel/patterned/brushed, +/area/ruin/rockplanet/distillery/crew) +"Ow" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable/yellow{ + icon_state = "0-1" + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/pod/rockplanet, +/area/ruin/rockplanet/distillery) +"Oz" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/wood, +/area/ruin/rockplanet/distillery/office) +"OB" = ( +/obj/structure/catwalk/over, +/turf/open/floor/plating/rust/rockplanet/lit, +/area/ruin/rockplanet/distillery/saloon) +"OK" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 6 + }, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"OO" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 10 + }, +/obj/structure/chair/sofa/brown/old/left/directional/north, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"OV" = ( +/obj/structure/closet/secure_closet{ + icon_state = "armory"; + name = "armor locker" + }, +/obj/effect/turf_decal/industrial/outline/red, +/obj/item/clothing/suit/armor/vest, +/obj/item/clothing/suit/armor/vest, +/obj/item/clothing/suit/armor/vest, +/obj/item/clothing/head/helmet/swat/nanotrasen, +/obj/item/clothing/head/helmet/swat/nanotrasen, +/obj/item/clothing/suit/armor/frontier, +/obj/item/clothing/head/beret/sec/frontier, +/obj/item/clothing/gloves/combat, +/turf/open/floor/plasteel/patterned/brushed, +/area/ruin/rockplanet/distillery/office) +"Pl" = ( +/obj/effect/turf_decal/trimline/opaque/neutral/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "9-10" + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"PD" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 9 + }, +/obj/machinery/atmospherics/components/unary/tank/air, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer2{ + dir = 6 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ruin/rockplanet/distillery/engineering) +"PI" = ( +/obj/machinery/power/shuttle/engine/electric{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/open/floor/engine/hull/reinforced, +/area/ruin/rockplanet/distillery/shuttle) +"PL" = ( +/obj/effect/turf_decal/siding/white{ + dir = 10 + }, +/obj/effect/turf_decal/siding/white/corner{ + dir = 4 + }, +/obj/structure/sink{ + dir = 4; + pixel_x = -12; + pixel_y = 6 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/pod, +/area/ruin/rockplanet/distillery/crew) +"PP" = ( +/obj/effect/turf_decal/siding/white, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/rifle/internals/neutered, +/turf/open/floor/pod/rockplanet, +/area/ruin/rockplanet/distillery/shuttle) +"PV" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/opaque/neutral/filled/corner{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"PZ" = ( +/obj/structure/bed, +/obj/structure/curtain/cloth/grey, +/turf/open/floor/wood, +/area/ruin/rockplanet/distillery/crew) +"Qm" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white, +/obj/effect/turf_decal/trimline/opaque/neutral/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Qp" = ( +/obj/effect/decal/cleanable/dirt/dust, +/mob/living/simple_animal/hostile/human/frontier/ranged/internals, +/turf/open/floor/plating/rust/rockplanet/lit, +/area/ruin/rockplanet/distillery) +"Qr" = ( +/obj/structure/catwalk/over, +/obj/item/storage/bottles/moonshine{ + pixel_y = 6 + }, +/turf/open/floor/plating/rockplanet/lit{ + icon_state = "panelscorched" + }, +/area/ruin/rockplanet/distillery/saloon) +"QB" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/open/floor/pod/rockplanet, +/area/ruin/rockplanet/distillery) +"QP" = ( +/turf/closed/wall/r_wall/rust, +/area/ruin/rockplanet/distillery/engineering) +"Rd" = ( +/obj/structure/cable{ + icon_state = "5-8" + }, +/obj/structure/cable/yellow{ + icon_state = "5-10" + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating/rust/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Rn" = ( +/obj/structure/table/wood/reinforced, +/obj/structure/railing{ + layer = 4.1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 6 + }, +/obj/item/reagent_containers/food/drinks/bottle/moonshine{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ + pixel_y = 12; + pixel_x = 8 + }, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"Rp" = ( +/obj/effect/turf_decal/trimline/opaque/neutral/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white, +/obj/structure/cable/yellow{ + icon_state = "1-5" + }, +/obj/machinery/light/small/directional/west, +/obj/structure/railing{ + layer = 4.1 + }, +/turf/open/floor/plasteel/patterned/ridged/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Rr" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood, +/area/ruin/rockplanet/distillery/crew) +"Ru" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/turf/open/floor/plating/asteroid/rockplanet/cracked/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Rw" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ + dir = 1 + }, +/obj/item/trash/popcorn{ + pixel_y = 12; + pixel_x = 7 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ruin/rockplanet/distillery/crew) +"RB" = ( +/obj/effect/turf_decal/ntlogo{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 5 + }, +/obj/effect/decal/cleanable/crayon{ + icon_state = "k"; + pixel_x = -5; + color = "#0094FF" + }, +/obj/effect/decal/cleanable/crayon{ + icon_state = "u"; + pixel_x = -16; + color = "#0094FF" + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ruin/rockplanet/distillery/crew) +"RD" = ( +/obj/effect/turf_decal/industrial/traffic{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/traffic{ + dir = 8 + }, +/obj/machinery/door/poddoor{ + dir = 4; + id = "pod_aft" + }, +/turf/open/floor/engine/hull/reinforced/interior, +/area/ruin/rockplanet/distillery/shuttle) +"RM" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white/corner, +/obj/effect/turf_decal/trimline/opaque/neutral/filled/line{ + dir = 9 + }, +/obj/structure/railing/corner{ + layer = 4.1 + }, +/turf/open/floor/plasteel/patterned/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"RO" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"RR" = ( +/turf/closed/wall/r_wall, +/area/ruin/rockplanet/distillery/crew) +"Sk" = ( +/obj/effect/turf_decal/industrial/loading{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/paper/crumpled/muddy/fluff/distillery{ + pixel_y = -12 + }, +/turf/open/floor/pod/rockplanet, +/area/ruin/rockplanet/distillery) +"Sq" = ( +/obj/structure/closet/crate, +/obj/effect/turf_decal/industrial/outline/red, +/obj/item/reagent_containers/food/drinks/bottle/moonshine{ + list_reagents = null; + pixel_x = -6 + }, +/obj/item/reagent_containers/food/drinks/bottle/moonshine{ + list_reagents = null; + pixel_x = -6 + }, +/obj/item/reagent_containers/food/drinks/bottle/moonshine{ + list_reagents = null + }, +/obj/item/reagent_containers/food/drinks/bottle/moonshine{ + list_reagents = null + }, +/obj/item/reagent_containers/food/drinks/bottle/moonshine{ + list_reagents = null; + pixel_x = 6 + }, +/obj/item/reagent_containers/food/drinks/bottle/moonshine{ + list_reagents = null; + pixel_x = 6 + }, +/turf/open/floor/plating/rust/rockplanet/lit, +/area/ruin/rockplanet/distillery) +"Sr" = ( +/obj/effect/turf_decal/siding/wood/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/rockplanet{ + icon_state = "wood-broken" + }, +/area/ruin/rockplanet/distillery/saloon) +"Ss" = ( +/obj/structure/flora/driftlog{ + pixel_y = 2; + pixel_x = -6 + }, +/turf/open/floor/plating/asteroid/rockplanet/cracked/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Sx" = ( +/obj/structure/table/wood/reinforced, +/obj/item/reagent_containers/food/drinks/bottle/moonshine{ + pixel_y = 6; + pixel_x = 4 + }, +/obj/item/reagent_containers/food/drinks/bottle/moonshine{ + pixel_y = 2; + pixel_x = -6 + }, +/obj/item/reagent_containers/food/drinks/bottle/hooch{ + pixel_y = -4; + pixel_x = 7 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery) +"SF" = ( +/obj/structure/girder, +/obj/item/stack/ore/salvage/scrapmetal, +/obj/item/stack/ore/salvage/scrapmetal, +/turf/open/floor/plating/rust, +/area/ruin/rockplanet/distillery/office) +"SG" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating/rockplanet/lit{ + icon_state = "platingdmg2" + }, +/area/overmap_encounter/planetoid/rockplanet/explored) +"SV" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/photocopier, +/turf/open/floor/plasteel/patterned/brushed, +/area/ruin/rockplanet/distillery/office) +"Ta" = ( +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/rifle/internals, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Td" = ( +/obj/structure/table, +/obj/item/reagent_containers/glass/chem_jug{ + pixel_y = 4; + pixel_x = 5 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/item/reagent_containers/glass/filter{ + pixel_x = -9; + pixel_y = 2 + }, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery) +"Tl" = ( +/obj/structure/flora/rock/pile/rockplanet, +/turf/open/floor/plating/asteroid/rockplanet/cracked/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Tn" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/fluff/glowshroom, +/turf/open/floor/plating/rockplanet/lit{ + icon_state = "platingdmg1" + }, +/area/ruin/rockplanet/distillery) +"To" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/directional/east, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"Tp" = ( +/obj/effect/turf_decal/siding/wood, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"Tt" = ( +/obj/structure/catwalk/over, +/turf/open/floor/plating/rockplanet/lit, +/area/ruin/rockplanet/distillery) +"TB" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/wood{ + icon_state = "wood-broken" + }, +/area/ruin/rockplanet/distillery/crew) +"TG" = ( +/obj/machinery/door/airlock{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/turf/open/floor/pod, +/area/ruin/rockplanet/distillery/crew) +"TK" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"TR" = ( +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/item/storage/bottles/moonshine, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/crew) +"TW" = ( +/obj/structure/chair/wood{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/light/small/directional/west, +/mob/living/simple_animal/hostile/human/frontier/internals, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"Uo" = ( +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/door/airlock/external, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/pod, +/area/ruin/rockplanet/distillery/crew) +"Uw" = ( +/obj/structure/chair/wood{ + dir = 8; + pixel_x = -4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"Ux" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"Uy" = ( +/obj/structure/rack, +/obj/item/clothing/suit/armor/frontier, +/obj/item/clothing/head/fedora/det_hat{ + pixel_x = -4 + }, +/obj/item/clothing/head/beret/sec/frontier{ + pixel_x = 4 + }, +/obj/item/cigbutt{ + pixel_x = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"UA" = ( +/obj/structure/flora/rock/rockplanet{ + icon_state = "redrock2" + }, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"UI" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood{ + icon_state = "wood-broken6" + }, +/area/ruin/rockplanet/distillery/office) +"UJ" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/siding/wood, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery) +"UU" = ( +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery) +"Va" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/door/airlock/grunge{ + dir = 4; + id_tag = "frontier_armory"; + locked = 1; + security_level = 4 + }, +/turf/open/floor/pod/rockplanet, +/area/ruin/rockplanet/distillery/office) +"Vf" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/structure/fluff/glowshroom, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/crate/bin, +/obj/effect/spawner/lootdrop/maintenance/three, +/turf/open/floor/wood, +/area/ruin/rockplanet/distillery/crew) +"Vg" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 5 + }, +/obj/structure/closet/crate/bin, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ + filter_types = list("co2","bz","water_vapor","miasma","freon","pluox","tritium","n20","no2","nob"); + widenet = 1 + }, +/obj/machinery/light/small/broken/directional/east, +/obj/effect/spawner/lootdrop/maintenance/three, +/turf/open/floor/plasteel/patterned/brushed, +/area/ruin/rockplanet/distillery/crew) +"Vj" = ( +/obj/effect/turf_decal/ntlogo, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 10 + }, +/obj/effect/decal/cleanable/vomit/old{ + pixel_y = 12 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/patterned/brushed, +/area/ruin/rockplanet/distillery/crew) +"Vx" = ( +/obj/effect/turf_decal/trimline/opaque/neutral/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white, +/obj/structure/railing{ + layer = 4.1 + }, +/turf/open/floor/plasteel/patterned/ridged/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Vz" = ( +/obj/effect/turf_decal/siding/white, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/pod, +/area/ruin/rockplanet/distillery/crew) +"VG" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/machinery/light/directional/east, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"VJ" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/effect/turf_decal/siding/white, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/structure/sign/warning/electricshock{ + pixel_y = 28 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/pod, +/area/ruin/rockplanet/distillery/engineering) +"VM" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/patterned/brushed, +/area/ruin/rockplanet/distillery/engineering) +"VO" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/light/dim/directional/north, +/turf/open/floor/wood{ + icon_state = "wood-broken" + }, +/area/ruin/rockplanet/distillery/crew) +"VP" = ( +/obj/effect/turf_decal/trimline/opaque/neutral/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white/corner, +/obj/structure/railing/corner{ + layer = 4.1 + }, +/turf/open/floor/plasteel/patterned/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"VW" = ( +/turf/open/floor/pod/rockplanet, +/area/ruin/rockplanet/distillery) +"Wc" = ( +/turf/closed/wall, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Wg" = ( +/obj/structure/cable{ + icon_state = "5-8" + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating/rust/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Wj" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/structure/chair/office{ + dir = 8 + }, +/mob/living/simple_animal/hostile/human/frontier/ranged/mosin/internals/neutered, +/turf/open/floor/pod/rockplanet, +/area/ruin/rockplanet/distillery) +"Wm" = ( +/obj/structure/table/wood/poker, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 10 + }, +/obj/item/spacecash/bundle/c1{ + pixel_y = 8 + }, +/obj/item/spacecash/bundle/c100, +/obj/item/spacecash/bundle/c10{ + pixel_x = 4 + }, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"Wp" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/wood/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"Wu" = ( +/turf/closed/wall, +/area/ruin/rockplanet/distillery/saloon) +"WB" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/neutral/filled/line, +/turf/open/floor/plasteel/patterned/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"WE" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating/rust/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Xf" = ( +/obj/structure/cable/yellow{ + icon_state = "1-6" + }, +/turf/open/floor/plating/rockplanet/lit{ + icon_state = "platingdmg2" + }, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Xg" = ( +/turf/open/floor/plating/asteroid/rockplanet/cracked/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Xl" = ( +/obj/structure/table/wood/reinforced, +/obj/machinery/chem_dispenser/drinks/beer{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"Xn" = ( +/obj/effect/turf_decal/siding/white{ + dir = 8 + }, +/obj/effect/turf_decal/siding/white{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/pod, +/area/ruin/rockplanet/distillery/crew) +"Xq" = ( +/obj/structure/chair/office, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/button/door{ + name = "Armory Door Lock"; + pixel_y = 24; + pixel_x = 6; + normaldoorcontrol = 1; + specialfunctions = 4; + id = "frontier_armory" + }, +/mob/living/simple_animal/hostile/human/frontier/ranged/officer/internals, +/turf/open/floor/wood, +/area/ruin/rockplanet/distillery/office) +"XD" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/door/airlock/grunge{ + dir = 4; + id_tag = "frontier_door" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/pod/rockplanet, +/area/ruin/rockplanet/distillery) +"XF" = ( +/obj/item/shard{ + pixel_y = 8 + }, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"XU" = ( +/obj/structure/railing/corner{ + layer = 4.1 + }, +/obj/effect/turf_decal/siding/white{ + dir = 9 + }, +/obj/effect/turf_decal/siding/white/corner, +/obj/item/kirbyplants{ + icon_state = "plant-25"; + pixel_y = 12; + pixel_x = -2 + }, +/obj/effect/decal/cleanable/glass, +/obj/effect/decal/cleanable/ash, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/pod/rockplanet, +/area/ruin/rockplanet/distillery) +"XV" = ( +/obj/effect/turf_decal/ntlogo{ + dir = 4 + }, +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 6 + }, +/obj/effect/decal/cleanable/ash, +/obj/item/cigbutt{ + pixel_x = -3; + pixel_y = 4 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "2-10" + }, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery) +"XY" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/wood/rockplanet{ + icon_state = "wood-broken5" + }, +/area/ruin/rockplanet/distillery/saloon) +"Yh" = ( +/obj/machinery/door/airlock/grunge, +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/pod/rockplanet, +/area/ruin/rockplanet/distillery) +"Yo" = ( +/obj/item/mine/pressure/explosive/live, +/turf/open/floor/plating/asteroid/rockplanet/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Yq" = ( +/obj/machinery/door/airlock{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/turf/open/floor/pod, +/area/ruin/rockplanet/distillery/crew) +"YE" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/open/floor/plating/asteroid/rockplanet/cracked/lit, +/area/overmap_encounter/planetoid/rockplanet/explored) +"Zh" = ( +/obj/structure/catwalk/over, +/turf/open/floor/plating/rust/rockplanet/lit, +/area/ruin/rockplanet/distillery) +"Zm" = ( +/obj/effect/turf_decal/spline/fancy/opaque/white{ + dir = 6 + }, +/obj/item/reagent_containers/food/snacks/deadmouse{ + pixel_x = 8; + pixel_y = 6; + layer = 2.9 + }, +/obj/structure/chair/sofa/brown/old/corner/directional/west, +/turf/open/floor/plasteel/patterned/brushed/rockplanet, +/area/ruin/rockplanet/distillery/saloon) +"ZX" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/power/smes/shuttle/micro/precharged{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "pod_window" + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/open/floor/engine/hull/reinforced, +/area/ruin/rockplanet/distillery/shuttle) + +(1,1,1) = {" +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +hY +hY +hY +hY +hY +hY +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +"} +(2,1,1) = {" +Nr +Nr +Nr +Nr +Nr +Nr +Nr +hY +hY +hY +hY +hY +hY +hY +hY +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +"} +(3,1,1) = {" +Nr +Nr +Nr +Nr +Nr +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +"} +(4,1,1) = {" +Nr +Nr +Nr +Nr +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +jE +hY +hY +hY +hY +hY +hY +hY +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +"} +(5,1,1) = {" +Nr +Nr +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +"} +(6,1,1) = {" +Nr +hY +hY +hY +hY +hY +hY +RR +RR +RR +RR +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +"} +(7,1,1) = {" +Nr +hY +hY +hY +hY +hY +hY +RR +pL +PL +RR +hY +hY +hY +hY +hY +lD +hY +hY +lD +hY +hY +Cp +hY +hY +hY +hY +hY +hY +hY +hY +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +"} +(8,1,1) = {" +Nr +hY +hY +hY +hY +hY +hY +RR +lE +TG +RR +RR +hY +hY +hY +Bk +bm +bm +bm +bm +bm +bm +bm +mY +hY +hY +hY +hY +hY +hY +hY +hY +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +"} +(9,1,1) = {" +hY +hY +hY +hY +hY +RR +RR +RR +uy +Vz +cf +RR +hY +hY +Cp +WB +be +LB +LB +ji +ji +LB +Fk +kT +hY +hY +hY +hY +hY +hY +hY +hY +hY +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +"} +(10,1,1) = {" +hY +hY +hY +hY +hY +RR +yO +gM +Xn +Gg +zn +RR +hY +hY +hY +WB +LB +uG +lU +RD +lU +uG +hi +kT +nR +oq +ky +hY +hY +hY +hY +hY +hY +hY +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +"} +(11,1,1) = {" +hY +hY +hY +hY +hY +RR +DW +lE +dP +cA +Ob +RR +hY +hY +hY +WB +LB +PI +lU +BD +lU +oY +LB +kT +nR +qw +qj +ky +hY +hY +hY +hY +hY +hY +hY +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +"} +(12,1,1) = {" +Nr +qQ +hY +hY +uL +uL +xT +xT +xT +lE +nm +RR +RR +RR +RR +WB +LB +ZX +Hf +mF +vo +jm +ji +Qm +nR +nR +nR +tw +hY +hY +hY +hY +hY +hY +hY +hY +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +"} +(13,1,1) = {" +Nr +LW +qQ +aC +QP +PD +nf +zw +xT +kO +Rw +zk +tP +sm +RR +wU +ji +qm +NM +PP +bI +Ai +XF +kT +nR +nR +oq +qQ +ky +hY +hY +hY +hY +hY +hY +hY +hY +hY +Nr +Nr +Nr +Nr +Nr +Nr +Nr +"} +(14,1,1) = {" +nR +Kt +ky +AV +wH +xf +bH +jO +AE +NC +zy +hH +GE +av +Uo +WB +ji +lU +lU +Km +lU +lU +uG +kT +nR +nR +qQ +Kx +lc +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +Nr +Nr +Nr +Nr +Nr +Nr +"} +(15,1,1) = {" +nR +nR +qQ +wb +uL +uS +zJ +AY +xT +Vg +jF +RR +RR +RR +RR +WB +LB +ji +lU +uv +lU +ji +LB +kT +nR +rH +ed +rH +rH +ed +ed +rH +hY +hY +hY +hY +hY +hY +hY +hY +Nr +Nr +Nr +Nr +Nr +"} +(16,1,1) = {" +nR +ky +oq +hY +uL +VJ +wV +VM +xT +lE +Yq +lE +Gc +kC +yS +WB +Fk +LB +LB +dE +ji +ji +Fk +kT +nR +rH +Td +HM +fl +Sk +Mr +rH +hY +hY +hY +hY +hY +hY +hY +hY +Nr +Nr +Nr +Nr +Nr +"} +(17,1,1) = {" +Nr +hY +hY +hY +uL +dK +cS +ne +xT +nr +TB +xA +jX +JS +yS +nU +nT +JZ +fO +hS +RM +JZ +nT +wd +nR +rH +CS +Tt +Qp +Tn +yI +rH +ed +ed +rH +rH +hY +hY +hY +hY +hY +Nr +Nr +Nr +Nr +"} +(18,1,1) = {" +hY +hY +hY +hY +uL +uL +xT +xT +xT +aB +tB +eG +sx +kd +RR +Tl +Ru +nR +wz +me +kT +nR +nR +nR +gg +ed +GH +ze +vF +aE +to +rH +Sx +xc +tA +rH +hY +hY +hY +hY +hY +Nr +Nr +Nr +Nr +"} +(19,1,1) = {" +hY +hY +hY +hY +hY +KA +Lm +ut +jM +kU +Ns +nA +qo +RR +RR +RR +yS +NR +KV +me +kT +nR +Xg +Xg +Xg +ed +yf +vD +fv +QB +Ow +rH +XU +Wj +fM +Hg +hY +hY +hY +hY +hY +hY +nR +Nr +Nr +"} +(20,1,1) = {" +Nr +hY +hY +hY +hY +KA +lK +te +jM +Od +bX +zx +bS +RR +TR +ng +qX +Fn +Fn +ws +kT +nR +rH +ed +rH +rH +rH +rH +rH +XD +rH +rH +Be +Zh +pD +Hg +hY +hY +hY +hY +hY +hY +Xg +nR +Nr +"} +(21,1,1) = {" +Nr +Nr +hY +hY +hY +KA +jM +Am +jM +jM +jM +NU +PZ +RR +bd +kq +RR +IZ +fO +ws +kT +Xg +rH +cP +fJ +fW +rH +mq +qu +uU +MS +rH +wX +mX +fs +ed +hY +hY +hY +hY +hY +Tl +Xg +nR +Nr +"} +(22,1,1) = {" +Nr +hY +hY +hY +hY +KA +ih +qY +xO +CW +jM +mk +lE +RR +Iz +rT +yS +NE +wz +hS +kT +Xg +Nk +om +Aw +Dk +Yh +ah +dJ +XV +kZ +Yh +Ld +uw +Ft +Hg +hY +hY +hY +hY +Wc +Dw +Xg +nR +nR +"} +(23,1,1) = {" +Nr +hY +hY +hY +hY +KA +lL +mv +eh +yL +jM +VO +Vf +zk +sQ +rT +yS +qj +wz +iT +kT +dw +Nk +Sq +Cr +co +rH +sb +gU +jI +bu +rH +qe +UJ +hP +Hg +hY +hY +hY +Wc +uX +oh +nR +nR +nR +"} +(24,1,1) = {" +Nr +hY +hY +hY +hY +KA +Xq +gA +FA +gv +CA +bz +Vj +zk +TR +kq +yS +Kt +wz +hS +kT +Tl +ed +CL +wT +VW +rH +Nk +Nk +Nk +Nk +rH +Ch +UU +nY +rH +hY +hY +Xg +pM +Cn +Fs +nR +nR +nR +"} +(25,1,1) = {" +hY +hY +hY +hY +hY +KA +wx +pQ +bY +aJ +jM +RB +EI +zk +en +nX +RR +nR +WB +ws +Qm +nR +rH +zX +vf +zX +rH +Mm +Bx +Kt +ky +rH +rH +xs +ed +rH +Xg +mp +AI +DE +jS +Xg +qw +nR +nR +"} +(26,1,1) = {" +hY +hY +hY +hY +hY +KA +vX +Oz +UI +SV +jM +xN +BT +RR +zk +zk +yS +KF +wz +ws +kT +nR +Mm +rs +hS +Vx +nR +nR +nR +uE +qj +qQ +rs +Bn +Rp +nR +nR +nR +dI +uk +Xg +re +Yo +nR +Nr +"} +(27,1,1) = {" +hY +hY +hY +hY +hY +KA +KA +Va +KA +KA +jM +LD +Rr +zk +tP +sm +RR +NR +KV +aG +FB +lS +uf +IN +Wg +bT +uf +uf +wk +uf +uf +uf +tx +Rd +bT +uf +uf +bm +JP +uk +Xg +nR +nR +Nr +Nr +"} +(28,1,1) = {" +Nr +hY +hY +hY +hY +SF +Ja +ql +OV +RR +dZ +Go +Gd +br +GE +av +Uo +HB +yw +RO +Ex +Xf +JO +fF +Oe +WE +Hv +Ig +CR +HB +wy +HB +Mx +wy +HB +AC +SG +DX +Qm +nR +nR +nR +nR +nR +Nr +"} +(29,1,1) = {" +Nr +Nr +hY +hY +hY +KA +KA +cp +yW +RR +Os +eF +Ef +RR +yS +RR +yS +IZ +nT +nT +JZ +JZ +Pl +kn +Cz +kn +kn +vC +lQ +VP +kn +kn +Cz +kn +kn +iy +kn +hy +PV +nR +nR +nR +nR +nR +nR +"} +(30,1,1) = {" +Nr +Nr +hY +hY +hY +hY +KA +KA +KA +RR +RR +RR +yS +yS +Xg +Ru +nR +nR +Dw +Dw +nR +nR +re +uE +nR +qQ +ky +Fm +CN +Vx +ky +em +Kt +nR +LM +gk +Xg +YE +At +uk +Xg +dw +Xg +Hu +nR +"} +(31,1,1) = {" +Nr +Nr +Nr +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +Xg +Xg +nR +qw +nR +Cn +dU +nR +nR +VG +Kt +qj +Wu +Wu +BJ +Wu +Wu +Wu +MA +MA +cw +Wu +Wu +aj +ir +pm +yr +Dw +Xg +qw +nR +"} +(32,1,1) = {" +Nr +Nr +Nr +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +Tl +Xg +nR +Cn +nR +Dw +JN +Xg +Wu +Wu +Wu +Wu +Wu +Wu +Mf +oU +Ag +Wu +uP +JC +pa +mE +OB +Wu +hY +hY +Wc +DE +dn +Xg +nR +nR +"} +(33,1,1) = {" +Nr +Nr +Nr +Nr +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +Xg +Ta +Dw +nR +nR +Xg +wB +Wu +HO +TW +tQ +Wp +Wu +Je +hA +Uy +Wu +ba +Rn +IA +Ej +OK +Wu +hY +hY +hY +Wc +Dw +oO +Xg +nR +"} +(34,1,1) = {" +Nr +Nr +Nr +Nr +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +Bs +JI +JI +Cn +Xg +rh +Ru +Wu +IS +gw +Wm +Tp +Wu +Jc +Sr +BO +mK +TK +Hi +tc +XY +Wp +Wu +hY +hY +hY +hY +Dw +Cn +Xg +nR +"} +(35,1,1) = {" +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +hY +hY +hY +hY +Xg +Cn +Xg +Dw +Dw +gg +zZ +Wc +hY +Wu +EF +si +CQ +Tp +CM +cQ +oD +Ir +mK +sy +Gb +Bq +To +Ux +Wu +hY +hY +hY +hY +Tl +Xg +Xg +nR +"} +(36,1,1) = {" +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +hY +hY +Xg +Ss +Xg +UA +Cn +nR +rW +Fs +hY +hY +Wu +sE +MD +Uw +Ux +Wu +hN +FI +OO +Wu +hq +JD +Kf +Wu +Md +Wu +Wu +hY +hY +hY +Cn +Fs +nR +nR +"} +(37,1,1) = {" +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +nR +nR +nR +qw +gu +nR +nR +Xg +Xg +hY +hY +Wu +Wu +Wu +Wu +Wu +Wu +rF +rJ +Zm +Wu +Qr +Nx +Ei +Wu +xM +Ka +Wu +hY +hY +hY +hY +Xg +nR +nR +"} +(38,1,1) = {" +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +nR +nR +nR +nR +nR +Tl +hY +hY +hY +hY +hY +hY +hY +hY +Wu +Wu +Wu +Wu +Wu +HT +OB +Nj +CM +FD +gX +Wu +hY +hY +hY +hY +Xg +nR +Nr +"} +(39,1,1) = {" +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +nR +nR +nR +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +Wu +Xl +AJ +Wu +Wu +Wu +Wu +Wu +hY +hY +hY +hY +Xg +nR +Nr +"} +(40,1,1) = {" +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +Wu +Wu +Wu +Wu +hY +hY +hY +hY +hY +hY +hY +hY +Xg +Xg +nR +"} +(41,1,1) = {" +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +Xg +Xg +Xg +nR +"} +(42,1,1) = {" +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +hY +Xg +Xg +nR +nR +Nr +"} +(43,1,1) = {" +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +hY +hY +hY +hY +hY +Nr +hY +hY +hY +hY +hY +hY +hY +hY +Xg +Xg +Xg +Xg +nR +Nr +Nr +"} +(44,1,1) = {" +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +hY +hY +hY +Nr +Nr +hY +hY +hY +Nr +hY +hY +Nr +Nr +Nr +Nr +Nr +Nr +Nr +Nr +"} diff --git a/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm b/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm index 8a79949e34b1..a86efe2e9744 100644 --- a/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm +++ b/_maps/RandomRuins/RockRuins/rockplanet_harmfactory.dmm @@ -250,21 +250,6 @@ }, /turf/open/floor/plating, /area/ruin/powered) -"ga" = ( -/obj/structure/table/wood/reinforced, -/obj/item/gun/ballistic/automatic/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 6bb4f2e48c99..3394913e2d2d 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" = ( @@ -2417,7 +2417,7 @@ /obj/item/toy/plush/moth/firewatch, /obj/item/toy/plush/lizardplushie, /obj/item/toy/plush/knight, -/obj/item/toy/prize/mauler, +/obj/item/toy/prize/touro, /obj/item/toy/talking/AI, /turf/open/floor/plasteel/mono/white, /area/ruin/rockplanet/shippingdockwarehouse) @@ -4356,7 +4356,6 @@ /obj/structure/window/reinforced{ dir = 1 }, -/obj/effect/spawner/bundle/costume/marisawizard, /turf/open/floor/plasteel/mono/white, /area/ruin/rockplanet/shippingdockwarehouse) "Kt" = ( diff --git a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm index f59cff023b4a..b903fd3cce78 100644 --- a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm +++ b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_combination.dmm @@ -213,7 +213,7 @@ /turf/open/floor/plating, /area/ruin) "ii" = ( -/obj/item/ammo_box/aac_300blk_stripper, +/obj/item/ammo_box/a762_stripper, /turf/open/floor/wood, /area/ruin) "iK" = ( @@ -223,7 +223,7 @@ /area/overmap_encounter/planetoid/sand/explored) "iL" = ( /obj/structure/statue/snow/snowman, -/obj/item/kitchen/knife/shiv/carrot, +/obj/item/melee/knife/shiv/carrot, /turf/open/floor/plating/asteroid/snow/lit/whitesands, /area/overmap_encounter/planetoid/sand/explored) "iQ" = ( @@ -400,7 +400,6 @@ /area/ruin) "nZ" = ( /obj/structure/table, -/obj/item/clothing/glasses/meson/gar, /turf/open/floor/concrete, /area/ruin) "ox" = ( @@ -652,7 +651,7 @@ /turf/open/floor/wood, /area/ruin) "yZ" = ( -/obj/item/spear, +/obj/item/melee/spear, /obj/effect/mob_spawn/human/corpse/damaged/whitesands/survivor, /turf/open/floor/plating/asteroid/whitesands/dried{ light_range = 2 @@ -1066,7 +1065,7 @@ /turf/open/floor/wood, /area/ruin) "Ok" = ( -/turf/open/acid/whitesands, +/turf/open/water/acid/whitesands, /area/overmap_encounter/planetoid/sand/explored) "Ov" = ( /obj/item/clothing/head/cowboy{ @@ -1184,8 +1183,8 @@ /area/ruin) "Tl" = ( /obj/structure/table, -/obj/item/ammo_box/aac_300blk_stripper, -/obj/item/ammo_box/aac_300blk_stripper, +/obj/item/ammo_box/a762_stripper, +/obj/item/ammo_box/a762_stripper, /turf/open/floor/concrete, /area/ruin) "TH" = ( diff --git a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_saloon.dmm b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_saloon.dmm index d4c307df25d7..219fc7a6b6b6 100644 --- a/_maps/RandomRuins/SandRuins/whitesands_surface_camp_saloon.dmm +++ b/_maps/RandomRuins/SandRuins/whitesands_surface_camp_saloon.dmm @@ -243,7 +243,7 @@ }, /obj/effect/turf_decal/siding/wood, /obj/structure/chair/stool/bar, -/mob/living/simple_animal/hostile/human/hermit/survivor, +/mob/living/simple_animal/hostile/human/hermit/ranged/gunslinger, /turf/open/floor/wood, /area/ruin/whitesands/saloon) "gC" = ( @@ -445,7 +445,6 @@ "lI" = ( /obj/structure/table/wood/poker, /obj/effect/spawner/lootdrop/gambling, -/obj/item/spacecash/bundle/loadsamoney, /turf/open/floor/carpet, /area/ruin/whitesands/saloon) "lV" = ( @@ -890,6 +889,9 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/human/hermit/survivor{ + dir = 4 + }, /turf/open/floor/wood{ icon_state = "wood-broken5" }, @@ -1029,7 +1031,8 @@ icon_state = "pulse_carbine"; name = "pulse rifle"; desc = "A supposedly heavy-duty, multifaceted energy rifle. The barrel looks off and the casing seems to be made of plastic"; - item_state = "pulse" + item_state = "pulse"; + icon = 'icons/obj/guns/manufacturer/nanotrasen_sharplite/48x32.dmi' }, /turf/open/floor/wood, /area/ruin/whitesands/saloon) @@ -1114,7 +1117,7 @@ /obj/structure/chair/stool/bar{ dir = 8 }, -/mob/living/simple_animal/hostile/human/hermit/survivor{ +/mob/living/simple_animal/hostile/human/hermit/ranged/gunslinger{ dir = 8 }, /turf/open/floor/wood, @@ -1497,7 +1500,7 @@ /area/ruin/whitesands/saloon) "Ua" = ( /obj/structure/chair/stool/bar, -/mob/living/simple_animal/hostile/human/hermit/survivor{ +/mob/living/simple_animal/hostile/human/hermit/ranged/gunslinger{ dir = 8 }, /turf/open/floor/wood{ @@ -1672,6 +1675,7 @@ pixel_y = 6; pixel_x = 3 }, +/obj/item/spacecash/bundle/loadsamoney, /turf/open/floor/carpet, /area/ruin/whitesands/saloon) "ZG" = ( diff --git a/_maps/RandomRuins/SpaceRuins/astraeus.dmm b/_maps/RandomRuins/SpaceRuins/astraeus.dmm index 655aff67aa1c..2c62420cef30 100644 --- a/_maps/RandomRuins/SpaceRuins/astraeus.dmm +++ b/_maps/RandomRuins/SpaceRuins/astraeus.dmm @@ -1710,10 +1710,6 @@ /turf/closed/wall/r_wall, /area/ruin/space/has_grav/astraeus/munitions) "TS" = ( -/obj/item/clothing/shoes/clown_shoes{ - pixel_x = -3; - pixel_y = 12 - }, /obj/machinery/airalarm/directional/south, /obj/item/storage/crayons{ pixel_y = -6 diff --git a/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm b/_maps/RandomRuins/SpaceRuins/corporate_mining.dmm index 1c1d689c267a..a2cb21cd1c1c 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/SpaceRuins/onehalf.dmm b/_maps/RandomRuins/SpaceRuins/onehalf.dmm index 85f087ec38a9..0ee697760b25 100644 --- a/_maps/RandomRuins/SpaceRuins/onehalf.dmm +++ b/_maps/RandomRuins/SpaceRuins/onehalf.dmm @@ -2034,12 +2034,6 @@ }, /turf/open/space, /area/space/nearstation) -"Ra" = ( -/obj/structure/frame/computer{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/ruin/space/has_grav/onehalf) "Rv" = ( /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood/airless{ @@ -3328,7 +3322,7 @@ UM cp ZX Gv -Ra +Gv cU YE bU diff --git a/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm b/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm index b76ae63a86e7..3d05cfb13d35 100644 --- a/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm +++ b/_maps/RandomRuins/SpaceRuins/power_puzzle.dmm @@ -1739,7 +1739,7 @@ /area/ruin/space/has_grav/powerpuzzle/secure) "sc" = ( /obj/effect/mob_spawn/human/corpse/cargo_tech, -/obj/item/reagent_containers/food/snacks/cakeslice/birthday, +/obj/item/food/cakeslice/birthday, /obj/effect/decal/cleanable/confetti, /obj/machinery/light/small/broken/directional/east, /obj/structure/toilet, diff --git a/_maps/RandomRuins/SpaceRuins/singularity_lab.dmm b/_maps/RandomRuins/SpaceRuins/singularity_lab.dmm index 99ccda138d00..afec0282e917 100644 --- a/_maps/RandomRuins/SpaceRuins/singularity_lab.dmm +++ b/_maps/RandomRuins/SpaceRuins/singularity_lab.dmm @@ -7373,7 +7373,6 @@ name = "Prototype Storage" }, /obj/item/gun/energy/laser/captain, -/obj/item/clothing/shoes/wheelys, /obj/structure/sign/poster/retro/lasergun_new{ pixel_y = 32 }, @@ -8625,13 +8624,13 @@ /turf/open/floor/plasteel/grimy, /area/ruin/space/has_grav/singularitylab/lab) "HU" = ( -/obj/structure/fireaxecabinet{ - pixel_y = 32 - }, /obj/structure/sign/warning/incident{ pixel_x = -32 }, /obj/effect/decal/cleanable/cobweb, +/obj/structure/cabinet/fireaxe{ + pixel_y = 28 + }, /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/singularitylab/engineering) "HW" = ( diff --git a/_maps/RandomRuins/SpaceRuins/spacemall.dmm b/_maps/RandomRuins/SpaceRuins/spacemall.dmm index 0f5d01fb7de8..db3f30c15f76 100644 --- a/_maps/RandomRuins/SpaceRuins/spacemall.dmm +++ b/_maps/RandomRuins/SpaceRuins/spacemall.dmm @@ -1106,7 +1106,7 @@ "el" = ( /obj/structure/table/glass, /obj/item/toy/plush/lizardplushie, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /turf/open/floor/light, /area/ruin/space/has_grav/spacemall/shop2) "eo" = ( @@ -1268,9 +1268,6 @@ /area/ruin/space/has_grav/spacemall/dorms) "eO" = ( /obj/effect/turf_decal/corner/opaque/blue/half, -/obj/item/clothing/suit/whitedress, -/obj/item/clothing/suit/whitedress, -/obj/item/clothing/suit/whitedress, /obj/item/clothing/under/dress/blacktango{ pixel_y = 3 }, @@ -1430,10 +1427,10 @@ name = "Kiosk Shutters"; dir = 4 }, -/obj/item/reagent_containers/food/condiment/sugar{ +/obj/item/reagent_containers/condiment/sugar{ pixel_y = 5 }, -/obj/item/reagent_containers/food/condiment/sugar, +/obj/item/reagent_containers/condiment/sugar, /obj/structure/closet/wall/directional/north, /obj/item/spacecash/bundle/c100, /turf/open/floor/plasteel/dark, @@ -2138,7 +2135,7 @@ /area/ruin/space/has_grav/spacemall) "ip" = ( /obj/effect/turf_decal/corner/transparent/black/diagonal, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /obj/structure/table, /turf/open/floor/plasteel/white, /area/ruin/space/has_grav/spacemall/dorms) @@ -2212,10 +2209,10 @@ "iE" = ( /obj/effect/turf_decal/corner/transparent/black/diagonal, /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = 4 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -4 }, /obj/machinery/door/poddoor/shutters{ @@ -2804,12 +2801,7 @@ /area/ruin/space/has_grav/spacemall) "kC" = ( /obj/structure/rack, -/obj/item/clothing/head/goatpelt, -/obj/item/clothing/head/hardhat/reindeer, /obj/item/clothing/head/collectable/chef, -/obj/item/clothing/head/collectable/HoP, -/obj/item/clothing/head/collectable/rabbitears, -/obj/item/clothing/head/witchunter, /obj/item/clothing/neck/cloak/trans, /obj/item/clothing/neck/cloak/cap, /obj/item/clothing/neck/beads, @@ -3478,10 +3470,10 @@ /area/ruin/space/has_grav/spacemall) "ns" = ( /obj/effect/turf_decal/corner/transparent/black/diagonal, -/obj/item/reagent_containers/food/condiment/sugar{ +/obj/item/reagent_containers/condiment/sugar{ pixel_y = -5 }, -/obj/item/reagent_containers/food/condiment/flour, +/obj/item/reagent_containers/condiment/flour, /obj/structure/table, /turf/open/floor/plasteel/white, /area/ruin/space/has_grav/spacemall/dorms) @@ -3606,7 +3598,7 @@ /area/ruin/space/has_grav/spacemall/shop) "nS" = ( /obj/effect/turf_decal/corner/transparent/black/diagonal, -/obj/item/reagent_containers/food/snacks/store/bread/spidermeat, +/obj/item/food/bread/spidermeat, /obj/structure/table, /turf/open/floor/plasteel/white, /area/ruin/space/has_grav/spacemall/dorms) @@ -4310,8 +4302,6 @@ /obj/item/clothing/glasses/heat{ pixel_y = -6 }, -/obj/item/clothing/glasses/sunglasses/gar/supergar, -/obj/item/clothing/glasses/monocle, /obj/item/clothing/glasses/sunglasses, /obj/item/clothing/glasses/sunglasses, /obj/item/clothing/glasses/sunglasses, @@ -5966,15 +5956,15 @@ pixel_x = -30; dir = 4 }, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/sugar, -/obj/item/reagent_containers/food/condiment/sugar, -/obj/item/reagent_containers/food/condiment/sugar, -/obj/item/reagent_containers/food/condiment/rice, -/obj/item/reagent_containers/food/condiment/rice, -/obj/item/reagent_containers/food/condiment/rice, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/sugar, +/obj/item/reagent_containers/condiment/sugar, +/obj/item/reagent_containers/condiment/sugar, +/obj/item/reagent_containers/condiment/rice, +/obj/item/reagent_containers/condiment/rice, +/obj/item/reagent_containers/condiment/rice, /obj/structure/table, /turf/open/floor/plasteel/white, /area/ruin/space/has_grav/spacemall/dorms) @@ -6776,7 +6766,7 @@ dir = 8 }, /obj/item/trash/plate, -/obj/item/reagent_containers/food/snacks/breadslice/moldy{ +/obj/item/food/breadslice/moldy{ pixel_y = 6 }, /obj/item/reagent_containers/food/snacks/spiderling{ @@ -9805,10 +9795,6 @@ pixel_y = 5; pixel_x = 2 }, -/obj/item/clothing/head/spacepolice{ - pixel_y = -3; - pixel_x = 4 - }, /turf/open/floor/plasteel, /area/ruin/space/has_grav/spacemall/dorms) "Li" = ( @@ -13759,7 +13745,7 @@ /obj/effect/turf_decal/siding/wideplating/dark{ dir = 1 }, -/obj/item/kitchen/knife/plastic{ +/obj/item/melee/knife/plastic{ pixel_x = 10 }, /obj/structure/disposalpipe/segment{ diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_abandoned_mechbay.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_abandoned_mechbay.dmm index 31c53d09a82e..e1a64004decb 100644 --- a/_maps/RandomRuins/WasteRuins/wasteplanet_abandoned_mechbay.dmm +++ b/_maps/RandomRuins/WasteRuins/wasteplanet_abandoned_mechbay.dmm @@ -1398,7 +1398,7 @@ dir = 4 }, /obj/machinery/door/airlock/engineering{ - name = "Mech Lab"; + name = "Exosuit Lab"; dir = 4 }, /obj/machinery/door/firedoor/border_only{ @@ -2577,7 +2577,7 @@ /area/ruin/wasteplanet/abandoned_mechbay/mechlab) "DY" = ( /obj/machinery/door/airlock/engineering{ - name = "Mech Lab"; + name = "Exosuit Lab"; dir = 4 }, /obj/effect/decal/cleanable/glass, @@ -2723,7 +2723,7 @@ }, /obj/effect/decal/cleanable/dirt, /mob/living/simple_animal/hostile/human/syndicate/melee{ - name = "Syndicate Mech Pilot" + name = "Syndicate Exosuit Pilot" }, /turf/open/floor/plasteel/tech/techmaint, /area/ruin/wasteplanet/abandoned_mechbay/crewquarters) @@ -2771,7 +2771,7 @@ "Hj" = ( /obj/machinery/light/dim/directional/south, /mob/living/simple_animal/hostile/human/syndicate/melee{ - name = "Syndicate Mech Pilot" + name = "Syndicate Exosuit Pilot" }, /turf/open/floor/plasteel/tech/techmaint, /area/ruin/wasteplanet/abandoned_mechbay/bay2) @@ -3016,7 +3016,7 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/directional/south, /mob/living/simple_animal/hostile/human/syndicate/melee{ - name = "Syndicate Mech Pilot" + name = "Syndicate Exosuit Pilot" }, /turf/open/floor/plasteel/dark, /area/ruin/wasteplanet/abandoned_mechbay/bay1) diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_lab.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_lab.dmm index b90bfbe776bd..aa5797d05a95 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/RandomRuins/WasteRuins/wasteplanet_pandora.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm index f422e4ef1eb8..934b648c0bd6 100644 --- a/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm +++ b/_maps/RandomRuins/WasteRuins/wasteplanet_pandora.dmm @@ -70,7 +70,7 @@ /area/ruin/wasteplanet) "df" = ( /obj/structure/table/wood, -/obj/item/kitchen/knife/combat/bone, +/obj/item/melee/knife/bone, /obj/item/flashlight/flare/torch, /turf/open/floor/wood/waste, /area/ruin/wasteplanet) @@ -107,7 +107,7 @@ /area/ruin/wasteplanet) "ge" = ( /obj/structure/table/wood, -/obj/item/kitchen/knife/combat/bone{ +/obj/item/melee/knife/bone{ pixel_x = -20 }, /obj/item/reagent_containers/food/snacks/salad/edensalad, @@ -120,7 +120,7 @@ "gm" = ( /obj/structure/closet/cabinet, /obj/item/clothing/suit/hooded/cloak/bone, -/obj/item/claymore/bone, +/obj/item/melee/sword/bone, /turf/open/floor/wood/waste, /area/ruin/wasteplanet) "gr" = ( @@ -423,7 +423,7 @@ /area/ruin/wasteplanet) "qo" = ( /obj/structure/closet/cabinet, -/obj/item/spear/bonespear, +/obj/item/melee/spear/bone, /obj/item/clothing/suit/armor/witchhunter, /obj/item/reagent_containers/food/snacks/grown/berries/death, /turf/open/floor/wood/waste, @@ -491,7 +491,7 @@ /area/ruin/wasteplanet) "sV" = ( /obj/structure/closet/cabinet, -/obj/item/claymore/bone, +/obj/item/melee/sword/bone, /obj/item/clothing/suit/armor/witchhunter, /turf/open/floor/wood/waste, /area/ruin/wasteplanet) @@ -578,7 +578,7 @@ /area/ruin/wasteplanet) "xk" = ( /obj/structure/table/wood, -/obj/item/spear/bonespear, +/obj/item/melee/spear/bone, /turf/open/floor/wood/waste, /area/ruin/wasteplanet) "xu" = ( @@ -813,7 +813,7 @@ /turf/open/indestructible/hierophant/two/waste, /area/ruin/wasteplanet) "FP" = ( -/obj/item/kitchen/knife/combat/bone{ +/obj/item/melee/knife/bone{ pixel_x = 15 }, /turf/open/floor/wood/waste, @@ -960,7 +960,7 @@ "Li" = ( /obj/structure/closet/cabinet, /obj/item/clothing/suit/armor/bone, -/obj/item/fireaxe/boneaxe, +/obj/item/melee/axe/bone, /turf/open/floor/wood/waste, /area/ruin/wasteplanet) "Lj" = ( @@ -1233,7 +1233,7 @@ /area/ruin/wasteplanet) "RT" = ( /obj/structure/table/wood, -/obj/item/spear/bonespear, +/obj/item/melee/spear/bone, /obj/item/stack/sheet/sinew, /turf/open/floor/wood/waste, /area/ruin/wasteplanet) diff --git a/_maps/RandomRuins/WasteRuins/wasteplanet_yard.dmm b/_maps/RandomRuins/WasteRuins/wasteplanet_yard.dmm new file mode 100644 index 000000000000..60325851692d --- /dev/null +++ b/_maps/RandomRuins/WasteRuins/wasteplanet_yard.dmm @@ -0,0 +1,6367 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ah" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/green{ + dir = 4 + }, +/obj/structure/curtain/cloth/grey, +/obj/machinery/light/small/broken/directional/north, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"aj" = ( +/obj/item/trash/sosjerky{ + pixel_x = 2; + pixel_y = -15 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/item/trash/raisins{ + pixel_x = 11; + pixel_y = -13 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"al" = ( +/obj/effect/turf_decal/corner/transparent/lime/border{ + dir = 5 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"ar" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/item/storage/firstaid/radiation, +/obj/item/storage/cans/sixbeer, +/obj/effect/turf_decal/corner/transparent/neutral/mono, +/obj/effect/turf_decal/corner/transparent/blue/border{ + dir = 10 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"aw" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"aH" = ( +/obj/machinery/light/dim/directional/north, +/turf/open/floor/plating/wasteplanet/rust, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"aI" = ( +/obj/structure/table/wood, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"aL" = ( +/obj/structure/table, +/obj/item/soap, +/obj/effect/turf_decal/corner/transparent/neutral/mono, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"aM" = ( +/obj/effect/turf_decal/industrial/traffic{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"aQ" = ( +/obj/structure/rack, +/obj/item/clothing/glasses/welding, +/obj/item/weldingtool/hugetank/empty, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"aV" = ( +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 5 + }, +/obj/structure/chair, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"ba" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"bc" = ( +/obj/effect/turf_decal/industrial/hatch/orange, +/obj/structure/closet/crate/secure/loot, +/obj/effect/mob_spawn/human/corpse/charredskeleton, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"bf" = ( +/obj/structure/table, +/obj/item/flashlight/lamp, +/obj/machinery/light/small/directional/east, +/obj/item/reagent_containers/food/snacks/chewable/bubblegum/nicotine{ + pixel_x = -8; + pixel_y = 11 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"bi" = ( +/obj/structure/crate_shelf, +/obj/structure/closet/crate, +/obj/item/grenade/chem_grenade/cleaner, +/obj/item/grenade/chem_grenade/cleaner{ + pixel_x = 6 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"bp" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/obj/item/gps{ + gpstag = "Distress Signal" + }, +/obj/effect/mob_spawn/human/corpse/charredskeleton, +/obj/effect/decal/cleanable/blood/old, +/obj/item/screwdriver/power, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"bq" = ( +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 6 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"bu" = ( +/obj/structure/table, +/obj/structure/reagent_dispensers/beerkeg, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"bA" = ( +/obj/structure/closet/crate{ + name = "ration crate" + }, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"bB" = ( +/mob/living/simple_animal/hostile/hivebot/wasteplanet, +/turf/open/floor/plating/wasteplanet/rust, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"bD" = ( +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 9 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"bF" = ( +/obj/structure/closet, +/obj/structure/sign/poster/contraband/gec{ + pixel_x = -28 + }, +/obj/item/clothing/under/rank/engineering/engineer/hazard, +/obj/item/clothing/head/hardhat/orange, +/obj/item/clothing/shoes/workboots, +/obj/item/spacecash/bundle/smallrand, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"bO" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 10 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"bS" = ( +/obj/effect/turf_decal/industrial/hatch/orange, +/obj/item/storage/belt/utility, +/obj/item/storage/belt/utility, +/obj/item/storage/belt/utility, +/obj/item/weldingtool/largetank, +/obj/item/weldingtool/largetank, +/obj/item/weldingtool/largetank, +/obj/structure/closet/crate/engineering, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"bU" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"bZ" = ( +/obj/effect/turf_decal/industrial/hatch/orange, +/obj/structure/closet/crate/secure/loot, +/obj/item/crowbar/power, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"cd" = ( +/obj/effect/turf_decal/industrial/hatch/orange, +/obj/item/stack/sheet/mineral/plasma/twenty, +/obj/structure/closet/crate/secure/plasma, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"cg" = ( +/obj/structure/fence/post, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"cj" = ( +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 8 + }, +/turf/open/floor/plating/asteroid/wasteplanet/lit, +/area/ruin/wasteplanet) +"cp" = ( +/obj/structure/closet/wall/directional/south, +/obj/item/clothing/shoes/sneakers/black, +/obj/item/clothing/neck/cloak/qm, +/obj/item/clothing/head/beret/qm, +/obj/item/clothing/under/rank/cargo/qm, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"cv" = ( +/obj/item/kirbyplants/dead, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 5 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"cx" = ( +/obj/machinery/door/airlock/external, +/obj/effect/turf_decal/industrial/traffic/fulltile, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/firedoor/closed, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"cz" = ( +/obj/effect/mob_spawn/human/corpse/charredskeleton, +/obj/effect/decal/cleanable/blood/old, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"cA" = ( +/obj/structure/grille/broken, +/obj/item/shard, +/obj/structure/curtain/cloth/grey, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"cF" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 9 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"cI" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 6 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"cP" = ( +/mob/living/simple_animal/hostile/hivebot/wasteplanet/strong, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/mob_spawn/human/corpse/charredskeleton, +/obj/item/wrench/combat, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"dd" = ( +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 9 + }, +/obj/effect/decal/cleanable/garbage{ + pixel_x = -6; + pixel_y = 10 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"de" = ( +/obj/effect/turf_decal/industrial/warning/dust, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"df" = ( +/obj/effect/turf_decal/industrial/hatch/red, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"dn" = ( +/obj/machinery/shower{ + pixel_y = 19 + }, +/obj/structure/curtain, +/obj/item/soap/nanotrasen, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"dv" = ( +/obj/effect/turf_decal/industrial/traffic, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"dw" = ( +/obj/effect/turf_decal/industrial/hatch/orange, +/obj/structure/closet/crate/large, +/mob/living/simple_animal/hostile/hivebot/wasteplanet, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"dI" = ( +/obj/machinery/door/airlock{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"dP" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/food/snacks/ration/side/white_sandwich_bread, +/obj/item/reagent_containers/food/snacks/ration/snack/cherry_snackers{ + pixel_x = 10; + pixel_y = 8 + }, +/obj/item/trash/plate{ + pixel_x = -13 + }, +/obj/item/reagent_containers/food/snacks/ration/snack/sour_gummy_worms{ + pixel_x = 1; + pixel_y = 7 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"dY" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/crate_shelf, +/obj/machinery/light/small/broken/directional/west, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"ek" = ( +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"et" = ( +/obj/machinery/washing_machine, +/obj/machinery/light/small/broken/directional/east, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"ey" = ( +/obj/effect/turf_decal/industrial/traffic{ + dir = 1 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"eD" = ( +/obj/structure/closet/cabinet, +/obj/item/clothing/shoes/workboots, +/obj/item/clothing/under/rank/engineering/chief_engineer, +/obj/item/stamp/ce, +/obj/item/clothing/head/hardhat/weldhat/white, +/obj/item/gun/energy/laser/retro, +/obj/structure/sign/poster/contraband/space_cube{ + pixel_x = 32 + }, +/obj/item/spacecash/bundle/pocketchange, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"eL" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/corner/transparent/lime/border{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/lime/border, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"eN" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east{ + start_charge = 0 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"eO" = ( +/obj/structure/railing{ + max_integrity = 70 + }, +/obj/effect/turf_decal/industrial/traffic/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"eS" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"fe" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"fp" = ( +/obj/mecha/working/ripley/cargo, +/obj/effect/turf_decal/industrial/hatch/orange, +/turf/open/floor/plating/wasteplanet/rust/lit, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"fz" = ( +/obj/structure/closet/secure_closet/engineering_welding, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"fA" = ( +/obj/machinery/power/terminal{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"fH" = ( +/obj/effect/turf_decal/miskilamo_small/left, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"fP" = ( +/obj/structure/catwalk/over, +/turf/open/floor/plating/wasteplanet/rust/lit, +/area/ruin/wasteplanet) +"ga" = ( +/obj/effect/turf_decal/industrial/hatch/orange, +/obj/item/stack/cable_coil/red{ + pixel_y = 4 + }, +/obj/item/stack/cable_coil/orange, +/obj/item/stack/cable_coil/yellow{ + pixel_y = -4 + }, +/obj/item/stack/cable_coil/cut/pink, +/obj/structure/closet/crate/engineering/electrical, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"gb" = ( +/obj/structure/chair/stool/bar{ + dir = 8; + pixel_x = -8 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"ge" = ( +/obj/structure/table, +/obj/item/flashlight/lamp, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"gg" = ( +/turf/closed/mineral/random/wasteplanet, +/area/ruin/wasteplanet) +"gk" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/light/small/broken/directional/east, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"gs" = ( +/turf/closed/wall, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"gx" = ( +/obj/structure/sign/warning/docking{ + pixel_y = 32 + }, +/obj/effect/turf_decal/industrial/warning/dust{ + dir = 9 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"gF" = ( +/obj/structure/closet, +/obj/item/clothing/shoes/workboots, +/obj/item/clothing/under/rank/engineering/engineer/hazard, +/obj/item/clothing/head/hardhat, +/obj/item/trash/chips, +/obj/structure/sign/poster/contraband/hacking_guide{ + pixel_x = 28 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"gH" = ( +/obj/effect/decal/cleanable/oil/slippery, +/obj/effect/decal/cleanable/robot_debris/up, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"gO" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"gP" = ( +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"gV" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/item/clothing/shoes/workboots, +/obj/effect/decal/cleanable/blood/old, +/obj/effect/turf_decal/corner/transparent/lime/border{ + dir = 1 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"hn" = ( +/obj/structure/railing{ + max_integrity = 70 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"hr" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/lime/border{ + dir = 8 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"hs" = ( +/obj/structure/sign/warning/nosmoking{ + pixel_x = 28 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 6 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"ht" = ( +/obj/structure/bed, +/obj/item/bedsheet/brown, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"hA" = ( +/obj/machinery/door/airlock/external, +/obj/effect/turf_decal/industrial/traffic/fulltile, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"hG" = ( +/obj/structure/toilet{ + dir = 8; + pixel_x = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral/mono, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"hH" = ( +/obj/effect/turf_decal/miskilamo_small, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"hJ" = ( +/obj/structure/railing{ + max_integrity = 70 + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"hK" = ( +/obj/machinery/shower{ + pixel_y = 19 + }, +/obj/structure/curtain, +/obj/structure/catwalk/over/plated_catwalk/white, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"hO" = ( +/obj/machinery/vending/coffee, +/obj/machinery/light/directional/south, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"hP" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/effect/turf_decal/industrial/warning/dust/corner{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning/dust/corner, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"hW" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 8 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"hY" = ( +/obj/structure/grille/broken, +/obj/item/shard, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"il" = ( +/obj/structure/cable{ + icon_state = "2-5" + }, +/obj/structure/cable{ + icon_state = "2-9" + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"in" = ( +/obj/machinery/door/airlock{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"is" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"ix" = ( +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 9 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"iB" = ( +/obj/machinery/light/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"iD" = ( +/obj/structure/grille/broken, +/obj/item/shard, +/obj/machinery/door/firedoor/window, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"iF" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"iJ" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 8 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"iK" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"iR" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/lime/border{ + dir = 4 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"iW" = ( +/obj/structure/closet/secure_closet/engineering_electrical, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"jd" = ( +/obj/effect/turf_decal/miskilamo_small/right, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"je" = ( +/obj/effect/turf_decal/industrial/traffic{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/caution, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"jh" = ( +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 6 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"jo" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/turf_decal/corner/transparent/neutral/mono, +/obj/effect/turf_decal/corner/transparent/blue/border{ + dir = 5 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"jq" = ( +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 10 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"jt" = ( +/turf/open/floor/plating/wasteplanet/rust/lit, +/area/ruin/wasteplanet) +"jy" = ( +/obj/effect/turf_decal/industrial/hatch/orange, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"jC" = ( +/obj/machinery/microwave, +/obj/item/clothing/head/chefhat{ + pixel_y = 13 + }, +/obj/structure/table, +/obj/effect/decal/cleanable/food/flour, +/obj/item/reagent_containers/food/snacks/badrecipe, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/turf_decal/corner/transparent/neutral/diagonal, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"jI" = ( +/obj/effect/turf_decal/industrial/traffic, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"jT" = ( +/obj/structure/closet/crate/bin, +/obj/item/trash/can, +/obj/item/trash/candy, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 10 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"jY" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"kc" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 4 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"kd" = ( +/obj/machinery/door/airlock/external, +/obj/effect/turf_decal/industrial/traffic/fulltile, +/obj/machinery/door/firedoor/closed, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"ke" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"ki" = ( +/obj/effect/turf_decal/industrial/traffic{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"kn" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/item/multitool{ + pixel_y = -5; + pixel_x = 11 + }, +/obj/item/screwdriver{ + pixel_x = -7 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"ks" = ( +/obj/structure/mirror{ + pixel_x = -28 + }, +/obj/structure/sink{ + dir = 4; + pixel_x = -13 + }, +/obj/effect/turf_decal/corner/transparent/neutral/mono, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"kw" = ( +/obj/structure/chair/plastic, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"kD" = ( +/obj/effect/turf_decal/industrial/hatch/red, +/obj/structure/closet/crate/secure/loot, +/obj/item/circuitboard/machine/grounding_rod, +/obj/item/circuitboard/machine/grounding_rod, +/obj/item/circuitboard/machine/grounding_rod, +/obj/item/circuitboard/machine/grounding_rod, +/obj/item/stack/sheet/metal/twenty, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"kH" = ( +/obj/structure/table, +/obj/item/flashlight/lamp{ + pixel_y = 12; + pixel_x = -8 + }, +/obj/machinery/light/small/directional/east, +/obj/item/screwdriver{ + pixel_x = -7 + }, +/obj/item/stack/cable_coil/cut/red, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"kJ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"kM" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"kP" = ( +/mob/living/simple_animal/hostile/hivebot/wasteplanet/ranged, +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"kS" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 10 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"kW" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 6 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"kY" = ( +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 5 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"kZ" = ( +/obj/item/storage/toolbox/drone, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"lb" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/light/small/broken/directional/east, +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"le" = ( +/obj/structure/railing{ + max_integrity = 70 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/power/apc/auto_name/directional/north{ + start_charge = 0 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"lf" = ( +/obj/item/stack/ore/salvage/scrapmetal, +/obj/item/stack/ore/salvage/scrapuranium, +/obj/structure/catwalk/over, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"lq" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/firealarm/directional/west, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 9 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"lx" = ( +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"lB" = ( +/obj/structure/marker_beacon{ + picked_color = "Lime" + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"lG" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"lO" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"lT" = ( +/obj/structure/closet/crate/secure/loot, +/obj/item/clothing/suit/space/nasavoid, +/obj/item/clothing/head/helmet/space/nasavoid, +/obj/item/tank/jetpack/void, +/turf/open/floor/plating/wasteplanet/rust/lit, +/area/ruin/wasteplanet) +"lV" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"lW" = ( +/obj/structure/chair{ + dir = 4 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"lY" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"mi" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/blood/tracks, +/obj/effect/turf_decal/corner/transparent/lime/border{ + dir = 8 + }, +/obj/effect/turf_decal/corner/transparent/lime/bordercorner, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"mq" = ( +/obj/structure/fence/door, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"mA" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/effect/turf_decal/industrial/warning/dust/corner, +/obj/effect/turf_decal/industrial/warning/dust/corner{ + dir = 8 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"mG" = ( +/obj/machinery/suit_storage_unit/open, +/obj/effect/turf_decal/industrial/hatch/orange, +/obj/effect/turf_decal/industrial/traffic/corner{ + dir = 8 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"mK" = ( +/obj/structure/fence/post{ + dir = 4 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"mS" = ( +/obj/effect/turf_decal/industrial/hatch/orange, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"mU" = ( +/obj/machinery/door/airlock{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"mZ" = ( +/obj/structure/fence, +/obj/effect/turf_decal/industrial/warning/dust{ + dir = 8 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"nd" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"ne" = ( +/obj/effect/turf_decal/industrial/traffic{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"nf" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"ng" = ( +/obj/structure/table_frame, +/obj/item/stack/ore/salvage/scrapmetal, +/obj/item/wirecutters, +/obj/item/screwdriver{ + pixel_x = 7; + pixel_y = -8 + }, +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 5 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"ni" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/green{ + dir = 4 + }, +/obj/structure/curtain/cloth/grey, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"nr" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating/wasteplanet/rust, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"nx" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 6 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"nH" = ( +/obj/machinery/door/airlock/command, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"nJ" = ( +/obj/structure/cable/yellow, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/power/apc/auto_name/directional/west{ + start_charge = 0 + }, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 9 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"nL" = ( +/obj/structure/railing{ + max_integrity = 70 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/stairs{ + dir = 8 + }, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"nP" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/lime/border, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"nV" = ( +/obj/effect/decal/cleanable/blood/old, +/obj/structure/closet/crate/coffin, +/obj/effect/mob_spawn/human/corpse/charredskeleton, +/turf/open/floor/plating/wasteplanet/rust/lit, +/area/ruin/wasteplanet) +"nZ" = ( +/obj/machinery/door/airlock{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral/mono, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"oe" = ( +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"oh" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 10 + }, +/obj/effect/turf_decal/corner/transparent/lime/border{ + dir = 8 + }, +/obj/effect/turf_decal/corner/transparent/lime/border{ + dir = 4 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"ok" = ( +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 10 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"os" = ( +/obj/effect/turf_decal/corner/transparent/lime/border{ + dir = 6 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"ov" = ( +/obj/structure/fence, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning/dust{ + dir = 4 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"oz" = ( +/obj/item/kirbyplants/dead, +/obj/effect/turf_decal/corner/transparent/lime/border{ + dir = 6 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"oA" = ( +/obj/effect/turf_decal/industrial/traffic, +/obj/effect/turf_decal/industrial/caution{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"oJ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/neutral/diagonal, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"oK" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 5 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"oS" = ( +/obj/effect/decal/cleanable/blood/drip, +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 10 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"oT" = ( +/obj/structure/fence{ + dir = 8 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"oW" = ( +/obj/machinery/hydroponics/constructable, +/obj/machinery/light/directional/east, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/item/seeds/potato, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"pb" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 9 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"pd" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"ph" = ( +/obj/structure/railing{ + max_integrity = 70 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/stairs{ + dir = 4 + }, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"pj" = ( +/turf/closed/wall, +/area/ruin/wasteplanet) +"pr" = ( +/obj/effect/turf_decal/industrial/traffic, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"pt" = ( +/mob/living/simple_animal/hostile/hivebot/wasteplanet/strong, +/obj/structure/sign/warning/docking{ + pixel_x = 32 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"pu" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/turf_decal/industrial/warning/dust/corner{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning/dust/corner{ + dir = 1 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"px" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"pz" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_x = -6 + }, +/obj/item/folder/yellow{ + pixel_x = 8 + }, +/obj/item/pen/fountain{ + pixel_x = -6; + pixel_y = 1 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"pB" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plating/wasteplanet/rust/lit, +/area/ruin/wasteplanet) +"pF" = ( +/obj/structure/chair/stool/bar{ + dir = 8; + pixel_x = -8 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/power/apc/auto_name/directional/north{ + start_charge = 0 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"pG" = ( +/obj/machinery/mech_bay_recharge_port{ + dir = 2 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"pJ" = ( +/obj/effect/turf_decal/industrial/traffic/corner{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 6 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"pK" = ( +/obj/machinery/light/dim/directional/east, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 6 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"pQ" = ( +/obj/structure/table, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"pY" = ( +/obj/item/stack/ore/iron, +/obj/effect/decal/cleanable/blood/gibs/down, +/obj/item/stack/ore/salvage/scrapmetal, +/obj/item/shard, +/obj/effect/mob_spawn/human/corpse/charredskeleton, +/obj/item/clothing/head/caphat/cowboy, +/obj/structure/sign/poster/retro/smile{ + pixel_x = -28 + }, +/obj/machinery/light/small/broken/directional/south, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"qd" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"qo" = ( +/obj/machinery/door/airlock, +/obj/structure/barricade/wooden/crude, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"qr" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"qs" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 9 + }, +/obj/structure/sign/warning/nosmoking/burnt{ + pixel_x = -28 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"qt" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 9 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"qu" = ( +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 5 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"qw" = ( +/obj/machinery/vending/cola/pwr_game, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"qy" = ( +/obj/structure/toilet{ + pixel_y = 11 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"qB" = ( +/obj/effect/turf_decal/industrial/hatch/red, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"qL" = ( +/turf/open/floor/plating/asteroid/wasteplanet/lit, +/area/ruin/wasteplanet) +"qS" = ( +/obj/structure/closet/crate{ + name = "ration crate" + }, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/machinery/light/small/broken/directional/south, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"rd" = ( +/obj/structure/table/reinforced, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"re" = ( +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 10 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"rp" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"rv" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = -6 + }, +/obj/item/folder/yellow{ + pixel_x = 8 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"rw" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/structure/catwalk/over, +/obj/structure/spawner/hivebot, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"ry" = ( +/obj/structure/fence{ + dir = 8 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"rQ" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"sf" = ( +/mob/living/simple_animal/hostile/hivebot/wasteplanet, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/ruin/wasteplanet) +"sm" = ( +/obj/item/stack/ore/salvage/scrapmetal/five, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"sx" = ( +/obj/structure/railing{ + max_integrity = 70 + }, +/obj/machinery/airalarm/directional/north, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"sz" = ( +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/power/smes, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"sB" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"sF" = ( +/obj/machinery/door/airlock{ + dir = 4 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"sK" = ( +/obj/structure/girder, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"sL" = ( +/obj/machinery/ntnet_relay, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"sO" = ( +/obj/structure/fence/door, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/industrial/warning/dust{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning/dust{ + dir = 8 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"sT" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/sign/poster/contraband/space_cola{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"ta" = ( +/obj/machinery/door/airlock{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/turf_decal/corner/transparent/neutral/mono, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"td" = ( +/obj/structure/fence, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"tn" = ( +/turf/template_noop, +/area/template_noop) +"to" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/lime/border{ + dir = 8 + }, +/obj/effect/turf_decal/corner/transparent/lime/bordercorner{ + dir = 4 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"tu" = ( +/obj/structure/table, +/obj/effect/turf_decal/corner/transparent/neutral/diagonal, +/obj/structure/sink/kitchen{ + dir = 4 + }, +/obj/effect/decal/cleanable/food/flour, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"tv" = ( +/obj/effect/turf_decal/industrial/warning/dust{ + dir = 4 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"ty" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"tD" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/blood/tracks{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/lime/border{ + dir = 8 + }, +/obj/effect/turf_decal/corner/transparent/lime/bordercorner, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"tK" = ( +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/power/terminal{ + dir = 1 + }, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"tL" = ( +/obj/machinery/door/airlock/maintenance/external/glass, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"tT" = ( +/obj/structure/closet/crate/trashcart, +/obj/item/broken_bottle, +/obj/item/shard, +/obj/item/reagent_containers/food/drinks/bottle/hooch, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"tX" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"tY" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"ul" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/sign/poster/contraband/engis_unite{ + pixel_y = -28 + }, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"um" = ( +/obj/structure/table, +/obj/structure/showcase/machinery/tv{ + name = "\improper television"; + desc = "A mess of wires and duct tape that barely functions" + }, +/obj/item/toy/plush/among{ + pixel_x = 7; + pixel_y = 14 + }, +/obj/item/stack/cable_coil/cut/red{ + pixel_y = 10 + }, +/obj/item/kitchen/fork{ + pixel_x = 12; + name = "load bearing fork" + }, +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 5 + }, +/obj/item/trash/raisins{ + pixel_x = -12; + pixel_y = -2 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"un" = ( +/obj/structure/rack, +/obj/item/clothing/glasses/welding, +/obj/item/weldingtool/hugetank/empty, +/obj/effect/turf_decal/industrial/traffic/corner, +/obj/machinery/light/directional/south, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"up" = ( +/obj/effect/decal/cleanable/oil/slippery, +/obj/item/stack/ore/salvage/scrapmetal/five, +/obj/item/stack/ore/salvage/scrapplasma, +/obj/effect/decal/cleanable/robot_debris, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"ut" = ( +/obj/structure/rack, +/obj/item/clothing/glasses/welding, +/obj/item/weldingtool/hugetank/empty, +/obj/effect/turf_decal/industrial/traffic/corner{ + dir = 1 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"uw" = ( +/obj/structure/chair/stool/bar{ + dir = 1; + pixel_y = 12 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/effect/turf_decal/corner/transparent/blue, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"uD" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 1 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"uN" = ( +/obj/structure/chair/office{ + dir = 8 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"uU" = ( +/obj/structure/chair/comfy/orange/old/alt/directional/south, +/obj/item/toy/plush/snakeplushie, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"uZ" = ( +/obj/structure/table, +/obj/item/trash/plate, +/obj/item/reagent_containers/food/snacks/badrecipe, +/obj/item/reagent_containers/food/drinks/soda_cans/lunapunch{ + pixel_y = 9; + pixel_x = -8 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"vb" = ( +/obj/machinery/door/airlock{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"vf" = ( +/obj/structure/railing{ + max_integrity = 70 + }, +/obj/effect/turf_decal/industrial/traffic/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"vh" = ( +/obj/structure/table/wood/fancy/orange, +/obj/item/flashlight/lamp/green, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"vv" = ( +/obj/structure/railing{ + max_integrity = 70 + }, +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"vB" = ( +/obj/item/stack/ore/salvage/scraptitanium, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"vC" = ( +/obj/machinery/light/directional/south, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"vH" = ( +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 5 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"vN" = ( +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/structure/floodlight_frame, +/obj/machinery/light/directional/west, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"vU" = ( +/obj/effect/turf_decal/miskilamo_small/right, +/turf/open/floor/plating/wasteplanet/rust/lit, +/area/ruin/wasteplanet) +"vV" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 8 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"vX" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"vZ" = ( +/obj/structure/fence{ + dir = 8 + }, +/turf/open/floor/plating/wasteplanet/rust/lit, +/area/ruin/wasteplanet) +"wb" = ( +/obj/machinery/light/dim/directional/south, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 10 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"wc" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/corner/transparent/neutral/mono, +/obj/effect/turf_decal/corner/transparent/blue/border{ + dir = 9 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"wf" = ( +/obj/structure/window/reinforced/fulltile/shuttle, +/obj/structure/grille, +/obj/structure/curtain/cloth/grey, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"wg" = ( +/obj/structure/fence/end{ + dir = 4 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"wr" = ( +/obj/effect/turf_decal/industrial/warning/dust{ + dir = 8 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"wv" = ( +/obj/effect/turf_decal/industrial/traffic, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"ww" = ( +/obj/effect/turf_decal/industrial/traffic/fulltile, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/firedoor/closed, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"wZ" = ( +/obj/machinery/suit_storage_unit/independent/engineering, +/obj/effect/turf_decal/industrial/hatch/orange, +/obj/effect/turf_decal/industrial/traffic/corner, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"xe" = ( +/obj/effect/turf_decal/industrial/traffic{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/caution, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"xf" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/industrial/warning/dust, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"xh" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"xl" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 9 + }, +/obj/item/trash/raisins{ + pixel_x = 15; + pixel_y = -2 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"xs" = ( +/obj/structure/chair/office{ + dir = 4; + pixel_x = 8 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"xO" = ( +/obj/effect/turf_decal/corner/transparent/orange, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"yb" = ( +/obj/effect/decal/cleanable/oil/slippery, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"yi" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"yn" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 9 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"yp" = ( +/obj/structure/table, +/obj/item/storage/ration/chicken_wings_hot_sauce, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"yr" = ( +/obj/machinery/suit_storage_unit/open, +/obj/effect/turf_decal/industrial/hatch/orange, +/obj/effect/turf_decal/industrial/traffic/corner{ + dir = 1 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"yz" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 5 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"yA" = ( +/obj/structure/bed, +/obj/item/bedsheet/grey, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"yC" = ( +/obj/machinery/door/airlock{ + dir = 4 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"yD" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"yK" = ( +/turf/closed/wall/r_wall, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"yR" = ( +/obj/structure/railing{ + max_integrity = 70 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"yU" = ( +/obj/structure/sign/warning/docking{ + pixel_y = 32 + }, +/obj/effect/turf_decal/industrial/warning/dust{ + dir = 5 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"zp" = ( +/obj/effect/turf_decal/industrial/hatch/orange, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"zt" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 9 + }, +/obj/structure/marker_beacon{ + picked_color = "Burgundy" + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"zv" = ( +/obj/effect/turf_decal/industrial/traffic/corner, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 9 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"zw" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/industrial/warning/dust{ + dir = 1 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"zB" = ( +/obj/structure/closet, +/obj/item/clothing/shoes/workboots, +/obj/item/clothing/under/rank/engineering/atmospheric_technician, +/obj/item/clothing/head/hardhat, +/obj/item/pipe_dispenser, +/obj/structure/sign/poster/contraband/atmosia_independence{ + pixel_x = -28 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"zN" = ( +/obj/structure/spawner/hivebot, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"zP" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"zQ" = ( +/obj/effect/turf_decal/corner/transparent/lime/border{ + dir = 4 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"zZ" = ( +/obj/machinery/power/floodlight, +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"Ab" = ( +/obj/effect/turf_decal/industrial/hatch/blue, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"An" = ( +/obj/machinery/suit_storage_unit/inherit/industrial, +/obj/item/tank/jetpack/void, +/obj/effect/decal/cleanable/cobweb, +/obj/item/clothing/suit/space/nasavoid{ + name = "Old Voidsuit"; + desc = "An old space suit that hasn't seen use in several decades." + }, +/obj/item/clothing/head/helmet/space/nasavoid{ + name = "Voidsuit Helmet"; + desc = "An old space suit helmet with a scratched visor." + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"Ap" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"Aq" = ( +/obj/machinery/light/dim/directional/east, +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 6 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"Av" = ( +/obj/structure/bed, +/obj/item/bedsheet/hos, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"AS" = ( +/obj/effect/decal/cleanable/oil/slippery, +/obj/effect/decal/cleanable/robot_debris, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"AZ" = ( +/obj/machinery/ltsrbt, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"Bk" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/corner/transparent/lime/border{ + dir = 4 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"Bn" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"Bs" = ( +/obj/structure/table, +/obj/effect/turf_decal/corner/transparent/neutral/diagonal, +/obj/item/reagent_containers/food/snacks/canned/beans{ + pixel_x = 6; + pixel_y = 14 + }, +/obj/item/reagent_containers/food/snacks/canned/peaches{ + pixel_x = -6; + pixel_y = 14 + }, +/obj/item/reagent_containers/food/snacks/canned/beans{ + pixel_x = 6; + pixel_y = 8 + }, +/obj/item/reagent_containers/food/snacks/canned/beans{ + pixel_x = 6; + pixel_y = 2 + }, +/obj/item/trash/can/food/peaches{ + pixel_x = -6; + pixel_y = 8 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"BJ" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/open/floor/plasteel/stairs{ + dir = 1 + }, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"BL" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 5 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"BO" = ( +/obj/machinery/vending/snack/teal, +/obj/item/stack/tape/industrial/electrical{ + pixel_y = 16 + }, +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 5 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"BP" = ( +/obj/structure/chair/office{ + dir = 4 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"BS" = ( +/obj/machinery/suit_storage_unit/independent/engineering, +/obj/effect/turf_decal/industrial/hatch/orange, +/obj/structure/sign/warning/nosmoking{ + pixel_x = -28 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"BW" = ( +/obj/machinery/power/port_gen/pacman, +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"Cf" = ( +/obj/structure/sign/warning/docking{ + pixel_y = -32 + }, +/obj/effect/turf_decal/industrial/warning/dust{ + dir = 6 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"Ci" = ( +/obj/item/chair{ + pixel_x = -13; + pixel_y = -7 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"Cs" = ( +/obj/structure/fence/cut/large, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"Cw" = ( +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"Cx" = ( +/obj/machinery/computer/monitor/retro{ + dir = 8 + }, +/obj/effect/turf_decal/corner/transparent/lime/border, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"CC" = ( +/obj/effect/decal/cleanable/oil/slippery, +/obj/item/stack/ore/salvage/scrapuranium, +/obj/item/stack/ore/salvage/scrapmetal, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"CK" = ( +/obj/machinery/door/airlock, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/blood/tracks, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/lime/border{ + dir = 8 + }, +/obj/effect/turf_decal/corner/transparent/lime/border{ + dir = 4 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"CU" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/mob/living/simple_animal/hostile/hivebot/wasteplanet, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"CV" = ( +/obj/structure/fence/cut/medium, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"Dc" = ( +/obj/effect/turf_decal/industrial/traffic, +/obj/effect/turf_decal/industrial/caution{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"De" = ( +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 10 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"Dk" = ( +/obj/item/stack/ore/salvage/scraptitanium, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"Dp" = ( +/obj/structure/marker_beacon{ + picked_color = "Burgundy" + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"Dz" = ( +/obj/structure/chair/stool/bar{ + dir = 8; + pixel_x = -8 + }, +/obj/effect/mob_spawn/human/corpse/charredskeleton, +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"DA" = ( +/obj/effect/turf_decal/industrial/warning/dust{ + dir = 1 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"DE" = ( +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"DJ" = ( +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 5 + }, +/obj/structure/chair, +/obj/item/instrument/banjo, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"DN" = ( +/obj/structure/rack, +/obj/effect/turf_decal/industrial/traffic/corner{ + dir = 4 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"Ea" = ( +/obj/structure/closet/crate/bin, +/obj/item/trash/boritos, +/obj/item/trash/candy, +/obj/item/trash/candy, +/obj/item/trash/raisins, +/obj/item/trash/syndi_cakes, +/obj/item/trash/sosjerky, +/obj/item/toy/beach_ball/holoball, +/obj/machinery/light/directional/south, +/obj/item/trash/can, +/obj/item/trash/can, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"Ei" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 9 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"El" = ( +/obj/structure/bed/double{ + dir = 4 + }, +/obj/item/bedsheet/double/orange{ + dir = 1 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"Ep" = ( +/obj/structure/table/reinforced, +/obj/item/radio/intercom/table{ + dir = 1 + }, +/obj/item/reagent_containers/food/drinks/waterbottle/large/empty{ + pixel_y = 12; + pixel_x = -16 + }, +/obj/item/reagent_containers/food/drinks/waterbottle/large/empty{ + pixel_x = -13; + pixel_y = 19 + }, +/obj/item/reagent_containers/food/drinks/waterbottle/large/empty{ + pixel_y = 4; + pixel_x = -14 + }, +/obj/effect/turf_decal/corner/transparent/lime/border{ + dir = 4 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"Er" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/miskilamo_small, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"EH" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/stairs{ + dir = 4 + }, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"EK" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"EM" = ( +/obj/structure/mecha_wreckage/ripley/firefighter, +/obj/effect/mob_spawn/human/corpse/charredskeleton, +/obj/effect/decal/cleanable/ash, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"EU" = ( +/obj/effect/decal/cleanable/oil, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating/wasteplanet/rust, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"EX" = ( +/obj/structure/table/wood, +/obj/structure/sink/chem, +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 9 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"Fb" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"Ff" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/food/drinks/bottle/absinthe, +/obj/item/clothing/head/hardhat{ + pixel_x = 11 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"Fh" = ( +/obj/effect/decal/cleanable/ash, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"Fm" = ( +/obj/structure/closet/wall/directional/north, +/obj/item/toy/figure/bartender, +/obj/item/gun/energy/laser/retro, +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 6 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"Fn" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 9 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"Fq" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"FC" = ( +/obj/machinery/door/airlock, +/obj/effect/turf_decal/corner/transparent/neutral/mono, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"FG" = ( +/obj/machinery/suit_storage_unit/open, +/obj/effect/turf_decal/industrial/hatch/orange, +/obj/structure/sign/warning/nosmoking{ + pixel_x = 28 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"FH" = ( +/obj/structure/table, +/obj/item/flashlight/lamp, +/obj/item/reagent_containers/food/snacks/ration/side/beef_sticks{ + pixel_x = 10 + }, +/obj/item/reagent_containers/food/snacks/chips, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"FP" = ( +/obj/machinery/light/small/directional/east, +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"FW" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"Gf" = ( +/obj/machinery/door/airlock{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"Gj" = ( +/obj/structure/grille/broken, +/obj/item/stack/rods, +/obj/item/shard, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"Gk" = ( +/obj/structure/railing{ + max_integrity = 70 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/stairs{ + dir = 8 + }, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"Gl" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"Go" = ( +/obj/structure/railing{ + max_integrity = 70 + }, +/obj/effect/turf_decal/industrial/traffic{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"Gq" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"GK" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/structure/floodlight_frame, +/obj/item/shard, +/obj/item/stack/cable_coil/cut/red, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"GM" = ( +/turf/closed/wall/r_wall, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"GN" = ( +/obj/structure/table, +/obj/item/stamp/qm{ + pixel_y = 4; + pixel_x = 14 + }, +/obj/item/stamp{ + pixel_x = 14 + }, +/obj/item/stamp/denied{ + pixel_y = -4; + pixel_x = 14 + }, +/obj/item/paper, +/obj/item/pen, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"GO" = ( +/obj/effect/turf_decal/industrial/traffic/corner{ + dir = 8 + }, +/obj/structure/closet/firecloset/full, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 6 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"GV" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"GX" = ( +/obj/machinery/power/smes, +/obj/structure/cable/yellow, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"Hb" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"Hf" = ( +/obj/item/reagent_containers/food/drinks/drinkingglass{ + pixel_y = -4 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass{ + pixel_y = -4; + pixel_x = -8 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass{ + pixel_y = -4; + pixel_x = 8 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass{ + pixel_y = 9; + pixel_x = 4 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass{ + pixel_y = 9; + pixel_x = -4 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass{ + pixel_y = 22 + }, +/obj/structure/table/wood, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"Hh" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 8 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"Hm" = ( +/obj/machinery/door/airlock/engineering, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/barricade/wooden/crude, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"Hp" = ( +/obj/effect/turf_decal/industrial/hatch/orange, +/obj/item/stack/sheet/metal/twenty, +/obj/item/stack/sheet/glass/twenty, +/obj/structure/closet/crate/secure/plasma, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"HD" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/effect/turf_decal/corner/transparent/orange, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"HR" = ( +/obj/structure/chair/sofa/brown/left{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 10 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"HY" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 8 + }, +/obj/effect/turf_decal/corner/transparent/lime/border{ + dir = 4 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"Ic" = ( +/obj/structure/fence, +/obj/effect/turf_decal/industrial/warning/dust{ + dir = 6 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"If" = ( +/obj/structure/marker_beacon{ + picked_color = "Burgundy" + }, +/obj/effect/turf_decal/industrial/warning/dust{ + dir = 4 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"Il" = ( +/obj/structure/table/wood/fancy/orange, +/obj/item/toy/plush/moth/firewatch, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"Iq" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/drip, +/turf/open/floor/plasteel/stairs{ + dir = 8 + }, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"IB" = ( +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"IF" = ( +/obj/machinery/door/airlock/external, +/obj/effect/turf_decal/industrial/traffic/fulltile, +/obj/machinery/door/firedoor, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"IM" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/obj/effect/turf_decal/corner/transparent/lime/border{ + dir = 4 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"IQ" = ( +/obj/item/cutting_board, +/obj/structure/table, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/corner/transparent/neutral/diagonal, +/obj/item/melee/knife/kitchen, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"IS" = ( +/obj/item/radio/intercom/wideband/table{ + dir = 8 + }, +/obj/structure/table, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"Je" = ( +/obj/structure/chair/stool/bar{ + dir = 1; + pixel_y = 12 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"JL" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"JR" = ( +/obj/structure/chair/sofa/brown/directional{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 10 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"JX" = ( +/obj/machinery/light/dim/directional/south, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 10 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"Kc" = ( +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"Km" = ( +/obj/machinery/vending/cola/red, +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 9 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"Kx" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/effect/turf_decal/corner/transparent/neutral/diagonal, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"KG" = ( +/mob/living/simple_animal/hostile/hivebot/wasteplanet/ranged/rapid, +/obj/structure/catwalk/over, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"KI" = ( +/obj/structure/tank_dispenser/oxygen, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"KM" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/effect/turf_decal/industrial/warning/dust/corner{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/warning/dust/corner{ + dir = 4 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"KW" = ( +/turf/open/floor/plating/wasteplanet/rust, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"Lc" = ( +/obj/machinery/power/shieldwallgen/atmos/roundstart{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-10" + }, +/turf/open/floor/plating/wasteplanet/rust, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"Lq" = ( +/obj/machinery/suit_storage_unit/open, +/obj/effect/turf_decal/industrial/hatch/orange, +/obj/effect/turf_decal/industrial/traffic/corner{ + dir = 4 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"Lu" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/qm{ + dir = 1 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"Lv" = ( +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"Lw" = ( +/turf/open/floor/plating/asteroid/wasteplanet, +/area/ruin/wasteplanet) +"LA" = ( +/obj/item/stack/sheet/plastic, +/obj/item/stack/ore/salvage/scrapmetal/five, +/obj/item/circuitboard/computer/shuttle/helm, +/obj/effect/turf_decal/corner/transparent/lime/border{ + dir = 1 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"LB" = ( +/obj/structure/catwalk/over, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"LX" = ( +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/closet/wall/directional/west, +/obj/item/gun/ballistic/revolver, +/obj/item/clothing/suit/hooded/wintercoat/captain, +/obj/item/storage/firstaid/o2, +/obj/machinery/light/small/broken/directional/north, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"Mf" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 10 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"Mh" = ( +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"Mi" = ( +/turf/closed/wall/r_wall, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"Ml" = ( +/obj/effect/turf_decal/industrial/hatch/orange, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"Mm" = ( +/obj/effect/turf_decal/miskilamo_small/left, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"Mn" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 10 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"Mt" = ( +/obj/machinery/door/airlock/external, +/obj/effect/turf_decal/industrial/traffic/fulltile, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"Mx" = ( +/obj/machinery/power/shieldwallgen/atmos/roundstart{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-6" + }, +/obj/effect/decal/cleanable/blood/tracks, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"Mz" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/blood/tracks, +/obj/effect/turf_decal/corner/transparent/lime/bordercorner{ + dir = 8 + }, +/obj/effect/turf_decal/corner/transparent/lime/bordercorner{ + dir = 1 + }, +/obj/structure/spawner/hivebot, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"MB" = ( +/obj/machinery/door/airlock/external, +/obj/effect/turf_decal/industrial/traffic/fulltile, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/firedoor, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"ME" = ( +/obj/effect/turf_decal/industrial/traffic/corner{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"MF" = ( +/turf/closed/wall, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"MJ" = ( +/obj/structure/marker_beacon{ + picked_color = "Burgundy" + }, +/turf/open/floor/plating/wasteplanet/rust/lit, +/area/ruin/wasteplanet) +"MO" = ( +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/structure/cable{ + icon_state = "0-4" + }, +/mob/living/simple_animal/hostile/hivebot/wasteplanet, +/obj/machinery/light/directional/west, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"MX" = ( +/obj/structure/railing{ + max_integrity = 70 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/light/directional/north, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"MZ" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"Na" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"Nd" = ( +/obj/effect/turf_decal/industrial/traffic/fulltile, +/obj/item/stack/ore/salvage/scrapmetal/five, +/obj/machinery/door/firedoor/closed, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"Nf" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/effect/turf_decal/industrial/warning/dust, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"Nu" = ( +/obj/structure/reagent_dispensers/foamtank, +/obj/item/extinguisher/advanced, +/obj/structure/sign/warning/nosmoking{ + pixel_x = 28 + }, +/turf/open/floor/plating/wasteplanet/rust/lit, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"Ny" = ( +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"NG" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"NI" = ( +/obj/effect/turf_decal/industrial/hatch/orange, +/obj/item/stack/sheet/mineral/titanium/twenty, +/obj/item/stack/ore/salvage/scraptitanium/five, +/obj/structure/closet/crate/secure/plasma, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet) +"NO" = ( +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/power/floodlight, +/obj/effect/turf_decal/industrial/warning/dust{ + dir = 1 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"Of" = ( +/obj/effect/turf_decal/industrial/hatch/red, +/obj/item/stack/ore/salvage/scrapuranium/five, +/obj/item/stack/ore/salvage/scrapuranium/five{ + pixel_y = -6 + }, +/obj/item/stack/ore/salvage/scrapuranium{ + pixel_y = 5 + }, +/obj/structure/closet/crate/radiation, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"Og" = ( +/obj/effect/decal/cleanable/robot_debris, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"Oi" = ( +/obj/structure/sign/warning/nosmoking{ + pixel_x = -28 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 9 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"Ok" = ( +/obj/structure/table, +/obj/effect/turf_decal/corner/transparent/neutral/mono, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"Oq" = ( +/obj/machinery/computer/mech_bay_power_console{ + dir = 4 + }, +/obj/structure/sign/warning/electricshock{ + pixel_x = -28 + }, +/obj/machinery/light/directional/north, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"Ow" = ( +/obj/structure/spawner/hivebot, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"OB" = ( +/obj/structure/marker_beacon{ + picked_color = "Lime" + }, +/obj/effect/turf_decal/industrial/warning/dust{ + dir = 8 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"OK" = ( +/turf/open/floor/plating/wasteplanet/rust, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"OM" = ( +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"OX" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"OY" = ( +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"Pi" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/turf_decal/corner/transparent/lime/border, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"Ps" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"PJ" = ( +/obj/structure/rack, +/obj/effect/turf_decal/industrial/traffic/corner{ + dir = 8 + }, +/obj/machinery/light/directional/south, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"PK" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"PX" = ( +/obj/structure/janitorialcart, +/obj/item/storage/bag/trash, +/obj/item/mop{ + pixel_x = -6 + }, +/obj/item/clothing/shoes/galoshes{ + pixel_x = 16; + pixel_y = -8 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"Qc" = ( +/obj/machinery/vending/cigarette, +/obj/effect/turf_decal/industrial/warning/full, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"Qe" = ( +/obj/machinery/power/shuttle/engine/electric{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"Ql" = ( +/obj/effect/turf_decal/industrial/hatch/orange, +/obj/item/clothing/suit/space/hardsuit/engine, +/obj/structure/closet/crate/engineering, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"QS" = ( +/mob/living/simple_animal/hostile/hivebot/wasteplanet/ranged/rapid, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"Ri" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 4 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"Rn" = ( +/obj/structure/chair/stool/bar{ + dir = 1; + pixel_y = 12 + }, +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 9 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"Rt" = ( +/obj/structure/closet/crate/bin, +/obj/item/trash/syndi_cakes, +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 10 + }, +/obj/effect/decal/cleanable/plasma, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"Rv" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor/window, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"RD" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/blood/tracks, +/obj/item/stack/ore/salvage/scrapmetal/five, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/effect/turf_decal/corner/transparent/lime/border{ + dir = 8 + }, +/obj/effect/turf_decal/corner/transparent/lime/border{ + dir = 4 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"RE" = ( +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"RO" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/light/small/broken/directional/east, +/turf/open/floor/plating/wasteplanet/rust, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"RR" = ( +/obj/structure/reagent_dispensers/watertank/high, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"RX" = ( +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"Se" = ( +/obj/structure/fence/cut/large{ + dir = 4 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"Sg" = ( +/obj/effect/turf_decal/industrial/traffic{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"Sl" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"Sm" = ( +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 5 + }, +/obj/item/chair{ + pixel_x = -7; + pixel_y = -7 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"Sq" = ( +/obj/machinery/washing_machine, +/obj/effect/turf_decal/corner/transparent/neutral/mono, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"Sw" = ( +/obj/structure/girder, +/obj/item/stack/sheet/mineral/titanium, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"SA" = ( +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/cobweb, +/obj/structure/sign/poster/official/cleanliness{ + pixel_y = 32 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"SP" = ( +/obj/structure/closet/crate/trashcart/laundry, +/obj/item/clothing/gloves/color/yellow, +/obj/effect/turf_decal/corner/transparent/neutral/mono, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"SZ" = ( +/obj/machinery/airalarm/directional/west, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 9 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"Te" = ( +/obj/machinery/cell_charger, +/obj/structure/table, +/obj/item/stock_parts/cell/hyper/empty, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"Tf" = ( +/obj/effect/turf_decal/industrial/traffic{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/caution, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"Th" = ( +/obj/effect/turf_decal/industrial/hatch/red, +/obj/structure/closet/crate/secure/weapon, +/obj/item/gun/energy/lasercannon, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"Tj" = ( +/obj/structure/closet/wall/directional/east, +/obj/item/clothing/under/utility, +/obj/item/clothing/under/utility, +/obj/item/clothing/shoes/workboots, +/obj/effect/turf_decal/corner/transparent/lime/border{ + dir = 4 + }, +/obj/effect/turf_decal/corner/transparent/lime/border{ + dir = 8 + }, +/obj/item/reagent_containers/food/snacks/ration/entree/beef_strips, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"Ts" = ( +/obj/structure/rack, +/obj/item/storage/toolbox/electrical{ + pixel_y = 8 + }, +/obj/item/storage/toolbox/electrical, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"TB" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/blood/tracks, +/obj/machinery/light/small/broken/directional/east, +/obj/effect/turf_decal/corner/transparent/lime/border{ + dir = 8 + }, +/obj/effect/turf_decal/corner/transparent/lime/border{ + dir = 4 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"TE" = ( +/obj/structure/fence, +/obj/effect/turf_decal/industrial/warning/dust{ + dir = 4 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"TK" = ( +/obj/effect/turf_decal/industrial/traffic{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"TN" = ( +/obj/machinery/vending/snack/orange, +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 6 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"TX" = ( +/obj/machinery/hydroponics/constructable, +/obj/machinery/light/directional/east, +/obj/item/seeds/kudzu, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"TY" = ( +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/drinks/beer{ + dir = 4 + }, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 9 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"Ub" = ( +/obj/structure/sign/warning/coldtemp{ + pixel_x = 32 + }, +/obj/effect/turf_decal/corner/transparent/neutral/mono, +/obj/effect/turf_decal/corner/transparent/blue/border{ + dir = 6 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"Uc" = ( +/obj/structure/window/reinforced/fulltile/shuttle, +/obj/structure/grille, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"Ud" = ( +/obj/item/storage/bag/plants, +/obj/item/plant_analyzer, +/obj/item/cultivator{ + pixel_x = -4 + }, +/obj/item/shovel/spade{ + pixel_x = 6 + }, +/obj/structure/rack, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"Uj" = ( +/obj/effect/turf_decal/industrial/hatch/orange, +/obj/item/clothing/gloves/color/yellow, +/obj/item/clothing/gloves/color/yellow, +/obj/item/clothing/gloves/color/yellow, +/obj/structure/closet/crate/engineering/electrical, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"Us" = ( +/obj/effect/turf_decal/corner/transparent/neutral/mono, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"Uz" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 6 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"UF" = ( +/obj/structure/fence, +/obj/effect/turf_decal/industrial/warning/dust{ + dir = 10 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"UP" = ( +/obj/structure/table_frame, +/obj/item/stack/ore/salvage/scrapmetal, +/obj/item/paper/crumpled{ + pixel_x = -3; + pixel_y = 3 + }, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"UR" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/food/drinks/waterbottle/large{ + pixel_y = 20; + pixel_x = 10 + }, +/obj/item/radio/intercom/wideband/table{ + dir = 4 + }, +/obj/machinery/light/small/broken/directional/east, +/obj/item/reagent_containers/food/snacks/ration/pack/orange_beverage{ + pixel_x = 9 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"UW" = ( +/turf/closed/wall, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"Va" = ( +/obj/structure/table, +/obj/item/reagent_containers/food/drinks/bottle/rum{ + pixel_y = 8; + pixel_x = -4 + }, +/obj/item/reagent_containers/food/drinks/bottle/rum{ + pixel_x = -4 + }, +/obj/item/reagent_containers/food/drinks/bottle/rum{ + pixel_y = -8; + pixel_x = -4 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"Vp" = ( +/obj/effect/turf_decal/industrial/traffic/corner{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"Vq" = ( +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 4 + }, +/turf/open/floor/plating/asteroid/wasteplanet, +/area/ruin/wasteplanet) +"Vx" = ( +/obj/item/stack/ore/salvage/scrapmetal/five, +/obj/structure/frame, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"VG" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/structure/sign/warning/explosives{ + pixel_x = -28 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"VK" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/turf_decal/corner/transparent/lime/border{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/lime/border, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"VO" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/mineral/stacking_unit_console{ + pixel_y = 28 + }, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 6 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"VQ" = ( +/obj/structure/marker_beacon{ + picked_color = "Burgundy" + }, +/obj/effect/turf_decal/industrial/warning/dust{ + dir = 8 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"VS" = ( +/obj/machinery/computer/mech_bay_power_console{ + dir = 8 + }, +/obj/structure/sign/warning/electricshock{ + pixel_x = 28 + }, +/obj/machinery/light/broken/directional/north, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"VZ" = ( +/obj/machinery/power/port_gen/pacman, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/effect/turf_decal/industrial/hatch/yellow, +/turf/open/floor/plating/wasteplanet/rust, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"Wc" = ( +/obj/machinery/light/dim/directional/north, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 5 + }, +/obj/structure/table, +/obj/item/reagent_containers/food/drinks/soda_cans/cola{ + pixel_y = 13; + pixel_x = -6 + }, +/obj/item/flashlight/lamp, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"Wn" = ( +/obj/structure/fence, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"Wu" = ( +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 6 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"Wy" = ( +/obj/structure/bed{ + dir = 4 + }, +/obj/item/bedsheet/grey{ + dir = 1 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"Wz" = ( +/obj/effect/decal/cleanable/blood/tracks{ + dir = 6 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"WB" = ( +/obj/effect/turf_decal/industrial/traffic, +/obj/effect/turf_decal/industrial/caution{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/components/binary/volume_pump/on, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"WI" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/drip, +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 6 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"WL" = ( +/obj/effect/turf_decal/industrial/traffic/corner, +/obj/structure/closet/bombcloset, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 9 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"WP" = ( +/turf/open/floor/plating/wasteplanet/rust/lit, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"WQ" = ( +/obj/structure/sink{ + dir = 8; + pixel_x = 11 + }, +/obj/structure/mirror{ + pixel_x = 28 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"WS" = ( +/obj/structure/rack, +/obj/item/storage/toolbox/drone{ + pixel_y = 8 + }, +/obj/item/storage/toolbox/drone{ + pixel_y = -8 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"WW" = ( +/obj/structure/closet, +/obj/item/clothing/shoes/cowboy, +/obj/item/clothing/under/rank/engineering/engineer/hazard, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"Xr" = ( +/obj/effect/turf_decal/industrial/traffic/corner{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/power/floodlight, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"XG" = ( +/obj/structure/sign/warning/docking{ + pixel_y = -32 + }, +/obj/effect/turf_decal/industrial/warning/dust{ + dir = 10 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"XI" = ( +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 5 + }, +/obj/item/kirbyplants/dead{ + pixel_x = 10; + pixel_y = 10 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"XY" = ( +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"Ya" = ( +/obj/structure/table/reinforced, +/obj/item/radio/intercom/table{ + dir = 1 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"Yb" = ( +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 10 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"Yh" = ( +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"Yi" = ( +/obj/structure/sign/poster/contraband/missing_gloves{ + pixel_y = 32 + }, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 5 + }, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"Yp" = ( +/mob/living/simple_animal/hostile/hivebot/wasteplanet/strong, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"Yq" = ( +/obj/structure/table, +/obj/item/radio/old{ + pixel_y = 12; + pixel_x = -11 + }, +/obj/item/radio/weather_monitor{ + pixel_y = 11 + }, +/obj/item/stack/cable_coil/cut/red{ + pixel_y = 10 + }, +/obj/item/stack/tape/industrial/electrical, +/obj/machinery/light/directional/north, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"Yu" = ( +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/structure/crate_shelf, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"Yy" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"YE" = ( +/obj/structure/fence/door/opened, +/obj/effect/decal/cleanable/blood/tracks, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/industrial/warning/dust{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning/dust{ + dir = 8 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"YJ" = ( +/obj/structure/extinguisher_cabinet/directional/east, +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 6 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"YK" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen) +"YW" = ( +/obj/effect/turf_decal/industrial/hatch/orange, +/mob/living/simple_animal/hostile/hivebot/wasteplanet/ranged/rapid, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet) +"Za" = ( +/obj/structure/table/reinforced, +/obj/machinery/light/small/broken/directional/west, +/obj/item/ration_heater, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"Ze" = ( +/obj/machinery/power/smes/shuttle/precharged{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"Zr" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/turf_decal/corner/transparent/orange{ + dir = 9 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"Zu" = ( +/obj/structure/closet/crate{ + name = "ration crate" + }, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/machinery/light/small/broken/directional/west, +/obj/effect/spawner/lootdrop/ration, +/turf/open/floor/plasteel/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship) +"Zy" = ( +/obj/structure/fence/end{ + dir = 8 + }, +/turf/open/floor/plating/wasteplanet/lit, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"ZO" = ( +/obj/structure/railing{ + max_integrity = 70 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/stairs{ + dir = 4 + }, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) +"ZP" = ( +/obj/structure/chair/sofa/brown/right{ + dir = 1 + }, +/obj/effect/turf_decal/corner/transparent/blue{ + dir = 10 + }, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms) +"ZQ" = ( +/obj/effect/turf_decal/industrial/traffic/corner{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/plating/wasteplanet/rust/lit, +/area/ruin/wasteplanet) +"ZW" = ( +/obj/structure/rack, +/turf/open/floor/plasteel/dark/wasteplanet, +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay) + +(1,1,1) = {" +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +pj +pj +td +td +td +cg +td +td +td +cg +td +td +td +cg +td +td +td +pj +pj +"} +(2,1,1) = {" +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +pj +gx +VQ +OM +wr +wr +wr +OM +OM +wr +wr +wr +wr +wr +wr +OM +OB +XG +pj +"} +(3,1,1) = {" +tn +tn +tn +tn +tn +tn +tn +tn +tn +gg +gg +gg +gg +gg +gg +gg +gg +gg +gg +gg +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +gg +Lw +ry +OM +OM +OM +OM +OM +jt +OM +OM +OM +OM +jt +jt +OM +OM +OM +OM +de +ry +"} +(4,1,1) = {" +tn +tn +tn +tn +tn +tn +tn +gg +gg +gg +gg +gg +gg +gg +gg +gg +gg +pj +gg +gg +gg +gg +gg +tn +tn +tn +tn +gg +gg +gg +gg +Lw +ry +DA +LB +LB +OM +LB +LB +LB +LB +LB +OM +OM +OM +LB +LB +LB +jt +de +ry +"} +(5,1,1) = {" +tn +tn +tn +tn +tn +gg +gg +gg +gg +gg +gg +GM +GM +GM +GM +Mi +gg +gg +gg +gg +gg +gg +gg +gg +gg +gg +gg +gg +pj +gg +Lw +Lw +ry +DA +jt +OM +OM +OM +OM +OM +OM +OM +OM +OM +OM +OM +OM +OM +OM +de +ry +"} +(6,1,1) = {" +tn +tn +tn +tn +gg +gg +gg +GM +GM +GM +GM +GM +cv +qw +jT +Mi +Mi +Mi +Mi +Mi +Mi +Mi +Mi +gg +gg +gg +gg +gg +gg +gg +Lw +Lw +mK +DA +MJ +OM +px +Qe +Qe +px +OM +OM +OM +px +Qe +Qe +px +OM +lB +OM +mK +"} +(7,1,1) = {" +tn +tn +tn +gg +gg +gg +gg +GM +IS +sL +AZ +MF +kY +ek +ok +gs +zZ +vN +Te +RX +MO +BW +Mi +Mi +gg +pj +gg +gg +Lw +Lw +Lw +Lw +ry +DA +OM +OM +px +Ze +Ze +px +px +Uc +px +px +Ze +Ze +px +OM +OM +OM +ry +"} +(8,1,1) = {" +tn +tn +gg +gg +gg +pj +gg +GM +bp +iB +Yp +nH +BL +ba +kS +Hm +MZ +ke +Gl +sB +fe +GV +ul +Mi +gg +gg +gg +Lw +Lw +Lw +Lw +Lw +Se +OM +OM +sK +px +oe +nr +px +An +KI +Vx +px +nr +oe +px +px +LB +de +ry +"} +(9,1,1) = {" +tn +tn +gg +gg +gg +gg +gg +GM +MF +MF +MF +MF +kY +Sl +ok +gs +fz +iW +OY +CU +GX +tK +lY +Mi +gg +gg +gg +Lw +Vq +Lw +Lw +Lw +ry +DA +OM +sK +VZ +NG +Na +lb +jY +nf +eN +gk +Gq +tY +RR +px +OM +de +ry +"} +(10,1,1) = {" +tn +gg +gg +gg +gg +GM +GM +GM +tT +bi +PX +MF +oK +Fq +wb +gs +gs +gs +gs +gs +gs +gs +Mi +Mi +Mi +Mi +Mi +mZ +Wn +mZ +mZ +UF +mK +NO +Dp +sK +fA +Bn +Ap +px +px +vb +px +px +Ud +Mh +lV +Uc +lB +de +mK +"} +(11,1,1) = {" +tn +gg +gg +gg +gg +GM +Va +bu +Yh +JL +Yh +MF +kY +Sl +ok +gs +qt +qs +lq +Zr +Oi +zv +Mi +Lq +BS +wZ +Mi +ME +lG +df +df +OM +ry +zw +OM +sK +sz +RO +px +px +SA +VK +DE +px +px +oW +TX +px +OM +de +vZ +"} +(12,1,1) = {" +tn +gg +gg +gg +gg +GM +Fm +Wu +Aq +nx +Wu +MF +kY +Sl +ok +gs +Gk +Ny +EU +qB +Of +dv +Mt +aM +kJ +pr +IF +ey +lG +lT +df +de +ry +zw +OM +sK +px +px +px +Zu +IB +eL +kw +Za +px +px +px +px +LB +de +ry +"} +(13,1,1) = {" +gg +gg +pj +gg +GM +GM +sF +MF +MF +Gf +MF +MF +aH +Fb +kS +tL +hn +Ny +Th +kD +qB +Dc +hA +Tf +lO +WB +MB +je +yi +df +jt +OM +vZ +zw +OM +px +Yu +dY +px +bA +pt +eL +kw +dP +px +ah +ni +px +OM +de +ry +"} +(14,1,1) = {" +gg +gg +gg +gg +GM +TY +ix +EX +Rn +cF +Km +MF +kY +Sl +Lv +gs +MX +eS +iK +iK +is +jI +Mt +ne +ty +pr +IF +ki +EK +qd +qd +Nf +mK +zw +zt +Mx +hr +mi +RD +TB +to +Mz +tD +TB +CK +oh +Tj +wf +lB +jt +mK +"} +(15,1,1) = {" +gg +gg +gg +gg +GM +gP +Yh +aI +Je +YK +hO +MF +kY +cz +ok +gs +le +Hb +Hp +bB +HD +GO +Mi +ut +aQ +PJ +Mi +Vp +OM +Ab +Ab +xf +ry +zw +hW +XY +il +Pi +px +px +al +Bk +oz +px +px +in +px +px +OM +jt +ry +"} +(16,1,1) = {" +gg +gg +gg +gg +GM +Hf +aI +Ff +uw +WI +cI +gO +Lv +rQ +ok +Rv +yR +nL +bc +ga +re +Mi +Mi +bU +bU +bU +Mi +wg +OM +Ab +nV +hP +YE +KM +Wz +Lc +iR +os +qS +px +px +dI +px +px +dn +kc +WQ +wf +LB +de +ry +"} +(17,1,1) = {" +gg +pj +gg +gg +GM +pF +gb +Dz +oS +fH +Iq +MF +Lv +rQ +Lv +iD +Sg +vf +mS +cd +De +Mi +Oq +pG +Ml +WS +VG +oT +Mm +jt +Ab +OM +ry +jt +OM +px +sK +IB +sK +px +LX +aw +pY +px +px +qy +px +px +OM +de +ry +"} +(18,1,1) = {" +gg +gg +gg +gg +GM +sT +OX +OX +bO +Er +kn +qo +xh +rw +Lv +Rv +Qc +Go +Ny +Ny +De +Rv +RE +WP +RE +RE +RE +mq +hH +OM +OM +OM +mK +jt +Dp +OM +Sw +IB +sK +Ep +zQ +zQ +HY +IM +px +et +px +OM +Fh +de +mK +"} +(19,1,1) = {" +gg +gg +gg +gg +GM +lW +Ci +vX +Yb +jd +EH +MF +Lv +rQ +OK +Rv +TK +eO +bS +mS +De +Mi +VS +pG +fp +Ts +Nu +oT +vU +NI +jy +OM +ry +DA +OM +vB +Kc +Kc +sK +Ya +nP +rd +gV +pz +px +px +px +OM +OM +OM +ry +"} +(20,1,1) = {" +gg +gg +gg +gg +GM +yp +pQ +pQ +vV +yn +xl +gO +OK +rQ +Lv +Rv +yR +ZO +Uj +dw +vC +Mi +Mi +bU +bU +bU +Mi +Zy +OM +jt +jy +mA +sO +pu +LB +LB +LB +Dk +Sw +Uc +Cx +UR +LA +Uc +px +px +LB +LB +jt +de +ry +"} +(21,1,1) = {" +gg +gg +gg +gg +GM +Yq +pQ +uZ +Yh +aj +Ea +MF +kY +Sl +Lv +gs +sx +nd +mS +bZ +Hh +WL +Mi +DN +ZW +un +Mi +Xr +OM +YW +jy +yD +ry +zw +OM +OM +OM +kZ +OM +Uc +Uc +px +Gj +Uc +OM +OM +OM +OM +OM +de +ry +"} +(22,1,1) = {" +gg +gg +pj +gg +GM +jh +jh +jh +YJ +nx +TN +MF +Yi +Sl +ok +gs +vv +zP +iK +iK +pd +wv +kd +aM +kJ +pr +Nd +ki +Ps +qd +pB +Yy +mK +zw +MJ +OM +jt +OM +OM +OM +OM +OM +OM +OM +OM +OM +OM +OM +lB +de +mK +"} +(23,1,1) = {" +tn +gg +gg +gg +GM +GM +MF +MF +MF +Gf +MF +MF +Wc +Fb +qr +tL +hJ +Ny +mS +Ql +KW +oA +cx +Tf +lO +WB +ww +xe +rp +jy +jy +de +ry +zw +OM +jt +jt +OM +OM +OM +OM +OM +OM +OM +OM +OM +OM +OM +OM +OM +ry +"} +(24,1,1) = {" +tn +gg +gg +gg +gg +GM +wc +ar +MF +oJ +tu +MF +DJ +rQ +ok +gs +ph +Ny +Ny +mS +zp +dv +Nd +ne +ty +pr +Nd +ey +lG +jt +jy +de +ry +zw +LB +jt +AS +LB +LB +LB +OM +LB +OM +LB +LB +fP +KG +LB +LB +OM +ry +"} +(25,1,1) = {" +tn +gg +gg +gg +gg +GM +jo +Ub +FC +Kx +IQ +MF +Sm +Sl +OK +gs +VO +hs +kW +Uz +hs +pJ +Mi +yr +FG +mG +Mi +ZQ +lG +jy +jt +OM +ry +zw +OM +OM +OM +OM +OM +yb +jt +OM +OM +OM +OM +OM +OM +OM +OM +de +ry +"} +(26,1,1) = {" +tn +gg +gg +gg +gg +GM +GM +GM +MF +jC +Bs +MF +aV +Sl +JX +gs +gs +gs +gs +gs +gs +gs +Mi +Mi +Mi +Mi +Mi +TE +ov +Cs +TE +Ic +mK +GK +Dp +CC +OM +OM +jt +OM +jt +OM +Ow +OM +OM +OM +OM +jt +lB +de +mK +"} +(27,1,1) = {" +tn +tn +gg +gg +gg +gg +gg +yK +UW +UW +UW +UW +UP +FW +jq +UW +FH +Wy +UW +ge +Lu +UW +vh +El +Il +yK +qL +qL +cj +qL +qL +qL +ry +DA +OM +OM +EM +OM +Og +jt +jt +OM +OM +OM +OM +OM +OM +jt +OM +de +ry +"} +(28,1,1) = {" +tn +tn +tn +gg +gg +gg +gg +yK +Sq +Sq +Ok +UW +yz +iF +Mn +UW +uN +lx +UW +GN +kM +UW +lx +cP +lx +cA +qL +qL +qL +gg +gg +qL +ry +DA +LB +jt +OM +lf +LB +LB +LB +LB +jt +LB +LB +LB +LB +LB +LB +OM +ry +"} +(29,1,1) = {" +tn +tn +tn +gg +gg +gg +gg +yK +Us +Us +SP +UW +vH +FW +jq +UW +gF +lx +UW +rv +cp +UW +eD +lx +yK +yK +qL +qL +qL +gg +gg +qL +ry +DA +OM +OM +up +OM +OM +OM +OM +OM +OM +jt +jt +OM +OM +OM +OM +OM +ry +"} +(30,1,1) = {" +tn +tn +tn +tn +gg +gg +gg +yK +UW +nZ +UW +UW +vH +FW +jq +UW +UW +mU +UW +UW +yC +UW +UW +sm +yK +qL +qL +gg +qL +gg +gg +gg +mK +OM +Fh +gH +OM +QS +OM +OM +OM +OM +jt +jt +OM +OM +OM +OM +lB +de +mK +"} +(31,1,1) = {" +tn +tn +tn +tn +gg +gg +gg +yK +dd +bD +SZ +pb +uD +PK +iJ +Fn +Fn +Fn +nJ +pb +Ei +bD +bD +bD +yK +qL +qL +qL +qL +gg +gg +gg +ry +DA +jt +OM +OM +OM +OM +OM +OM +OM +OM +OM +OM +OM +OM +jt +OM +OM +ry +"} +(32,1,1) = {" +tn +tn +tn +tn +gg +gg +gg +yK +bq +bq +pK +bq +Ri +kP +xO +bq +bq +bq +pK +bq +bq +bq +bq +bq +yK +qL +qL +qL +qL +qL +qL +gg +ry +DA +jt +LB +LB +LB +OM +LB +LB +LB +LB +LB +LB +LB +LB +LB +jt +de +ry +"} +(33,1,1) = {" +tn +tn +tn +tn +gg +gg +gg +yK +UW +ta +UW +UW +qu +BJ +Mf +UW +UW +yC +UW +UW +mU +UW +UW +yC +yK +gg +gg +qL +qL +qL +qL +qL +ry +DA +OM +OM +OM +jt +OM +OM +OM +OM +OM +OM +OM +OM +jt +jt +jt +de +ry +"} +(34,1,1) = {" +tn +tn +tn +tn +gg +pj +gg +yK +aL +Us +ks +UW +XI +Cw +Rt +UW +bF +lx +UW +zB +lx +UW +WW +lx +yK +gg +gg +qL +qL +qL +qL +qL +pj +yU +If +tv +OM +OM +OM +tv +OM +jt +tv +tv +OM +tv +tv +OM +lB +Cf +pj +"} +(35,1,1) = {" +tn +tn +tn +tn +gg +gg +gg +yK +hK +Us +hG +UW +BO +Cw +HR +UW +xs +lx +UW +BP +lx +UW +uU +lx +yK +gg +gg +gg +qL +qL +qL +qL +pj +pj +td +td +td +cg +td +td +td +cg +td +td +CV +cg +td +td +td +pj +pj +"} +(36,1,1) = {" +tn +tn +tn +tn +gg +gg +gg +yK +yK +yK +yK +yK +um +zN +JR +UW +kH +Av +UW +bf +yA +UW +FP +ht +yK +gg +gg +gg +qL +qL +qL +qL +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +"} +(37,1,1) = {" +tn +tn +tn +tn +tn +gg +gg +gg +gg +gg +gg +yK +ng +Cw +ZP +yK +yK +yK +yK +yK +yK +yK +yK +yK +yK +gg +gg +qL +qL +qL +qL +gg +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +"} +(38,1,1) = {" +tn +tn +tn +tn +tn +gg +gg +gg +pj +gg +gg +yK +hY +tX +tX +yK +gg +gg +gg +gg +gg +gg +gg +gg +gg +gg +gg +qL +qL +qL +qL +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +"} +(39,1,1) = {" +tn +tn +tn +tn +tn +gg +gg +gg +gg +gg +gg +Lw +Lw +Lw +Lw +Lw +gg +gg +gg +gg +gg +pj +gg +gg +pj +gg +gg +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +"} +(40,1,1) = {" +tn +tn +tn +tn +tn +tn +gg +gg +gg +gg +gg +gg +sf +Lw +Lw +Lw +gg +pj +gg +gg +gg +gg +gg +gg +gg +gg +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +"} +(41,1,1) = {" +tn +tn +tn +tn +tn +tn +tn +tn +gg +gg +pj +gg +gg +Lw +Lw +gg +gg +gg +gg +gg +gg +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +"} +(42,1,1) = {" +tn +tn +tn +tn +tn +tn +tn +tn +tn +gg +gg +gg +gg +Lw +Lw +gg +gg +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +"} +(43,1,1) = {" +tn +tn +tn +tn +tn +tn +tn +tn +tn +gg +gg +gg +gg +Lw +Lw +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +tn +"} diff --git a/_maps/configs/independent_beluga.json b/_maps/configs/independent_beluga.json index 0449bc3a8cae..50f0591a41e9 100644 --- a/_maps/configs/independent_beluga.json +++ b/_maps/configs/independent_beluga.json @@ -1,8 +1,12 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Beluga-class Transport", + "faction": "/datum/faction/independent", "prefix": "SV", - "namelists": ["CRUISE", "NATURAL"], + "namelists": [ + "CRUISE", + "NATURAL" + ], "map_short_name": "Beluga-class", "map_path": "_maps/shuttles/independent/independent_beluga.dmm", "description": "The Beluga-Class is a transport vessel for those with especially rich blood. Featuring a modest kitchen, hired Inteq security, and luxurious decoration, the Beluga is a first choice pick for many wealthy spacers trying to get from point A to B. The independent ship features several rooms for its guests and a well furnished meeting room for any corporate occassion.", diff --git a/_maps/configs/independent_box.json b/_maps/configs/independent_box.json index 14133f03f5bb..c944f29fc54b 100644 --- a/_maps/configs/independent_box.json +++ b/_maps/configs/independent_box.json @@ -12,6 +12,7 @@ "SPACE", "NATURAL" ], + "faction": "/datum/faction/independent", "prefix": "IMV", "job_slots": { "Chief Medical Officer": { diff --git a/_maps/configs/independent_bubble.json b/_maps/configs/independent_bubble.json index f63aca854e8b..33a8cf8c1815 100644 --- a/_maps/configs/independent_bubble.json +++ b/_maps/configs/independent_bubble.json @@ -12,6 +12,7 @@ "GENERAL", "SPACE" ], + "faction": "/datum/faction/independent", "prefix": "ISV", "limit": 1, "job_slots": { diff --git a/_maps/configs/independent_dwayne.json b/_maps/configs/independent_dwayne.json index 64f68af68752..e770c725fc14 100644 --- a/_maps/configs/independent_dwayne.json +++ b/_maps/configs/independent_dwayne.json @@ -1,7 +1,8 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Mark.II Dwayne-class Long Range Mining Transport", - "prefix": "ISV", + "faction": "/datum/faction/independent", + "prefix": "SV", "namelists": [ "GENERAL", "SPACE", @@ -10,11 +11,12 @@ ], "map_short_name": "Mk.II Dwayne-class ", "map_path": "_maps/shuttles/independent/independent_dwayne.dmm", - "description": "The Dwayne is one of the older classes of ships commonly seen on the Frontier, and one of the few such classes that doesn’t also carry a reputation for nightmarish conditions or high accident rates. Originally conceived of as a “mothership” for Nanotrasen mining shuttles that could enable long-duration mining missions at minimal cost, severe budget overruns and issues with the mining shuttle docking system left Nanotrasen with a massive number of mostly-completed hulls upon the project’s cancellation. These hulls were then quickly refurbished and sold on the civilian market, where they proved an immediate success on the Frontier. Contemporary Dwaynes can typically be found carrying a variety of mining equipment and extensive modifications unique to their captains. Recently-available aftermarket modifications have solved the Dwayne’s longstanding shuttle dock issues, allowing modern Dwaynes to finally serve their original design purpose, provided the captain is able to source a shuttle.", + "description": "The Dwayne is one of the older classes of ships commonly seen on the Frontier, and one of the few such classes that doesn’t also carry a reputation for nightmarish conditions or high accident rates. Originally conceived of as a “mothership” for Nanotrasen mining shuttles that could enable long-duration mining missions at minimal cost, severe budget overruns and issues with the mining shuttle docking system left Nanotrasen with a massive number of mostly-completed hulls upon the project’s cancellation. These hulls were then quickly refurbished and sold on the civilian market, where they proved an immediate success on the Frontier. Contemporary Dwaynes can typically be found carrying a variety of mining equipment and extensive modifications unique to their captains.", "tags": [ "Mining", - "Generalist" + "Cargo" ], + "starting_funds": 4000, "limit": 1, "job_slots": { "Captain": { @@ -24,23 +26,20 @@ }, "Foreman": { "outfit": "/datum/outfit/job/independent/quartermaster/western", - "slots": 1 - }, - "Ship's Doctor": { - "outfit": "/datum/outfit/job/independent/doctor", - "slots": 1 - }, - "Ship's Engineer": { - "outfit": "/datum/outfit/job/independent/engineer", + "officer": true, "slots": 1 }, "Asteroid Miner": { "outfit": "/datum/outfit/job/independent/miner/hazard", "slots": 2 }, + "Mechanic": { + "outfit": "/datum/outfit/job/independent/engineer", + "slots": 1 + }, "Deckhand": { "outfit": "/datum/outfit/job/independent/assistant", - "slots": 3 + "slots": 1 } }, "enabled": true diff --git a/_maps/configs/independent_junker.json b/_maps/configs/independent_junker.json index bd7807a02bb4..92edb754984a 100644 --- a/_maps/configs/independent_junker.json +++ b/_maps/configs/independent_junker.json @@ -1,6 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Junker-class Salvaged Ship", + "faction": "/datum/faction/independent", "prefix": "SV", "namelists": [ "GENERAL", diff --git a/_maps/configs/independent_kilo.json b/_maps/configs/independent_kilo.json index b1304f2e78bb..9ff4ccfbf191 100644 --- a/_maps/configs/independent_kilo.json +++ b/_maps/configs/independent_kilo.json @@ -1,11 +1,12 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Kilo-class Mining Ship", - "description": "The Kilo-class is a miniscule mining ship that stretches the definition of an independently-capable spacecraft. Beginning life long ago as a series of purpose-built mining shuttles intended for use on Frontier outposts, progressive cycles of over-engineering for a longer mission duration eventually produced the lumpen, claustrophobic Kilo seen today. Once quite numerous, Kilos are still a common “barn find” on abandoned stations and forgotten storage bays, and their extreme age and poor storage conditions typically leaves them in especially poor condition. Kilo crews are often considered to be quite eccentric even by Frontier standards, and some spacers insist even a well-balanced spacer will quickly come unglued in the Kilo’s “unique” environment.", + "description": "The Kilo-class is a very old and miniscule pattern of mining ship, produced in vast numbers over the centuries and commonly found in scrapyards or forgotten in storage. Most examples on the Frontier have been restored by Miskilamo Spacefaring using parts from other nonfunctional Kilos, producing a ship that is as inexpensive as it is cramped and unreliable. The low cost and ease of repair or replacement nevertheless make the Kilo very popular among budget-minded captains.", "tags": [ - "Generalist" + "Mining" ], - "prefix": "ISV", + "faction": "/datum/faction/independent", + "prefix": "SV", "namelists": [ "GENERAL", "SPACE", @@ -16,22 +17,18 @@ "map_path": "_maps/shuttles/independent/independent_kilo.dmm", "job_slots": { "Captain": { - "outfit": "/datum/outfit/job/independent/captain/western", + "outfit": "/datum/outfit/job/independent/captain/cheap", "officer": true, "slots": 1 }, - "Ship's Doctor": { - "outfit": "/datum/outfit/job/independent/doctor", + "Asteroid Miner": { + "outfit": "/datum/outfit/job/independent/miner/hazard", "slots": 1 }, - "Ship's Engineer": { + "Mechanic": { "outfit": "/datum/outfit/job/independent/engineer", "slots": 1 }, - "Asteroid Miner": { - "outfit": "/datum/outfit/job/independent/miner", - "slots": 1 - }, "Deckhand": { "outfit": "/datum/outfit/job/independent/assistant", "slots": 1 diff --git a/_maps/configs/independent_lagoon.json b/_maps/configs/independent_lagoon.json index 313b4cd71d95..6a48dccd1e99 100644 --- a/_maps/configs/independent_lagoon.json +++ b/_maps/configs/independent_lagoon.json @@ -1,6 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Lagoon-class Cruise Ship", + "faction": "/datum/faction/independent", "prefix": "SV", "description": "An unusual sight in the relatively impoverished Frontier, the Lagoon-class is a large pleasure vessel dedicated to transporting its passengers to any number of exotic locales. Lagoons found on the Frontier tend to contain crews and passengers of a particularly daring – or foolhardy – character, willing to pay out the nose for a tour of some of the most dangerous regions in known space. Accordingly, Lagoons in these regions typically include a small but respectably equipped security contingent to protect (and, when necessary, rein in) the passengers, and come with a surprisingly powerful thermo-electric generator to move the ship’s prodigious bulk across vast expanses of space.", "tags": [ diff --git a/_maps/configs/independent_mudskipper.json b/_maps/configs/independent_mudskipper.json index 6119b39865d0..469230d752a3 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": [ @@ -14,11 +15,11 @@ "SPACE" ], "map_path": "_maps/shuttles/independent/independent_mudskipper.dmm", - "limit": 1, + "limit": 2, "starting_funds": 1500, "job_slots": { "Salvage Leader": { - "outfit": "/datum/outfit/job/independent/captain", + "outfit": "/datum/outfit/job/independent/captain/cheap", "officer": true, "slots": 1 }, diff --git a/_maps/configs/independent_rigger.json b/_maps/configs/independent_rigger.json index e36b57ca750a..57f147867e29 100644 --- a/_maps/configs/independent_rigger.json +++ b/_maps/configs/independent_rigger.json @@ -1,6 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Riggs-class Sloop", + "faction": "/datum/faction/independent", "prefix": "SV", "namelists": [ "GENERAL", @@ -8,7 +9,7 @@ "NATURAL" ], "map_short_name": "Riggs-class", - "description": "The Riggs-class is Kasagi-Fischer Partnership’s mainstay in the independent ship market. Spacious, affordable, and versatile, the Riggs offers basic capabilities for everything a Frontier spacer might need in a convenient, easy-to-modify platform, and by default come equipped with a basic medbay, a small security office, atmospherics recycling and equipment to support an APLU utility mech. Thanks to this versatility, the Riggs has become extremely popular among moderately-wealthy independent captains, and can be found doing everything from mining to shipping to surveying Frontier planets.", + "description": "The Riggs-class is Kasagi-Fischer Partnership’s mainstay in the independent ship market. Spacious, affordable, and versatile, the Riggs offers basic capabilities for everything a Frontier spacer might need in a convenient, easy-to-modify platform, and by default come equipped with a basic medbay, a small security office, atmospherics recycling and equipment to support an APLU utility exosuit. Thanks to this versatility, the Riggs has become extremely popular among moderately-wealthy independent captains, and can be found doing everything from mining to shipping to surveying Frontier planets.", "tags": [ "Mining", "Medical", diff --git a/_maps/configs/independent_schmiedeberg.json b/_maps/configs/independent_schmiedeberg.json index e9cffc680320..5b5f1bf36a4c 100644 --- a/_maps/configs/independent_schmiedeberg.json +++ b/_maps/configs/independent_schmiedeberg.json @@ -1,6 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Schmiedeberg-class Pharmacology Ship", + "faction": "/datum/faction/independent", "prefix": "IMV", "map_short_name": "Schmiedeberg-class", "description": "Interested in pharmacological science, but tired of sitting in front of a chemistry dispenser and pushing buttons all day? Eager to combine the culinary arts with the narcotic ones? Hoping to combine all of these qualities with the most important activity of all: making fat stacks of dosh? Then the Schmiedeberg-class is for you! Host to a robust ghetto chemistry lab, a high-efficiency botanical set-up and a complete kitchen-and-storefront, the Schmiedeberg is perfect for back-alley chemists and botanists everywhere.", diff --git a/_maps/configs/independent_shetland.json b/_maps/configs/independent_shetland.json index de5873f80d75..a44478e49c74 100644 --- a/_maps/configs/independent_shetland.json +++ b/_maps/configs/independent_shetland.json @@ -1,5 +1,6 @@ { "map_name": "Shetland-class Multipurpose Frigate", + "faction": "/datum/faction/independent", "prefix": "SV", "namelists": [ "GENERAL", diff --git a/_maps/configs/independent_sunskipper.json b/_maps/configs/independent_sunskipper.json index ee17e126cc34..a87d2582f097 100644 --- a/_maps/configs/independent_sunskipper.json +++ b/_maps/configs/independent_sunskipper.json @@ -1,6 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Sunskipper-class Culinary Vessel", + "faction": "/datum/faction/independent", "prefix": "SV", "namelists": ["CRUISE", "NATURAL"], "map_short_name": "Sunskipper-class", diff --git a/_maps/configs/independent_tranquility.json b/_maps/configs/independent_tranquility.json index 07236d5e4568..37ba6bc8b813 100644 --- a/_maps/configs/independent_tranquility.json +++ b/_maps/configs/independent_tranquility.json @@ -1,6 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Tranquility-class Flying Apartment Complex", + "faction": "/datum/faction/independent", "prefix": "SV", "namelists": [ "GENERAL", diff --git a/_maps/configs/inteq_colossus.json b/_maps/configs/inteq_colossus.json index 718ecb9f1295..68bc1e2ec1b3 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": [ @@ -41,7 +42,7 @@ }, "Recruit": { "outfit": "/datum/outfit/job/inteq/assistant", - "slots": 5 + "slots": 2 } }, "enabled": true diff --git a/_maps/configs/inteq_hound.json b/_maps/configs/inteq_hound.json index 3d3617263f61..f92f7d285f12 100644 --- a/_maps/configs/inteq_hound.json +++ b/_maps/configs/inteq_hound.json @@ -1,5 +1,6 @@ { "map_name": "Hound-class Corvette", + "faction": "/datum/faction/inteq", "prefix": "IRMV", "namelists": [ "MYTHOLOGICAL", diff --git a/_maps/configs/inteq_talos.json b/_maps/configs/inteq_talos.json index 54f134964470..b2d39c10f443 100644 --- a/_maps/configs/inteq_talos.json +++ b/_maps/configs/inteq_talos.json @@ -1,6 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Talos-class Command Clipper", + "faction": "/datum/faction/inteq", "prefix": "IRMV", "description": "The Talos is a command and support ship, and a rare example of a purpose-built Inteq ship. Outfitted with an abundance of construction and engineering equipment and a private bluespace communications suite capable of networking IRMG ships across any given system, Taloses are often the lynchpin of coordinated IRMG operations in a system, and offer construction and repair services as part of IRMG’s mercenary offerings. As Talos crews place a larger emphasis on support personnel, they tend to be less well-armed than other Inteq crews. One unusual feature of the Talos is its depressurized “wings” filled with redundant baffles, intended to provide extra durability in the case of impacts or weapons fire. They also double as auxiliary storage space and potential room for modification by their enterprising Artificer crews.", "tags": [ @@ -40,9 +41,13 @@ "outfit": "/datum/outfit/job/inteq/security", "slots": 1 }, + "Corpsman": { + "outfit": "/datum/outfit/job/inteq/paramedic", + "slots": 1 + }, "Recruit": { "outfit": "/datum/outfit/job/inteq/assistant", - "slots": 4 + "slots": 4 } }, "enabled": true diff --git a/_maps/configs/inteq_valor.json b/_maps/configs/inteq_valor.json index 1a3c957cc7b9..c91d7838408f 100644 --- a/_maps/configs/inteq_valor.json +++ b/_maps/configs/inteq_valor.json @@ -1,6 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Valor-Class Field Care Cruiser", + "faction": "/datum/faction/inteq", "prefix": "IRMV", "description": "The Valor is the dedicated medical vessel of the Inteq fleet, suitable for treatment both for Inteq combat casualties, or paid treatment of outsiders. It's equipped with high-end medical equipment and a small ambulance for patient transport for this purpose.", "tags": ["Medical", "Subshuttle"], diff --git a/_maps/configs/inteq_vaquero.json b/_maps/configs/inteq_vaquero.json index 459b7353d292..2b0bed8bfe98 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": [ @@ -38,7 +39,7 @@ }, "Recruit": { "outfit": "/datum/outfit/job/inteq/assistant", - "slots": 2 + "slots": 1 } }, "enabled": true diff --git a/_maps/configs/nanotrasen_delta.json b/_maps/configs/nanotrasen_delta.json index 57e920f77d67..cf28abc50219 100644 --- a/_maps/configs/nanotrasen_delta.json +++ b/_maps/configs/nanotrasen_delta.json @@ -1,6 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Delta-class Frigate", + "faction": "/datum/faction/nt/ns_logi", "prefix": "NSSV", "namelists": [ "GENERAL", diff --git a/_maps/configs/nanotrasen_gecko.json b/_maps/configs/nanotrasen_gecko.json index 01568c3c1d53..c01e4d9b4801 100644 --- a/_maps/configs/nanotrasen_gecko.json +++ b/_maps/configs/nanotrasen_gecko.json @@ -1,6 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Gecko-class Salvage Runner", + "faction": "/datum/faction/nt", "prefix": "NTSV", "namelists": [ "NANOTRASEN", diff --git a/_maps/configs/nanotrasen_harrier.json b/_maps/configs/nanotrasen_harrier.json new file mode 100644 index 000000000000..161a699c2783 --- /dev/null +++ b/_maps/configs/nanotrasen_harrier.json @@ -0,0 +1,76 @@ +{ + "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", + "map_name": "Harrier-class Exploration Cruiser", + "prefix": "NTSV", + "faction": "/datum/faction/nt", + "namelists": [ + "NANOTRASEN", + "SPACE", + "MYTHOLOGICAL", + "WEAPONS" + ], + "map_short_name": "Harrier-class", + "map_path": "_maps/shuttles/nanotrasen/nanotrasen_harrier.dmm", + "description": "Originally an advanced ICW-era command cruiser, the surviving Harriers have been refurbished as exploration and \"reclamation\" ships in the post-ICW era. Large, well-rounded, and boasting excellent crew accomodations, Harriers are exceedingly popular with Nanotrasen crews in spite of their lack of specialized equipment.", + "tags": ["Generalist"], + "limit": 1, + "starting_funds": 4000, + "job_slots": { + "Captain": { + "outfit": "/datum/outfit/job/nanotrasen/captain", + "officer": true, + "slots": 1 + }, + "First Officer": { + "outfit": "/datum/outfit/job/nanotrasen/hop", + "officer": true, + "slots": 1 + }, + "Supply Director": { + "outfit": "/datum/outfit/job/nanotrasen/quartermaster", + "officer":true, + "slots": 1 + }, + "Internal Affairs Agent": { + "outfit": "/datum/outfit/job/nanotrasen/lawyer/corporaterepresentative", + "slots": 1 + }, + "Security Officer": { + "outfit": "/datum/outfit/job/nanotrasen/security", + "slots": 1 + }, + "Medical Doctor": { + "outfit": "/datum/outfit/job/nanotrasen/doctor", + "slots": 1 + }, + "Paramedic": { + "outfit": "/datum/outfit/job/nanotrasen/paramedic", + "slots": 1 + }, + "Engineer": { + "outfit": "/datum/outfit/job/nanotrasen/engineer", + "slots": 1 + }, + "Atmospheric Technician": { + "outfit": "/datum/outfit/job/nanotrasen/atmos", + "slots": 1 + }, + "Cargo Technician": { + "outfit": "/datum/outfit/job/nanotrasen/cargo_tech", + "slots": 1 + }, + "Cook": { + "outfit": "/datum/outfit/job/independent/cook", + "slots": 1 + }, + "Janitor": { + "outfit": "/datum/outfit/job/nanotrasen/janitor", + "slots": 1 + }, + "Assistant": { + "outfit": "/datum/outfit/job/nanotrasen/assistant", + "slots": 2 + } + }, + "enabled": true +} diff --git a/_maps/configs/nanotrasen_heron.json b/_maps/configs/nanotrasen_heron.json index 80bf87c0cd15..e8f798d1edab 100644 --- a/_maps/configs/nanotrasen_heron.json +++ b/_maps/configs/nanotrasen_heron.json @@ -1,7 +1,10 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", + "faction": "/datum/faction/nt", "prefix": "NTSV", - "namelists": ["WEAPONS"], + "namelists": [ + "WEAPONS" + ], "map_name": "Heron-Class Dreadnaught", "map_short_name": "Heron-class", "map_path": "_maps/shuttles/nanotrasen/nanotrasen_heron.dmm", @@ -33,19 +36,19 @@ "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 }, - "Mech Pilot":{ + "Exosuit Pilot":{ "outfit": "/datum/outfit/job/nanotrasen/security/mech_pilot", "slots": 1 }, @@ -53,20 +56,19 @@ "outfit": "/datum/outfit/job/nanotrasen/engineer", "slots": 1 }, - "Chief Engineer":{ + "Chief Engineer": { "outfit": "/datum/outfit/job/nanotrasen/ce", "officer": true, "slots": 1 }, "Roboticist": { - "outfit":"/datum/outfit/job/nanotrasen/roboticist", + "outfit": "/datum/outfit/job/nanotrasen/roboticist", "slots": 1 }, - "Medical Doctor":{ + "Medical Doctor": { "outfit": "/datum/outfit/job/nanotrasen/doctor", "slots": 1 }, - "Atmospheric Technician": 1, "Quartermaster": 1, "Cargo Technician": 1, diff --git a/_maps/configs/nanotrasen_meta.json b/_maps/configs/nanotrasen_meta.json index b4287c3bca3b..207a6a89864b 100644 --- a/_maps/configs/nanotrasen_meta.json +++ b/_maps/configs/nanotrasen_meta.json @@ -1,6 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Meta-class Freighter", + "faction": "/datum/faction/nt", "prefix": "NTSV", "map_short_name": "Meta-class", "description": "The Meta-class is a medium freight vessel designed for comfort and sustainability over long journeys of delivering cargo. Most, if not all of these ships are no longer under the direct management of the Company, leaving regulation and professionalism at the behest of individual captains. They can be found running independent contracts, delivering cargo, smuggling illicit goods, and generally trying to stay afloat ever since the collapse of Nanotrasen's operations in the frontier.", diff --git a/_maps/configs/nanotrasen_mimir.json b/_maps/configs/nanotrasen_mimir.json index db7d8b90d198..4f50f429e210 100644 --- a/_maps/configs/nanotrasen_mimir.json +++ b/_maps/configs/nanotrasen_mimir.json @@ -1,5 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", + "faction": "/datum/faction/nt", "prefix": "NTSV", "namelists": [ "NANOTRASEN", diff --git a/_maps/configs/nanotrasen_osprey.json b/_maps/configs/nanotrasen_osprey.json deleted file mode 100644 index 7e0804a7f203..000000000000 --- a/_maps/configs/nanotrasen_osprey.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", - "map_name": "Osprey-class Exploration Cruiser", - "prefix": "NTSV", - "namelists": [ - "NANOTRASEN", - "SPACE", - "MYTHOLOGICAL", - "WEAPONS" - ], - "map_short_name": "Osprey-class", - "map_path": "_maps/shuttles/nanotrasen/nanotrasen_osprey.dmm", - "description": "Some of the most modern ships in Nanotrasen’s fleet and a prestigious assignment for their captains, the famed Osprey of the ICW’s most dramatic astronautical engagements lives on as a very well-appointed exploration ship. Extensively refurbished from their origins as Bluespace Artillery platforms, the contemporary Osprey repurposes military-grade sensor equipment and AI systems for exploration and scientific work. Features include respectably-equipped medical, culinary, and scientific facilities and an AI core, as well as a ship-wide disposals and delivery system and a very spacious cargo bay. However, the powerful (if temperamental) supermatter engines that powered the initial batch of Ospreys were stripped out during their rebuilds, and the replacement generator banks have left contemporary Ospreys somewhat power-starved.", - "tags": ["Cargo", "Robotics", "Generalist"], - "limit": 1, - "starting_funds": 4000, - "job_slots": { - "Captain": { - "outfit": "/datum/outfit/job/nanotrasen/captain", - "officer": true, - "slots": 1 - }, - "First Officer": { - "outfit": "/datum/outfit/job/nanotrasen/hop", - "officer": true, - "slots": 1 - }, - "Scientist": { - "outfit": "/datum/outfit/job/nanotrasen/scientist", - "slots": 2 - }, - "Medical Doctor": { - "outfit": "/datum/outfit/job/nanotrasen/doctor", - "slots": 1 - }, - "Paramedic": { - "outfit": "/datum/outfit/job/nanotrasen/paramedic", - "slots": 1 - }, - "Engineer": { - "outfit": "/datum/outfit/job/nanotrasen/engineer", - "slots": 1 - }, - "Atmospheric Technician": { - "outfit": "/datum/outfit/job/nanotrasen/atmos", - "slots": 1 - }, - "Quartermaster": { - "outfit": "/datum/outfit/job/nanotrasen/quartermaster", - "slots": 1 - }, - "Cargo Technician": { - "outfit": "/datum/outfit/job/nanotrasen/cargo_tech", - "slots": 1 - }, - "Shaft Miner": { - "outfit": "/datum/outfit/job/nanotrasen/miner", - "slots": 1 - }, - "Cook": { - "outfit": "/datum/outfit/job/cook", - "slots": 1 - }, - "Janitor": { - "outfit": "/datum/outfit/job/janitor", - "slots": 1 - }, - "Assistant": { - "outfit": "/datum/outfit/job/nanotrasen/assistant", - "slots": 3 - } - }, - "enabled": true -} diff --git a/_maps/configs/nanotrasen_ranger.json b/_maps/configs/nanotrasen_ranger.json index b4af3e797d39..fedc351e03b0 100644 --- a/_maps/configs/nanotrasen_ranger.json +++ b/_maps/configs/nanotrasen_ranger.json @@ -1,23 +1,23 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", - "prefix": "NTSV", + "prefix": "VISV", "map_name": "Ranger-class Aid Vessel", + "faction": "/datum/faction/nt/vigilitas", "namelists": [ "NANOTRASEN", "NATURAL_AGGRESSIVE", "WEAPONS" ], "map_short_name": "Ranger-class", - "description": "A Nanotrasen rescue and aid vessel. Equipped with an AI core, moderate combat gear, and equipment fit for rescue and general aid operations. Nanotrasen often deploys these ships in lieu of a proper ERT to aid their allies in the Frontier without committing their full might. The shipowner is the Lieutenant of a Loss Prevention squad, with a Commissioner to aid with operations on the ship proper.", + "description": "A Vigilitas Interstellar aid vessel, manufactured by NT Spaceworks. Equipped with a Nanotrasen AI core, moderate combat gear, and equipment fit for rescue and general aid operations. Vigitilas Interstellar often deploys these ships in lieu of a proper ERT to aid their allies in the Frontier without committing their full might. The shipowner is the Lieutenant of a Loss Prevention squad.", "tags": [ "Combat", - "Riot", - "Robotics", "Medical", + "Firefighting", "Telecomms", "Generalist" ], - "starting_funds": 4000, + "starting_funds": 6000, "map_path": "_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm", "limit": 1, "job_slots": { @@ -38,6 +38,10 @@ "outfit": "/datum/outfit/job/nanotrasen/doctor/lp", "slots": 1 }, + "N+S Logistics Specialist": { + "outfit": "/datum/outfit/job/nanotrasen/quartermaster", + "slots": 1 + }, "Intern": { "outfit": "/datum/outfit/job/nanotrasen/assistant", "slots": 1 diff --git a/_maps/configs/nanotrasen_skipper.json b/_maps/configs/nanotrasen_skipper.json deleted file mode 100644 index 2f61c3afa601..000000000000 --- a/_maps/configs/nanotrasen_skipper.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", - "map_name": "Skipper-class Heavy Cruiser", - "map_short_name": "Skipper-class", - "prefix": "NTSV", - "namelists": [ - "NANOTRASEN", - "SPACE", - "MYTHOLOGICAL", - "WEAPONS", - "MERCANTILE" - ], - "map_path": "_maps/shuttles/nanotrasen/nanotrasen_skipper.dmm", - "description": "An example of one of Nanotrasen’s “standard-pattern” cruisers. The Skipper-class is well-equipped by Frontier standards, with ample room for engineering equipment, well-appointed crew accommodations, and a decent supply of defensive weaponry. Notably, the Skipper comes with a larger command section than average, and the officers on Skippers tend to be better-equipped than their peers. Though not as prestigious as a position aboard an Osprey, few Nanotrasen captains would turn down a position commanding a Skipper.", - "tags": [ - "Engineering", - "Mining" - ], - "starting_funds": 4500, - "job_slots": { - "Captain": { - "outfit": "/datum/outfit/job/nanotrasen/captain", - "officer": true, - "slots": 1 - }, - "First Officer": { - "outfit": "/datum/outfit/job/nanotrasen/hop", - "officer": true, - "slots": 1 - }, - "Internal Affairs Agent": { - "outfit": "/datum/outfit/job/nanotrasen/lawyer/corporaterepresentative", - "slots" : 1 - }, - "Medical Doctor": 1, - "Engineer": { - "outfit": "/datum/outfit/job/nanotrasen/engineer", - "slots": 1 - }, - "Atmospheric Technician": { - "outfit": "/datum/outfit/job/nanotrasen/atmos", - "slots": 1 - }, - "Shaft Miner": 2, - "Cargo Technician": { - "outfit": "/datum/outfit/job/nanotrasen/cargo_tech", - "slots": 1 - }, - "Security Officer": { - "outfit": "/datum/outfit/job/nanotrasen/security", - "slots": 1 - }, - "Cook": { - "outfit": "/datum/outfit/job/cook", - "slots": 1 - }, - "Assistant": { - "outfit": "/datum/outfit/job/assistant", - "slots": 3 - } - }, - "enabled": true -} diff --git a/_maps/configs/pgf_crying_sun.json b/_maps/configs/pgf_crying_sun.json index d4eb67b1fb50..7115072cb9fa 100644 --- a/_maps/configs/pgf_crying_sun.json +++ b/_maps/configs/pgf_crying_sun.json @@ -1,5 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", + "faction": "/datum/faction/pgf", "prefix": "PGFN", "map_name": "Crying Sun-class Light Frigate", "namelists": [ @@ -21,7 +22,7 @@ "officer": true, "slots": 1 }, - "Bridge Crew": { + "Helmsman": { "outfit": "/datum/outfit/job/gezena/assistant/bridge", "slots": 1 }, @@ -37,7 +38,7 @@ "outfit": "/datum/outfit/job/gezena/assistant", "slots": 2 }, - "Marine Sergeant": { + "Marine Lieutenant": { "outfit": "/datum/outfit/job/gezena/hos", "slots": 1 }, diff --git a/_maps/configs/pirate_libertatia.json b/_maps/configs/pirate_libertatia.json index 4ed426746512..9a77cc2c5dec 100644 --- a/_maps/configs/pirate_libertatia.json +++ b/_maps/configs/pirate_libertatia.json @@ -7,6 +7,7 @@ "tags": [ "Combat" ], + "faction": "/datum/faction/frontier", "prefix": "ISV", "namelists": [ "PIRATES", diff --git a/_maps/configs/pirate_noderider.json b/_maps/configs/pirate_noderider.json index 7863a9d96896..60ce1a8501a6 100644 --- a/_maps/configs/pirate_noderider.json +++ b/_maps/configs/pirate_noderider.json @@ -2,6 +2,7 @@ "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Jupiter-class Stormrider", "map_short_name": "Jupiter-class", + "faction": "/datum/faction/frontier", "prefix": "ISV", "namelists": [ "INSTALLATION", diff --git a/_maps/configs/pirate_tortuga.json b/_maps/configs/pirate_tortuga.json index 702185c02387..6543d349bad9 100644 --- a/_maps/configs/pirate_tortuga.json +++ b/_maps/configs/pirate_tortuga.json @@ -1,6 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Tortuga-class Converted Cargo Freighter", + "faction": "/datum/faction/frontier", "prefix": "ISV", "namelists": [ "PIRATES", diff --git a/_maps/configs/solgov_chronicle.json b/_maps/configs/solgov_chronicle.json index 9fe11023e376..b1b14f281938 100644 --- a/_maps/configs/solgov_chronicle.json +++ b/_maps/configs/solgov_chronicle.json @@ -1,6 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Chronicle-class Sensor Frigate", + "faction": "/datum/faction/solgov", "prefix": "SCSV", "namelists": [ "SOLGOV", diff --git a/_maps/configs/solgov_inkwell.json b/_maps/configs/solgov_inkwell.json index b7ae54a1b6b9..92c1f80075f3 100644 --- a/_maps/configs/solgov_inkwell.json +++ b/_maps/configs/solgov_inkwell.json @@ -1,6 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Inkwell-class Supply Freighter", + "faction": "/datum/faction/solgov", "prefix": "SCSV", "namelists": [ "SOLGOV", diff --git a/_maps/configs/solgov_paracelsus.json b/_maps/configs/solgov_paracelsus.json index a5eefc5296df..0e9695952e16 100644 --- a/_maps/configs/solgov_paracelsus.json +++ b/_maps/configs/solgov_paracelsus.json @@ -1,6 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Paracelsus-class Medical Corvette", + "faction": "/datum/faction/solgov", "prefix": "SCSV", "namelists": [ "SOLGOV", diff --git a/_maps/configs/srm_elder.json b/_maps/configs/srm_elder.json index 03caf7196183..6fffaff63e2b 100644 --- a/_maps/configs/srm_elder.json +++ b/_maps/configs/srm_elder.json @@ -1,6 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Elder-class Montagnes' Vessel", + "faction": "/datum/faction/srm", "prefix": "SRSV", "namelists": [ "SAINT-ROUMAIN", diff --git a/_maps/configs/syndicate_cybersun_kansatsu.json b/_maps/configs/syndicate_cybersun_kansatsu.json index a9c9fcb94349..013be2455640 100644 --- a/_maps/configs/syndicate_cybersun_kansatsu.json +++ b/_maps/configs/syndicate_cybersun_kansatsu.json @@ -1,5 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", + "faction": "/datum/faction/syndicate/cybersun", "prefix": "CSSV", "namelists": [ "CYBERSUN", diff --git a/_maps/configs/syndicate_gorlex_hyena.json b/_maps/configs/syndicate_gorlex_hyena.json index a835e00b1eba..df4c6485bb0f 100644 --- a/_maps/configs/syndicate_gorlex_hyena.json +++ b/_maps/configs/syndicate_gorlex_hyena.json @@ -1,5 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", + "faction": "/datum/faction/syndicate/ngr", "prefix": "NGRV", "namelists": [ "GORLEX", diff --git a/_maps/configs/syndicate_gorlex_komodo.json b/_maps/configs/syndicate_gorlex_komodo.json index 2bc7a358b754..b51dee46ffd9 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", @@ -28,6 +29,11 @@ "officer": true, "slots": 1 }, + "Bridge Officer": { + "outfit": "/datum/outfit/job/syndicate/head_of_personnel/cybersun", + "officer": true, + "slots": 1 + }, "Medic": { "outfit": "/datum/outfit/job/syndicate/doctor/gorlex", "slots": 1 @@ -43,10 +49,6 @@ "Deck Assistant": { "outfit": "/datum/outfit/job/syndicate/assistant/gorlex", "slots": 2 - }, - "Bridge Officer": { - "outfit": "/datum/outfit/job/syndicate/head_of_personnel/cybersun", - "slots": 1 } }, "enabled": true diff --git a/_maps/configs/syndicate_litieguai.json b/_maps/configs/syndicate_litieguai.json index 685a53187422..4680ebe932d6 100644 --- a/_maps/configs/syndicate_litieguai.json +++ b/_maps/configs/syndicate_litieguai.json @@ -1,6 +1,7 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Li Tieguai-class Rescue Ship", + "faction": "/datum/faction/syndicate/cybersun", "prefix": "CSSV", "map_short_name": "Li Tieguai-class", "description": "A small, nimble, and exceptionally well-built medical response vessel, the Li Tieguai is a recent addition to Cybersun’s fleet, forming a critical component of their Frontier stabilization program. Li Tieguais come equipped with high-end medical equipment, including a selection of Cybersun augments and prosthetics, as well as weaponry and armor sufficient to protect its personnel in the often-dangerous Frontier sectors, so that they can offer premium healthcare (at premium prices) in even the most dangerous of scenarios.", diff --git a/_maps/configs/syndicate_panacea.json b/_maps/configs/syndicate_panacea.json index 5ac45d571829..f56158d9d9df 100644 --- a/_maps/configs/syndicate_panacea.json +++ b/_maps/configs/syndicate_panacea.json @@ -3,6 +3,7 @@ "map_name": "Panacea-class Infirm Vessel", "map_short_name": "Panacea-class", "map_path": "_maps/shuttles/syndicate/syndicate_panacea.dmm", + "faction": "/datum/faction/syndicate/suns", "description": "Shortly after Solcon breached the Oort Cloud, SUNS joined into the Syndicate Coalition. Holding close ties to both the ACLF and GEC, students jumped at the opportunity to see the rest of the galaxy. The Panacea-class was the first of its kind out of Sol, moving typically planetside inpatient care to a space vessel and jumping system to system. The Panacea class is a moderately well supplied ship, allowing for emergency pharmaceutical compounding, mental and physical therapy, and general medical work, while doubling as a student run vessel.", "tags": [ "Generalist", diff --git a/_maps/configs/syndicate_twinkleshine.json b/_maps/configs/syndicate_twinkleshine.json index ef84cca126f5..b1be2eb333d8 100644 --- a/_maps/configs/syndicate_twinkleshine.json +++ b/_maps/configs/syndicate_twinkleshine.json @@ -1,5 +1,6 @@ { "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", + "faction": "/datum/faction/syndicate", "prefix": "SSV", "namelists": [ "GORLEX", diff --git a/_maps/example_ship_config.json b/_maps/example_ship_config.json index 0f4129fa3d5d..e5dbd47d61e2 100644 --- a/_maps/example_ship_config.json +++ b/_maps/example_ship_config.json @@ -2,6 +2,7 @@ "$schema": "https://raw.githubusercontent.com/shiptest-ss13/Shiptest/master/_maps/ship_config_schema.json", "map_name": "Example-class Experimental Ship", "map_short_name": "Test-class", + "faction": "/datum/faction/independent", "prefix": "STSV", "namelists": ["GENERAL", "SPACE", "MYTHOLOGICAL", "WEAPONS"], "map_path": "_maps/shuttles/shiptest/null.dmm", diff --git a/_maps/map_catalogue.txt b/_maps/map_catalogue.txt index 5d941ef7fd60..35eb2db0bb16 100644 --- a/_maps/map_catalogue.txt +++ b/_maps/map_catalogue.txt @@ -90,10 +90,15 @@ Find the key for using this catalogue in "map_catalogue_key.txt" Size = (x = 47)(y = 47)(z = 1) Tags = "Boss Combat Challenge", "Major Loot", "Shelter", "Lava" - File Name = "_maps\RandomRuins\BeachRuins\lavaland_crashed_starwalker.dmm" + File Name = "_maps\RandomRuins\LavaRuins\lavaland_crashed_starwalker.dmm" Size = (x = 33)(y = 56)(z = 1) Tags = "Minor Combat Challenge", "Medium Loot", "Lava" + File Name = "_maps\RandomRuins\LavaRuins\lavaland_abandonedlisteningpost.dmm" + Size = (x = 33)(y = 56)(z = 1) + Tags = "Medium Combat Challenge", "Medium Loot", "Shelter" + + ReebeRuins: File Name = "_maps\RandomRuins\Ruins\reebe_swarmers.dmm" Size = (x = 20)(y = 20)(z = 1) @@ -129,6 +134,10 @@ Find the key for using this catalogue in "map_catalogue_key.txt" Size = (x = 58)(y = 48)(z = 1) Tags = "Medium Combat Challenge", "Medium Loot", "Hazardous", "Hospitable" + File Name = "_maps\RandomRuins\RockRuins\rockplanet_distillery.dmm" + Size = (x = 44)(y = 45)(z = 1) + Tags = "Medium Combat Challenge", "Major Loot", "Hazardous", "Hospitable" + SandRuins: File Name = "_maps\RandomRuins\Ruins\whitesands_surface_camp_saloon.dmm" @@ -227,3 +236,7 @@ Find the key for using this catalogue in "map_catalogue_key.txt" File name = "_maps\RandomRuins\wasteruins\wasteplanet_abandoned_mechbay.dmm" Size = (x = 45)(y = 47)(z = 1) Tags = "Boss Combat Challenge", "Medium Loot", "Shelter", "Hazardous" + + File name = "_maps\RandomRuins\wasteruins\wasteplanet_yard.dmm" + Size = (x = 43)(y = 51)(z = 1) + Tags = "Medium Combat Challenge", "Medium Loot", "Shelter", "Hazardous" diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index ff8c37d19e96..d7715e22b561 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -26,7 +26,7 @@ /turf/open/floor/plasteel/dark, /area/tdome/tdomeadmin) "afh" = ( -/obj/machinery/computer/helm{ +/obj/machinery/computer{ dir = 4 }, /obj/effect/turf_decal/industrial/warning{ @@ -154,7 +154,7 @@ /turf/open/floor/plating, /area/ctf) "agI" = ( -/obj/machinery/power/emitter/energycannon{ +/obj/machinery/power/emitter/energycannon/ctf{ active = 0 }, /turf/open/floor/plating, @@ -163,7 +163,7 @@ /turf/open/floor/plating, /area/ctf) "aha" = ( -/obj/machinery/power/emitter/energycannon{ +/obj/machinery/power/emitter/energycannon/ctf{ active = 0; dir = 1 }, @@ -1084,11 +1084,11 @@ /area/centcom/control) "apm" = ( /obj/structure/rack, -/obj/item/gun/ballistic/automatic/marksman/gal/inteq{ +/obj/item/gun/ballistic/automatic/marksman/f4/inteq{ pixel_x = 1; pixel_y = 4 }, -/obj/item/gun/ballistic/automatic/marksman/gal/inteq{ +/obj/item/gun/ballistic/automatic/marksman/f4/inteq{ pixel_x = -4; pixel_y = -2 }, @@ -1356,7 +1356,7 @@ /turf/open/floor/plasteel, /area/wizard_station) "ara" = ( -/obj/machinery/computer/helm, +/obj/machinery/computer, /turf/open/floor/plasteel, /area/wizard_station) "ard" = ( @@ -1686,7 +1686,7 @@ /area/centcom/evac) "atW" = ( /obj/structure/rack, -/obj/item/nullrod/claymore{ +/obj/item/melee/sword/claymore{ damtype = "stamina"; force = 30 }, @@ -1908,7 +1908,7 @@ /area/wizard_station) "avt" = ( /obj/structure/rack, -/obj/item/nullrod/claymore/katana{ +/obj/item/melee/sword/katana{ damtype = "stamina"; force = 30 }, @@ -2107,12 +2107,6 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/plasteel, /area/centcom/control) -"awU" = ( -/obj/item/clothing/suit/wizrobe/black, -/obj/item/clothing/head/wizard/black, -/obj/effect/turf_decal/industrial/outline/yellow, -/turf/open/floor/plasteel, -/area/wizard_station) "awV" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -2330,8 +2324,6 @@ /area/wizard_station) "ayF" = ( /obj/structure/table/wood, -/obj/item/clothing/suit/wizrobe/magusblue, -/obj/item/clothing/head/wizard/magus, /obj/item/staff, /obj/structure/mirror/magic{ pixel_y = 28 @@ -2341,8 +2333,6 @@ /area/wizard_station) "ayG" = ( /obj/structure/table/wood, -/obj/item/clothing/suit/wizrobe/magusred, -/obj/item/clothing/head/wizard/magus, /obj/item/staff, /turf/open/floor/plasteel, /area/wizard_station) @@ -2415,8 +2405,6 @@ /obj/structure/closet/crate{ icon_state = "crateopen" }, -/obj/item/clothing/suit/wizrobe/red, -/obj/item/clothing/head/wizard/red, /obj/item/staff, /obj/item/clothing/shoes/sandal/magic, /turf/open/floor/plasteel, @@ -2467,13 +2455,11 @@ /turf/open/floor/plasteel, /area/wizard_station) "azO" = ( -/obj/item/kitchen/knife/ritual, +/obj/item/melee/knife/kitchen, /turf/open/floor/plasteel, /area/wizard_station) "azP" = ( /obj/item/clothing/shoes/sandal/marisa, -/obj/item/clothing/suit/wizrobe/marisa, -/obj/item/clothing/head/wizard/marisa, /obj/item/staff/broom, /turf/open/floor/plasteel, /area/wizard_station) @@ -3043,10 +3029,6 @@ /obj/structure/table/wood, /turf/open/floor/plasteel, /area/wizard_station) -"aEX" = ( -/obj/structure/table/wood, -/turf/open/floor/plasteel, -/area/wizard_station) "aEY" = ( /obj/structure/table/wood, /obj/item/bikehorn/golden{ @@ -3313,7 +3295,6 @@ /area/tdome/tdomeobserve) "aHq" = ( /obj/structure/closet/cardboard, -/obj/item/banhammer, /obj/effect/turf_decal/industrial/warning, /turf/open/floor/plasteel, /area/wizard_station) @@ -3944,7 +3925,7 @@ /turf/open/floor/mineral/titanium/blue, /area/centcom/evac) "aLP" = ( -/obj/machinery/computer/helm{ +/obj/machinery/computer{ dir = 1 }, /turf/open/floor/mineral/titanium/blue, @@ -4055,7 +4036,7 @@ "aMx" = ( /obj/machinery/light/directional/east, /obj/structure/rack, -/obj/item/nullrod/claymore/saber/red{ +/obj/item/melee/sword/claymore{ damtype = "stamina"; force = 30 }, @@ -4412,7 +4393,7 @@ /turf/open/floor/plasteel/grimy, /area/centcom/ferry) "aOO" = ( -/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/reagent_containers/condiment/enzyme, /obj/item/reagent_containers/food/drinks/shaker, /obj/item/book/manual/wiki/drinks, /obj/structure/closet/crate, @@ -4520,11 +4501,11 @@ "aPq" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -8; pixel_y = 5 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -8 }, /obj/item/reagent_containers/food/drinks/mug, @@ -4983,7 +4964,7 @@ "aRS" = ( /obj/machinery/light/directional/west, /obj/structure/rack, -/obj/item/nullrod/claymore/glowing{ +/obj/item/melee/sword/claymore{ damtype = "stamina"; force = 30 }, @@ -5288,15 +5269,6 @@ /obj/item/reagent_containers/glass/beaker, /turf/open/floor/plasteel, /area/centcom/holding) -"aUh" = ( -/obj/machinery/light/directional/east, -/obj/structure/rack, -/obj/item/nullrod/claymore/darkblade{ - damtype = "stamina"; - force = 30 - }, -/turf/open/floor/wood, -/area/centcom/holding) "aUj" = ( /obj/item/coin/antagtoken, /obj/effect/turf_decal/industrial/outline/yellow, @@ -5497,7 +5469,7 @@ /area/wizard_station) "aVF" = ( /obj/structure/rack, -/obj/item/nullrod/scythe/vibro{ +/obj/item/scythe{ damtype = "stamina"; force = 30 }, @@ -5967,15 +5939,6 @@ /obj/effect/turf_decal/industrial/outline/yellow, /turf/open/floor/plasteel, /area/centcom/control) -"aYV" = ( -/obj/machinery/light/directional/west, -/obj/structure/rack, -/obj/item/nullrod/claymore/saber{ - damtype = "stamina"; - force = 30 - }, -/turf/open/floor/wood, -/area/centcom/holding) "aYW" = ( /obj/effect/landmark/thunderdome/one, /obj/effect/turf_decal/industrial/warning{ @@ -6990,8 +6953,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 }, @@ -8850,7 +8813,7 @@ }, /area/centcom) "gFU" = ( -/obj/machinery/computer/helm, +/obj/machinery/computer, /obj/effect/turf_decal/industrial/warning{ dir = 6 }, @@ -10979,14 +10942,14 @@ /area/centcom/control) "lii" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -8; pixel_y = 5 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -8 }, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /obj/effect/turf_decal/corner/transparent/neutral{ dir = 1 }, @@ -11574,8 +11537,8 @@ /obj/item/reagent_containers/food/snacks/meat/slab/xeno, /obj/item/reagent_containers/food/snacks/meat/slab/xeno, /obj/item/reagent_containers/food/snacks/meat/slab/xeno, -/obj/item/reagent_containers/food/snacks/spaghetti, -/obj/item/reagent_containers/food/snacks/spaghetti, +/obj/item/food/spaghetti/raw, +/obj/item/food/spaghetti/raw, /obj/item/reagent_containers/food/snacks/meat/rawcutlet, /obj/item/reagent_containers/food/snacks/meat/rawcutlet, /obj/item/reagent_containers/food/snacks/meat/rawcutlet, @@ -12253,7 +12216,7 @@ /turf/open/floor/plasteel/dark, /area/tdome/tdomeadmin) "nEL" = ( -/obj/machinery/computer/helm, +/obj/machinery/computer, /obj/effect/turf_decal/industrial/warning{ dir = 10 }, @@ -14505,7 +14468,7 @@ "rUH" = ( /obj/structure/table/reinforced, /obj/item/reagent_containers/food/snacks/mint, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ pixel_y = 5 }, /obj/effect/turf_decal/corner/transparent/neutral{ @@ -15514,7 +15477,7 @@ pixel_x = 7; pixel_y = -2 }, -/obj/item/kitchen/knife{ +/obj/item/melee/knife/kitchen{ pixel_y = -5; pixel_x = -5 }, @@ -15801,7 +15764,7 @@ /turf/open/floor/plasteel/dark, /area/ctf) "vcL" = ( -/obj/machinery/computer/helm, +/obj/machinery/computer, /obj/effect/turf_decal/corner/transparent/bar, /obj/effect/turf_decal/corner/transparent/bar{ dir = 1 @@ -22477,7 +22440,7 @@ aqZ aqZ aqZ aqE -awU +aXi ayg aHq aqE @@ -23766,7 +23729,7 @@ auE aEc auE aAx -aEX +aEW aqZ aqZ aGr @@ -43314,7 +43277,7 @@ aCT aCT aNT avt -aYV +aRS aOU aOU aRS @@ -45887,7 +45850,7 @@ avt aMx aQg aTb -aUh +aMx atW aWO aaa diff --git a/_maps/outpost/hangar/nt_ice_20x20.dmm b/_maps/outpost/hangar/nt_ice_20x20.dmm index 06e76cbe6b5b..03321bfceaa3 100644 --- a/_maps/outpost/hangar/nt_ice_20x20.dmm +++ b/_maps/outpost/hangar/nt_ice_20x20.dmm @@ -837,7 +837,7 @@ /obj/effect/turf_decal/siding/white/corner{ dir = 4 }, -/obj/machinery/atmospherics/components/binary/pressure_valve, +/obj/machinery/atmospherics/components/binary/volume_pump, /turf/open/floor/plasteel/patterned/brushed{ light_color = "#1B1D2E"; light_range = 2; diff --git a/_maps/outpost/hangar/nt_ice_40x20.dmm b/_maps/outpost/hangar/nt_ice_40x20.dmm index defafdc3b085..dc4366bfd54b 100644 --- a/_maps/outpost/hangar/nt_ice_40x20.dmm +++ b/_maps/outpost/hangar/nt_ice_40x20.dmm @@ -305,7 +305,7 @@ /obj/effect/turf_decal/siding/white/corner{ dir = 4 }, -/obj/machinery/atmospherics/components/binary/pressure_valve, +/obj/machinery/atmospherics/components/binary/volume_pump, /turf/open/floor/plasteel/patterned/brushed{ light_color = "#1B1D2E"; light_range = 2; diff --git a/_maps/outpost/hangar/nt_ice_40x40.dmm b/_maps/outpost/hangar/nt_ice_40x40.dmm index 62c3858641a5..69d81767fd7f 100644 --- a/_maps/outpost/hangar/nt_ice_40x40.dmm +++ b/_maps/outpost/hangar/nt_ice_40x40.dmm @@ -1398,7 +1398,7 @@ /obj/effect/turf_decal/siding/white/corner{ dir = 4 }, -/obj/machinery/atmospherics/components/binary/pressure_valve, +/obj/machinery/atmospherics/components/binary/volume_pump, /turf/open/floor/plasteel/patterned/brushed{ light_color = "#1B1D2E"; light_range = 2; diff --git a/_maps/outpost/hangar/nt_ice_56x20.dmm b/_maps/outpost/hangar/nt_ice_56x20.dmm index 08deb1360025..0966a1e60fa2 100644 --- a/_maps/outpost/hangar/nt_ice_56x20.dmm +++ b/_maps/outpost/hangar/nt_ice_56x20.dmm @@ -322,20 +322,6 @@ planetary_atmos = 1 }, /area/hangar) -"hD" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/machinery/atmospherics/components/binary/volume_pump{ - dir = 4 - }, -/obj/effect/turf_decal/industrial/shutoff, -/obj/structure/railing{ - dir = 1; - layer = 2.8 - }, -/turf/open/floor/plasteel/tech, -/area/hangar) "if" = ( /obj/machinery/door/airlock/outpost, /obj/machinery/atmospherics/pipe/simple/yellow/hidden, @@ -934,7 +920,7 @@ /obj/effect/turf_decal/siding/white/corner{ dir = 4 }, -/obj/machinery/atmospherics/components/binary/pressure_valve, +/obj/machinery/atmospherics/components/binary/volume_pump, /turf/open/floor/plasteel/patterned/brushed{ light_color = "#1B1D2E"; light_range = 2; @@ -3996,7 +3982,7 @@ Hr ag yh nD -hD +TK AZ Vu OZ diff --git a/_maps/outpost/hangar/nt_ice_56x40.dmm b/_maps/outpost/hangar/nt_ice_56x40.dmm index d484671d2f94..b89f435a4a8c 100644 --- a/_maps/outpost/hangar/nt_ice_56x40.dmm +++ b/_maps/outpost/hangar/nt_ice_56x40.dmm @@ -443,7 +443,7 @@ /obj/effect/turf_decal/siding/white/corner{ dir = 4 }, -/obj/machinery/atmospherics/components/binary/pressure_valve, +/obj/machinery/atmospherics/components/binary/volume_pump, /turf/open/floor/plasteel/patterned/brushed{ light_color = "#1B1D2E"; light_range = 2; @@ -1185,20 +1185,6 @@ planetary_atmos = 1 }, /area/hangar) -"Eo" = ( -/obj/effect/turf_decal/siding/white{ - dir = 1 - }, -/obj/machinery/atmospherics/components/binary/volume_pump{ - dir = 4 - }, -/obj/effect/turf_decal/industrial/shutoff, -/obj/structure/railing{ - dir = 1; - layer = 2.8 - }, -/turf/open/floor/plasteel/tech, -/area/hangar) "Eu" = ( /obj/structure/catwalk/over/plated_catwalk, /obj/machinery/atmospherics/pipe/simple/orange/hidden, @@ -5258,7 +5244,7 @@ tj aH Zj qN -Eo +AW pa Od aK diff --git a/_maps/outpost/indie_space.dmm b/_maps/outpost/indie_space.dmm index 7560d2921d2c..86a2a8d102b1 100644 --- a/_maps/outpost/indie_space.dmm +++ b/_maps/outpost/indie_space.dmm @@ -108,10 +108,25 @@ /turf/closed/indestructible/reinforced, /area/outpost/crew/library) "aM" = ( -/obj/structure/rack, -/obj/effect/spawner/lootdrop/prison_contraband, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/outpost/vacant_rooms) +/obj/effect/turf_decal/corner/opaque/neutral/diagonal, +/obj/structure/table, +/obj/effect/turf_decal/spline/fancy/opaque/lightgrey{ + dir = 8 + }, +/obj/effect/spawner/lootdrop/plushie{ + pixel_x = 16; + pixel_y = 4 + }, +/obj/machinery/computer/cryopod/directional/north, +/obj/item/folder{ + pixel_x = -5; + pixel_y = 2 + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel, +/area/outpost/crew/cryo) "aP" = ( /obj/structure/railing{ dir = 8 @@ -189,8 +204,9 @@ dir = 10 }, /obj/machinery/computer/electrolyzer_console{ - pixel_y = -31; - density = 0 + pixel_y = -18; + density = 0; + dir = 1 }, /turf/open/floor/plasteel/patterned, /area/outpost/cargo) @@ -915,6 +931,7 @@ /obj/effect/turf_decal/corner/opaque/neutral{ dir = 1 }, +/obj/machinery/newscaster/directional/north, /turf/open/floor/plasteel, /area/outpost/hallway/port) "gq" = ( @@ -1462,8 +1479,16 @@ /area/outpost/maintenance/fore) "kh" = ( /obj/effect/turf_decal/corner/opaque/neutral/diagonal, +/obj/effect/turf_decal/spline/fancy/opaque/lightgrey{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/lightgrey, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, -/area/outpost/vacant_rooms) +/area/outpost/crew/cryo) "km" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/confetti, @@ -1694,18 +1719,8 @@ /turf/open/floor/plating, /area/outpost/maintenance/fore) "lG" = ( -/obj/machinery/door/airlock/public, -/obj/effect/turf_decal/industrial/warning, -/obj/effect/turf_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/tech, -/area/outpost/vacant_rooms) +/turf/closed/indestructible/reinforced, +/area/outpost/crew/cryo) "lH" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -1721,6 +1736,15 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/wood, /area/outpost/crew/library) +"lJ" = ( +/obj/effect/turf_decal/corner/opaque/grey/full, +/obj/effect/turf_decal/corner/opaque/neutral{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/turf/open/floor/plasteel, +/area/outpost/hallway/port) "lM" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/steeldecal/steel_decals9, @@ -2012,11 +2036,17 @@ /area/outpost/cargo) "nz" = ( /obj/effect/turf_decal/corner/opaque/neutral/diagonal, -/obj/structure/chair{ - dir = 1 +/obj/effect/turf_decal/spline/fancy/opaque/lightgrey{ + dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, -/area/outpost/vacant_rooms) +/area/outpost/crew/cryo) "nK" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/industrial/warning{ @@ -2472,6 +2502,11 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, /turf/open/floor/plasteel, /area/outpost/hallway/port) "qT" = ( @@ -2551,7 +2586,6 @@ /obj/effect/turf_decal/corner/opaque/neutral{ dir = 1 }, -/obj/structure/extinguisher_cabinet/directional/north, /obj/effect/turf_decal/floordetail/tiled, /turf/open/floor/plasteel, /area/outpost/hallway/port) @@ -3398,10 +3432,18 @@ /turf/open/floor/plating/asteroid, /area/outpost/external) "vd" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/effect/turf_decal/corner/opaque/neutral/diagonal, +/obj/structure/chair{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/east{ + pixel_y = -7 + }, +/obj/machinery/firealarm/directional/east{ + pixel_y = 6 + }, /turf/open/floor/plasteel, -/area/outpost/vacant_rooms) +/area/outpost/crew/cryo) "vp" = ( /obj/effect/turf_decal/corner/opaque/grey/full, /turf/open/floor/plasteel, @@ -3586,6 +3628,25 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/patterned, /area/outpost/cargo) +"ww" = ( +/obj/machinery/door/airlock/glass{ + name = "Cryogenics" + }, +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/tech, +/area/outpost/crew/cryo) "wA" = ( /obj/effect/decal/cleanable/food/tomato_smudge, /turf/open/floor/wood/mahogany, @@ -3668,6 +3729,16 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel, /area/outpost/storage) +"wY" = ( +/obj/machinery/cryopod, +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 5 + }, +/obj/structure/sign/poster/random{ + pixel_y = 30 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/outpost/crew/cryo) "xc" = ( /obj/effect/turf_decal/corner/opaque/red{ dir = 4 @@ -3737,10 +3808,12 @@ /turf/open/floor/plasteel/tech/techmaint, /area/outpost/maintenance/central) "xI" = ( -/obj/machinery/camera/autoname, -/obj/effect/turf_decal/corner/opaque/neutral/diagonal, -/turf/open/floor/plasteel, -/area/outpost/vacant_rooms) +/obj/machinery/cryopod, +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 5 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/outpost/crew/cryo) "xJ" = ( /obj/effect/turf_decal/corner/opaque/grey/full, /obj/structure/disposalpipe/segment{ @@ -4778,7 +4851,6 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/effect/turf_decal/corner/opaque/black{ dir = 4 }, @@ -5360,15 +5432,20 @@ /turf/open/floor/plating, /area/outpost/maintenance/fore) "HB" = ( -/obj/structure/rack, -/obj/effect/spawner/lootdrop/glowstick, -/obj/effect/spawner/lootdrop/glowstick, -/obj/effect/spawner/lootdrop/glowstick, -/obj/effect/spawner/lootdrop/glowstick, -/obj/effect/spawner/lootdrop/glowstick, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/outpost/vacant_rooms) +/obj/effect/turf_decal/corner/opaque/neutral/diagonal, +/obj/structure/table, +/obj/item/paper_bin{ + pixel_y = 6; + pixel_x = 6 + }, +/obj/item/pen, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/effect/turf_decal/steeldecal/steel_decals_central6, +/turf/open/floor/plasteel, +/area/outpost/crew/cryo) "HD" = ( /turf/closed/indestructible/rock, /area/outpost/external) @@ -5627,11 +5704,13 @@ /turf/open/floor/plating, /area/outpost/maintenance/fore) "IS" = ( -/obj/machinery/light/dim/directional/east, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /obj/effect/turf_decal/corner/opaque/neutral/diagonal, +/obj/machinery/light/dim/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, /turf/open/floor/plasteel, -/area/outpost/vacant_rooms) +/area/outpost/crew/cryo) "IT" = ( /obj/machinery/camera/autoname, /obj/effect/turf_decal/corner/opaque/red{ @@ -6035,10 +6114,12 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, /obj/effect/turf_decal/corner/opaque/neutral{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, /turf/open/floor/plasteel, /area/outpost/hallway/port) "Lh" = ( @@ -6139,10 +6220,10 @@ /area/outpost/maintenance/fore) "LS" = ( /obj/effect/turf_decal/corner/opaque/grey/full, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/effect/turf_decal/corner/opaque/neutral{ dir = 1 }, +/obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/plasteel, /area/outpost/hallway/port) "LU" = ( @@ -6331,6 +6412,15 @@ }, /turf/open/floor/plasteel, /area/outpost/hallway/central) +"MQ" = ( +/obj/machinery/cryopod{ + dir = 1 + }, +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 10 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/outpost/crew/cryo) "Nc" = ( /turf/closed/indestructible/rock, /area/outpost/hallway/central) @@ -6614,6 +6704,18 @@ }, /turf/open/floor/plasteel, /area/outpost/hallway/central) +"Pt" = ( +/obj/machinery/cryopod{ + dir = 1 + }, +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 10 + }, +/obj/machinery/camera/autoname{ + dir = 4 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/outpost/crew/cryo) "Pw" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance/four, @@ -6625,6 +6727,10 @@ /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/plating, /area/outpost/maintenance/fore) +"PA" = ( +/obj/effect/spawner/structure/window/reinforced/indestructable, +/turf/open/floor/plating, +/area/outpost/crew/cryo) "PD" = ( /obj/structure/chair/sofa/brown/right/directional/west, /turf/open/floor/carpet/royalblack, @@ -6678,6 +6784,26 @@ }, /turf/open/floor/wood, /area/outpost/crew/bar) +"PQ" = ( +/obj/effect/turf_decal/corner/opaque/neutral/diagonal, +/obj/effect/turf_decal/spline/fancy/opaque/lightgrey/corner{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/lightgrey/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/outpost/crew/cryo) "PS" = ( /obj/structure/falsewall/reinforced, /obj/structure/cable/yellow{ @@ -6713,7 +6839,6 @@ /area/outpost/security) "Qa" = ( /obj/effect/turf_decal/corner/opaque/grey/full, -/obj/machinery/newscaster/directional/north, /obj/effect/turf_decal/corner/opaque/neutral{ dir = 1 }, @@ -7300,10 +7425,14 @@ /turf/open/floor/plasteel, /area/outpost/security) "Tg" = ( -/obj/structure/rack, -/obj/effect/spawner/lootdrop/donut, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/outpost/vacant_rooms) +/obj/effect/turf_decal/corner/opaque/neutral/diagonal, +/obj/effect/turf_decal/spline/fancy/opaque/lightgrey{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/lightgrey, +/obj/machinery/light/dim/directional/west, +/turf/open/floor/plasteel, +/area/outpost/crew/cryo) "Th" = ( /turf/closed/indestructible/reinforced, /area/outpost/cargo/office) @@ -7828,6 +7957,11 @@ /obj/effect/turf_decal/corner/opaque/neutral{ dir = 1 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /turf/open/floor/plasteel, /area/outpost/hallway/port) "Wz" = ( @@ -16958,11 +17092,11 @@ LL Uq Aw LL -wL -wL -wL -wL -wL +lG +lG +lG +lG +lG BM Ky yj @@ -17081,11 +17215,11 @@ LL LL LL LL -wL -aM +lG +wY Tg -aM -wL +Pt +PA rm Kl hW @@ -17204,11 +17338,11 @@ HD HD HD HD -wL +lG xI kh -ev -wL +MQ +PA Qa LY wu @@ -17327,14 +17461,14 @@ HD HD HD HD -wL +lG aM -kh +PQ nz -wL -Fi +ww +Wv qR -wu +lJ iV Pw AW @@ -17450,7 +17584,7 @@ HD HD HD HD -wL +lG HB IS vd @@ -17824,7 +17958,7 @@ yN XA di wL -Wv +Fi vp kb XD diff --git a/_maps/outpost/nanotrasen_asteroid.dmm b/_maps/outpost/nanotrasen_asteroid.dmm index 816befea0002..d5af45bfef2d 100644 --- a/_maps/outpost/nanotrasen_asteroid.dmm +++ b/_maps/outpost/nanotrasen_asteroid.dmm @@ -125,7 +125,7 @@ /area/outpost/maintenance/fore) "aE" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/cakeslice/birthday{ +/obj/item/food/cakeslice/birthday{ pixel_x = -3; pixel_y = -5 }, @@ -1774,7 +1774,7 @@ /area/outpost/crew/cryo) "gF" = ( /obj/structure/table/reinforced, -/obj/item/kitchen/knife{ +/obj/item/melee/knife/kitchen{ pixel_y = 6; pixel_x = 9 }, @@ -4357,7 +4357,7 @@ /area/outpost/maintenance/fore) "qg" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ pixel_x = -2; pixel_y = 6 }, @@ -4713,12 +4713,12 @@ pixel_x = 6; pixel_y = 6 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ desc = "Often used to flavor food or make people sneeze. Fashionably moved to the left side of the table."; pixel_x = -8; pixel_y = 2 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ desc = "Salt. From space oceans, presumably. A staple of modern medicine."; pixel_x = -8; pixel_y = 12 @@ -5019,12 +5019,12 @@ /area/outpost/cargo) "rZ" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ desc = "Often used to flavor food or make people sneeze. Fashionably moved to the left side of the table."; pixel_x = -8; pixel_y = 2 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ desc = "Salt. From space oceans, presumably. A staple of modern medicine."; pixel_x = -8; pixel_y = 12 @@ -10121,12 +10121,12 @@ /area/outpost/operations) "Ju" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ desc = "Often used to flavor food or make people sneeze. Fashionably moved to the left side of the table."; pixel_x = 9; pixel_y = 2 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ desc = "Salt. From space oceans, presumably. A staple of modern medicine."; pixel_x = 9; pixel_y = 12 @@ -11242,7 +11242,7 @@ /area/outpost/maintenance/fore) "NA" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ pixel_x = -2; pixel_y = 6 }, @@ -11369,7 +11369,7 @@ "NP" = ( /obj/effect/turf_decal/siding/wood, /obj/structure/table/reinforced, -/obj/item/kitchen/knife{ +/obj/item/melee/knife/kitchen{ pixel_x = -6; pixel_y = 2 }, @@ -11758,7 +11758,7 @@ pixel_x = -5; pixel_y = 5 }, -/obj/item/reagent_containers/food/condiment/soysauce{ +/obj/item/reagent_containers/condiment/soysauce{ pixel_x = -6; pixel_y = 7 }, @@ -12992,7 +12992,7 @@ /obj/structure/table/reinforced, /obj/machinery/light/directional/south, /obj/item/reagent_containers/glass/beaker, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ pixel_x = -2; pixel_y = 6 }, @@ -13063,7 +13063,7 @@ pixel_x = -4; pixel_y = 6 }, -/obj/item/kitchen/knife{ +/obj/item/melee/knife/kitchen{ pixel_y = 6; pixel_x = 9 }, @@ -14096,12 +14096,12 @@ pixel_x = 6; pixel_y = 6 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ desc = "Often used to flavor food or make people sneeze. Fashionably moved to the left side of the table."; pixel_x = -8; pixel_y = 2 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ desc = "Salt. From space oceans, presumably. A staple of modern medicine."; pixel_x = -8; pixel_y = 12 @@ -14514,7 +14514,6 @@ "Zb" = ( /obj/structure/closet/secure_closet/freezer/wall/directional/east, /obj/item/clothing/under/shorts/cookjorts, -/obj/item/clothing/shoes/cookflops, /obj/item/clothing/suit/toggle/chef, /obj/item/clothing/under/rank/civilian/chef, /obj/item/clothing/under/rank/civilian/chef/skirt, diff --git a/_maps/outpost/nanotrasen_ice.dmm b/_maps/outpost/nanotrasen_ice.dmm index d029c3dc86a8..70fb809c4c95 100644 --- a/_maps/outpost/nanotrasen_ice.dmm +++ b/_maps/outpost/nanotrasen_ice.dmm @@ -2852,8 +2852,9 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/industrial/hatch/yellow, /obj/machinery/computer/electrolyzer_console{ - pixel_x = 32; - density = 0 + pixel_x = 20; + density = 0; + dir = 8 }, /turf/open/floor/plasteel/patterned, /area/outpost/cargo/smeltery) @@ -6219,7 +6220,8 @@ /obj/machinery/mineral/processing_unit_console{ machinedir = 8; output_dir = 1; - pixel_x = 32 + pixel_x = 20; + dir = 8 }, /turf/open/floor/plasteel/patterned, /area/outpost/cargo/smeltery) diff --git a/_maps/ship_config_schema.json b/_maps/ship_config_schema.json index 4c29f272413d..1efa9eb95f2c 100644 --- a/_maps/ship_config_schema.json +++ b/_maps/ship_config_schema.json @@ -28,17 +28,17 @@ "type": "array", "description": "A list of tags describing the ship's niche, converted into searchable strings." }, + "faction": { + "title": "Ship Faction Datum", + "type": [ "null", "string" ], + "description": "Default faction datum" + }, "prefix": { "title": "Ship Default Prefix", "type": [ "null", "string" ], "description": "The prefix of the ship class, appended to randomly generated names when they're first purchased.", "maxLength": 5 }, - "faction_name": { - "title": "Faction Name", - "type": [ "null", "string" ], - "description": "A custom faction name for the ship class. If exluded or left blank, the ship will use the default faction name for the faction that matches the ship's prefix." - }, "namelists": { "title": "Namelists", "type": "array", diff --git a/_maps/shuttles/independent/independent_beluga.dmm b/_maps/shuttles/independent/independent_beluga.dmm index c8ef49a3b35e..c283c0d21584 100644 --- a/_maps/shuttles/independent/independent_beluga.dmm +++ b/_maps/shuttles/independent/independent_beluga.dmm @@ -666,7 +666,7 @@ /obj/item/clothing/glasses/sunglasses/big, /obj/item/clothing/suit/toggle/lawyer/burgundy, /obj/item/clothing/suit/toggle/lawyer/navy, -/obj/item/clothing/head/hopcap, +/obj/item/clothing/head/nanotrasen/officer, /obj/item/gun/energy/e_gun/mini, /obj/item/clothing/head/HoS/cowboy, /obj/item/clothing/suit/jacket/leather/duster/command, @@ -1454,29 +1454,29 @@ /obj/item/storage/bag/tray{ pixel_y = 6 }, -/obj/item/reagent_containers/food/condiment/soysauce{ +/obj/item/reagent_containers/condiment/soysauce{ pixel_x = 6; pixel_y = 11 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ desc = "Salt. From space oceans, presumably. A staple of modern medicine."; pixel_x = -5; pixel_y = 12 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ desc = "Often used to flavor food or make people sneeze. Fashionably moved to the left side of the table."; pixel_x = -3; pixel_y = 8 }, -/obj/item/reagent_containers/food/condiment/pack/ketchup{ +/obj/item/reagent_containers/condiment/pack/ketchup{ pixel_x = -8; pixel_y = -4 }, -/obj/item/reagent_containers/food/condiment/pack/ketchup{ +/obj/item/reagent_containers/condiment/pack/ketchup{ pixel_x = -8; pixel_y = -4 }, -/obj/item/reagent_containers/food/condiment/pack/ketchup{ +/obj/item/reagent_containers/condiment/pack/ketchup{ pixel_x = -8; pixel_y = -4 }, @@ -2742,7 +2742,7 @@ pixel_y = 1 }, /obj/structure/table, -/obj/item/kitchen/knife{ +/obj/item/melee/knife/kitchen{ pixel_x = 11; pixel_y = 7 }, @@ -3192,42 +3192,42 @@ /area/ship/crew/dorm) "EP" = ( /obj/structure/closet/secure_closet/freezer/wall/directional/north, -/obj/item/reagent_containers/food/condiment/rice{ +/obj/item/reagent_containers/condiment/rice{ pixel_y = 17 }, -/obj/item/reagent_containers/food/condiment/flour{ +/obj/item/reagent_containers/condiment/flour{ pixel_x = 6; pixel_y = 10 }, -/obj/item/reagent_containers/food/condiment/flour{ +/obj/item/reagent_containers/condiment/flour{ pixel_x = 6; pixel_y = 4 }, -/obj/item/reagent_containers/food/condiment/sugar{ +/obj/item/reagent_containers/condiment/sugar{ pixel_x = -7; pixel_y = 12 }, -/obj/item/reagent_containers/food/condiment/sugar{ +/obj/item/reagent_containers/condiment/sugar{ pixel_x = -7; pixel_y = 6 }, -/obj/item/reagent_containers/food/condiment/milk{ +/obj/item/reagent_containers/condiment/milk{ pixel_x = -10; pixel_y = -3 }, -/obj/item/reagent_containers/food/condiment/milk{ +/obj/item/reagent_containers/condiment/milk{ pixel_x = -10; pixel_y = -3 }, -/obj/item/reagent_containers/food/condiment/milk{ +/obj/item/reagent_containers/condiment/milk{ pixel_x = -10; pixel_y = -3 }, -/obj/item/reagent_containers/food/condiment/soymilk{ +/obj/item/reagent_containers/condiment/soymilk{ pixel_y = -5; pixel_x = -4 }, -/obj/item/reagent_containers/food/condiment/soymilk{ +/obj/item/reagent_containers/condiment/soymilk{ pixel_y = -5; pixel_x = -4 }, @@ -3910,7 +3910,6 @@ }, /obj/machinery/light/small/directional/west, /obj/item/clothing/under/suit/charcoal, -/obj/item/clothing/glasses/monocle, /obj/item/clothing/shoes/laceup{ pixel_y = -11 }, @@ -4139,7 +4138,7 @@ pixel_y = 17; pixel_x = -7 }, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ pixel_x = -6; pixel_y = 10 }, @@ -4985,9 +4984,6 @@ /obj/item/clothing/shoes/sneakers/black, /obj/item/clothing/shoes/sneakers/black, /obj/item/clothing/accessory/waistcoat, -/obj/item/clothing/shoes/cookflops{ - pixel_y = -11 - }, /turf/open/floor/carpet/nanoweave/beige, /area/ship/crew/dorm) "Xn" = ( diff --git a/_maps/shuttles/independent/independent_box.dmm b/_maps/shuttles/independent/independent_box.dmm index 577290c6581c..31891a371d8c 100644 --- a/_maps/shuttles/independent/independent_box.dmm +++ b/_maps/shuttles/independent/independent_box.dmm @@ -249,9 +249,6 @@ dir = 9 }, /obj/structure/catwalk/over, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 9 }, @@ -261,9 +258,8 @@ /obj/effect/turf_decal/trimline/opaque/yellow/filled/warning{ dir = 4 }, -/obj/structure/cable{ - icon_state = "4-8" - }, +/obj/machinery/meter/atmos/layer2, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, /turf/open/floor/plating, /area/ship/engineering) "bk" = ( @@ -324,6 +320,11 @@ dir = 1 }, /obj/effect/decal/cleanable/wrapping, +/obj/machinery/light_switch{ + pixel_x = 19; + pixel_y = 13; + dir = 8 + }, /turf/open/floor/plating, /area/ship/engineering) "bo" = ( @@ -620,12 +621,11 @@ /turf/open/floor/carpet/nanoweave/blue, /area/ship/bridge) "cr" = ( -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/machinery/atmospherics/components/unary/portables_connector/layer2, -/obj/structure/cable{ - icon_state = "6-8" +/obj/machinery/iv_drip/saline, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 }, -/obj/machinery/portable_atmospherics/canister/air, +/obj/effect/turf_decal/industrial/outline/yellow, /turf/open/floor/plating, /area/ship/engineering) "cu" = ( @@ -1497,6 +1497,10 @@ dir = 8 }, /obj/structure/catwalk/over, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable{ + icon_state = "0-4" + }, /turf/open/floor/plating, /area/ship/engineering) "ql" = ( @@ -1520,27 +1524,24 @@ /obj/effect/turf_decal/trimline/opaque/yellow/filled/warning{ dir = 1 }, -/obj/structure/cable{ - icon_state = "5-9" - }, /obj/structure/sign/warning/electricshock{ pixel_x = 32 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, /turf/open/floor/plating, /area/ship/engineering) "qX" = ( /turf/open/floor/plasteel/white, /area/ship/medical) "ri" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/machinery/iv_drip/saline, -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/structure/railing{ - dir = 4 +/obj/machinery/atmospherics/components/unary/portables_connector/layer2{ + dir = 1 }, +/obj/machinery/portable_atmospherics/canister/air, /obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/industrial/outline/yellow, /turf/open/floor/plating, /area/ship/engineering) "ro" = ( @@ -1619,11 +1620,11 @@ /obj/effect/turf_decal/trimline/opaque/yellow/filled/warning{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 +/obj/structure/cable{ + icon_state = "2-8" }, -/obj/structure/cable/yellow{ - icon_state = "2-5" +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 }, /turf/open/floor/plating, /area/ship/engineering) @@ -1836,13 +1837,10 @@ /turf/open/floor/plating, /area/ship/bridge) "wb" = ( -/obj/machinery/power/port_gen/pacman{ - anchored = 1 - }, -/obj/effect/turf_decal/industrial/outline/yellow, +/obj/machinery/power/port_gen/pacman, /obj/item/wrench, -/obj/structure/cable/yellow, -/obj/machinery/airalarm/directional/south, +/obj/structure/cable, +/obj/effect/turf_decal/industrial/hatch/yellow, /turf/open/floor/plating, /area/ship/engineering) "wd" = ( @@ -1871,10 +1869,13 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 }, +/obj/structure/catwalk/over, /obj/structure/cable{ icon_state = "2-4" }, -/obj/structure/catwalk/over, +/obj/structure/cable{ + icon_state = "2-8" + }, /turf/open/floor/plating, /area/ship/engineering) "wj" = ( @@ -2200,21 +2201,11 @@ /turf/open/floor/plasteel/dark, /area/ship/crew) "CR" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/layer_manifold/visible{ - dir = 8 - }, -/obj/structure/reagent_dispensers/watertank, -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/item/storage/bag/trash{ - pixel_x = 6 +/obj/machinery/power/smes/engineering{ + charge = 1e+006 }, -/obj/item/reagent_containers/glass/bucket, -/obj/item/mop, -/obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable, +/obj/effect/turf_decal/industrial/hatch/yellow, /turf/open/floor/plating, /area/ship/engineering) "Dm" = ( @@ -2302,18 +2293,16 @@ /turf/open/floor/plasteel/white, /area/ship/cargo) "FL" = ( -/obj/machinery/firealarm/directional/south, -/obj/structure/catwalk/over, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, -/obj/machinery/meter/atmos/layer2, /obj/effect/turf_decal/trimline/opaque/yellow/filled/corner{ dir = 4 }, -/obj/machinery/light_switch{ - dir = 1; - pixel_x = 10; - pixel_y = -19 +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-4" }, +/obj/structure/catwalk/over, /turf/open/floor/plating, /area/ship/engineering) "Gb" = ( @@ -2326,10 +2315,10 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/item/wallframe/firealarm, /obj/effect/turf_decal/trimline/opaque/yellow/filled/warning{ dir = 4 }, +/obj/machinery/firealarm/directional/west, /turf/open/floor/plating, /area/ship/engineering) "Gi" = ( @@ -2372,24 +2361,10 @@ /turf/open/floor/plating, /area/ship/engineering) "HM" = ( -/obj/machinery/power/terminal{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "0-10" - }, -/obj/effect/spawner/lootdrop/maintenance/three, -/obj/structure/rack, -/obj/item/areaeditor/shuttle, -/obj/item/flashlight{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/toolbox/mechanical{ - pixel_y = 4 +/obj/structure/catwalk/over, +/obj/machinery/atmospherics/components/binary/pump/layer2{ + dir = 8 }, -/obj/item/bot_assembly/hygienebot, -/obj/machinery/firealarm/directional/north, /turf/open/floor/plating, /area/ship/engineering) "Ic" = ( @@ -2412,12 +2387,11 @@ /turf/open/floor/plasteel/mono/dark, /area/ship/medical) "In" = ( -/obj/machinery/power/smes/engineering{ - charge = 1e+006 - }, -/obj/structure/cable{ - icon_state = "0-10" +/obj/machinery/atmospherics/components/unary/tank/air{ + dir = 8; + piping_layer = 2 }, +/obj/effect/turf_decal/industrial/hatch/yellow, /turf/open/floor/plating, /area/ship/engineering) "Ja" = ( @@ -2704,7 +2678,6 @@ /obj/structure/railing{ dir = 4 }, -/obj/machinery/firealarm/directional/north, /turf/open/floor/plating, /area/ship/engineering) "SJ" = ( @@ -2832,10 +2805,20 @@ /turf/open/floor/plating, /area/ship/bridge) "WW" = ( -/obj/machinery/atmospherics/components/unary/tank/air{ - dir = 4 +/obj/structure/cable/yellow{ + icon_state = "0-10" }, -/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/effect/spawner/lootdrop/maintenance/three, +/obj/structure/rack, +/obj/item/areaeditor/shuttle, +/obj/item/flashlight{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 4 + }, +/obj/item/bot_assembly/hygienebot, /obj/machinery/light/small/directional/west, /turf/open/floor/plating, /area/ship/engineering) @@ -2963,9 +2946,15 @@ /turf/open/floor/plasteel/tech, /area/ship/medical) "ZN" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/item/storage/bag/trash{ + pixel_x = 6 + }, +/obj/item/reagent_containers/glass/bucket, +/obj/item/mop, /obj/machinery/atmospherics/pipe/simple/orange/hidden, /obj/machinery/light/small/directional/east, -/obj/structure/salvageable/machine, /turf/open/floor/plating, /area/ship/engineering) diff --git a/_maps/shuttles/independent/independent_dwayne.dmm b/_maps/shuttles/independent/independent_dwayne.dmm index 668e1e164530..d1cc698c0c92 100644 --- a/_maps/shuttles/independent/independent_dwayne.dmm +++ b/_maps/shuttles/independent/independent_dwayne.dmm @@ -1,31 +1,51 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE "ak" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 }, -/obj/effect/landmark/start/captain, -/obj/effect/turf_decal/box, -/turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) -"ap" = ( -/obj/machinery/airalarm/directional/east, -/obj/machinery/sleeper{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/structure/cable/cyan{ + icon_state = "5-8" + }, +/obj/item/kirbyplants/fullysynthetic{ + pixel_x = 10 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable/cyan{ + icon_state = "0-8" + }, +/obj/effect/turf_decal/corner/opaque/black{ + dir = 6 }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/plasteel/mono, -/area/ship/medical) +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) +"ap" = ( +/turf/closed/wall, +/area/ship/crew/dorm) "as" = ( -/obj/structure/cable{ - icon_state = "2-4" +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/cyan{ + icon_state = "6-8" }, -/obj/effect/turf_decal/techfloor{ - dir = 9 +/obj/structure/cable/cyan{ + icon_state = "1-6" }, -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) +/turf/open/floor/plating, +/area/ship/storage/eva) +"ax" = ( +/obj/machinery/power/solar, +/obj/effect/turf_decal/solarpanel, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plating/airless, +/area/ship/external/dark) "aD" = ( /obj/machinery/power/shuttle/engine/electric{ dir = 4 @@ -36,16 +56,31 @@ /turf/open/floor/plating/airless, /area/ship/engineering) "aI" = ( -/obj/effect/turf_decal/industrial/warning/corner{ - dir = 4 +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/radio/intercom/directional/north, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 }, -/turf/open/floor/plasteel/dark, -/area/ship/crew) +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) "aR" = ( -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/machinery/suit_storage_unit/independent/mining/eva, -/turf/open/floor/plasteel, -/area/ship/cargo) +/obj/effect/turf_decal/corner/opaque/ntblue/half{ + dir = 4 + }, +/obj/machinery/firealarm/directional/south{ + pixel_x = -10 + }, +/obj/machinery/modular_computer/console/preset/command{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) "aS" = ( /obj/machinery/atmospherics/components/unary/vent_pump/layer2{ dir = 1 @@ -58,2233 +93,3407 @@ }, /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering) -"aY" = ( +"aV" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/structure/table/wood, -/obj/effect/spawner/lootdrop/ration, -/obj/item/storage/cans/sixbeer, -/turf/open/floor/wood, -/area/ship/crew) -"bb" = ( -/obj/machinery/power/smes/shuttle/precharged{ - dir = 4 +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/carpet, +/area/ship/crew/dorm) +"aY" = ( +/obj/structure/sink/kitchen{ + dir = 4; + pixel_y = -6 }, -/obj/structure/window/reinforced{ - dir = 8 +/obj/structure/sign/poster/official/bless_this_spess{ + pixel_x = -32 }, -/obj/machinery/door/window/northright{ - dir = 4; - name = "Engine Access" +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"bb" = ( +/obj/effect/turf_decal/corner/opaque/yellow/half{ + dir = 1 }, -/obj/structure/cable{ - icon_state = "0-8" +/obj/item/stack/packageWrap{ + pixel_y = 9; + pixel_x = -7 }, -/turf/open/floor/plating, -/area/ship/engineering) +/turf/open/floor/plasteel/patterned/grid, +/area/ship/cargo) "bf" = ( -/obj/effect/turf_decal/number/zero, /obj/effect/turf_decal/industrial/warning, /turf/open/floor/plating, -/area/ship/construction) +/area/ship/cargo) "bj" = ( /turf/closed/wall, -/area/ship/crew) +/area/ship/crew/toilet) "bl" = ( -/obj/docking_port/mobile{ - can_move_docking_ports = 1; - dir = 2; - launch_status = 0; - name = "mining ship"; - port_direction = 8; - preferred_direction = 4 - }, -/obj/machinery/power/shieldwallgen/atmos/roundstart{ - dir = 8; - id = "mining_ship_atmosgen"; - locked = 1 - }, -/obj/machinery/door/poddoor{ - id = "mining_ship_port" +/obj/effect/decal/cleanable/dirt, +/obj/structure/chair/office{ + dir = 1 }, -/obj/structure/cable{ - icon_state = "0-8" +/turf/open/floor/plasteel/patterned/grid, +/area/ship/cargo) +"bo" = ( +/obj/structure/cable/cyan{ + icon_state = "2-9" }, /turf/open/floor/plating, /area/ship/cargo) "bv" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 1 +/obj/structure/cable/cyan{ + icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/structure/cable{ +/obj/structure/cable/cyan{ icon_state = "1-8" }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/catwalk/over, +/obj/structure/catwalk/over/plated_catwalk/dark, /turf/open/floor/plating, -/area/ship/crew) +/area/ship/hallway/central) +"bx" = ( +/obj/structure/chair/sofa/brown/old/left/directional/south, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/machinery/airalarm/directional/east, +/obj/machinery/newscaster/directional/north{ + pixel_x = -13 + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) "bE" = ( -/obj/machinery/cryopod{ +/obj/machinery/door/airlock/grunge{ + name = "Bathroom" + }, +/obj/machinery/door/firedoor/border_only{ dir = 1 }, -/obj/machinery/computer/cryopod/directional/south, -/turf/open/floor/wood, -/area/ship/crew) +/obj/machinery/door/firedoor/border_only, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable/cyan{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/tech, +/area/ship/crew/toilet) +"bO" = ( +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plating, +/area/ship/storage/eva) "bP" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/power/terminal{ + dir = 8 }, -/obj/structure/catwalk/over, -/obj/machinery/atmospherics/components/trinary/mixer{ +/obj/structure/cable/cyan{ + icon_state = "0-4" + }, +/obj/effect/turf_decal/industrial/warning{ dir = 8 }, -/turf/open/floor/plating, +/obj/item/cigbutt, +/turf/open/floor/plasteel/tech/grid, /area/ship/engineering) "bW" = ( +/obj/machinery/power/solar, +/obj/effect/turf_decal/solarpanel, /obj/structure/cable/yellow{ - icon_state = "2-8" + icon_state = "0-8" }, /turf/open/floor/plating/airless, -/area/ship/external) +/area/ship/external/dark) +"cc" = ( +/obj/effect/turf_decal/corner/opaque/yellow/half{ + dir = 4 + }, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/cargo) "cf" = ( -/obj/structure/bed, -/obj/item/bedsheet/brown, -/obj/structure/curtain/bounty, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/wood, -/area/ship/crew) +/obj/structure/sign/poster/rilena/random{ + pixel_x = -32 + }, +/obj/structure/closet/secure_closet{ + icon_state = "cabinet"; + name = "Captain's wardobe"; + req_access_txt = "20"; + close_sound = 'sound/machines/wooden_closet_close.ogg'; + open_sound = 'sound/machines/wooden_closet_open.ogg'; + desc = "It's a card-locked cabinet." + }, +/obj/item/storage/backpack/satchel/cap, +/obj/item/storage/backpack/messenger/com, +/obj/item/clothing/under/rank/command/captain, +/obj/item/clothing/under/rank/command/captain/skirt, +/obj/item/clothing/shoes/cowboy/fancy, +/obj/item/clothing/suit/jacket/leather/duster/command, +/obj/item/clothing/suit/armor/vest/capcarapace/duster, +/obj/item/clothing/gloves/color/white, +/obj/item/clothing/head/caphat, +/obj/item/clothing/head/caphat/cowboy, +/obj/machinery/light_switch{ + dir = 1; + pixel_x = 11; + pixel_y = -19 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken5" + }, +/area/ship/crew/dorm) +"cw" = ( +/obj/machinery/door/poddoor/preopen{ + id = "dwayne_windows"; + dir = 4 + }, +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating/airless, +/area/ship/bridge) +"cL" = ( +/obj/effect/turf_decal/corner/opaque/yellow/half{ + dir = 1 + }, +/obj/structure/closet/crate, +/obj/machinery/firealarm/directional/north, +/obj/item/circuitboard/machine/pipedispenser, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/cargo) +"dh" = ( +/obj/structure/sign/number/random, +/turf/closed/wall/r_wall, +/area/ship/crew/canteen) "dx" = ( -/obj/machinery/light/directional/south, -/obj/structure/ore_box, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 9 }, -/turf/open/floor/plating, -/area/ship/cargo) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/ammo_box/c38_box, +/obj/item/ammo_box/c38_box, +/obj/item/ammo_box/c38_box, +/obj/structure/closet/crate/secure/plasma{ + name = "ammo crate"; + desc = "A secure ammo crate." + }, +/obj/effect/turf_decal/ntspaceworks_big/two{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/storage/eva) "dy" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable/cyan{ icon_state = "1-2" }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) +"dK" = ( +/obj/effect/turf_decal/industrial/warning, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 1 }, -/obj/machinery/door/airlock/medical, -/obj/effect/turf_decal/corner/opaque/white/mono, -/obj/effect/turf_decal/corner/opaque/blue/mono, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"dK" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) +"dQ" = ( +/turf/closed/wall/r_wall, +/area/ship/crew/cryo) +"ec" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/turf_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/plasteel/dark, -/area/ship/crew) +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) "ei" = ( -/turf/closed/wall/r_wall, -/area/ship/medical) +/obj/machinery/door/poddoor/preopen{ + id = "dwayne_windows"; + dir = 2 + }, +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating/airless, +/area/ship/crew/cryo) +"eu" = ( +/obj/effect/turf_decal/corner/opaque/yellow/half{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/storage/eva) "eH" = ( -/obj/effect/landmark/start/shaft_miner, -/turf/open/floor/plasteel, -/area/ship/cargo) +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/turf_decal/industrial/loading, +/obj/structure/cable/cyan{ + icon_state = "0-4" + }, +/obj/effect/turf_decal/arrows, +/turf/open/floor/plasteel/mono/dark, +/area/ship/storage/eva) "eM" = ( /turf/closed/wall, /area/ship/cargo) "fl" = ( -/obj/machinery/atmospherics/components/unary/tank/air{ - dir = 8 +/obj/machinery/atmospherics/components/trinary/mixer{ + dir = 1; + name = "fuel mixer"; + node1_concentration = 0.33; + node2_concentration = 0.67; + target_pressure = 500 }, -/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel/tech/grid, /area/ship/engineering) "fp" = ( -/obj/docking_port/stationary{ - width = 30; - height = 15; - dwidth = 15 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 }, -/turf/template_noop, -/area/template_noop) -"fy" = ( -/obj/machinery/door/poddoor/preopen{ - id = "mining_ship_blast"; - dir = 4 +/obj/structure/cable/cyan{ + icon_state = "1-2" }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ship/engineering) -"fV" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "mining_ship_blast"; - dir = 8 +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"fy" = ( +/obj/structure/catwalk, +/obj/item/clothing/head/cone{ + pixel_x = 3; + pixel_y = -2 }, -/turf/open/floor/plating, -/area/ship/medical) -"fY" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plating/airless, +/area/ship/external/dark) +"fz" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "4-8" }, -/obj/structure/catwalk/over, -/turf/open/floor/plating, -/area/ship/engineering) -"gf" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/structure/sign/poster/contraband/cardinal_port_starboard{ + pixel_y = 32 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 9 +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) +"fV" = ( +/obj/structure/closet/cabinet{ + name = "wardrobe" }, -/obj/structure/cable/yellow{ - icon_state = "2-8" +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable/cyan{ + icon_state = "0-6" }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 4 +/obj/item/storage/backpack/satchel/explorer, +/obj/item/storage/backpack/satchel/explorer, +/obj/item/storage/backpack/satchel/explorer, +/obj/item/clothing/under/utility, +/obj/item/clothing/under/utility, +/obj/item/clothing/under/utility/skirt, +/obj/item/clothing/under/utility/skirt, +/obj/item/clothing/shoes/workboots/mining, +/obj/item/clothing/shoes/workboots/mining, +/obj/item/clothing/shoes/workboots, +/obj/item/clothing/shoes/workboots, +/obj/item/clothing/suit/jacket/leather/duster, +/obj/item/clothing/suit/jacket/leather/duster, +/obj/item/clothing/gloves/fingerless, +/obj/item/clothing/gloves/fingerless, +/obj/item/clothing/head/cowboy, +/obj/item/clothing/head/cowboy, +/obj/item/clothing/glasses/heat, +/obj/item/clothing/glasses/heat, +/turf/open/floor/wood, +/area/ship/crew/dorm) +"fY" = ( +/obj/machinery/atmospherics/pipe/manifold/orange/hidden{ + dir = 8 }, -/obj/structure/catwalk/over/plated_catwalk/dark, -/obj/machinery/power/ship_gravity, -/obj/structure/cable/yellow{ - icon_state = "0-2" +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/insectguts, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"gf" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/structure/catwalk/over/plated_catwalk, /turf/open/floor/plating, /area/ship/engineering) "gm" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 9 +/obj/machinery/atmospherics/components/unary/shuttle/fire_heater, +/obj/machinery/door/window/northright{ + dir = 4; + name = "Engine Access" }, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/plasteel/tech/grid, +/obj/machinery/door/poddoor/preopen{ + id = "dwayne_engines"; + dir = 4 + }, +/obj/structure/window/plasma/reinforced{ + dir = 8 + }, +/turf/open/floor/plating, /area/ship/engineering) "gs" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 10 + dir = 6 }, -/obj/effect/turf_decal/corner/opaque/white/mono, -/turf/open/floor/plasteel/mono/white, -/area/ship/medical) -"gu" = ( -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/closet/firecloset/full{ - anchored = 1 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 }, -/obj/effect/turf_decal/industrial/warning/corner{ - dir = 8 +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/cyan{ + icon_state = "2-9" }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) +/turf/open/floor/plasteel/tech, +/area/ship/crew/cryo) +"gu" = ( +/turf/closed/wall/r_wall/yesdiag, +/area/ship/cargo) "gF" = ( -/obj/machinery/power/shuttle/engine/fire{ - dir = 4 - }, +/obj/machinery/power/shuttle/engine/fire, /turf/open/floor/plating/airless, /area/ship/engineering) "gT" = ( +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20; + pixel_y = 13 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 6 + dir = 5 }, -/obj/structure/closet/wall/directional/north, -/obj/item/clothing/shoes/cowboy, -/obj/item/clothing/shoes/cowboy, -/obj/item/clothing/shoes/cowboy, -/obj/item/clothing/shoes/workboots, -/obj/item/clothing/shoes/workboots, -/obj/item/clothing/shoes/workboots, -/obj/item/clothing/suit/toggle/hazard, -/obj/item/clothing/suit/toggle/hazard, -/obj/item/clothing/suit/toggle/hazard, -/obj/item/clothing/suit/hazardvest, -/obj/item/clothing/suit/hazardvest, -/obj/item/clothing/suit/hazardvest, -/obj/item/clothing/under/utility, -/obj/item/clothing/under/utility, -/obj/item/clothing/under/utility, -/obj/item/clothing/under/utility/skirt, -/obj/item/clothing/under/utility/skirt, -/obj/item/clothing/under/utility/skirt, -/obj/item/clothing/head/cowboy, -/obj/item/clothing/head/cowboy, -/obj/item/clothing/head/cowboy, -/obj/item/clothing/head/cowboy, -/obj/item/clothing/head/cowboy, -/obj/item/clothing/head/cowboy, -/turf/open/floor/plasteel/grimy, -/area/ship/crew) -"he" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" +/obj/structure/cable/cyan{ + icon_state = "0-1" + }, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/patterned, +/area/ship/crew/toilet) +"hd" = ( +/obj/machinery/door/poddoor/preopen{ + id = "dwayne_windows"; + dir = 2 }, +/obj/structure/grille, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/structure/catwalk/over, +/obj/structure/window/reinforced/fulltile, /turf/open/floor/plating, +/area/ship/crew/canteen) +"he" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/turf/open/floor/plasteel/tech/grid, /area/ship/engineering) "hy" = ( -/obj/structure/cable/yellow, -/obj/structure/cable/yellow{ - icon_state = "0-4" +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 }, -/obj/structure/cable/yellow{ - icon_state = "0-2" +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/siding/wood{ + dir = 4 }, -/obj/machinery/power/solar, -/obj/effect/turf_decal/solarpanel, -/turf/open/floor/plating/airless, -/area/ship/external) -"hK" = ( -/obj/structure/window/reinforced{ +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"hB" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 8 }, -/obj/machinery/door/window/northleft{ - dir = 4; - name = "Engine Access" +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"hK" = ( +/obj/structure/sign/poster/contraband/gec{ + pixel_x = 32 }, -/obj/machinery/atmospherics/components/unary/shuttle/fire_heater{ - dir = 4 +/obj/machinery/atmospherics/components/unary/portables_connector{ + dir = 8; + name = "connector port (Fuel)" }, -/turf/open/floor/plating, +/turf/open/floor/plasteel/tech/grid, /area/ship/engineering) -"hZ" = ( -/obj/structure/cable{ - icon_state = "2-8" +"hO" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 }, -/obj/item/radio/intercom/directional/east, -/obj/machinery/atmospherics/components/unary/portables_connector{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 }, -/obj/machinery/portable_atmospherics/canister/hydrogen, -/turf/open/floor/plating, +/obj/structure/cable/cyan{ + icon_state = "5-10" + }, +/obj/effect/turf_decal/ntspaceworks_big/three, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/cargo) +"hZ" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/structure/cable/cyan{ + icon_state = "4-8" + }, +/obj/structure/cable/cyan{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel/tech/grid, /area/ship/engineering) "ig" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, +/obj/machinery/atmospherics/components/unary/tank/air{ + dir = 1; + piping_layer = 2 + }, +/obj/machinery/light/directional/east, +/turf/open/floor/plasteel/tech/grid, /area/ship/engineering) "in" = ( +/obj/machinery/power/shieldwallgen/atmos/roundstart{ + dir = 4; + id = "dwayne_mining_field"; + locked = 1 + }, /obj/machinery/door/poddoor{ - id = "mining_ship_port" + id = "dwayne_mining" }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/cable/cyan{ + icon_state = "0-2" }, /turf/open/floor/plating, -/area/ship/cargo) +/area/ship/storage/eva) "iq" = ( -/obj/effect/turf_decal/industrial/warning/corner{ - dir = 1 +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/layer4, +/obj/effect/turf_decal/industrial/warning{ + dir = 9 }, -/obj/effect/turf_decal/box, -/obj/structure/tank_dispenser/oxygen, +/obj/structure/closet/emcloset/wall/directional/west, /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering) "ir" = ( -/obj/structure/cable/yellow{ - icon_state = "2-4" +/obj/effect/turf_decal/techfloor, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 }, -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 }, -/obj/effect/turf_decal/techfloor{ - dir = 6 +/obj/structure/cable/cyan{ + icon_state = "1-2" }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/industrial/warning, /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering) "iZ" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/effect/turf_decal/techfloor{ + dir = 6 }, -/obj/machinery/airalarm/directional/south, -/obj/effect/turf_decal/corner/opaque/yellow/border{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 }, -/turf/open/floor/plasteel/dark, -/area/ship/crew) -"jS" = ( -/obj/structure/cable/yellow{ - icon_state = "0-8" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable/cyan{ + icon_state = "0-9" + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/engineering) +"ja" = ( +/obj/effect/turf_decal/corner/opaque/yellow/half{ + dir = 4 }, +/obj/structure/closet/crate/engineering/electrical, +/obj/item/radio/intercom/directional/east, +/obj/item/stack/sheet/mineral/plasma/ten, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/cargo) +"jz" = ( +/obj/structure/cable/yellow, /obj/machinery/power/solar, /obj/effect/turf_decal/solarpanel, /turf/open/floor/plating/airless, -/area/ship/external) +/area/ship/external/dark) +"jS" = ( +/obj/structure/chair/sofa/brown/old/left/directional/north, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) "kb" = ( -/obj/effect/turf_decal/corner/opaque/blue{ +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/border_only{ dir = 4 }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, /obj/structure/closet/emcloset/wall/directional/north, -/turf/open/floor/plasteel/white{ - dir = 1 +/obj/effect/turf_decal/industrial/warning{ + dir = 8 }, -/area/ship/crew) -"kf" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/effect/turf_decal/industrial/warning{ + dir = 4 }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) +"kf" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/effect/turf_decal/techfloor{ - dir = 8 +/obj/structure/sign/warning/vacuum/external{ + pixel_y = 24 }, -/obj/effect/turf_decal/industrial/caution{ +/obj/machinery/door/airlock/external/glass{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/orange/visible, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering) "kM" = ( -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/effect/turf_decal/corner/opaque/yellow/half, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 }, -/turf/open/floor/plasteel, -/area/ship/cargo) -"kO" = ( -/obj/structure/cable/yellow{ - icon_state = "0-2" - }, -/obj/structure/cable/yellow{ - icon_state = "0-4" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 }, -/obj/structure/cable/yellow{ - icon_state = "0-8" +/obj/structure/cable/cyan{ + icon_state = "5-10" }, -/obj/machinery/power/solar, -/obj/effect/turf_decal/solarpanel, -/turf/open/floor/plating/airless, -/area/ship/external) -"kQ" = ( -/obj/machinery/atmospherics/components/unary/portables_connector{ - dir = 8 +/obj/effect/turf_decal/ntspaceworks_big/three{ + dir = 1 }, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/open/floor/plating, -/area/ship/engineering) -"ls" = ( -/obj/structure/cable, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/storage/eva) +"kO" = ( +/obj/effect/decal/cleanable/food/tomato_smudge, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"kQ" = ( +/obj/structure/table, +/obj/machinery/computer/helm/viewscreen/directional/north, /obj/machinery/power/terminal{ - dir = 8 + dir = 4; + layer = 2.30 + }, +/obj/structure/cable/yellow{ + icon_state = "0-6" + }, +/obj/item/paper/guides/jobs/engi/combustion_thruster{ + pixel_x = -5; + pixel_y = 1 + }, +/obj/item/reagent_containers/food/drinks/mug{ + pixel_x = 10; + pixel_y = 3 }, -/obj/machinery/atmospherics/pipe/simple/orange/visible, /turf/open/floor/plasteel/tech/grid, /area/ship/engineering) -"lv" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ +"ld" = ( +/obj/machinery/door/poddoor/preopen{ + id = "dwayne_windows"; + dir = 2 + }, +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating/airless, +/area/ship/crew/canteen) +"ls" = ( +/obj/machinery/power/smes/shuttle/precharged{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 +/obj/machinery/door/window/northleft{ + dir = 4; + name = "Engine Access" }, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "0-8" }, -/obj/structure/catwalk/over, -/turf/open/floor/plating, -/area/ship/crew) -"lD" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/door/poddoor/preopen{ + id = "dwayne_engines"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ +/obj/structure/window/plasma/reinforced{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/turf/open/floor/plating, +/area/ship/engineering) +"lv" = ( +/obj/structure/cable/cyan{ + icon_state = "4-8" }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 }, -/obj/machinery/door/firedoor/border_only{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/hallway/central) +"lD" = ( +/obj/structure/cable/yellow{ + icon_state = "4-9" + }, /obj/effect/turf_decal/techfloor{ - dir = 8 + dir = 1 }, -/obj/machinery/door/airlock/engineering{ - dir = 4 +/obj/effect/turf_decal/industrial/warning{ + dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering) "ma" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 }, -/obj/effect/turf_decal/techfloor{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 }, -/obj/machinery/light/directional/east, -/turf/open/floor/plasteel/tech/techmaint, +/obj/structure/cable/cyan{ + icon_state = "1-4" + }, +/obj/structure/cable/cyan{ + icon_state = "1-2" + }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating, /area/ship/engineering) +"mf" = ( +/obj/effect/turf_decal/industrial/warning, +/obj/item/c_tube{ + pixel_y = 3 + }, +/obj/structure/cable/cyan{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/ship/cargo) "mr" = ( -/obj/effect/turf_decal/ntspaceworks_big/six, +/obj/structure/cable/cyan{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, /turf/open/floor/plating, -/area/ship/construction) +/area/ship/storage/eva) "ms" = ( -/obj/machinery/door/poddoor/preopen{ - id = "mining_ship_blast" +/obj/machinery/computer/helm/viewscreen/directional/north, +/obj/structure/cable/yellow{ + icon_state = "6-9" + }, +/obj/effect/turf_decal/siding/wood{ + dir = 4 }, -/obj/effect/spawner/structure/window/reinforced, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"mv" = ( +/obj/machinery/power/solar, +/obj/effect/turf_decal/solarpanel, +/obj/structure/cable/yellow, /turf/open/floor/plating/airless, -/area/ship/bridge) +/area/ship/external/dark) "my" = ( -/obj/effect/turf_decal/corner/opaque/blue{ - dir = 5 - }, -/turf/open/floor/plasteel/white{ - dir = 1 +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/area/ship/crew) +/obj/machinery/light/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) "mA" = ( -/obj/structure/table/reinforced, -/obj/item/gps{ - gpstag = "NTREC1"; - pixel_x = -9; - pixel_y = 7 +/obj/effect/turf_decal/industrial/warning/corner, +/obj/machinery/light/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) +"mC" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 }, -/obj/item/radio{ - pixel_x = 6; - pixel_y = 7 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 }, -/obj/machinery/airalarm/directional/west, -/obj/effect/turf_decal/corner/opaque/blue/half, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) -"mC" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/computer/monitor/retro{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 10 }, -/turf/open/floor/plasteel/tech/grid, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/structure/cable/cyan{ + icon_state = "1-10" + }, +/turf/open/floor/plating, /area/ship/engineering) "mE" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 10 +/obj/effect/turf_decal/techfloor{ + dir = 5 }, -/obj/effect/turf_decal/corner/opaque/yellow/border{ - dir = 8 +/obj/effect/decal/cleanable/oil, +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 10 +/obj/machinery/light_switch{ + dir = 2; + pixel_y = 20 }, -/obj/structure/cable{ - icon_state = "2-8" +/obj/effect/turf_decal/industrial/warning{ + dir = 1 }, -/turf/open/floor/plasteel/dark, -/area/ship/crew) +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/engineering) "mF" = ( /turf/closed/wall, /area/ship/engineering) -"nf" = ( -/obj/effect/turf_decal/corner/opaque/yellow/half, -/turf/open/floor/plasteel, +"mJ" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/corner/opaque/ntblue/half{ + dir = 1 + }, +/obj/item/radio/weather_monitor{ + pixel_x = 8; + pixel_y = 7 + }, +/obj/machinery/newscaster/directional/west, +/obj/item/paper_bin{ + pixel_x = -8; + pixel_y = 6 + }, +/obj/item/pen/fountain, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"mR" = ( +/obj/effect/turf_decal/solarpanel, +/turf/closed/wall/r_wall/yesdiag, +/area/ship/crew/cryo) +"mX" = ( +/obj/effect/turf_decal/corner/opaque/yellow/three_quarters{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/warning/corner, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) +"nf" = ( +/obj/effect/turf_decal/industrial/hatch/yellow, +/obj/machinery/mineral/processing_unit_console{ + pixel_y = -18; + machinedir = 8; + output_dir = 1; + dir = 1 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/storage/eva) "nr" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 }, -/obj/structure/catwalk/over, -/turf/open/floor/plating, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/plasteel/tech/grid, /area/ship/engineering) "nJ" = ( -/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "2-8" +/obj/machinery/atmospherics/components/unary/portables_connector/layer2{ + name = "connector port (Air)" }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/catwalk/over, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/turf/open/floor/plating, -/area/ship/crew) +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) "nL" = ( -/obj/effect/spawner/lootdrop/maintenance, -/obj/structure/closet/crate/internals, -/obj/effect/turf_decal/box, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 +/obj/effect/turf_decal/ntspaceworks_big/seven{ + dir = 1 }, -/turf/open/floor/plasteel, -/area/ship/cargo) +/obj/structure/ore_box, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/storage/eva) "nY" = ( -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/turf/open/floor/plating/airless, -/area/ship/external) +/turf/closed/wall/r_wall, +/area/ship/crew/canteen) "oa" = ( -/obj/machinery/atmospherics/pipe/manifold/general/hidden{ +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/power/terminal{ dir = 8 }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable{ - icon_state = "5-9" +/obj/structure/cable/cyan, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 }, -/obj/structure/catwalk/over, -/turf/open/floor/plating, +/turf/open/floor/plasteel/tech/grid, /area/ship/engineering) +"of" = ( +/obj/effect/turf_decal/corner/opaque/yellow/half, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/machinery/suit_storage_unit/independent/mining/eva, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/storage/eva) "om" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/catwalk/over, -/obj/effect/landmark/start/station_engineer, -/turf/open/floor/plating, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/structure/closet/wall/orange/directional/west{ + name = "Mechanic's locker" + }, +/obj/effect/decal/cleanable/oil/streak, +/obj/item/storage/backpack/satchel/eng, +/obj/item/storage/backpack/messenger/engi, +/obj/item/clothing/under/rank/engineering/engineer, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/suit/toggle/hazard, +/obj/item/clothing/head/hardhat/dblue, +/obj/item/clothing/glasses/welding, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/turf/open/floor/plasteel/tech/grid, /area/ship/engineering) "or" = ( /obj/effect/turf_decal/industrial/warning{ dir = 1 }, -/turf/open/floor/plasteel/dark, -/area/ship/crew) -"oB" = ( -/obj/effect/decal/cleanable/oil, -/turf/open/floor/plasteel, -/area/ship/cargo) -"oC" = ( -/turf/closed/wall, -/area/ship/medical) +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/cable/cyan{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/dept/mining, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) +"ow" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/power/port_gen/pacman{ + anchored = 1 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"oy" = ( +/obj/effect/turf_decal/corner/opaque/yellow/half{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/secure_closet/quartermaster{ + populate = 0; + name = "\proper Foreman's locker" + }, +/obj/item/storage/backpack/satchel/eng, +/obj/item/clothing/shoes/workboots, +/obj/item/clothing/under/rank/security/detective, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/suit/jacket/leather/duster{ + name = "foreman's duster"; + desc = "A long, utilitarian leather coat. Ideal for protecting its wearer from rain, sun, dust and paperwork." + }, +/obj/item/storage/belt/utility/full, +/obj/item/clothing/gloves/fingerless, +/obj/item/clothing/head/cowboy/sec, +/obj/item/clothing/head/hardhat/orange, +/obj/item/clothing/head/hardhat/white, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/cargo) +"oB" = ( +/obj/machinery/conveyor_switch/oneway{ + pixel_y = 15; + pixel_x = 11; + id = "smelter_dwayne" + }, +/obj/structure/railing{ + dir = 10 + }, +/obj/effect/turf_decal/corner/opaque/yellow/three_quarters{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/storage/eva) +"oC" = ( +/obj/machinery/light_switch{ + dir = 2; + pixel_x = 11; + pixel_y = 20 + }, +/obj/structure/chair, +/obj/machinery/newscaster/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) "oE" = ( -/obj/structure/sink{ - pixel_y = 17 +/obj/effect/turf_decal/industrial/warning, +/obj/structure/table, +/obj/structure/sign/poster/official/work_for_a_future{ + pixel_y = 32 }, -/obj/structure/mirror{ - pixel_y = 28 +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable/cyan{ + icon_state = "0-6" }, -/obj/effect/turf_decal/corner/opaque/white/mono, -/obj/effect/turf_decal/corner/opaque/blue/border{ - dir = 9 +/obj/item/radio{ + pixel_y = 5 }, -/turf/open/floor/plasteel/mono/white, -/area/ship/medical) -"oR" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ +/obj/item/radio{ + pixel_y = 5 + }, +/obj/item/radio{ + pixel_y = 5 + }, +/obj/item/radio{ + pixel_y = 5 + }, +/obj/item/radio{ + pixel_y = 5 + }, +/obj/item/radio{ + pixel_y = 5 + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/crew/cryo) +"oJ" = ( +/obj/effect/turf_decal/corner/opaque/yellow/three_quarters{ dir = 8 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = 6; + pixel_y = 6 }, -/obj/structure/catwalk/over, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/obj/item/pen/fourcolor, +/obj/item/toy/crayon/spraycan{ + pixel_x = -9; + pixel_y = 17 }, -/turf/open/floor/plating, -/area/ship/crew) -"pl" = ( -/obj/machinery/power/shieldwallgen/atmos/roundstart{ - dir = 4; - id = "mining_ship_atmosgen"; - locked = 1 +/turf/open/floor/plasteel/patterned/grid, +/area/ship/cargo) +"oQ" = ( +/obj/effect/turf_decal/corner/opaque/yellow/half{ + dir = 1 }, -/obj/machinery/door/poddoor{ - id = "mining_ship_port" +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 }, -/obj/structure/cable{ - icon_state = "0-4" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable/cyan{ + icon_state = "1-10" }, -/turf/open/floor/plating, +/obj/structure/cable/cyan{ + icon_state = "1-6" + }, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) -"pn" = ( -/obj/structure/closet/secure_closet/medical2, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable{ - icon_state = "0-4" +"oR" = ( +/obj/structure/cable/cyan{ + icon_state = "4-8" }, -/obj/effect/turf_decal/corner/opaque/white/mono, -/obj/effect/turf_decal/corner/opaque/blue/border{ - dir = 10 +/obj/structure/cable/cyan{ + icon_state = "2-8" }, -/turf/open/floor/plasteel/mono/white, -/area/ship/medical) +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/hallway/central) +"pl" = ( +/obj/effect/turf_decal/corner/opaque/ntblue/half{ + dir = 1 + }, +/obj/machinery/computer/crew, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"pn" = ( +/turf/closed/wall, +/area/ship/crew/cryo) "pq" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 5 }, -/turf/open/floor/plasteel, -/area/ship/cargo) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/yellow/half, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/storage/eva) "pt" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/machinery/door/firedoor/border_only{ + dir = 4 }, -/obj/effect/turf_decal/corner/opaque/yellow/border, -/obj/structure/extinguisher_cabinet/directional/south, -/turf/open/floor/plasteel/dark, -/area/ship/crew) +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) "pv" = ( -/obj/machinery/light/small/directional/north, -/obj/machinery/computer/helm/viewscreen/directional/east, -/obj/effect/landmark/start/assistant, -/obj/structure/chair/comfy/orange/directional/west, -/turf/open/floor/wood, -/area/ship/crew) +/obj/machinery/light_switch{ + dir = 2; + pixel_x = 12; + pixel_y = 20 + }, +/obj/machinery/vending/coffee, +/obj/item/trash/candle{ + pixel_y = 18; + pixel_x = 4 + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) "pS" = ( -/obj/effect/turf_decal/box, -/obj/structure/tank_dispenser/oxygen, -/turf/open/floor/plasteel, -/area/ship/cargo) -"qg" = ( -/obj/machinery/holopad/emergency/command, -/obj/machinery/light/directional/west, -/obj/effect/turf_decal/box, -/turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) -"qz" = ( -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/machinery/suit_storage_unit/independent/mining/eva, -/obj/effect/turf_decal/industrial/warning/corner{ +/obj/effect/turf_decal/corner/opaque/yellow/three_quarters{ dir = 4 }, -/turf/open/floor/plasteel, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) -"qK" = ( -/obj/effect/turf_decal/corner/opaque/blue{ - dir = 5 +"qg" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/structure/cable/cyan{ + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ +/obj/structure/cable/cyan{ + icon_state = "1-8" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/hallway/central) +"ql" = ( +/obj/structure/cable/yellow, +/obj/machinery/power/solar, +/obj/effect/turf_decal/solarpanel, +/obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel/white{ - dir = 1 +/turf/open/floor/plating/airless, +/area/ship/external/dark) +"qt" = ( +/obj/structure/cable/yellow{ + icon_state = "6-9" }, -/area/ship/crew) -"qO" = ( -/obj/item/reagent_containers/food/snacks/canned/beans{ - pixel_x = -5; - pixel_y = 3 +/obj/structure/cable/cyan{ + icon_state = "1-2" }, -/obj/item/reagent_containers/food/snacks/canned/beans{ - pixel_x = 2; - pixel_y = 3 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 }, -/obj/item/reagent_containers/food/snacks/canned/beans{ - pixel_x = -2 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/airlock/glass{ + name = "Common Room" }, -/obj/item/reagent_containers/food/drinks/waterbottle/large{ - pixel_x = 5 +/obj/machinery/door/firedoor/border_only{ + dir = 1 }, -/obj/item/reagent_containers/food/drinks/waterbottle/large{ - pixel_x = 1; - pixel_y = -3 +/obj/machinery/door/firedoor/border_only, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/plasteel/tech, +/area/ship/crew/canteen) +"qz" = ( +/turf/closed/wall/r_wall, +/area/ship/storage/eva) +"qK" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/item/reagent_containers/food/drinks/waterbottle/large{ - pixel_x = 8; - pixel_y = -3 +/obj/item/cigbutt, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable/yellow{ + icon_state = "6-8" }, -/obj/structure/closet/crate{ - name = "food crate" +/obj/structure/cable/cyan{ + icon_state = "1-2" }, -/obj/structure/cable{ +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) +"qO" = ( +/obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/item/storage/cans/sixbeer, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/turf/open/floor/plasteel/tech/grid, +/obj/structure/cable/cyan{ + icon_state = "4-8" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, /area/ship/engineering) +"rq" = ( +/obj/effect/turf_decal/corner/opaque/yellow/half{ + dir = 1 + }, +/obj/machinery/autolathe, +/obj/machinery/light_switch{ + dir = 2; + pixel_x = -12; + pixel_y = 20 + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/cargo) "rE" = ( /turf/closed/wall/r_wall, /area/ship/bridge) "sg" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/effect/turf_decal/industrial/warning, -/turf/open/floor/plasteel/dark, -/area/ship/crew) +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) "sp" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/white/mono, -/obj/effect/landmark/start/medical_doctor, -/obj/effect/turf_decal/corner/opaque/blue/border{ - dir = 8 +/obj/structure/noticeboard{ + dir = 1; + pixel_y = -26 }, -/turf/open/floor/plasteel/mono/white, -/area/ship/medical) +/obj/machinery/airalarm/directional/west, +/turf/open/floor/plasteel/tech, +/area/ship/crew/cryo) "sD" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, /obj/effect/turf_decal/industrial/warning, -/turf/open/floor/plasteel/dark, -/area/ship/crew) +/obj/structure/cable/cyan{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/dept/cargo{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) "sM" = ( -/obj/effect/turf_decal/corner/opaque/blue/half{ +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ dir = 4 }, -/obj/structure/frame/computer/retro{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 }, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) -"sP" = ( -/obj/structure/cable/yellow{ - icon_state = "0-4" +/obj/machinery/door/airlock/command/glass{ + dir = 4; + name = "Bridge"; + req_one_access = list(20,41) }, -/obj/machinery/power/solar, -/obj/effect/turf_decal/solarpanel, -/turf/open/floor/plating/airless, -/area/ship/external) -"sZ" = ( -/obj/machinery/vending/wallmed{ - pixel_y = 28 +/obj/effect/turf_decal/corner/opaque/black{ + dir = 9 }, -/obj/structure/closet/crate/freezer/blood, -/obj/effect/turf_decal/corner/opaque/white/mono, -/obj/effect/turf_decal/corner/opaque/blue/border{ - dir = 1 +/turf/open/floor/plasteel/stairs{ + dir = 4; + color = "#555555" }, -/turf/open/floor/plasteel/mono/white, -/area/ship/medical) -"tj" = ( +/area/ship/bridge) +"sP" = ( /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/plasteel/dark, -/area/ship/crew) +/turf/open/floor/carpet, +/area/ship/crew/dorm) +"sZ" = ( +/obj/machinery/cryopod, +/obj/effect/turf_decal/industrial/warning, +/obj/machinery/light/dim/directional/east, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/crew/cryo) +"tj" = ( +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/machinery/firealarm/directional/south, +/obj/item/cigbutt, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) "tq" = ( /turf/closed/wall/r_wall, /area/ship/engineering) -"tX" = ( -/obj/structure/ore_box, +"tJ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 + dir = 10 }, +/obj/item/stack/sheet/cardboard, /turf/open/floor/plating, /area/ship/cargo) +"tX" = ( +/obj/effect/turf_decal/ntspaceworks_big/eight{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/storage/eva) "uc" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ship/cargo) +/turf/closed/wall, +/area/ship/storage/eva) "uk" = ( -/turf/open/floor/plating, -/area/ship/construction) -"uP" = ( -/obj/machinery/power/smes/shuttle/precharged{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 }, -/obj/structure/window/reinforced{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 }, -/obj/machinery/door/window/northleft{ +/obj/structure/cable/cyan{ + icon_state = "6-9" + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/cargo) +"ul" = ( +/obj/effect/decal/cleanable/oil, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/cargo) +"uP" = ( +/obj/machinery/door/poddoor{ + id = "dwayne_cargo" + }, +/obj/machinery/power/shieldwallgen/atmos/roundstart{ dir = 4; - name = "Engine Access" + id = "dwayne_cargo_field"; + locked = 1 }, -/obj/structure/cable{ - icon_state = "0-8" +/obj/structure/cable/cyan{ + icon_state = "0-1" }, /turf/open/floor/plating, -/area/ship/engineering) -"uT" = ( -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/machinery/suit_storage_unit/independent/mining/eva, -/obj/machinery/light/directional/west, -/turf/open/floor/plasteel, /area/ship/cargo) +"uT" = ( +/obj/effect/turf_decal/corner/opaque/ntblue/half{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/item/radio/intercom/wideband/table{ + dir = 4; + pixel_y = 0; + pixel_x = 5 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) "vb" = ( -/obj/effect/turf_decal/box, -/obj/machinery/ore_silo, -/turf/open/floor/plasteel, +/obj/machinery/conveyor/inverted{ + dir = 9; + id = "smelter_dwayne" + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/storage/eva) +"ve" = ( +/obj/effect/turf_decal/corner/opaque/yellow/half{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet/directional/west, +/obj/item/stack/sheet/cardboard{ + amount = 2 + }, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "vf" = ( -/obj/effect/turf_decal/ntspaceworks_big/seven, -/turf/open/floor/plating, -/area/ship/construction) +/obj/structure/closet/crate, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/effect/spawner/lootdrop/maintenance/two, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/cargo) "vj" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" +/obj/structure/sign/poster/contraband/winchester{ + pixel_y = -32 }, -/obj/structure/cable/yellow{ - icon_state = "1-8" +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) +"vm" = ( +/obj/structure/sign/number/random, +/turf/closed/wall/r_wall, +/area/ship/crew/toilet) +"vn" = ( +/obj/machinery/power/smes/shuttle/precharged{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/corner/opaque/yellow/bordercorner{ - dir = 8 +/obj/machinery/door/window/northright{ + dir = 4; + name = "Engine Access" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/turf/open/floor/plasteel/dark, -/area/ship/crew) -"vn" = ( /obj/structure/cable{ - icon_state = "0-4" + icon_state = "0-8" }, -/obj/machinery/power/terminal{ - dir = 8 +/obj/machinery/door/poddoor/preopen{ + id = "dwayne_engines"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/orange/visible{ +/obj/structure/window/plasma/reinforced{ dir = 8 }, -/turf/open/floor/plasteel/tech/grid, +/turf/open/floor/plating, /area/ship/engineering) "vw" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/wood, -/area/ship/crew) -"vA" = ( -/obj/structure/closet/crate{ - icon_state = "crateopen" +/obj/structure/table/reinforced, +/obj/item/cutting_board{ + anchored = 1 + }, +/obj/item/melee/knife/kitchen, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable/cyan{ + icon_state = "0-5" }, -/obj/effect/turf_decal/box, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"vA" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/obj/item/paicard, -/turf/open/floor/plasteel, -/area/ship/cargo) +/turf/open/floor/plating, +/area/ship/storage/eva) "vJ" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering) -"vQ" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/airlock/command/glass{ +/obj/machinery/door/poddoor/preopen{ + id = "dwayne_engines"; dir = 4 }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) -"wh" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating, +/area/ship/engineering) +"vQ" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "5-8" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) +"wh" = ( +/obj/effect/turf_decal/corner/opaque/yellow/half, +/obj/effect/turf_decal/box/corners{ dir = 1 }, -/obj/machinery/door/airlock/public/glass, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/turf/open/floor/plasteel/dark, -/area/ship/crew) +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_x = -12; + pixel_y = -20 + }, +/obj/machinery/suit_storage_unit/independent/mining/eva, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/storage/eva) "wv" = ( /turf/closed/wall, /area/ship/bridge) "ww" = ( -/obj/structure/closet/crate, -/obj/item/stack/sheet/metal/fifty, -/obj/item/stack/sheet/mineral/titanium/twenty, -/obj/effect/turf_decal/box, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/turf/open/floor/plasteel, -/area/ship/cargo) +/obj/structure/closet/crate/secure/exo, +/obj/item/clothing/under/rank/cargo/miner/hazard, +/obj/item/clothing/under/rank/cargo/miner/hazard, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/head/hardhat/mining, +/obj/item/clothing/head/hardhat/mining, +/obj/item/clothing/head/hardhat/mining, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/glasses/meson, +/turf/open/floor/plating, +/area/ship/storage/eva) "wW" = ( /obj/effect/turf_decal/industrial/warning{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/cable{ - icon_state = "1-2" +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/dark, -/area/ship/crew) +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) "xh" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" +/obj/structure/cable/cyan{ + icon_state = "4-8" }, -/obj/effect/landmark/start/assistant, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 }, -/obj/structure/catwalk/over, -/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, +/obj/structure/cable/yellow{ + icon_state = "6-9" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, /turf/open/floor/plating, -/area/ship/crew) +/area/ship/hallway/central) "xr" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "mining_ship_blast"; +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"xP" = ( +/obj/effect/turf_decal/corner/opaque/yellow/half{ dir = 8 }, -/turf/open/floor/plating, -/area/ship/crew) +/obj/machinery/light/directional/west, +/obj/structure/closet/crate, +/obj/effect/spawner/lootdrop/maintenance/two, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/cargo) "yu" = ( -/obj/machinery/mineral/ore_redemption{ +/obj/effect/turf_decal/techfloor{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/yellow/border{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 +/obj/structure/cable/cyan{ + icon_state = "5-8" }, -/obj/structure/cable{ - icon_state = "1-4" +/obj/machinery/light/directional/east, +/obj/structure/frame/machine{ + anchored = 1; + state = 2; + icon_state = "box_1" }, -/turf/open/floor/plasteel, -/area/ship/crew) +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/engineering) "yx" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ +/obj/structure/closet/wall/directional/west, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 1 }, -/turf/open/floor/plasteel/grimy, -/area/ship/crew) +/obj/item/towel{ + pixel_y = 4; + pixel_x = 4 + }, +/obj/item/towel{ + pixel_y = 4; + pixel_x = -3 + }, +/obj/item/soap{ + pixel_x = -1; + pixel_y = -2 + }, +/turf/open/floor/plasteel/patterned, +/area/ship/crew/toilet) "yJ" = ( +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) +"yN" = ( +/obj/machinery/power/solar, +/obj/effect/turf_decal/solarpanel, /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "0-8" }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 +/obj/structure/cable/yellow{ + icon_state = "1-8" }, -/obj/effect/turf_decal/corner/opaque/yellow/border, -/turf/open/floor/plasteel/dark, -/area/ship/crew) +/turf/open/floor/plating/airless, +/area/ship/external/dark) "za" = ( -/obj/machinery/airalarm/directional/west, -/obj/effect/turf_decal/corner/opaque/yellow/half{ - dir = 8 +/obj/effect/turf_decal/solarpanel, +/obj/structure/cable/yellow{ + icon_state = "0-4" }, -/turf/open/floor/plasteel, -/area/ship/cargo) +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/power/solar, +/turf/open/floor/plating, +/area/ship/external/dark) "zc" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 +/obj/effect/turf_decal/corner/opaque/yellow/half{ + dir = 1 }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 +/obj/effect/decal/cleanable/oil/streak, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/cargo) +"zi" = ( +/obj/effect/turf_decal/solarpanel, +/obj/structure/cable/yellow{ + icon_state = "0-4" }, +/obj/machinery/power/solar, +/turf/open/floor/plating, +/area/ship/external/dark) +"zl" = ( +/obj/machinery/door/firedoor/border_only, /obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/airlock/command/glass{ - dir = 4 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) -"zq" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer4{ dir = 1 }, -/turf/open/floor/plating/airless, -/area/ship/external) -"zF" = ( -/obj/structure/cable{ - icon_state = "2-4" +/obj/machinery/door/airlock/mining/glass{ + name = "Mining Hangar" }, -/mob/living/simple_animal/turtle, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ +/obj/structure/cable/cyan{ icon_state = "1-2" }, /turf/open/floor/plasteel, +/area/ship/storage/eva) +"zq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/yellow/half{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet/directional/east, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/storage/eva) +"zt" = ( +/obj/effect/turf_decal/corner/opaque/yellow/three_quarters, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/machinery/suit_storage_unit/independent/mining/eva, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/storage/eva) +"zF" = ( +/obj/structure/ore_box, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 8 + }, +/obj/structure/cable/cyan{ + icon_state = "6-9" + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/storage/eva) +"zI" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/item/cigbutt, +/obj/effect/turf_decal/ntspaceworks_big/two, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "zK" = ( -/obj/machinery/button/shieldwallgen{ - id = "mining_ship_atmosgen"; - pixel_x = 8; - pixel_y = 21 - }, -/obj/machinery/button/door{ - id = "mining_ship_port"; - name = "Port Hangar Shutters"; - pixel_x = -2; - pixel_y = 23 +/obj/effect/decal/cleanable/glass, +/obj/structure/cable/cyan{ + icon_state = "1-2" }, -/obj/effect/turf_decal/industrial/warning/corner{ +/obj/effect/turf_decal/industrial/warning{ dir = 1 }, /turf/open/floor/plating, -/area/ship/cargo) +/area/ship/storage/eva) "zQ" = ( -/obj/machinery/atmospherics/pipe/layer_manifold, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/cable/yellow, -/obj/machinery/power/terminal{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/structure/closet/firecloset/wall/directional/west, +/obj/structure/cable/cyan{ + icon_state = "2-5" }, -/obj/structure/catwalk/over, -/turf/open/floor/plating, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"zY" = ( +/obj/structure/sign/warning/fire{ + pixel_y = -20; + pixel_x = -10 + }, +/obj/machinery/atmospherics/components/unary/portables_connector{ + dir = 8; + name = "connector port (Fuel)" + }, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/plasteel/tech/grid, /area/ship/engineering) "AD" = ( -/obj/effect/landmark/start/assistant, +/obj/structure/cable/cyan{ + icon_state = "4-9" + }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 + dir = 6 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/item/kirbyplants/fullysynthetic{ + pixel_x = -10 + }, +/obj/machinery/airalarm/directional/west, +/obj/effect/turf_decal/techfloor{ dir = 8 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/effect/turf_decal/industrial/warning{ + dir = 8 }, -/obj/structure/catwalk/over, -/turf/open/floor/plating, -/area/ship/crew) +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) "AE" = ( -/obj/machinery/atmospherics/pipe/simple/general/hidden{ - dir = 5 +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 9 + }, +/obj/item/radio/intercom/directional/south, +/obj/effect/decal/cleanable/glass, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 }, -/obj/machinery/airalarm/directional/south, /turf/open/floor/plasteel/tech/grid, /area/ship/engineering) "AQ" = ( -/obj/item/kirbyplants/random, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 +/obj/structure/cable/cyan{ + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 10 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 }, -/obj/structure/cable{ +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/hallway/central) +"AY" = ( +/obj/structure/sign/poster/rilena/random{ + pixel_x = 32 + }, +/obj/structure/cable/cyan{ icon_state = "1-8" }, -/obj/effect/turf_decal/corner/opaque/ntblue/half{ - dir = 4 +/obj/structure/cable/cyan{ + icon_state = "0-1" }, -/turf/open/floor/plasteel/dark, -/area/ship/crew) -"Cn" = ( -/obj/structure/catwalk, -/turf/closed/wall, -/area/ship/engineering) -"Cp" = ( -/turf/open/floor/plasteel, -/area/ship/cargo) -"CD" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 10 +/obj/structure/cable/yellow{ + icon_state = "9-10" + }, +/obj/machinery/computer/monitor{ + dir = 8; + icon_state = "computer-left" }, /turf/open/floor/plasteel/tech/grid, /area/ship/engineering) -"CO" = ( -/obj/structure/window/reinforced{ +"Bq" = ( +/obj/machinery/door/poddoor/preopen{ + id = "dwayne_windows"; + dir = 2 + }, +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating/airless, +/area/ship/bridge) +"Bx" = ( +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"BX" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 8 }, -/obj/machinery/door/window/northright{ +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"Cp" = ( +/obj/machinery/light/directional/west, +/obj/machinery/mineral/unloading_machine{ + input_dir = 1; + output_dir = 2 + }, +/obj/effect/turf_decal/industrial/outline/yellow, +/turf/open/floor/plasteel/mono/dark, +/area/ship/storage/eva) +"CB" = ( +/obj/structure/sign/warning/docking, +/turf/closed/wall/yesdiag, +/area/ship/engineering) +"CD" = ( +/obj/machinery/atmospherics/components/unary/shuttle/fire_heater, +/obj/machinery/door/window/northleft{ dir = 4; name = "Engine Access" }, -/obj/machinery/atmospherics/components/unary/shuttle/fire_heater{ +/obj/machinery/door/poddoor/preopen{ + id = "dwayne_engines"; dir = 4 }, +/obj/structure/window/plasma/reinforced{ + dir = 8 + }, /turf/open/floor/plating, /area/ship/engineering) +"CO" = ( +/obj/machinery/door/poddoor/preopen{ + id = "dwayne_windows"; + dir = 2 + }, +/obj/structure/grille, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating/airless, +/area/ship/crew/dorm) "CP" = ( /obj/machinery/door/airlock/external, /turf/open/floor/plating, /area/ship/engineering) -"DG" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin, -/obj/item/folder/yellow, -/obj/item/folder/yellow, -/obj/item/pen, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/machinery/requests_console{ - announcementConsole = 1; - department = "Cockpit"; - pixel_x = -30; - pixel_y = 30 - }, -/obj/machinery/camera/autoname, -/obj/effect/turf_decal/corner/opaque/blue/half{ +"CS" = ( +/obj/effect/turf_decal/corner/opaque/yellow/half{ dir = 1 }, -/obj/item/spacecash/bundle/c1000, -/obj/item/spacecash/bundle/c1000, -/obj/item/spacecash/bundle/c1000, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) -"DJ" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/large, +/obj/effect/spawner/lootdrop/maintenance/three, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/cargo) +"Ds" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/effect/turf_decal/corner/opaque/blue{ - dir = 5 - }, -/turf/open/floor/plasteel/white{ - dir = 1 + icon_state = "4-8" }, -/area/ship/crew) -"Ee" = ( -/obj/item/kirbyplants/random, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ +/obj/machinery/door/poddoor/preopen{ + id = "dwayne_windows"; dir = 4 }, -/obj/machinery/light/directional/north, -/turf/open/floor/plasteel/grimy, -/area/ship/crew) -"Ex" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating, +/area/ship/crew/canteen) +"DG" = ( /obj/machinery/door/firedoor/border_only, /obj/machinery/door/firedoor/border_only{ dir = 1 }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/airlock/public/glass, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel, -/area/ship/cargo) -"Fd" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/corner/opaque/yellow/bordercorner, -/obj/machinery/light/directional/south, -/turf/open/floor/plasteel/dark, -/area/ship/crew) -"Fn" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable/cyan{ + icon_state = "1-2" }, -/turf/open/floor/plating, -/area/ship/cargo) -"Fz" = ( /obj/structure/cable/yellow{ - icon_state = "1-4" + icon_state = "5-10" }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ +/obj/effect/turf_decal/siding/wood{ dir = 1 }, -/turf/open/floor/plasteel/grimy, -/area/ship/crew) -"FP" = ( -/turf/open/floor/plating, -/area/ship/cargo) -"FS" = ( -/obj/structure/cable/yellow{ - icon_state = "0-4" +/obj/machinery/door/airlock{ + name = "Dormitory" }, +/turf/open/floor/plasteel/tech, +/area/ship/crew/dorm) +"DJ" = ( /obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/obj/machinery/power/solar, -/obj/effect/turf_decal/solarpanel, -/turf/open/floor/plating/airless, -/area/ship/external) -"Gr" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "mining_ship_blast"; - dir = 8 + icon_state = "4-8" }, -/turf/open/floor/plating/airless, -/area/ship/bridge) -"Gx" = ( -/obj/structure/cable/yellow{ +/obj/effect/decal/cleanable/ash, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) +"DR" = ( +/obj/structure/cable/cyan{ icon_state = "4-8" }, -/obj/effect/turf_decal/corner/opaque/yellow/border, -/turf/open/floor/plasteel/dark, -/area/ship/crew) -"GU" = ( -/obj/machinery/vending/snack/random, -/turf/open/floor/plasteel/dark, -/area/ship/crew) -"GW" = ( -/obj/structure/table/reinforced, -/obj/item/storage/toolbox/emergency{ - pixel_x = -12 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 }, -/obj/item/megaphone{ - pixel_x = 3; - pixel_y = 1 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 }, -/obj/effect/turf_decal/corner/opaque/blue/half, -/obj/item/radio/intercom/directional/east, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) -"He" = ( -/obj/structure/cable/yellow{ - icon_state = "2-8" +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/item/paperplane{ + dir = 4; + pixel_x = 14; + pixel_y = -8 }, -/obj/structure/catwalk/over, /turf/open/floor/plating, -/area/ship/engineering) -"Hh" = ( -/obj/structure/cable{ - icon_state = "1-2" +/area/ship/hallway/central) +"Ee" = ( +/obj/structure/sink{ + pixel_y = 19 }, -/obj/machinery/atmospherics/pipe/layer_manifold, -/obj/machinery/door/airlock/external{ - name = "Hangar Airlock" +/obj/structure/mirror{ + pixel_y = 28; + layer = 2.89 }, -/turf/open/floor/plasteel, -/area/ship/crew) -"HI" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/plasteel/patterned, +/area/ship/crew/toilet) +"Ex" = ( +/obj/structure/window/reinforced/fulltile, +/obj/structure/grille, +/obj/machinery/door/firedoor/window, +/turf/open/floor/plating, +/area/ship/storage/eva) +"Ez" = ( +/obj/machinery/power/smes/engineering, +/obj/structure/cable/cyan{ + icon_state = "0-2" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"EE" = ( +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) +"Fd" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) +"Fn" = ( +/obj/effect/turf_decal/corner/opaque/yellow/half{ + dir = 1 + }, +/obj/structure/ore_box, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/storage/eva) +"Fq" = ( +/obj/effect/turf_decal/solarpanel, +/turf/closed/wall/r_wall/yesdiag, +/area/ship/crew/dorm) +"Fz" = ( +/obj/structure/table/wood, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/item/reagent_containers/food/snacks/chips{ + pixel_x = 5; + pixel_y = 4 + }, +/obj/item/toy/cards/deck/kotahi{ + pixel_x = -11; + pixel_y = 6 + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"FH" = ( +/obj/structure/cable/cyan{ + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 6 + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/industrial/warning{ dir = 8 }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"HP" = ( -/mob/living/simple_animal/butterfly{ - color = "#DBB17F"; - desc = "A moth."; - name = "moth" +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) +"FN" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"FP" = ( +/obj/structure/closet/crate/large, +/obj/machinery/portable_atmospherics/canister/hydrogen, +/turf/open/floor/plating, +/area/ship/cargo) +"FR" = ( +/obj/structure/closet/cardboard, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/item/caution, +/obj/item/caution, +/obj/item/caution, +/obj/item/reagent_containers/glass/bucket, +/obj/item/storage/bag/trash, +/obj/item/mop, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/cargo) +"FS" = ( +/obj/machinery/power/solar, +/obj/effect/turf_decal/solarpanel, +/obj/structure/cable/yellow{ + icon_state = "0-4" }, -/obj/effect/landmark/observer_start, -/turf/open/floor/plasteel/grimy, -/area/ship/crew) -"Ia" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "mining_ship_blast"; +/turf/open/floor/plating/airless, +/area/ship/external/dark) +"Gl" = ( +/obj/structure/bed, +/obj/item/bedsheet/dorms, +/obj/machinery/airalarm/directional/east, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/carpet, +/area/ship/crew/dorm) +"Gr" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 }, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/plasteel/stairs{ + dir = 4; + color = "#555555" + }, +/area/ship/bridge) +"Gx" = ( +/obj/item/radio/intercom/directional/south, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) +"GH" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/effect/turf_decal/ntspaceworks_big/four, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/cargo) +"GN" = ( +/obj/effect/turf_decal/corner/opaque/yellow/half{ + dir = 4 + }, +/obj/machinery/light/directional/east, +/obj/structure/closet/crate/engineering, +/obj/item/t_scanner/adv_mining_scanner/lesser{ + pixel_y = -3 + }, +/obj/item/pickaxe/drill{ + pixel_y = -2 + }, +/obj/item/pickaxe/drill{ + pixel_y = -2 + }, +/obj/item/pinpointer/mineral{ + pixel_y = 4 + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/storage/eva) +"GU" = ( +/obj/docking_port/mobile{ + can_move_docking_ports = 1; + dir = 2; + launch_status = 0; + name = "mining ship"; + port_direction = 8; + preferred_direction = 4 + }, +/obj/machinery/power/shieldwallgen/atmos/roundstart{ + dir = 8; + id = "dwayne_mining_field"; + locked = 1 + }, +/obj/machinery/door/poddoor{ + id = "dwayne_mining" + }, +/obj/structure/cable/cyan{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/ship/storage/eva) +"GW" = ( +/turf/closed/wall/r_wall/yesdiag, +/area/ship/bridge) +"He" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/cyan{ + icon_state = "5-6" + }, +/obj/structure/cable/cyan{ + icon_state = "4-5" + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"Hh" = ( +/obj/structure/window/reinforced/fulltile, +/obj/structure/grille, +/obj/machinery/door/firedoor/window, +/turf/open/floor/plating, +/area/ship/cargo) +"HE" = ( +/obj/effect/turf_decal/solarpanel, +/turf/closed/wall/r_wall/yesdiag, +/area/ship/crew/canteen) +"HI" = ( +/obj/machinery/door/airlock/external{ + dir = 4 + }, /turf/open/floor/plating, -/area/ship/crew) +/area/ship/engineering) +"HP" = ( +/obj/machinery/light/dim/directional/east, +/obj/structure/toilet{ + dir = 8; + pixel_y = 7; + pixel_x = 6 + }, +/obj/effect/decal/cleanable/vomit/old{ + pixel_y = 13; + pixel_x = -10 + }, +/turf/open/floor/plasteel/patterned, +/area/ship/crew/toilet) +"Ia" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable/cyan{ + icon_state = "1-10" + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) "Ip" = ( /obj/machinery/door/poddoor{ - id = "mining_ship_starboard" + id = "dwayne_cargo" }, /turf/open/floor/plating, -/area/ship/construction) +/area/ship/cargo) "Is" = ( -/obj/effect/turf_decal/ntspaceworks_big/five, +/obj/structure/closet/crate/science, +/obj/item/paicard, +/obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, -/area/ship/construction) +/area/ship/cargo) "IF" = ( -/obj/machinery/power/port_gen/pacman, +/obj/effect/turf_decal/corner/opaque/ntblue/half, +/obj/machinery/computer/cargo{ + dir = 1 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"IJ" = ( +/obj/machinery/vending/cigarette, +/obj/item/toy/figure/miner{ + pixel_y = 17; + toysay = "Careful out there! Frontier is deadly this time of the year!... Or any time of the year, actually..."; + pixel_x = -4 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) +"IK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/cigbutt, +/obj/effect/turf_decal/ntspaceworks_big/five{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/storage/eva) +"IT" = ( +/obj/structure/grille, +/obj/machinery/door/poddoor/preopen{ + id = "dwayne_windows"; + dir = 2 + }, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating/airless, +/area/ship/bridge) +"IZ" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, /obj/structure/cable/yellow{ - icon_state = "0-4" + icon_state = "4-8" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) +"Jg" = ( +/obj/machinery/conveyor{ + dir = 2; + id = "smelter_dwayne" + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/storage/eva) +"Jk" = ( +/obj/machinery/door/poddoor/preopen{ + id = "dwayne_windows"; + dir = 4 + }, +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating, +/area/ship/crew/canteen) +"Jn" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/cargo) +"Jq" = ( +/obj/structure/closet/crate/engineering, +/obj/item/stack/sheet/plastic/five, +/obj/item/stack/sheet/glass/twenty, +/obj/item/stack/sheet/metal/twenty, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/cargo) +"Jy" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"JE" = ( +/obj/effect/decal/cleanable/ash, +/obj/structure/cable/cyan{ + icon_state = "1-10" + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/storage/eva) +"JH" = ( +/obj/structure/bed, +/obj/item/bedsheet/dorms, +/obj/structure/cable/yellow{ + icon_state = "4-10" + }, +/turf/open/floor/carpet, +/area/ship/crew/dorm) +"JZ" = ( +/obj/effect/turf_decal/corner/opaque/yellow/half{ + dir = 1 + }, +/obj/structure/table, +/obj/machinery/computer/helm/viewscreen/directional/north, +/obj/item/decal_painter{ + pixel_x = -2; + pixel_y = 3 + }, +/obj/item/hand_labeler{ + pixel_x = 13; + pixel_y = -1 + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/cargo) +"Ka" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/structure/cable/cyan{ + icon_state = "4-8" + }, +/obj/structure/cable/cyan{ + icon_state = "2-8" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/hallway/central) +"Kc" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/rack, +/obj/item/storage/toolbox/electrical{ + pixel_x = 1; + pixel_y = 6 + }, +/obj/item/storage/toolbox/mechanical{ + pixel_x = -2; + pixel_y = -1 + }, +/obj/item/clothing/head/welding{ + pixel_x = -2; + pixel_y = 1 }, -/obj/item/stack/sheet/mineral/plasma/five, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/pipe/simple/orange/visible, /turf/open/floor/plasteel/tech/grid, /area/ship/engineering) -"IJ" = ( +"Kz" = ( +/obj/effect/turf_decal/corner/opaque/ntblue/half{ + dir = 4 + }, +/obj/machinery/button/door{ + id = "dwayne_windows"; + name = "Fore Window Control"; + pixel_x = -10; + pixel_y = 20; + dir = 2 + }, +/obj/machinery/computer/helm{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"KO" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable/cyan{ + icon_state = "6-9" + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/cargo) +"LH" = ( +/obj/machinery/firealarm/directional/south{ + pixel_x = -5 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "5-10" + }, /obj/structure/cable/yellow{ + icon_state = "1-10" + }, +/obj/structure/extinguisher_cabinet/directional/south{ + pixel_x = 7 + }, +/turf/open/floor/carpet, +/area/ship/crew/dorm) +"LJ" = ( +/obj/structure/table/reinforced, +/obj/machinery/microwave, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"LK" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/components/binary/pump/on/layer2{ + dir = 1; + name = "Air to Distro" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/structure/cable/cyan{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plating, +/area/ship/engineering) +"LN" = ( +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) +"LZ" = ( +/obj/structure/table/reinforced, +/obj/structure/closet/secure_closet/freezer/wall/directional/south{ + name = "kitchen cabinet" + }, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/obj/item/storage/cans/sixbeer, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/snacks/canned/beans, +/obj/item/reagent_containers/food/snacks/canned/beans, +/obj/item/reagent_containers/food/snacks/candy, +/obj/item/reagent_containers/food/snacks/candy, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/canteen) +"Mb" = ( +/obj/machinery/door/airlock/mining/glass{ + name = "Cargo Hangar" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/door/firedoor/border_only, /obj/machinery/door/firedoor/border_only{ dir = 1 }, -/obj/machinery/door/airlock/medical, -/obj/effect/turf_decal/corner/opaque/white/mono, -/obj/effect/turf_decal/corner/opaque/blue/mono, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"IK" = ( -/obj/effect/turf_decal/corner/opaque/yellow/half{ - dir = 4 +/obj/structure/cable/cyan{ + icon_state = "1-2" }, -/obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/plasteel, /area/ship/cargo) -"IT" = ( -/obj/structure/table, -/obj/item/storage/firstaid/o2{ - pixel_x = 4; - pixel_y = 3 - }, -/obj/item/storage/firstaid/fire, -/obj/item/storage/firstaid/medical{ - pixel_x = -5; - pixel_y = -4 +"Mg" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 }, -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/plasteel/mono, -/area/ship/medical) -"IZ" = ( -/obj/item/clothing/suit/hazardvest{ - desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; - name = "emergency lifejacket"; - pixel_x = -4; - pixel_y = -4 +/obj/effect/turf_decal/techfloor{ + dir = 1 }, -/obj/item/clothing/suit/hazardvest{ - desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; - name = "emergency lifejacket" +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 }, -/obj/item/clothing/suit/hazardvest{ - desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; - name = "emergency lifejacket"; - pixel_x = 4; - pixel_y = 4 +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/engineering) +"Mk" = ( +/obj/machinery/door/poddoor/preopen{ + id = "dwayne_engines"; + dir = 4 }, -/obj/item/clothing/head/hardhat/mining{ - pixel_x = -4; - pixel_y = -4 +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating, +/area/ship/engineering) +"Mn" = ( +/obj/machinery/light/directional/south, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) +"Mo" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/cyan{ + icon_state = "5-10" }, -/obj/item/clothing/head/hardhat/mining, -/obj/item/clothing/head/hardhat/mining{ - pixel_x = 4; - pixel_y = 4 +/turf/open/floor/plating, +/area/ship/storage/eva) +"Mz" = ( +/obj/machinery/holopad/emergency/command, +/obj/effect/turf_decal/box/white{ + color = "#283674" }, -/obj/item/gps/mining, -/obj/item/gps/mining, -/obj/item/gps/mining, -/obj/item/clothing/glasses/meson/prescription, -/obj/item/clothing/glasses/meson, -/obj/item/clothing/glasses/meson, -/obj/item/t_scanner/adv_mining_scanner/lesser, -/obj/item/gun/energy/kinetic_accelerator, -/obj/item/pickaxe/silver, -/obj/item/pickaxe/silver, -/obj/item/storage/bag/ore, -/obj/item/storage/bag/ore, -/obj/structure/closet/wall/directional/north{ - name = "equipment closet" +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"MB" = ( +/obj/machinery/door/airlock/hatch{ + name = "Cryogenics" }, -/obj/effect/turf_decal/industrial/warning/corner{ +/obj/machinery/door/firedoor/border_only{ dir = 1 }, -/turf/open/floor/plasteel/dark, -/area/ship/crew) -"Jg" = ( -/obj/effect/landmark/start/quartermaster, -/turf/open/floor/plasteel, -/area/ship/cargo) -"Jn" = ( -/obj/effect/turf_decal/ntspaceworks_big/four, -/turf/open/floor/plating, -/area/ship/construction) -"Jq" = ( -/obj/effect/turf_decal/ntspaceworks_big/two, -/turf/open/floor/plating, -/area/ship/construction) -"Jy" = ( -/obj/effect/turf_decal/corner/opaque/white/mono, -/obj/effect/turf_decal/borderfloor{ - dir = 8 +/obj/machinery/door/firedoor/border_only, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable/cyan{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/tech, +/area/ship/crew/cryo) +"MD" = ( +/obj/machinery/power/solar, +/obj/effect/turf_decal/solarpanel, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + icon_state = "0-1" }, -/obj/effect/turf_decal/corner/opaque/blue/half{ +/turf/open/floor/plating/airless, +/area/ship/external/dark) +"MG" = ( +/turf/closed/wall/r_wall, +/area/ship/crew/dorm) +"MQ" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/effect/turf_decal/techfloor, +/obj/effect/turf_decal/industrial/warning, +/obj/machinery/button/door{ + id = "dwayne_engines"; + name = "Aft Window Control"; + pixel_x = -20; + pixel_y = 0; dir = 4 }, -/obj/machinery/computer/operating/retro{ +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/engineering) +"MT" = ( +/obj/effect/turf_decal/industrial/warning/corner{ dir = 4 }, -/turf/open/floor/plasteel/mono/white, -/area/ship/medical) -"JH" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/head/hardhat/mining{ - pixel_x = -18; - pixel_y = 8 - }, -/obj/item/phone{ - pixel_x = 5; - pixel_y = 8 +/obj/item/radio/intercom/directional/north, +/turf/open/floor/plating, +/area/ship/storage/eva) +"Nf" = ( +/obj/effect/turf_decal/industrial/warning, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ship/cargo) +"Nw" = ( +/obj/structure/cable/cyan{ + icon_state = "4-8" }, -/obj/item/areaeditor/shuttle{ - pixel_x = -11 +/obj/structure/catwalk/over/plated_catwalk, +/obj/structure/cable/cyan{ + icon_state = "6-8" }, -/obj/effect/turf_decal/corner/opaque/blue/half{ - dir = 1 +/turf/open/floor/plating, +/area/ship/engineering) +"NC" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" }, -/obj/item/radio/intercom/wideband/directional/east, -/obj/item/clothing/suit/armor/vest/capcarapace/duster, -/obj/item/clothing/head/caphat/cowboy, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) -"Ka" = ( -/obj/machinery/status_display/shuttle, -/turf/closed/wall, -/area/ship/bridge) -"Kc" = ( +/obj/machinery/power/solar, /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "2-8" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/light_switch{ - dir = 1; - pixel_x = 25; - pixel_y = -25 +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/effect/turf_decal/corner/opaque/white/mono, -/obj/effect/turf_decal/corner/opaque/blue/border, -/turf/open/floor/plasteel/mono/white, -/area/ship/medical) -"KO" = ( -/obj/effect/turf_decal/ntspaceworks_big/three, -/turf/open/floor/plating, -/area/ship/construction) -"LH" = ( -/obj/machinery/door/poddoor/preopen{ - id = "mining_ship_blast" +/obj/effect/turf_decal/solarpanel, +/turf/open/floor/plating/airless, +/area/ship/external/dark) +"NE" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ship/engineering) -"LJ" = ( -/obj/machinery/vending/cola/random, -/turf/open/floor/plasteel/dark, -/area/ship/crew) -"LK" = ( +/obj/machinery/light/directional/east, /obj/machinery/power/solar_control{ - dir = 8 + dir = 8; + icon_state = "computer-right" }, -/obj/structure/cable/yellow, -/obj/effect/decal/cleanable/dirt/dust, -/obj/item/storage/overmap_ship/electric/directional/east, /turf/open/floor/plasteel/tech/grid, /area/ship/engineering) -"LN" = ( -/obj/effect/turf_decal/industrial/warning/corner, -/turf/open/floor/plating, -/area/ship/construction) -"LZ" = ( -/turf/closed/wall/r_wall, -/area/ship/crew) -"Mb" = ( +"NM" = ( /obj/machinery/door/poddoor/preopen{ - id = "mining_ship_blast" + id = "dwayne_windows"; + dir = 2 + }, +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating/airless, +/area/ship/crew/dorm) +"NN" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/cyan{ + icon_state = "6-9" + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/storage/eva) +"NT" = ( +/obj/structure/closet/cardboard, +/obj/effect/spawner/lootdrop/glowstick, +/obj/effect/spawner/lootdrop/glowstick{ + pixel_y = 2 + }, +/obj/effect/spawner/lootdrop/glowstick{ + pixel_y = -3; + pixel_x = 7 + }, +/obj/effect/spawner/lootdrop/glowstick{ + pixel_x = -6 + }, +/obj/effect/spawner/lootdrop/glowstick{ + pixel_y = -3 + }, +/obj/effect/spawner/lootdrop/glowstick{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/effect/spawner/lootdrop/glowstick{ + pixel_x = -4; + pixel_y = -4 }, -/obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, -/area/ship/crew) -"Mg" = ( +/area/ship/storage/eva) +"NW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/ntspaceworks_big/five, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/cargo) +"Op" = ( /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "0-8" }, -/obj/structure/cable{ +/obj/machinery/power/tracker, +/obj/effect/turf_decal/solarpanel, +/obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 6 +/obj/structure/cable/yellow{ + icon_state = "1-8" }, -/obj/effect/turf_decal/techfloor{ +/turf/open/floor/plating/airless, +/area/ship/external/dark) +"Ou" = ( +/obj/effect/turf_decal/industrial/warning/corner{ dir = 1 }, +/obj/structure/chair/comfy/shuttle{ + dir = 2 + }, +/obj/machinery/light/small/directional/east, +/obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering) -"Mn" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 8 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) -"Mo" = ( -/obj/structure/closet/crate/large, -/obj/effect/spawner/lootdrop/maintenance/four, -/obj/item/circuitboard/machine/chem_dispenser/drinks, -/obj/item/circuitboard/computer/arcade/orion_trail, -/obj/item/kinetic_crusher, -/obj/effect/turf_decal/box, -/obj/item/vending_refill/mining_equipment, -/obj/item/ammo_box/c38_box, -/obj/item/ammo_box/c38_box, -/obj/item/ammo_box/c38_box, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 9 +"Ov" = ( +/obj/structure/closet/cardboard, +/obj/item/chair/plastic, +/obj/item/chair/plastic{ + pixel_y = 4 }, -/turf/open/floor/plasteel, -/area/ship/cargo) -"Mz" = ( -/obj/structure/bed, -/obj/item/bedsheet/brown, -/obj/structure/curtain/bounty, -/obj/structure/sign/poster/official/no_erp{ - pixel_y = 32 +/obj/item/chair/plastic{ + pixel_y = 8 }, -/turf/open/floor/wood, -/area/ship/crew) -"MB" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "2-8" +/obj/item/chair/plastic{ + pixel_y = 11 }, -/obj/effect/turf_decal/corner/opaque/white/mono, -/obj/effect/turf_decal/corner/opaque/blue/border, -/turf/open/floor/plasteel/mono/white, -/area/ship/medical) -"MD" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/effect/turf_decal/ntspaceworks_big/one, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/cargo) +"Oz" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/corner/opaque/ntblue/half, +/obj/machinery/fax/indie{ + pixel_y = 7 }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"OJ" = ( +/turf/template_noop, +/area/template_noop) +"OL" = ( /obj/machinery/light/directional/west, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stack/cable_coil/red{ - pixel_x = 2; - pixel_y = 6 +/obj/structure/filingcabinet/filingcabinet{ + dir = 4; + pixel_x = -10 }, -/obj/item/stock_parts/cell/high/plus, -/obj/structure/cable{ - icon_state = "1-6" +/obj/effect/turf_decal/corner/opaque/ntblue/border{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering) -"MG" = ( +/obj/item/flashlight/flare, +/obj/item/tank/internals/emergency_oxygen/engi, +/obj/item/clothing/mask/breath, +/obj/item/reagent_containers/food/drinks/bottle/whiskey, +/obj/item/ammo_box/c38, +/obj/item/ammo_box/c38, +/obj/item/gun/ballistic/revolver/detective, +/obj/item/megaphone/cargo, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"OP" = ( +/obj/structure/extinguisher_cabinet/directional/south, /obj/structure/cable/yellow{ - icon_state = "1-2" + icon_state = "6-9" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 }, -/obj/machinery/light_switch{ - pixel_x = 21; - pixel_y = 25 +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) +"OQ" = ( +/obj/effect/turf_decal/corner/opaque/yellow/three_quarters, +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 8 }, -/turf/open/floor/plasteel/grimy, -/area/ship/crew) -"MQ" = ( -/obj/structure/cable/yellow{ +/obj/machinery/button/shieldwallgen{ + id = "dwayne_cargo_field"; + pixel_x = 1; + pixel_y = -19; + dir = 1 + }, +/obj/machinery/button/door{ + id = "dwayne_cargo"; + name = "Blast Doors"; + pixel_x = -8; + pixel_y = -20; + dir = 1 + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/cargo) +"OW" = ( +/obj/effect/turf_decal/corner/opaque/yellow/half, +/obj/structure/closet/crate/large, +/obj/effect/turf_decal/industrial/warning, +/obj/effect/spawner/lootdrop/plushie, +/obj/effect/spawner/lootdrop/plushie, +/obj/effect/spawner/lootdrop/plushie, +/obj/effect/spawner/lootdrop/plushie, +/obj/effect/spawner/lootdrop/plushie, +/obj/structure/cable/cyan{ icon_state = "1-2" }, -/obj/machinery/atmospherics/components/binary/pump/on/layer2{ - dir = 1; - name = "Air to Distro"; - target_pressure = 500 +/turf/open/floor/plasteel/patterned/grid, +/area/ship/cargo) +"Pd" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 }, -/obj/structure/cable/yellow{ - icon_state = "2-4" +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 }, -/obj/effect/turf_decal/techfloor, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"MT" = ( -/obj/effect/turf_decal/corner/opaque/yellow/half{ +/obj/effect/turf_decal/ntspaceworks_big/four{ dir = 1 }, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/storage/eva) +"Pe" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer4{ + dir = 4 + }, +/turf/open/floor/plating/airless, +/area/ship/external/dark) +"Ph" = ( /obj/effect/turf_decal/industrial/warning{ dir = 1 }, -/turf/open/floor/plasteel, -/area/ship/cargo) -"Nf" = ( -/obj/effect/turf_decal/number/five, -/obj/effect/turf_decal/industrial/warning, /turf/open/floor/plating, -/area/ship/construction) -"Nw" = ( -/obj/machinery/status_display/shuttle, -/turf/closed/wall, -/area/ship/engineering) -"NM" = ( -/obj/structure/cable/yellow, +/area/ship/storage/eva) +"Pl" = ( /obj/structure/cable/yellow{ - icon_state = "0-2" + icon_state = "4-6" }, -/obj/machinery/power/solar, -/obj/effect/turf_decal/solarpanel, -/turf/open/floor/plating/airless, -/area/ship/external) -"NN" = ( -/obj/structure/closet/crate/engineering, -/obj/item/stack/sheet/metal/twenty, -/obj/item/stack/sheet/glass/fifty, -/obj/effect/turf_decal/box, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 +/obj/structure/cable/yellow{ + icon_state = "1-6" }, -/turf/open/floor/plasteel, -/area/ship/cargo) -"Op" = ( -/obj/item/vending_refill/mining_equipment{ - pixel_y = -8 +/obj/structure/cable/cyan{ + icon_state = "2-9" }, -/turf/closed/wall/r_wall, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, /area/ship/engineering) -"OJ" = ( -/turf/template_noop, -/area/template_noop) -"OL" = ( -/obj/effect/turf_decal/corner/opaque/blue/half{ +"Po" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable/cyan{ + icon_state = "2-9" + }, +/mob/living/simple_animal/turtle{ dir = 4 }, -/obj/machinery/computer/helm/retro{ +/turf/open/floor/wood{ + icon_state = "wood-broken2" + }, +/area/ship/crew/dorm) +"Px" = ( +/obj/effect/turf_decal/corner/opaque/yellow, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 8 }, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) -"OP" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 +/obj/machinery/computer/cryopod/directional/east, +/obj/machinery/light_switch{ + dir = 1; + pixel_x = -12; + pixel_y = -19 }, -/obj/machinery/light/directional/south, -/obj/effect/turf_decal/corner/opaque/ntblue/half{ - dir = 4 +/obj/item/radio/intercom/directional/south{ + pixel_x = 1 }, -/turf/open/floor/plasteel/dark, -/area/ship/crew) -"OW" = ( -/obj/effect/turf_decal/number/one, +/turf/open/floor/plasteel/tech, +/area/ship/crew/cryo) +"PH" = ( /obj/effect/turf_decal/industrial/warning/corner{ dir = 8 }, -/turf/open/floor/plating, -/area/ship/construction) -"Pd" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/corner/opaque/yellow, -/obj/machinery/light_switch{ - pixel_x = 25; - pixel_y = -25 +/obj/structure/chair/comfy/shuttle{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ +/obj/item/radio/intercom/directional/east, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/engineering) +"PU" = ( +/obj/structure/filingcabinet/chestdrawer/wheeled{ dir = 8 }, -/turf/open/floor/plasteel, -/area/ship/cargo) -"Ph" = ( +/obj/item/folder/yellow, +/obj/item/folder/yellow, +/obj/item/folder/blue, +/obj/item/folder, /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/corner/opaque/yellow/half{ - dir = 1 - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 1 - }, -/turf/open/floor/plasteel, +/obj/item/pen, +/obj/item/pen, +/obj/effect/turf_decal/ntspaceworks_big/eight, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) -"Pl" = ( -/obj/structure/rack, -/obj/item/storage/toolbox/electrical{ - pixel_x = 1; - pixel_y = 6 +"Qe" = ( +/obj/structure/window{ + dir = 4 }, -/obj/item/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 +/obj/structure/curtain, +/obj/machinery/shower{ + dir = 1; + pixel_y = 0 }, -/obj/item/clothing/head/welding{ +/obj/item/bikehorn/rubberducky/plasticducky{ pixel_x = -2; - pixel_y = 1 + pixel_y = 3 }, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable{ - icon_state = "0-2" +/obj/structure/catwalk/over/plated_catwalk/white, +/obj/machinery/door/window/northleft{ + name = "Shower Door" }, -/obj/structure/cable, -/obj/item/clothing/gloves/color/yellow, -/obj/item/clothing/gloves/color/yellow, -/obj/item/reagent_containers/glass/beaker{ - list_reagents = list(/datum/reagent/fuel=50) +/turf/open/floor/plasteel/mono/white, +/area/ship/crew/toilet) +"Qg" = ( +/obj/machinery/power/ship_gravity, +/obj/structure/cable/cyan{ + icon_state = "0-8" }, /turf/open/floor/plasteel/tech/grid, /area/ship/engineering) -"Po" = ( -/obj/structure/cable/yellow, -/obj/structure/cable/yellow{ - icon_state = "0-4" - }, -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/obj/machinery/power/tracker, -/obj/effect/turf_decal/solarpanel, -/turf/open/floor/plating/airless, -/area/ship/external) -"Px" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/obj/structure/cable/yellow{ - icon_state = "2-4" +"Qj" = ( +/obj/effect/turf_decal/corner/opaque/yellow/half, +/obj/item/stack/sheet/cardboard{ + amount = 2 }, -/obj/effect/turf_decal/corner/opaque/white/mono, -/turf/open/floor/plasteel/mono/white, -/area/ship/medical) -"PU" = ( -/obj/effect/turf_decal/ntspaceworks_big/one, -/turf/open/floor/plating, -/area/ship/construction) -"Qe" = ( -/turf/open/floor/plasteel/grimy, -/area/ship/crew) +/obj/effect/turf_decal/industrial/warning, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/cargo) "Qp" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/machinery/door/airlock/external{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 }, -/turf/open/floor/plasteel/tech/techmaint, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating, /area/ship/engineering) "QG" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/bag/ore, +/obj/item/storage/bag/ore, +/obj/item/storage/bag/ore, +/obj/structure/closet/crate/miningcar{ + name = "mining cart" }, -/obj/structure/closet/crate/large, -/obj/machinery/portable_atmospherics/canister/hydrogen, -/turf/open/floor/plating, -/area/ship/cargo) +/turf/open/floor/plasteel/patterned/grid, +/area/ship/storage/eva) "QI" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/structure/cable/yellow{ + icon_state = "2-4" }, -/obj/structure/reagent_dispensers/watertank, -/obj/item/storage/bag/trash{ - pixel_x = 6 +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/structure/cable/yellow{ + icon_state = "2-5" }, -/obj/item/reagent_containers/glass/bucket, -/obj/item/mop, -/turf/open/floor/plasteel/tech/grid, +/obj/structure/cable/cyan{ + icon_state = "1-10" + }, +/turf/open/floor/plating, /area/ship/engineering) "QO" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/effect/turf_decal/corner/opaque/yellow/three_quarters{ + dir = 1 }, -/obj/effect/turf_decal/corner/opaque/yellow/half, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel, -/area/ship/cargo) +/obj/item/cigbutt, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/storage/eva) "RA" = ( +/obj/effect/turf_decal/techfloor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning, +/obj/item/cigbutt, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/engineering) +"RJ" = ( +/obj/machinery/power/solar, +/obj/effect/turf_decal/solarpanel, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/open/floor/plating/airless, +/area/ship/external/dark) +"RN" = ( +/turf/closed/wall/r_wall/yesdiag, +/area/ship/storage/eva) +"RS" = ( +/obj/effect/turf_decal/corner/opaque/yellow/three_quarters{ + dir = 8 + }, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/machinery/button/shieldwallgen{ + id = "dwayne_mining_field"; + pixel_x = 1; + pixel_y = 19 + }, +/obj/machinery/button/door{ + id = "dwayne_mining"; + name = "Blast Doors"; + pixel_x = -8; + pixel_y = 20 + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/storage/eva) +"RT" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/effect/turf_decal/corner/opaque/black{ + dir = 6 }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) +"RU" = ( +/obj/structure/closet/crate/internals, +/obj/item/tank/internals/oxygen/yellow, +/obj/item/tank/internals/oxygen/yellow, +/obj/item/tank/internals/oxygen/yellow, +/obj/item/tank/internals/oxygen/yellow, +/obj/item/tank/internals/oxygen/yellow, +/obj/item/tank/internals/emergency_oxygen/engi, +/obj/item/tank/internals/emergency_oxygen/engi, +/obj/item/tank/internals/emergency_oxygen/engi, +/turf/open/floor/plating, +/area/ship/storage/eva) +"Se" = ( /obj/machinery/door/firedoor/border_only{ dir = 8 }, -/obj/machinery/door/airlock/engineering{ +/obj/machinery/door/firedoor/border_only{ dir = 4 }, -/obj/effect/turf_decal/techfloor{ - dir = 8 +/obj/machinery/door/airlock/command/glass{ + dir = 4; + name = "Bridge"; + req_one_access = list(20,41) }, -/turf/open/floor/plasteel, -/area/ship/engineering) -"RN" = ( -/obj/effect/turf_decal/corner/opaque/white/mono, -/obj/structure/table, -/obj/item/book/manual/wiki/surgery, -/obj/item/storage/backpack/duffelbag/med/surgery, -/obj/item/clothing/mask/surgical, -/obj/item/clothing/suit/apron/surgical, -/obj/item/clothing/gloves/color/latex/nitrile, -/obj/effect/turf_decal/borderfloor{ +/obj/structure/cable/cyan{ + icon_state = "4-10" + }, +/obj/effect/turf_decal/corner/opaque/black{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 }, -/obj/effect/turf_decal/corner/opaque/blue/half{ +/turf/open/floor/plasteel/stairs{ + dir = 4; + color = "#555555" + }, +/area/ship/bridge) +"Sg" = ( +/obj/machinery/door/firedoor/border_only{ dir = 4 }, -/turf/open/floor/plasteel/mono/white, -/area/ship/medical) -"RS" = ( -/obj/structure/bed, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/turf_decal/corner/opaque/white/mono, -/obj/effect/turf_decal/borderfloor{ +/obj/machinery/door/firedoor/border_only{ dir = 8 }, -/obj/effect/turf_decal/corner/opaque/blue/half{ - dir = 4 +/obj/structure/cable/yellow{ + icon_state = "4-8" }, -/obj/machinery/light/directional/west, -/turf/open/floor/plasteel/mono/white, -/area/ship/medical) -"RT" = ( -/obj/structure/chair/comfy/shuttle{ +/obj/structure/cable/cyan{ + icon_state = "6-10" + }, +/obj/machinery/door/airlock/engineering{ + dir = 4; + name = "Engineering" + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"St" = ( +/obj/machinery/door/poddoor/preopen{ + id = "dwayne_windows"; dir = 4 }, -/obj/effect/turf_decal/box, -/turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) -"RU" = ( -/obj/structure/closet/crate/wooden, -/obj/item/clothing/suit/hooded/explorer, -/obj/item/clothing/suit/hooded/explorer, -/obj/item/clothing/suit/hooded/explorer, -/turf/open/floor/plating, -/area/ship/cargo) -"Se" = ( -/obj/effect/turf_decal/corner/opaque/blue/half{ +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating, +/area/ship/crew/dorm) +"SB" = ( +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/obj/machinery/power/solar, +/obj/effect/turf_decal/solarpanel, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/turf/open/floor/plating/airless, +/area/ship/external/dark) +"SI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable/cyan{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/ship/cargo) +"Tl" = ( +/obj/machinery/washing_machine, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/plasteel/patterned, +/area/ship/crew/toilet) +"Tz" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable/cyan{ + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/wood, +/area/ship/crew/dorm) +"TO" = ( +/obj/effect/turf_decal/corner/opaque/yellow/half, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/storage/eva) +"TP" = ( +/obj/machinery/power/solar, +/obj/effect/turf_decal/solarpanel, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/turf/open/floor/plating/airless, +/area/ship/external/dark) +"TR" = ( +/obj/structure/chair/sofa/brown/old/right/directional/north, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"Ub" = ( +/obj/effect/turf_decal/industrial/warning, +/obj/machinery/cryopod, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/crew/cryo) +"Uj" = ( +/obj/effect/turf_decal/corner/opaque/yellow/half{ dir = 4 }, -/obj/machinery/computer/cargo/retro{ +/obj/machinery/airalarm/directional/east, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/storage/eva) +"Um" = ( +/turf/closed/wall, +/area/ship/crew/canteen) +"Un" = ( +/obj/effect/decal/cleanable/ash, +/obj/structure/railing{ dir = 8 }, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) -"Sg" = ( -/turf/open/floor/plasteel/dark, -/area/ship/crew) -"St" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/layer4, -/obj/effect/turf_decal/industrial/warning{ - dir = 9 +/obj/effect/turf_decal/corner/opaque/yellow/half{ + dir = 8 }, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"SB" = ( -/obj/effect/turf_decal/ntspaceworks_big/eight, -/turf/open/floor/plating, -/area/ship/construction) -"Tl" = ( -/obj/structure/chair/comfy/orange/directional/north, -/turf/open/floor/plasteel/grimy, -/area/ship/crew) -"TP" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/obj/item/gun/ballistic/shotgun/flamingarrow, +/obj/item/gun/ballistic/shotgun/flamingarrow, +/obj/item/gun/ballistic/shotgun/flamingarrow, +/obj/structure/guncloset/shotgun{ + name = "rifle locker"; + desc = "A locker that holds rifles." }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ +/turf/open/floor/plasteel/patterned/grid, +/area/ship/storage/eva) +"UD" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 1 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/closet/crate/medical, +/obj/item/clothing/gloves/color/latex/nitrile, +/obj/item/storage/firstaid/regular, +/obj/item/roller, +/obj/item/reagent_containers/hypospray/medipen/survival, +/obj/item/reagent_containers/hypospray/medipen/survival{ + pixel_y = -4 }, -/obj/structure/catwalk/over, -/turf/open/floor/plating, -/area/ship/crew) -"Ub" = ( -/obj/structure/bed/roller, -/obj/item/bedsheet/medical, -/obj/machinery/iv_drip, -/obj/effect/turf_decal/corner/opaque/white/mono, -/obj/effect/turf_decal/corner/opaque/blue/border{ - dir = 1 +/obj/item/storage/pill_bottle/charcoal/less, +/obj/structure/cable/cyan{ + icon_state = "5-10" }, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/plasteel/mono/white, -/area/ship/medical) -"Um" = ( -/obj/structure/table/wood, -/obj/machinery/microwave, -/turf/open/floor/plasteel/grimy, -/area/ship/crew) -"Un" = ( -/obj/effect/turf_decal/box, -/turf/open/floor/plasteel, +/obj/effect/turf_decal/ntspaceworks_big/six, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "UP" = ( -/obj/machinery/door/airlock/external{ - dir = 4 +/obj/docking_port/stationary{ + width = 30; + height = 15; + dwidth = 15; + dir = 8 }, -/obj/structure/cable/yellow{ +/turf/template_noop, +/area/template_noop) +"UX" = ( +/obj/structure/cable/cyan{ + icon_state = "2-8" + }, +/obj/structure/cable/cyan{ + icon_state = "1-8" + }, +/obj/structure/cable/cyan{ icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, +/obj/structure/catwalk/over/plated_catwalk/dark, /turf/open/floor/plating, -/area/ship/engineering) +/area/ship/hallway/central) "UY" = ( -/obj/effect/spawner/lootdrop/maintenance, -/obj/structure/closet/crate, -/obj/effect/turf_decal/box, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel, -/area/ship/cargo) +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/storage/eva) "Vb" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/structure/dresser{ + dir = 4 }, -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/preopen{ - id = "mining_ship_blast"; - dir = 8 +/obj/machinery/light/directional/west, +/obj/item/reagent_containers/food/drinks/soda_cans/cola{ + pixel_y = 14; + pixel_x = 3 }, -/turf/open/floor/plating, -/area/ship/medical) +/turf/open/floor/wood, +/area/ship/crew/dorm) "Vv" = ( -/obj/machinery/power/smes/engineering, -/obj/structure/cable{ - icon_state = "0-10" - }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, /turf/open/floor/plating, /area/ship/engineering) "VP" = ( -/obj/machinery/atmospherics/components/unary/portables_connector{ - dir = 8 +/obj/machinery/airalarm/directional/south, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 5 }, -/obj/structure/closet/emcloset/anchored, /turf/open/floor/plasteel/tech/grid, /area/ship/engineering) +"VZ" = ( +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/door/poddoor/preopen{ + id = "dwayne_windows"; + dir = 4 + }, +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating, +/area/ship/crew/dorm) "Wi" = ( -/obj/effect/turf_decal/corner/opaque/yellow/half, -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/machinery/autolathe, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/plasteel, -/area/ship/cargo) +/obj/machinery/mineral/processing_unit{ + output_dir = 4; + input_dir = 8 + }, +/obj/effect/turf_decal/industrial/outline/yellow, +/turf/open/floor/plasteel/mono/dark, +/area/ship/storage/eva) "Wm" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/corner/opaque/yellow/three_quarters{ - dir = 4 +/obj/effect/turf_decal/corner/opaque/yellow/half, +/obj/structure/cable/cyan{ + icon_state = "2-5" }, -/obj/structure/guncloset/shotgun, -/obj/item/gun/ballistic/shotgun/flamingarrow, -/obj/item/gun/ballistic/shotgun/flamingarrow, -/obj/item/gun/ballistic/shotgun/flamingarrow, -/turf/open/floor/plasteel, -/area/ship/cargo) -"WE" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/structure/cable/cyan{ + icon_state = "2-9" }, -/obj/machinery/light_switch{ - pixel_x = -25; - pixel_y = -25; - dir = 4 +/turf/open/floor/plasteel/patterned/grid, +/area/ship/storage/eva) +"WE" = ( +/obj/structure/cable/cyan{ + icon_state = "4-8" }, -/obj/effect/turf_decal/techfloor{ - dir = 10 +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plating, +/area/ship/hallway/central) +"WK" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ship/cargo) "WL" = ( -/obj/structure/table, -/obj/item/storage/belt/utility, -/obj/item/radio{ - pixel_x = 6; - pixel_y = 7 +/obj/machinery/door/poddoor/preopen{ + id = "dwayne_engines"; + dir = 2 }, -/obj/machinery/light/directional/west, -/obj/item/storage/box/lights/mixed, -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/turf/open/floor/plasteel/tech/grid, +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/turf/open/floor/plating, /area/ship/engineering) "WZ" = ( -/obj/structure/cable/yellow, -/obj/structure/cable/yellow{ - icon_state = "0-2" +/obj/item/kirbyplants/random{ + pixel_y = 18; + pixel_x = -8 }, -/obj/structure/cable/yellow{ - icon_state = "0-4" +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/turf/open/floor/wood{ + icon_state = "wood-broken4" }, -/obj/machinery/power/solar, -/obj/effect/turf_decal/solarpanel, -/turf/open/floor/plating/airless, -/area/ship/external) +/area/ship/crew/dorm) "Xk" = ( +/obj/effect/turf_decal/corner/opaque/yellow/half, +/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/industrial/warning, -/turf/open/floor/plating, -/area/ship/construction) +/turf/open/floor/plasteel/patterned/grid, +/area/ship/cargo) "Xl" = ( +/obj/machinery/firealarm/directional/north, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) +"Xm" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 6 + dir = 8 }, -/obj/structure/cable{ - icon_state = "2-4" +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable/cyan{ + icon_state = "0-8" }, -/obj/effect/turf_decal/corner/opaque/ntblue/half{ - dir = 4 +/obj/machinery/light_switch{ + dir = 2; + pixel_x = -12; + pixel_y = 20 }, -/turf/open/floor/plasteel/dark, -/area/ship/crew) -"Xn" = ( -/obj/structure/cable{ - icon_state = "4-8" +/turf/open/floor/plasteel/stairs{ + dir = 4; + color = "#555555" }, -/obj/structure/cable{ - icon_state = "1-8" +/area/ship/bridge) +"Xn" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 +/obj/structure/cable/cyan{ + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ +/obj/effect/turf_decal/industrial/warning{ dir = 1 }, -/obj/effect/turf_decal/techfloor{ - dir = 5 - }, /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering) "Xo" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 }, -/obj/machinery/button/door{ - id = "mining_ship_blast"; - name = "Blast Door Control"; - pixel_y = 28 +/obj/item/radio/intercom/directional/north, +/obj/effect/turf_decal/corner/opaque/black{ + dir = 6 }, -/obj/effect/turf_decal/box, -/turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) "Xw" = ( -/obj/structure/table, -/obj/item/defibrillator/loaded, -/obj/item/stack/medical/suture, -/obj/item/reagent_containers/syringe, -/obj/item/reagent_containers/glass/bottle/epinephrine{ - pixel_x = -4 +/obj/structure/table/wood, +/obj/item/reagent_containers/food/snacks/salad/oatmeal{ + pixel_y = 14; + pixel_x = 10; + desc = "A nice bowl of oatmeal. You aren't quite sure how long it's been sitting here." }, -/obj/item/reagent_containers/glass/bottle/charcoal{ - pixel_x = 7; - pixel_y = 4 +/obj/structure/cable/yellow{ + icon_state = "4-9" }, /obj/structure/cable/yellow{ - icon_state = "4-8" + icon_state = "2-9" + }, +/obj/item/reagent_containers/food/drinks/soda_cans/cola{ + pixel_y = 1; + pixel_x = -5 + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"XC" = ( +/obj/structure/chair/sofa/brown/old/right/directional/south, +/obj/item/radio/intercom/directional/north, +/obj/item/cigbutt/cigarbutt{ + pixel_x = 8; + pixel_y = -1 + }, +/turf/open/floor/wood, +/area/ship/crew/canteen) +"YA" = ( +/obj/machinery/power/solar, +/obj/effect/turf_decal/solarpanel, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" }, -/obj/item/storage/belt/medical, -/turf/open/floor/plasteel/mono, -/area/ship/medical) +/turf/open/floor/plating/airless, +/area/ship/external/dark) "YE" = ( -/obj/structure/catwalk/over, -/obj/machinery/computer/helm/viewscreen/directional/north, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 6 +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 10 }, -/turf/open/floor/plating, +/obj/item/radio/intercom/directional/north, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/turf/open/floor/plasteel/tech/grid, /area/ship/engineering) "YJ" = ( /turf/closed/wall/r_wall, /area/ship/cargo) -"YN" = ( -/turf/closed/wall/r_wall, -/area/ship/construction) +"YN" = ( +/obj/machinery/door/poddoor{ + id = "dwayne_cargo" + }, +/obj/machinery/power/shieldwallgen/atmos/roundstart{ + dir = 8; + id = "dwayne_cargo_field"; + locked = 1 + }, +/obj/structure/cable/cyan{ + icon_state = "0-1" + }, +/turf/open/floor/plating, +/area/ship/cargo) +"YY" = ( +/obj/structure/closet/crate/trashcart, +/obj/item/trash/candy, +/obj/item/trash/sosjerky, +/obj/item/trash/can/food/beans, +/obj/effect/spawner/lootdrop/maintenance, +/obj/structure/cable/cyan{ + icon_state = "2-5" + }, +/obj/structure/cable/cyan{ + icon_state = "5-8" + }, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/cargo) "Zj" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/machinery/door/firedoor/border_only{ + dir = 4 }, -/obj/machinery/button/door{ - dir = 1; - id = "mining_ship_starboard"; - name = "Starboard Hangar Shutters"; - pixel_y = -21 +/obj/machinery/door/firedoor/border_only{ + dir = 8 }, -/turf/open/floor/plasteel/dark, -/area/ship/crew) -"Zv" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ +/obj/machinery/door/airlock/engineering{ + dir = 4; + name = "Engineering" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 }, -/obj/structure/cable{ - icon_state = "1-8" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 }, -/obj/machinery/light_switch{ - dir = 4; - pixel_x = -20; - pixel_y = 22 +/obj/effect/turf_decal/industrial/warning, +/turf/open/floor/plasteel/tech/grid, +/area/ship/engineering) +"Zv" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable/cyan{ + icon_state = "1-2" }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) "ZA" = ( -/obj/effect/turf_decal/corner/opaque/yellow/half{ - dir = 1 - }, /obj/effect/turf_decal/industrial/warning{ dir = 1 }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel, -/area/ship/cargo) +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/ship/storage/eva) "ZK" = ( /obj/machinery/door/poddoor{ - id = "mining_ship_port" - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/structure/cable{ - icon_state = "2-8" + id = "dwayne_mining" }, /turf/open/floor/plating, -/area/ship/cargo) +/area/ship/storage/eva) "ZL" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 }, -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/industrial/caution{ dir = 4 }, /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering) +"ZQ" = ( +/obj/structure/bed, +/obj/item/bedsheet/dorms, +/turf/open/floor/carpet, +/area/ship/crew/dorm) "ZR" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 }, -/obj/effect/turf_decal/industrial/warning/corner, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 }, -/obj/machinery/light/directional/south, -/turf/open/floor/plasteel/dark, -/area/ship/crew) +/obj/structure/sign/poster/official/safety_internals{ + pixel_y = -32 + }, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/central) (1,1,1) = {" OJ @@ -2294,11 +3503,10 @@ OJ OJ OJ OJ -mF -mF +OJ UP -mF -mF +OJ +OJ OJ OJ OJ @@ -2313,12 +3521,11 @@ OJ OJ OJ OJ -OJ -CP -St +CB +mF HI -aS -CP +mF +CB OJ OJ OJ @@ -2329,58 +3536,55 @@ OJ (3,1,1) = {" OJ OJ -mF -gF -aD -Cn OJ -LH +OJ +OJ +OJ +CP iq ZL -gu -ig -zq -Cn -aD -gF -mF +aS +CP +OJ +OJ +OJ +OJ +OJ OJ "} (4,1,1) = {" OJ -OJ -tq -hK -bb -tq +mF +gF +aD +mF fy -tq -tq +WL +Ou Qp -tq -tq -fy -tq -uP -CO -tq +PH +WL +Pe +mF +aD +gF +mF OJ "} (5,1,1) = {" OJ -OJ tq CD vn -WL -IF -IF -as +tq +Mk +tq +tq kf -WE -vJ +tq +tq vJ -MD +tq ls gm tq @@ -2388,8 +3592,7 @@ OJ "} (6,1,1) = {" OJ -OJ -Op +tq YE bP om @@ -2408,7 +3611,6 @@ OJ "} (7,1,1) = {" OJ -OJ tq kQ hZ @@ -2428,106 +3630,100 @@ OJ "} (8,1,1) = {" OJ -YJ -YJ -YJ -YJ -YJ -YJ -YJ +tq +Ez +AY +NE +Qg +ow lD Nw RA +nJ +Kc +ig +hK +zY tq -tq -tq -tq -tq -tq -tq +OJ "} (9,1,1) = {" -OJ -YJ +RN qz -aR -uT -za -pS -eM +uc +uc +uc +uc +uc mE yu iZ -bj -uk -uk -uk -uk -LN -YN +eM +eM +eM +eM +eM +YJ +gu "} (10,1,1) = {" -OJ -pl +qz MT eH Cp Jg vb -eM +uc Sg -AD +mF Zj -bj -uk -uk -uk -uk -Xk -Ip +eM +pS +ve +xP +SI +mX +YJ "} (11,1,1) = {" -OJ in -MT -FP +mr +as Un oB Wi -eM +uc aI -TP +AD ZR -bj -uk -uk -uk -uk -Xk -Ip +eM +CS +Ov +NW +YY +mf +uP "} (12,1,1) = {" -OJ -in +ZK Fn vA NN pq nf uc -or +LN lv -sD -Mb -uk -uk -uk -uk -Xk +mA +eM +cL +zI +UD +FR +Nf Ip "} (13,1,1) = {" -fp ZK ZA QG @@ -2536,160 +3732,152 @@ zF QO Ex wW -nJ +lv sg Hh -uk -uk -uk -uk -Xk +bb +hO +WK +ul +Qj Ip "} (14,1,1) = {" -OJ -in -Fn -FP +ZK +eu +NT tX Pd Wm -uc +zl or -lv +UX sD Mb -uk -uk +oQ +GH PU Is Xk Ip "} (15,1,1) = {" -OJ -in +ZK Ph -FP +bO nL kM -YJ -YJ +TO +Ex IZ -lv +WE dK -bj -uk +Hh +zc uk Jq -mr +FP Nf Ip "} (16,1,1) = {" -OJ -bl -Fn +ZK +eu ww Mo dx -YJ -LJ -Sg +wh +uc +EE lv tj -bj -uk -uk +eM +rq +tJ KO vf bf Ip "} (17,1,1) = {" -OJ -YJ +GU zK -FP +JE IK RU -YJ -GU -Sg +of +uc +fz lv Fd -bj -uk -uk +eM +JZ +bl Jn -SB +bo OW YN "} (18,1,1) = {" -OJ -YJ -YJ -ei -ei -ei -ei -oC +qz +RS +Uj +GN +zq +zt +uc kb -lv +FH pt -bj -LZ -LZ -LZ -LZ -LZ -LZ +eM +oJ +ja +oy +cc +OQ +YJ "} (19,1,1) = {" -OJ -OJ -sP -ei -Jy -RS RN -oC +qz +uc +uc +uc +uc +uc my -lv +DR Gx -bj -Mz -cf -bE -LZ -sP -OJ +eM +eM +eM +eM +eM +YJ +gu "} (20,1,1) = {" OJ -OJ -FS -ei +mR +dQ oE sp pn oC -my +ec oR -Gx -bj +dy +bE gT yx Qe -Mb -FS +bj +vm OJ "} (21,1,1) = {" OJ -OJ -FS +zi ei Ub gs @@ -2702,143 +3890,212 @@ bj Ee HP Tl -Mb -FS +bj +vm OJ "} (22,1,1) = {" OJ -OJ -FS +za ei sZ Px -Kc +pn IJ DJ xh vj -wh -MG -Fz Um -Mb -FS +Um +Um +Um +Um +dh OJ "} (23,1,1) = {" OJ -OJ FS -ei -IT -Xw +MG +ap +ap +ap ap -oC Xl AQ OP -bj +Um pv aY vw -LZ -FS +LJ +nY OJ "} (24,1,1) = {" OJ -OJ FS -ei +MG fV Vb -rE -wv +cf +ap vQ Ka -zc -wv -rE +Zv +qt +fp Ia xr LZ -FS +nY OJ "} (25,1,1) = {" OJ -OJ -bW +FS NM WZ Po -ms +Tz DG Zv qg Mn -mA +Um ms kO hy -NM nY +HE OJ "} (26,1,1) = {" OJ -OJ -OJ -OJ -jS -jS -ms -JH +YA +CO +aV +sP +LH +ap Xo ak RT -GW -ms -jS +Um +XC +Xw jS -OJ -OJ +hd +MD OJ "} (27,1,1) = {" OJ +RJ +NM +ZQ +JH +Gl +ap +Se +wv +sM +Um +bx +Fz +TR +ld +RJ OJ +"} +(28,1,1) = {" OJ -OJ -OJ -OJ -rE +bW +Fq +St +VZ rE -Se +wv +Xm OL -sM -rE +Gr +wv rE +Ds +Jk +HE +bW OJ +"} +(29,1,1) = {" OJ OJ +TP +ax +Op +Bq +mJ +FN +Mz +Jy +Oz +IT +NC +ql +jz OJ OJ "} -(28,1,1) = {" +(30,1,1) = {" +OJ +OJ +OJ +TP +yN +Bq +pl +hB +Bx +BX +IF +IT +SB +mv +OJ OJ OJ +"} +(31,1,1) = {" OJ OJ OJ OJ OJ +GW rE -Gr -Gr -Gr +Kz +uT +aR rE +GW +OJ +OJ +OJ +OJ +OJ +"} +(32,1,1) = {" +OJ +OJ +OJ +OJ +OJ +OJ +GW +cw +cw +cw +GW OJ OJ OJ diff --git a/_maps/shuttles/independent/independent_junker.dmm b/_maps/shuttles/independent/independent_junker.dmm index 136e6e6e17fb..0ae98ef37fe2 100644 --- a/_maps/shuttles/independent/independent_junker.dmm +++ b/_maps/shuttles/independent/independent_junker.dmm @@ -91,7 +91,7 @@ pixel_x = 4; pixel_y = 9 }, -/obj/item/kitchen/knife{ +/obj/item/melee/knife/kitchen{ pixel_y = -3; pixel_x = 10 }, @@ -1790,7 +1790,7 @@ /obj/structure/cable{ icon_state = "5-10" }, -/obj/item/kitchen/knife{ +/obj/item/melee/knife/kitchen{ pixel_y = 1; pixel_x = 8 }, @@ -2284,7 +2284,6 @@ /turf/closed/wall/r_wall, /area/ship/maintenance/port) "Ro" = ( -/obj/machinery/pipedispenser/disposal, /obj/item/reagent_containers/food/drinks/mug/tea{ pixel_y = 8; pixel_x = -7 @@ -2305,6 +2304,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 1 }, +/obj/machinery/pipedispenser, /turf/open/floor/plating, /area/ship/maintenance/central) "RQ" = ( diff --git a/_maps/shuttles/independent/independent_kilo.dmm b/_maps/shuttles/independent/independent_kilo.dmm index 0f1f92a475c8..35f955ff0b3d 100644 --- a/_maps/shuttles/independent/independent_kilo.dmm +++ b/_maps/shuttles/independent/independent_kilo.dmm @@ -3,213 +3,166 @@ /turf/template_noop, /area/template_noop) "ac" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, +/turf/closed/wall/r_wall, /area/ship/cargo) "ak" = ( -/obj/machinery/power/shuttle/engine/fueled/plasma{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 8 - }, -/turf/open/floor/plating, -/area/ship/engineering/engine) +/obj/machinery/power/shuttle/engine/fueled/plasma, +/turf/open/floor/engine/hull, +/area/ship/engineering) "am" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/conveyor{ - id = "NTMSLoad2"; - name = "on ramp" - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/plasticflaps, -/turf/open/floor/plating, +/obj/machinery/autolathe, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "ar" = ( -/obj/machinery/atmospherics/components/unary/shuttle/heater{ - dir = 4 - }, -/obj/machinery/door/window/westright{ - dir = 4 - }, +/obj/machinery/atmospherics/components/unary/shuttle/heater, /obj/effect/turf_decal/industrial/warning{ dir = 4 }, -/obj/machinery/door/poddoor/shutters{ - id = "kiloengine"; - name = "Engine Shutters"; - dir = 4 +/obj/machinery/door/poddoor{ + dir = 4; + id = "kilothrusters" }, -/turf/open/floor/plating, -/area/ship/engineering/engine) +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plating/airless, +/area/ship/engineering) "av" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 10 }, -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/machinery/portable_atmospherics/scrubber/huge, -/obj/effect/turf_decal/industrial/warning{ - dir = 9 +/obj/structure/sign/poster/random{ + pixel_y = 32 }, -/turf/open/floor/plating, -/area/ship/engineering/engine) +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/old, +/obj/structure/table_frame, +/obj/item/shard, +/obj/effect/decal/cleanable/glass, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) "ay" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/turf/open/floor/mineral/titanium/yellow, +/obj/effect/decal/cleanable/glass, +/mob/living/simple_animal/hostile/cockroach, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "aC" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 1 +/obj/structure/reagent_dispensers/fueltank, +/obj/structure/sign/poster/random{ + pixel_y = 32 }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ +/obj/effect/turf_decal/borderfloor, +/obj/effect/turf_decal/box/corners{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/industrial/stand_clear, -/turf/open/floor/plating, -/area/ship/cargo) -"aJ" = ( -/obj/structure/sign/warning/enginesafety, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/engineering/engine) -"aS" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/atmospherics/components/unary/tank/air{ - piping_layer = 2 - }, -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/effect/turf_decal/industrial/warning{ +/obj/effect/turf_decal/box/corners{ dir = 1 }, -/obj/effect/decal/cleanable/greenglow, -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable/pink{ + icon_state = "0-2" }, -/turf/open/floor/plating, -/area/ship/engineering/engine) -"aU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hallway/port) +"aJ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/structure/chair/bench/olive/directional/east, +/obj/structure/railing{ dir = 8 }, -/obj/effect/turf_decal/industrial/warning/corner, -/obj/structure/sign/warning/fire{ - pixel_x = 32; - pixel_y = -32 +/obj/effect/turf_decal/corner/opaque/neutral/half, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/port) +"aS" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/closet/secure_closet/engineering_personal{ + anchored = 1; + populate = 0 }, -/turf/open/floor/plating, -/area/ship/engineering/engine) -"aZ" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/reagentgrinder{ - desc = "Used to grind things up into raw materials and liquids."; - pixel_y = 5 +/obj/item/storage/backpack/industrial, +/obj/item/clothing/under/rank/engineering/engineer, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/shoes/workboots, +/obj/item/clothing/head/hardhat/dblue, +/obj/effect/turf_decal/box, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"aU" = ( +/obj/structure/cable/cyan{ + icon_state = "0-8" }, -/obj/effect/turf_decal/corner/opaque/red, -/obj/effect/turf_decal/corner/opaque/red{ - dir = 1 +/obj/machinery/power/terminal{ + dir = 4 }, -/obj/machinery/light/directional/south, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/plasteel/white, -/area/ship/crew/canteen/kitchen) +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/dark, +/area/ship/engineering) +"aZ" = ( +/obj/machinery/airalarm/directional/south, +/turf/open/floor/plasteel/grimy, +/area/ship/crew) "bg" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/structure/cable{ - icon_state = "4-8" - }, +/obj/structure/catwalk/over/plated_catwalk, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, +/obj/structure/cable/pink{ + icon_state = "4-8" + }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/effect/turf_decal/industrial/warning{ - dir = 8 +/obj/machinery/light/small/directional/south{ + pixel_x = -5 + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_x = 5; + pixel_y = -19 }, /turf/open/floor/plating, -/area/ship/cargo) +/area/ship/hallway/port) "bm" = ( -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/structure/closet/emcloset/anchored, -/obj/machinery/button/door{ - id = "ntms_exterior"; - name = "NTMS-037 External Lock"; - normaldoorcontrol = 1; - pixel_x = -25; - pixel_y = -8; - specialfunctions = 4 - }, -/obj/machinery/firealarm/directional/east, -/obj/effect/decal/cleanable/cobweb, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/advanced_airlock_controller{ - pixel_x = -28; - pixel_y = 3 - }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/mineral/plastitanium, -/area/ship/cargo) +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating, +/area/ship/maintenance/fore) "bn" = ( -/obj/machinery/power/shuttle/engine/electric{ - dir = 4 - }, /obj/structure/cable{ icon_state = "0-4" }, -/obj/effect/turf_decal/industrial/warning{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ship/engineering/engine) +/obj/machinery/power/shuttle/engine/electric, +/turf/open/floor/engine/hull, +/area/ship/engineering) "by" = ( -/obj/effect/turf_decal/industrial/warning, -/obj/effect/decal/cleanable/blood/old, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 }, -/turf/open/floor/mineral/titanium/yellow, +/turf/open/floor/plasteel/patterned, /area/ship/cargo) "bA" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/crew/canteen/kitchen) +/obj/structure/chair/plastic, +/obj/structure/cable/pink{ + icon_state = "4-6" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/item/reagent_containers/food/drinks/beer{ + list_reagents = null; + pixel_x = -14; + pixel_y = 5 + }, +/obj/effect/turf_decal/corner/opaque/neutral/three_quarters, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) "bF" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, +/turf/closed/wall, /area/ship/bridge) "bG" = ( -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/machinery/door/airlock/shuttle{ - name = "Gear Room" - }, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/greenglow, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 +/obj/structure/cable/pink{ + icon_state = "5-8" }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/cable/pink{ + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -217,2186 +170,1876 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 }, -/turf/open/floor/mineral/plastitanium, +/obj/effect/decal/cleanable/oil, +/turf/open/floor/plasteel/patterned, /area/ship/cargo) "bH" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 8 - }, +/obj/machinery/firealarm/directional/west, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 + dir = 5 }, -/obj/effect/turf_decal/industrial/warning/corner, -/turf/open/floor/mineral/titanium/blue, +/turf/open/floor/plasteel/dark, /area/ship/bridge) "bL" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 1 +/obj/structure/cable/pink{ + icon_state = "1-8" }, -/obj/effect/decal/cleanable/greenglow, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/machinery/firealarm/directional/east{ + pixel_y = -5 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/obj/structure/extinguisher_cabinet/directional/east{ + pixel_y = 7 }, -/turf/open/floor/plating, -/area/ship/cargo) +/turf/open/floor/plasteel, +/area/ship/hallway/central) "bM" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/closet/crate, -/obj/item/shovel, -/obj/item/pickaxe, -/obj/item/storage/box/lights/mixed, -/obj/item/mining_scanner, -/obj/effect/turf_decal/box/corners, -/obj/effect/turf_decal/box/corners{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/item/gun/energy/kinetic_accelerator, -/turf/open/floor/plating, -/area/ship/cargo) -"bP" = ( -/obj/effect/spawner/structure/window/shuttle, -/obj/machinery/door/poddoor{ - id = "whiteship_bridge"; - name = "Garage DoorCockpit Emergency Blast Door"; - dir = 4 +/obj/structure/cable/pink{ + icon_state = "4-9" }, -/obj/machinery/door/firedoor/border_only{ +/obj/structure/catwalk/over/plated_catwalk, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 }, +/obj/item/radio/intercom/directional/south, +/obj/structure/cable/pink{ + icon_state = "1-9" + }, /turf/open/floor/plating, +/area/ship/hallway/port) +"bP" = ( +/turf/closed/wall/r_wall, /area/ship/bridge) "bQ" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/terminal{ +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/light/small/directional/west, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plating, +/area/ship/engineering) +"bT" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 }, -/obj/structure/cable{ - icon_state = "0-4" +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 6 +/obj/structure/cable/pink{ + icon_state = "4-9" }, -/obj/effect/turf_decal/industrial/warning{ - dir = 8 +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) +"bU" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 }, -/obj/effect/turf_decal/ntspaceworks_small/left, /turf/open/floor/plating, -/area/ship/engineering/engine) -"bT" = ( -/obj/effect/turf_decal/industrial/warning, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - icon_state = "4-8" +/area/ship/hallway/port) +"bV" = ( +/obj/structure/catwalk/over/plated_catwalk, +/obj/structure/cable/pink{ + icon_state = "4-10" }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 }, -/turf/open/floor/mineral/titanium/yellow, -/area/ship/cargo) -"bU" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/structure/cable{ +/obj/structure/extinguisher_cabinet/directional/south{ + pixel_x = 7 + }, +/obj/machinery/firealarm/directional/south{ + pixel_x = -5 + }, +/turf/open/floor/plating, +/area/ship/hallway/port) +"bX" = ( +/obj/machinery/door/airlock/mining{ + dir = 8; + name = "Cargo Bay" + }, +/obj/structure/cable/pink{ icon_state = "4-8" }, -/obj/machinery/atmospherics/components/binary/valve/layer2{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 + dir = 8 }, -/obj/effect/turf_decal/industrial/warning{ +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ dir = 4 }, -/turf/open/floor/plating, -/area/ship/engineering/engine) -"bV" = ( -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/machinery/door/airlock/shuttle{ - name = "Engineering" +/obj/effect/turf_decal/industrial/warning/fulltile, +/turf/open/floor/plasteel/dark, +/area/ship/cargo) +"bY" = ( +/obj/structure/cable/pink{ + icon_state = "4-8" }, -/obj/machinery/door/firedoor/border_only{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/machinery/door/firedoor/border_only{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 }, -/obj/structure/cable{ +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) +"bZ" = ( +/obj/structure/closet/crate/secure/exo, +/obj/item/storage/bag/ore, +/obj/item/storage/bag/ore, +/obj/item/pickaxe/drill, +/obj/item/pinpointer/mineral, +/obj/structure/cable/pink{ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) +"ca" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/turf/open/floor/mineral/plastitanium, -/area/ship/engineering/engine) -"bX" = ( -/obj/structure/ore_box, -/obj/effect/turf_decal/box/corners{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/open/floor/plating, -/area/ship/cargo) -"bY" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 8 - }, -/turf/open/floor/plating, -/area/ship/cargo) -"bZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/greenglow, -/obj/structure/cable{ +/obj/structure/cable/pink{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/industrial/warning{ dir = 4 }, -/turf/open/floor/plating, -/area/ship/cargo) -"ca" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/oil, -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/light_switch{ + dir = 1; + pixel_x = 4; + pixel_y = -19 }, -/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 +/obj/structure/extinguisher_cabinet/directional/south{ + pixel_x = -6 }, +/obj/structure/catwalk/over/plated_catwalk/dark, /turf/open/floor/plating, -/area/ship/engineering/engine) +/area/ship/engineering) "cb" = ( +/obj/machinery/portable_atmospherics/canister/toxins, +/obj/effect/turf_decal/box, /obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/power/smes/engineering{ - charge = 1e+006 - }, -/obj/structure/sign/warning/electricshock{ - pixel_y = 32 +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"cf" = ( +/obj/machinery/door/poddoor{ + id = "kilocargo" }, -/obj/structure/cable{ - icon_state = "0-4" +/obj/machinery/power/shieldwallgen/atmos/roundstart{ + dir = 8; + id = "kilofield" }, -/obj/effect/turf_decal/industrial/warning{ - dir = 9 +/obj/structure/cable/pink{ + icon_state = "0-10" }, -/obj/effect/decal/cleanable/cobweb, -/turf/open/floor/plating, -/area/ship/engineering/engine) -"cf" = ( -/obj/structure/sign/warning/vacuum/external, -/turf/closed/wall/mineral/titanium/nodiagonal, +/turf/open/floor/plasteel/patterned/ridged, /area/ship/cargo) "ci" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/machinery/suit_storage_unit/independent/mining/eva, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/mineral/plastitanium, +/obj/effect/turf_decal/borderfloor{ + dir = 1 + }, +/obj/machinery/light/directional/south, +/obj/structure/ore_box, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/effect/turf_decal/box/corners, +/turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "cj" = ( -/obj/structure/tank_dispenser/oxygen, -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/mineral/plastitanium, +/obj/structure/closet/crate/internals, +/obj/effect/turf_decal/borderfloor{ + dir = 9 + }, +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/box/corners, +/obj/item/tank/internals/oxygen, +/obj/item/tank/internals/oxygen, +/obj/item/tank/internals/oxygen, +/obj/item/tank/internals/emergency_oxygen, +/obj/item/tank/internals/emergency_oxygen, +/turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "ck" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/table, -/obj/item/storage/toolbox/mechanical{ - pixel_y = 4 - }, -/obj/item/flashlight{ - pixel_x = 3; - pixel_y = 3 +/obj/machinery/door/airlock{ + name = "Dormitory" }, -/obj/item/clothing/head/welding{ - pixel_x = -2; - pixel_y = 1 +/obj/structure/cable/pink{ + icon_state = "5-9" }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/industrial/warning{ - dir = 6 +/obj/structure/cable/pink{ + icon_state = "2-9" }, -/obj/machinery/firealarm/directional/east, -/obj/machinery/light_switch{ - pixel_y = -20; +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/door/firedoor/border_only{ dir = 1 }, -/turf/open/floor/plating, -/area/ship/engineering/engine) +/obj/machinery/door/firedoor/border_only, +/obj/effect/turf_decal/industrial/warning/fulltile, +/turf/open/floor/plasteel/dark, +/area/ship/crew/dorm) "cq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/turf_decal/industrial/warning, -/obj/machinery/light/small/built/directional/south, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 - }, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/plating, -/area/ship/engineering/engine) +/turf/closed/wall, +/area/ship/crew/dorm) "cr" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/machinery/power/port_gen/pacman{ - anchored = 1 +/obj/machinery/power/smes/engineering, +/obj/structure/cable/pink{ + icon_state = "0-10" }, -/obj/item/wrench, -/obj/effect/turf_decal/industrial/warning, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/yellow, -/obj/machinery/light/directional/south, -/turf/open/floor/plating, -/area/ship/engineering/engine) +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) "cw" = ( -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/machinery/door/airlock/command{ - name = "Ship Control" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/mineral/plastitanium, -/area/ship/bridge) -"cB" = ( -/obj/effect/decal/cleanable/greenglow, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 +/obj/structure/table/wood, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 9 - }, -/turf/open/floor/plating, -/area/ship/cargo) -"cC" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood/old, -/obj/structure/cable{ - icon_state = "1-2" + dir = 4 }, -/obj/structure/cable{ - icon_state = "1-8" +/obj/item/reagent_containers/food/drinks/beer{ + list_reagents = list(/datum/reagent/consumable/ethanol/beer = 10); + pixel_x = -6; + pixel_y = 7 }, -/obj/structure/cable{ - icon_state = "1-4" +/turf/open/floor/plasteel/grimy, +/area/ship/crew) +"cB" = ( +/obj/structure/closet/secure_closet/miner{ + anchored = 1; + populate = 0 }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ +/obj/effect/turf_decal/borderfloor{ dir = 1 }, -/turf/open/floor/plating, -/area/ship/engineering/engine) -"cJ" = ( -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/structure/closet/emcloset/anchored, -/obj/structure/sign/warning/vacuum/external{ - pixel_x = -32 +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20; + pixel_y = 10 }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small/directional/south, -/obj/structure/sign/warning/xeno_mining{ - pixel_x = 32 +/obj/effect/turf_decal/box/corners{ + dir = 8 }, -/turf/open/floor/mineral/plastitanium, +/obj/effect/turf_decal/box/corners, +/obj/item/storage/backpack/explorer, +/obj/item/clothing/shoes/workboots/mining, +/obj/item/clothing/under/rank/cargo/miner/hazard, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/suit/armor/vest/old, +/obj/item/clothing/gloves/explorer, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/head/hardhat/mining, +/turf/open/floor/plasteel/tech/grid, /area/ship/cargo) -"cK" = ( -/obj/effect/decal/cleanable/blood/old, +"cC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/turf/open/floor/plating, -/area/ship/cargo) -"cM" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/manifold/orange/visible{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/door/airlock/engineering{ + dir = 8; + name = "Engine Bay" }, -/obj/structure/cable{ - icon_state = "1-8" +/obj/structure/cable/pink{ + icon_state = "6-8" }, -/obj/effect/turf_decal/industrial/warning{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/machinery/meter/atmos, -/obj/machinery/light/directional/east, -/turf/open/floor/plating, -/area/ship/engineering/engine) -"cP" = ( -/obj/effect/spawner/structure/window/shuttle, -/obj/machinery/door/poddoor{ - id = "whiteship_windows"; - name = "Exterior Window Blast Door" - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plating, -/area/ship/cargo) -"cV" = ( -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/machinery/door/airlock/shuttle{ - name = "Ship Saloon" +/obj/machinery/door/firedoor/border_only{ + dir = 4 }, /obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/warning/fulltile, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/port) +"cJ" = ( +/obj/structure/chair/handrail{ dir = 1 }, -/obj/machinery/door/firedoor/border_only, -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/advanced_airlock_controller{ + pixel_y = -21 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/mineral/plastitanium, -/area/ship/crew/canteen/kitchen) -"cW" = ( -/obj/machinery/power/smes/shuttle{ - dir = 4 +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable/pink{ + icon_state = "0-9" + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -19; + pixel_y = 13 }, -/obj/machinery/door/window/westright{ +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/patterned, +/area/ship/maintenance/fore) +"cK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/components/unary/passive_vent{ dir = 4 }, -/obj/structure/cable{ - icon_state = "0-8" +/turf/open/floor/engine/hull, +/area/ship/external/dark) +"cM" = ( +/obj/structure/cable/pink{ + icon_state = "5-8" }, -/obj/structure/window/reinforced/spawner/north, -/obj/effect/turf_decal/industrial/warning{ +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 4 }, +/obj/structure/cable/pink{ + icon_state = "6-8" + }, +/turf/open/floor/plasteel/dark, +/area/ship/engineering) +"cP" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/atmospherics/pipe/layer_manifold, /obj/machinery/door/poddoor/shutters{ - id = "kiloengine"; - name = "Engine Shutters"; - dir = 4 + id = "kilowindows" + }, +/turf/open/floor/plating/airless, +/area/ship/hallway/port) +"cV" = ( +/obj/structure/cable/pink{ + icon_state = "2-9" + }, +/obj/structure/cable/pink{ + icon_state = "2-5" }, -/turf/open/floor/plating, -/area/ship/engineering/engine) -"cY" = ( -/obj/effect/decal/cleanable/greenglow, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ +/obj/effect/turf_decal/industrial/warning, +/turf/open/floor/plasteel/mono{ dir = 1 }, -/obj/effect/turf_decal/industrial/warning{ +/area/ship/cargo) +"cW" = ( +/obj/structure/sink/kitchen{ dir = 8 }, -/obj/machinery/button/door{ - name = "Shutter Control"; - dir = 4; - pixel_y = -7; - pixel_x = -23; - id = "kiloengine" +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 20; + pixel_y = -12 }, -/obj/structure/cable{ +/obj/effect/turf_decal/corner/transparent/beige/full, +/obj/effect/turf_decal/corner/transparent/brown/diagonal, +/turf/open/floor/plasteel, +/area/ship/crew) +"cY" = ( +/obj/structure/cable/pink{ icon_state = "0-4" }, -/obj/machinery/power/ship_gravity, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/power/terminal{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, -/area/ship/engineering/engine) +/area/ship/engineering) "cZ" = ( -/obj/structure/closet/secure_closet/personal, -/obj/item/gun/energy/laser/retro, -/obj/structure/plaque/static_plaque/golden/captain{ - pixel_x = -32 - }, -/obj/item/paicard, -/obj/item/clothing/shoes/cowboy/white, -/obj/item/clothing/head/caphat/cowboy, -/obj/item/spacecash/bundle/c1000, -/obj/item/spacecash/bundle/c1000, -/obj/item/spacecash/bundle/c1000, -/obj/item/clothing/suit/armor/vest/capcarapace/duster, -/turf/open/floor/carpet, -/area/ship/crew) -"da" = ( -/obj/structure/chair/comfy/orange/directional/north{ - buildstackamount = 0; - color = "#c45c57" - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/obj/machinery/status_display{ - pixel_y = 32; - pixel_x = -32 +/obj/machinery/power/ship_gravity, +/obj/structure/cable/pink{ + icon_state = "0-8" }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/carpet, -/area/ship/crew) +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"da" = ( +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) "dc" = ( -/obj/structure/table, -/obj/effect/turf_decal/trimline/opaque/white/filled/line{ - dir = 1 +/obj/item/kirbyplants/fullysynthetic{ + pixel_x = -11 }, -/obj/machinery/microwave{ - pixel_y = 5 +/obj/structure/cable/pink{ + icon_state = "0-1" }, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/turf/open/floor/mineral/plastitanium, -/area/ship/crew/canteen/kitchen) +/obj/machinery/power/apc/auto_name/directional/west, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/effect/decal/cleanable/vomit/old{ + pixel_x = -5 + }, +/turf/open/floor/plasteel/patterned, +/area/ship/hallway/central) "de" = ( -/obj/effect/decal/cleanable/greenglow, -/obj/structure/cable{ - icon_state = "1-2" +/obj/structure/cable/pink{ + icon_state = "2-9" }, /obj/machinery/door/firedoor/border_only, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/door/firedoor/border_only{ dir = 1 }, -/turf/open/floor/mineral/plastitanium, -/area/ship/cargo) +/obj/effect/turf_decal/industrial/warning/fulltile, +/obj/machinery/door/airlock{ + dir = 1; + name = "Cryo Room" + }, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) "dt" = ( -/obj/machinery/vending/boozeomat/all_access, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/crew/canteen/kitchen) +/obj/machinery/vending/cigarette, +/obj/machinery/airalarm/directional/west, +/obj/effect/turf_decal/corner/opaque/neutral/half, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) "dF" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer4, -/obj/structure/catwalk, -/turf/open/floor/plating/airless, -/area/ship/external) -"eo" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/item/weldingtool/largetank, -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 10 - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 5 - }, -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/plating, -/area/ship/engineering/engine) -"eN" = ( -/obj/effect/turf_decal/industrial/warning{ +/obj/effect/turf_decal/miskilamo_small/right{ dir = 1 }, -/obj/machinery/button/door{ - id = "kilocargo"; - name = "Cargo Bay Control"; - pixel_x = 25; - pixel_y = 7; - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ +/obj/machinery/atmospherics/pipe/simple/general/hidden{ dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 10 +/turf/open/floor/engine/hull, +/area/ship/external/dark) +"eo" = ( +/obj/machinery/power/port_gen/pacman{ + anchored = 1 }, -/obj/effect/turf_decal/industrial/stand_clear, -/obj/machinery/button/shieldwallgen{ - dir = 8; - pixel_y = -6; - pixel_x = 24; - id = "kiloshield" +/obj/structure/cable/cyan{ + icon_state = "0-2" }, -/turf/open/floor/plating, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"eN" = ( +/obj/machinery/light/directional/west, +/obj/structure/crate_shelf, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "fs" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/greenglow, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 + dir = 5 }, -/obj/effect/turf_decal/industrial/warning/corner{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 }, -/turf/open/floor/mineral/titanium/blue, -/area/ship/bridge) +/turf/open/floor/plasteel/dark, +/area/ship/engineering) "fu" = ( -/obj/machinery/power/smes/shuttle{ - dir = 4 - }, -/obj/machinery/door/window/westright{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/structure/window/reinforced/spawner, -/obj/effect/turf_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/door/poddoor/shutters{ - id = "kiloengine"; - name = "Engine Shutters"; - dir = 8 - }, -/turf/open/floor/plating, -/area/ship/engineering/engine) +/obj/effect/turf_decal/corner/opaque/black/mono, +/turf/closed/wall/r_wall/yesdiag, +/area/ship/cargo) "fv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "2-4" +/obj/structure/cable/cyan{ + icon_state = "1-10" }, -/obj/effect/turf_decal/industrial/warning/corner{ +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 6 - }, -/obj/effect/turf_decal/ntspaceworks_small, -/turf/open/floor/plating, -/area/ship/engineering/engine) +/turf/open/floor/plasteel/dark, +/area/ship/engineering) "gp" = ( -/obj/effect/turf_decal/industrial/warning/corner{ - dir = 4 - }, -/obj/effect/decal/cleanable/blood/old, -/obj/structure/cable{ - icon_state = "1-2" +/obj/structure/closet/wall/blue/directional/north{ + name = "Captain's locker" + }, +/obj/item/clothing/under/rank/command/captain/suit, +/obj/item/clothing/under/rank/command/captain/skirt, +/obj/item/storage/backpack/captain, +/obj/item/clothing/gloves/color/white, +/obj/item/clothing/shoes/sneakers/brown, +/obj/item/clothing/suit/jacket/leather/duster/command, +/obj/item/clothing/glasses/cheapsuns, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 }, -/obj/effect/turf_decal/industrial/warning{ - dir = 4 +/obj/item/ammo_box/a12g/rubbershot, +/obj/item/gun/ballistic/shotgun/doublebarrel/presawn{ + spawnwithmagazine = 0 }, -/obj/effect/turf_decal/industrial/warning/corner{ - dir = 1 +/obj/structure/cable/pink{ + icon_state = "4-10" }, -/turf/open/floor/mineral/titanium/blue, +/turf/open/floor/plasteel/dark, /area/ship/bridge) "gs" = ( -/obj/effect/turf_decal/industrial/warning{ +/obj/structure/cable/pink{ + icon_state = "4-10" + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 1 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/cable/pink{ + icon_state = "0-10" }, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 + dir = 6 }, -/obj/machinery/airalarm/directional/north, -/obj/effect/turf_decal/ntspaceworks_small/right, +/obj/item/cigbutt, +/obj/structure/catwalk/over/plated_catwalk/dark, /turf/open/floor/plating, -/area/ship/engineering/engine) +/area/ship/engineering) "gC" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/terminal{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/item/storage/toolbox/electrical{ + pixel_x = -3; + pixel_y = 8 }, -/obj/structure/cable{ - icon_state = "0-4" +/obj/item/storage/toolbox/mechanical{ + pixel_y = 4 }, -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/obj/effect/turf_decal/industrial/warning{ - dir = 8 +/obj/structure/table, +/obj/machinery/light/small/directional/west, +/obj/item/clothing/glasses/welding{ + pixel_x = 5; + pixel_y = -9 }, -/turf/open/floor/plating, -/area/ship/engineering/engine) +/turf/open/floor/plasteel/dark, +/area/ship/engineering) "hh" = ( -/obj/effect/decal/cleanable/greenglow, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1; - name = "engine fuel pump" - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ship/engineering/engine) +/obj/structure/chair, +/obj/effect/decal/cleanable/oil, +/turf/open/floor/plasteel/dark, +/area/ship/engineering) "hN" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/machinery/shower{ - pixel_y = 18 +/obj/machinery/mineral/processing_unit{ + input_dir = 8 }, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/effect/turf_decal/industrial/warning{ +/obj/structure/railing/corner{ dir = 8 }, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/machinery/light_switch{ - dir = 8; - pixel_x = 20; - pixel_y = -12 - }, -/turf/open/floor/mineral/titanium/yellow, +/turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "hR" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/table, -/obj/item/stack/sheet/glass/fifty{ - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/stack/rods/fifty, -/obj/item/storage/toolbox/electrical{ - pixel_x = -3; - pixel_y = 8 +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 6 }, -/obj/item/stock_parts/cell/high{ - charge = 100; - maxcharge = 15000; - pixel_x = 3; - pixel_y = -1 +/obj/effect/turf_decal/arrows{ + dir = 4 }, -/obj/item/stack/sheet/metal/fifty, -/turf/open/floor/mineral/plastitanium, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/patterned, /area/ship/cargo) "hS" = ( -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/machinery/door/airlock/shuttle{ - name = "Bunk A" +/obj/structure/chair/sofa/brown/old/left/directional/east, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 }, -/obj/machinery/door/firedoor/border_only, -/turf/open/floor/mineral/plastitanium, +/obj/machinery/light/directional/west, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/plasteel/grimy, /area/ship/crew) "ig" = ( -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/machinery/door/airlock/shuttle{ - name = "Bathroom" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/item/radio/intercom/directional/east, +/obj/item/mop{ + pixel_x = 17 }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 +/obj/item/reagent_containers/glass/bucket{ + list_reagents = list(/datum/reagent/water = 20); + pixel_x = 8; + pixel_y = 7 }, -/obj/machinery/door/firedoor/border_only, -/turf/open/floor/mineral/plastitanium, -/area/ship/crew) +/turf/open/floor/carpet, +/area/ship/crew/dorm) "im" = ( -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/structure/rack, -/obj/item/storage/box/lights/mixed, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/maintenance/two, -/obj/structure/sign/poster/contraband/random{ - pixel_x = 32 - }, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/plating, -/area/ship/cargo) +/obj/structure/grille, +/obj/structure/window/fulltile, +/turf/open/floor/plating/airless, +/area/ship/hallway/central) "io" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/structure/table_frame, -/obj/item/stack/sheet/metal, -/obj/effect/decal/cleanable/cobweb, -/turf/open/floor/mineral/plastitanium, -/area/ship/bridge) -"iM" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 1 +/obj/machinery/door/airlock/command{ + dir = 4; + name = "Bridge"; + req_access_txt = "19" + }, +/obj/structure/cable/pink{ + icon_state = "4-8" }, -/obj/effect/decal/cleanable/blood/old, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 6 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 6 + dir = 4 }, -/obj/machinery/conveyor_switch/oneway{ - id = "NTMSLoad"; - name = "Off Ramp"; - pixel_y = 9; - pixel_x = -8 +/obj/machinery/door/firedoor/border_only{ + dir = 8 }, -/obj/machinery/conveyor_switch/oneway{ - id = "NTMSLoad2"; - name = "On Ramp"; - pixel_x = 4 +/obj/machinery/door/firedoor/border_only{ + dir = 4 }, -/obj/machinery/newscaster/directional/north, -/turf/open/floor/plating, -/area/ship/cargo) -"iT" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/effect/turf_decal/industrial/warning/fulltile, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"iM" = ( +/obj/structure/cable/pink{ + icon_state = "2-6" }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/turf/open/floor/mineral/plastitanium, -/area/ship/cargo) +/obj/structure/chair/bench/beige/directional/east{ + dir = 8 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/neutral/half, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/port) +"iT" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, +/obj/effect/decal/cleanable/food/flour, +/mob/living/simple_animal/hostile/cockroach, +/obj/effect/turf_decal/corner/transparent/beige/full, +/obj/effect/turf_decal/corner/transparent/brown/diagonal, +/turf/open/floor/plasteel, +/area/ship/crew) "jl" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/mineral/processing_unit_console{ + dir = 8; + machinedir = 1; + output_dir = 4; + pixel_x = 20; + pixel_y = 0 }, -/obj/effect/turf_decal/industrial/warning/corner{ - dir = 1 +/obj/effect/turf_decal/corner_techfloor_grid{ + dir = 5 }, -/turf/open/floor/mineral/titanium/yellow, +/obj/effect/turf_decal/industrial/loading, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "jx" = ( -/obj/machinery/autolathe, -/obj/machinery/status_display{ +/obj/machinery/conveyor{ + dir = 4; + id = "kiloconveyor" + }, +/obj/structure/sign/poster/random{ pixel_y = 32 }, -/turf/open/floor/mineral/plastitanium, +/obj/structure/railing, +/turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "jK" = ( -/obj/item/stack/rods, -/obj/machinery/holopad/emergency/command, -/obj/effect/turf_decal/industrial/warning{ - dir = 9 - }, -/turf/open/floor/mineral/titanium/blue, -/area/ship/bridge) -"jU" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stack/cable_coil, -/obj/item/stock_parts/cell/high, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/turf_decal/industrial/warning{ - dir = 5 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/machinery/light/directional/north, -/turf/open/floor/plating, -/area/ship/engineering/engine) -"kb" = ( -/obj/effect/turf_decal/industrial/warning, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/greenglow, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/layer2{ - dir = 4 +/obj/machinery/light_switch{ + dir = 1; + pixel_x = -10; + pixel_y = -19 + }, +/obj/structure/cable/pink{ + icon_state = "4-8" }, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/structure/catwalk/over/plated_catwalk/dark, /turf/open/floor/plating, -/area/ship/cargo) -"kA" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/engineering/engine) -"mr" = ( -/obj/effect/decal/cleanable/blood/old, +/area/ship/bridge) +"jU" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/effect/turf_decal/borderfloor, +/obj/effect/turf_decal/box/corners{ + dir = 4 + }, +/obj/effect/turf_decal/box/corners{ + dir = 1 + }, +/obj/effect/decal/cleanable/cobweb, +/obj/machinery/airalarm/directional/west, /obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - icon_state = "1-2" +/turf/open/floor/plasteel/tech/grid, +/area/ship/hallway/port) +"kb" = ( +/obj/structure/chair/handrail, +/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/layer2{ + dir = 4 }, -/obj/effect/turf_decal/industrial/warning{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plasteel/patterned, +/area/ship/maintenance/fore) +"kA" = ( +/turf/closed/wall/r_wall, +/area/ship/engineering) +"lw" = ( +/turf/closed/wall/rust, +/area/ship/bridge) +"mr" = ( +/obj/machinery/suit_storage_unit/inherit, +/obj/item/clothing/suit/space/eva, +/obj/item/clothing/head/helmet/space/eva, +/obj/item/clothing/mask/breath, +/obj/effect/turf_decal/borderfloor{ + dir = 1 + }, +/obj/effect/turf_decal/box/corners{ dir = 8 }, -/obj/machinery/light/directional/east, -/turf/open/floor/mineral/titanium/yellow, +/obj/effect/turf_decal/box/corners, +/obj/structure/cable/pink{ + icon_state = "1-5" + }, +/obj/machinery/firealarm/directional/south, +/obj/structure/sign/warning/vacuum/external{ + pixel_x = 32 + }, +/turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "mz" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/crew) +/obj/structure/bed, +/obj/item/bedsheet/dorms, +/obj/machinery/light_switch{ + pixel_x = 7; + pixel_y = 20 + }, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/carpet, +/area/ship/crew/dorm) "nd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/obj/structure/cable{ - icon_state = "2-4" +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 }, -/obj/structure/cable{ - icon_state = "1-4" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 }, -/obj/effect/turf_decal/industrial/warning/corner{ - dir = 1 +/obj/structure/cable/pink{ + icon_state = "8-9" + }, +/obj/structure/cable/pink{ + icon_state = "1-5" }, -/turf/open/floor/mineral/titanium/blue, +/turf/open/floor/plasteel/dark, /area/ship/bridge) "ng" = ( -/obj/effect/decal/cleanable/greenglow, -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable{ +/obj/structure/cable/pink{ icon_state = "0-4" }, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 6 - }, -/obj/effect/turf_decal/industrial/warning{ +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/power/terminal{ dir = 8 }, +/obj/structure/cable/pink{ + icon_state = "4-5" + }, +/obj/item/cigbutt, /turf/open/floor/plating, -/area/ship/engineering/engine) +/area/ship/engineering) "nJ" = ( -/obj/effect/turf_decal/industrial/warning, -/obj/effect/decal/cleanable/blood/old, -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/button/door{ + dir = 4; + id = "kilocargo"; + name = "blast door control"; + pixel_x = -20; + pixel_y = 7 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plating, -/area/ship/cargo) -"nO" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/conveyor{ - dir = 1; - id = "NTMSLoad"; - name = "off ramp" +/obj/machinery/button/shieldwallgen{ + dir = 4; + id = "kilofield"; + pixel_x = -19; + pixel_y = -2 }, -/obj/structure/window/reinforced{ - dir = 4 +/obj/item/clothing/head/cone{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/industrial/warning, +/turf/open/floor/plasteel/mono{ + dir = 1 }, -/obj/structure/plasticflaps, -/turf/open/floor/plating, /area/ship/cargo) +"nO" = ( +/turf/closed/wall/r_wall, +/area/ship/hallway/central) "oj" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 9 - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 10 - }, +/obj/structure/table, +/obj/machinery/atmospherics/pipe/manifold/orange/hidden, +/obj/machinery/cell_charger, +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plating, -/area/ship/engineering/engine) +/area/ship/engineering) "oP" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/tank/toxins{ - dir = 1 +/obj/structure/table, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 }, -/obj/effect/turf_decal/industrial/warning{ - dir = 6 +/obj/item/stack/sheet/mineral/plasma/ten, +/obj/item/reagent_containers/food/drinks/beer{ + list_reagents = null; + pixel_x = -13; + pixel_y = 11 }, -/turf/open/floor/plating, -/area/ship/engineering/engine) +/turf/open/floor/plasteel/dark, +/area/ship/engineering) "pV" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood/old, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/mob/living/simple_animal/hostile/netherworld/migo{ - environment_smash = 0; - faction = list("neutral"); - melee_damage_lower = 5; - melee_damage_upper = 10; - name = "maurice" +/obj/machinery/conveyor_switch/oneway{ + id = "kiloconveyor"; + layer = 3.09; + pixel_x = 11; + pixel_y = 14 }, -/turf/open/floor/mineral/titanium/yellow, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "qv" = ( -/obj/machinery/door/poddoor{ - id = "kilocargo"; - name = "NTMS-037 Bay Blast Door" - }, -/obj/machinery/conveyor{ - dir = 1; - id = "NTMSLoad"; - name = "off ramp" - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/power/shieldwallgen/atmos/roundstart{ - id = "kiloshield"; +/obj/machinery/door/airlock/external{ dir = 4 }, -/turf/open/floor/plating, -/area/ship/cargo) -"qw" = ( -/obj/effect/turf_decal/industrial/hatch/yellow, /obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/atmospherics/pipe/layer_manifold{ +/obj/effect/turf_decal/industrial/warning/fulltile, +/turf/open/floor/plasteel/dark, +/area/ship/maintenance/fore) +"qw" = ( +/obj/machinery/door/airlock/external{ dir = 4 }, -/obj/machinery/door/airlock/external{ - name = "Mining Airlock"; +/obj/machinery/atmospherics/pipe/layer_manifold{ dir = 4 }, -/turf/open/floor/mineral/plastitanium, -/area/ship/cargo) +/obj/effect/mapping_helpers/airlock/locked, +/obj/effect/turf_decal/industrial/warning/fulltile, +/turf/open/floor/plasteel/dark, +/area/ship/maintenance/fore) "rc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ +/obj/structure/catwalk/over/plated_catwalk, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 4 +/obj/structure/cable/pink{ + icon_state = "1-8" }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, /turf/open/floor/plating, -/area/ship/cargo) +/area/ship/hallway/port) "rq" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "2-8" +/obj/structure/cable/pink{ + icon_state = "4-9" }, -/obj/structure/cable{ - icon_state = "2-4" +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 }, -/obj/machinery/door/poddoor{ - id = "kilocargo"; - name = "NTMS-037 Bay Blast Door" +/obj/structure/catwalk/over/plated_catwalk, +/obj/structure/cable/pink{ + icon_state = "4-8" }, -/turf/open/floor/mineral/plastitanium, -/area/ship/cargo) +/turf/open/floor/plating, +/area/ship/hallway/central) "rO" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/effect/turf_decal/corner/opaque/red, -/obj/effect/turf_decal/corner/opaque/red{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 }, -/obj/effect/turf_decal/industrial/warning{ - dir = 1 +/obj/machinery/door/airlock/glass{ + dir = 8; + name = "Crew Quarters" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ +/obj/machinery/door/firedoor/border_only{ dir = 8 }, -/turf/open/floor/plasteel/white, -/area/ship/crew/canteen/kitchen) -"rW" = ( -/obj/machinery/porta_turret/ship/weak{ +/obj/machinery/door/firedoor/border_only{ dir = 4 }, -/turf/closed/wall/mineral/titanium, -/area/ship/bridge) +/obj/effect/turf_decal/industrial/warning/fulltile, +/turf/open/floor/plasteel/dark, +/area/ship/crew) +"rW" = ( +/turf/closed/wall/yesdiag, +/area/ship/maintenance/fore) "sD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/structure/chair/sofa/brown/right/directional/south, -/turf/open/floor/wood{ - icon_state = "wood-broken3" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 }, -/area/ship/crew/canteen/kitchen) +/obj/machinery/computer/helm/viewscreen/directional/south, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating, +/area/ship/hallway/central) "sG" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/structure/cable{ - icon_state = "0-4" +/obj/structure/cable/pink{ + icon_state = "1-10" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/firealarm/directional/east{ + pixel_y = -5 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/obj/structure/extinguisher_cabinet/directional/east{ + pixel_y = 7 }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/machinery/light_switch{ - pixel_x = 13; - pixel_y = 21 +/obj/structure/cable/pink{ + icon_state = "6-10" }, -/turf/open/floor/plasteel/showroomfloor, -/area/ship/crew) +/turf/open/floor/carpet, +/area/ship/crew/dorm) "sW" = ( -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/machinery/computer/cargo{ +/obj/machinery/computer/cargo/retro{ dir = 8 }, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/mineral/plastitanium, +/obj/effect/turf_decal/corner/opaque/neutral/half{ + dir = 8 + }, +/obj/effect/turf_decal/industrial/outline/yellow, +/turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) +"tb" = ( +/turf/closed/wall/rust, +/area/ship/crew/dorm) +"tW" = ( +/turf/closed/wall/rust, +/area/ship/crew) +"vl" = ( +/turf/closed/wall/r_wall/rust, +/area/ship/hallway/port) "vv" = ( -/obj/effect/spawner/structure/window/shuttle, -/obj/machinery/door/poddoor{ - id = "whiteship_bridge"; - name = "Garage DoorCockpit Emergency Blast Door" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/poddoor/shutters{ + id = "kilowindows" }, -/turf/open/floor/plating, -/area/ship/bridge) +/turf/open/floor/plating/airless, +/area/ship/hallway/central) "vU" = ( -/obj/docking_port/stationary{ - width = 30; - height = 15; - dwidth = 15 +/obj/structure/cable/pink{ + icon_state = "1-2" }, -/turf/template_noop, -/area/template_noop) +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) "wc" = ( -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/machinery/door/airlock/shuttle{ - name = "Ship Lockers" +/obj/structure/table/wood, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 +/obj/item/toy/cards/deck{ + pixel_y = 22 }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 +/obj/item/reagent_containers/food/snacks/sandwich{ + pixel_x = -1; + pixel_y = 9 }, -/obj/structure/cable{ - icon_state = "4-8" +/turf/open/floor/plasteel/grimy, +/area/ship/crew) +"wh" = ( +/turf/closed/wall/r_wall/rust, +/area/ship/crew/dorm) +"xe" = ( +/obj/machinery/door/airlock/external/glass{ + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 + dir = 8 }, -/turf/open/floor/mineral/plastitanium, -/area/ship/crew) -"wh" = ( -/obj/effect/decal/cleanable/greenglow, -/obj/structure/cable{ - icon_state = "1-2" +/obj/structure/cable/pink{ + icon_state = "6-10" + }, +/obj/effect/turf_decal/industrial/warning/fulltile, +/turf/open/floor/plasteel/dark, +/area/ship/maintenance/fore) +"xk" = ( +/turf/closed/wall, +/area/ship/hallway/central) +"xn" = ( +/turf/closed/wall/rust, +/area/ship/hallway/central) +"xF" = ( +/obj/structure/cable/pink{ + icon_state = "8-9" }, -/obj/effect/turf_decal/corner/opaque/red, -/obj/effect/turf_decal/corner/opaque/red{ +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 4 +/obj/item/kirbyplants/fullysynthetic{ + pixel_x = 11 }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/turf/open/floor/plasteel/white, -/area/ship/crew/canteen/kitchen) -"xe" = ( -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/machinery/door/airlock/external{ - name = "Mining Airlock"; - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, -/turf/open/floor/mineral/plastitanium, -/area/ship/cargo) -"xk" = ( -/obj/structure/table/wood, -/obj/effect/decal/cleanable/dirt, -/obj/item/storage/bag/tray, -/obj/item/reagent_containers/food/snacks/burger/bearger, -/obj/effect/turf_decal/siding/wood{ - dir = 10 - }, -/turf/open/floor/wood{ - icon_state = "wood-broken3" - }, -/area/ship/crew/canteen/kitchen) -"xF" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/showroomfloor, -/area/ship/crew) +/obj/machinery/airalarm/directional/east, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/dorm) "yd" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/effect/decal/cleanable/greenglow, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - icon_state = "0-2" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, +/obj/structure/cable/pink{ + icon_state = "4-8" + }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/effect/turf_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/machinery/meter/atmos/layer2, +/obj/structure/catwalk/over/plated_catwalk/dark, /turf/open/floor/plating, -/area/ship/engineering/engine) +/area/ship/engineering) "yn" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/closet/crate, -/obj/item/stack/sheet/metal/twenty, -/obj/item/stack/sheet/glass{ - amount = 10 +/obj/structure/closet/secure_closet/freezer/fridge{ + populate = 0 }, -/obj/item/storage/box/lights/bulbs, -/obj/item/stack/sheet/mineral/plasma{ - amount = 10 +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20; + pixel_y = -8 }, -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/industrial/warning/corner{ - dir = 1 +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable/pink{ + icon_state = "0-10" }, -/obj/machinery/light/directional/west, -/obj/structure/extinguisher_cabinet/directional/south, -/turf/open/floor/plating, -/area/ship/cargo) +/obj/effect/decal/cleanable/cobweb, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/drinks/soda_cans/cola, +/obj/item/reagent_containers/food/drinks/soda_cans/cola, +/obj/item/reagent_containers/food/drinks/soda_cans/cola, +/obj/item/reagent_containers/food/drinks/soda_cans/cola, +/obj/item/reagent_containers/food/drinks/soda_cans/cola, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/obj/item/reagent_containers/food/snacks/icecreamsandwich, +/obj/item/reagent_containers/food/snacks/icecreamsandwich, +/obj/effect/turf_decal/corner/transparent/beige/full, +/obj/effect/turf_decal/corner/transparent/brown/diagonal, +/turf/open/floor/plasteel, +/area/ship/crew) "yF" = ( -/obj/effect/spawner/structure/window/shuttle, -/obj/machinery/door/poddoor{ - id = "whiteship_windows"; - name = "Exterior Window Blast Door" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/plating, -/area/ship/crew/canteen/kitchen) +/turf/closed/wall/r_wall, +/area/ship/crew) "zc" = ( -/obj/structure/table, -/obj/effect/turf_decal/trimline/opaque/white/filled/line{ +/obj/structure/curtain, +/obj/machinery/shower{ dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/spawner/lootdrop/ration{ - pixel_x = -6; +/obj/item/soap{ pixel_y = 4 }, -/obj/effect/spawner/lootdrop/ration{ - pixel_x = -6; - pixel_y = 8 +/obj/item/bikehorn/rubberducky/plasticducky{ + pixel_x = -9; + pixel_y = -7 }, -/obj/item/reagent_containers/food/condiment/enzyme{ - layer = 5; - pixel_x = 12; - pixel_y = 6 +/obj/effect/turf_decal/steeldecal/steel_decals10{ + dir = 6 }, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/mineral/plastitanium, -/area/ship/crew/canteen/kitchen) +/turf/open/floor/plasteel/freezer, +/area/ship/crew) "zH" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/obj/effect/turf_decal/siding/wood{ - dir = 2 - }, -/obj/structure/chair/sofa/brown/left/directional/west, -/turf/open/floor/wood{ - icon_state = "wood-broken6" - }, -/area/ship/crew/canteen/kitchen) -"AB" = ( -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/machinery/door/airlock/external{ - name = "Mining Airlock"; - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 6 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/mineral/plastitanium, -/area/ship/cargo) -"AE" = ( -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/machinery/door/airlock/shuttle{ - name = "Captain's Quarters" - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/door/firedoor/border_only{ dir = 4 }, +/obj/structure/cable/pink{ + icon_state = "5-9" + }, /obj/machinery/door/firedoor/border_only{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ +/obj/machinery/door/firedoor/border_only{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 +/obj/machinery/door/airlock{ + dir = 8; + name = "Dormitory" }, -/turf/open/floor/mineral/plastitanium, -/area/ship/crew) -"AP" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/machinery/turretid{ - icon_state = "control_kill"; - lethal = 1; - locked = 0; - name = "Mining Turret control panel"; - pixel_x = -28; - pixel_y = 6; - req_access = null +/obj/effect/turf_decal/siding/wood{ + color = "#E3994E"; + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 6 +/obj/effect/turf_decal/siding/wood{ + color = "#E3994E"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 6 +/turf/open/floor/wood/yew, +/area/ship/crew) +"AB" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) +"AE" = ( +/obj/structure/closet/cabinet, +/obj/item/clothing/shoes/sneakers/black, +/obj/item/clothing/shoes/sneakers/black, +/obj/item/clothing/under/utility, +/obj/item/clothing/under/utility, +/obj/item/clothing/under/utility/skirt, +/obj/item/clothing/under/utility/skirt, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable/pink{ + icon_state = "0-4" }, -/obj/effect/turf_decal/industrial/warning{ - dir = 1 +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/dorm) +"AP" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "engine fuel pump"; + target_pressure = 500 }, -/turf/open/floor/mineral/titanium/blue, -/area/ship/bridge) +/obj/machinery/airalarm/directional/south, +/turf/open/floor/plasteel/dark, +/area/ship/engineering) "AQ" = ( -/turf/closed/wall/mineral/plastitanium, -/area/ship/engineering/engine) +/turf/closed/wall, +/area/ship/engineering) "AV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/terminal{ - dir = 8 +/obj/structure/cable/cyan{ + icon_state = "4-5" }, -/obj/structure/cable{ - icon_state = "0-4" +/obj/structure/cable/pink{ + icon_state = "0-6" }, -/obj/effect/turf_decal/industrial/warning{ +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/power/terminal{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plating, -/area/ship/engineering/engine) +/area/ship/engineering) "Bm" = ( -/obj/structure/bed, -/obj/item/bedsheet/captain, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/wood, -/area/ship/crew) -"Bu" = ( -/obj/effect/spawner/structure/window/shuttle, -/obj/machinery/door/poddoor{ - id = "whiteship_bridge"; - name = "Garage DoorCockpit Emergency Blast Door" +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 }, -/turf/open/floor/plating, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"Bu" = ( +/turf/closed/wall/r_wall/yesdiag, /area/ship/bridge) "BP" = ( /obj/structure/chair/comfy/shuttle{ dir = 4 }, -/obj/effect/turf_decal/industrial/warning{ - dir = 6 +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 }, -/turf/open/floor/mineral/titanium/blue, +/turf/open/floor/plasteel/dark, /area/ship/bridge) "BS" = ( -/obj/effect/spawner/structure/window/shuttle, +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, /obj/machinery/door/poddoor{ - id = "whiteship_bridge"; - name = "Garage DoorCockpit Emergency Blast Door"; - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 + dir = 4; + id = "kilobridge" }, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/ship/bridge) +"Ce" = ( +/turf/closed/wall/rust, +/area/ship/maintenance/fore) "Co" = ( -/obj/effect/decal/cleanable/oil, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/industrial/warning/corner{ - dir = 8 +/obj/machinery/door/poddoor{ + id = "kilocargo" }, -/turf/open/floor/plating, +/obj/docking_port/mobile{ + dir = 2; + launch_status = 0; + name = "Mining Shuttle"; + port_direction = 8; + preferred_direction = 4 + }, +/turf/open/floor/plasteel/patterned/ridged, /area/ship/cargo) "Cv" = ( -/obj/effect/turf_decal/industrial/warning, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/greenglow, -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/cable/pink{ + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/turf/open/floor/mineral/titanium/yellow, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/structure/closet/crate/medical, +/obj/item/clothing/gloves/color/latex/nitrile, +/obj/item/storage/firstaid/regular, +/obj/item/roller, +/turf/open/floor/plasteel/patterned, /area/ship/cargo) "Da" = ( -/obj/structure/chair/comfy/shuttle, -/obj/effect/turf_decal/industrial/warning, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/mineral/titanium/blue, -/area/ship/bridge) +/obj/item/cigbutt, +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) "Ds" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/obj/item/folder/yellow{ - pixel_x = -4; - pixel_y = 6 +/obj/structure/filingcabinet/chestdrawer{ + dir = 8 }, -/obj/item/paper/crumpled/bloody{ - default_raw_text = "We struck gold, literally. We found some good rocks out near Centurai-II rich with the stuff. Kae said he and Milos found something out while prospecting, some sort of glowing cube. It's jammed in there good, so we're anchoring until we sort this out..."; - pixel_x = 4; - pixel_y = 4 +/obj/item/folder/blue, +/obj/item/folder/yellow, +/obj/item/folder, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/item/computer_hardware/card_slot, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable/pink{ + icon_state = "0-8" }, -/obj/item/gps{ - gpstag = "NTMS-037"; - pixel_x = -9; - pixel_y = 4 +/obj/effect/turf_decal/corner/opaque/neutral/half{ + dir = 8 }, -/obj/machinery/firealarm/directional/north, -/obj/item/areaeditor/shuttle, -/turf/open/floor/mineral/plastitanium, +/obj/effect/turf_decal/industrial/outline/yellow, +/turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) "Ew" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/poster/contraband/random{ - pixel_x = 32 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/structure/chair/sofa/brown/corner/directional/south, -/obj/machinery/firealarm/directional/north, -/obj/machinery/light/small/directional/east, -/turf/open/floor/wood{ - icon_state = "wood-broken" +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/machinery/light/small/directional/south, +/obj/machinery/light_switch{ + dir = 1; + pixel_x = -8; + pixel_y = -19 }, -/area/ship/crew/canteen/kitchen) +/obj/structure/catwalk/over/plated_catwalk, +/obj/structure/cable/pink{ + icon_state = "4-6" + }, +/obj/item/cigbutt, +/turf/open/floor/plating, +/area/ship/hallway/central) "EG" = ( -/obj/effect/turf_decal/industrial/warning, -/obj/machinery/cryopod, -/obj/machinery/airalarm/directional/east, -/obj/machinery/light/small/directional/north, -/obj/machinery/computer/cryopod/directional/west, -/turf/open/floor/wood, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/effect/decal/cleanable/confetti, +/obj/effect/turf_decal/corner/transparent/beige/full, +/obj/effect/turf_decal/corner/transparent/brown/diagonal, +/turf/open/floor/plasteel, /area/ship/crew) "EU" = ( -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/machinery/door/airlock/command{ - name = "Ship Control"; - dir = 4 +/obj/structure/cable/pink{ + icon_state = "1-2" }, -/obj/machinery/door/firedoor/border_only{ +/obj/item/cigbutt, +/obj/machinery/computer/cryopod/retro/directional/west, +/obj/effect/turf_decal/industrial/warning{ dir = 4 }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "4-8" +/turf/open/floor/plasteel/patterned, +/area/ship/hallway/central) +"GK" = ( +/obj/structure/table, +/obj/machinery/light_switch{ + pixel_x = -10; + pixel_y = 20 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/obj/item/radio{ + pixel_y = 5 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 +/obj/item/radio{ + pixel_y = 5 }, -/turf/open/floor/mineral/plastitanium, -/area/ship/crew/canteen/kitchen) -"GK" = ( -/obj/effect/turf_decal/industrial/warning, -/obj/structure/cable{ - icon_state = "4-8" +/obj/item/radio{ + pixel_y = 5 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 9 +/obj/item/radio{ + pixel_y = 5 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 +/obj/item/radio{ + pixel_y = 5 }, -/turf/open/floor/mineral/titanium/blue, -/area/ship/bridge) +/turf/open/floor/plasteel/tech/grid, +/area/ship/hallway/central) "GM" = ( -/obj/structure/table, -/obj/machinery/recharger, -/obj/item/radio/intercom/wideband/directional/north, -/obj/machinery/light/small/directional/west, -/turf/open/floor/mineral/plastitanium, +/obj/machinery/computer/crew/retro{ + dir = 4 + }, +/obj/structure/cable/pink{ + icon_state = "4-6" + }, +/obj/structure/sign/poster/random{ + pixel_y = 32 + }, +/obj/effect/turf_decal/corner/opaque/neutral/three_quarters, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/dark, /area/ship/bridge) "HP" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/corner/opaque/red, -/obj/effect/turf_decal/corner/opaque/red{ - dir = 1 +/obj/item/kirbyplants/fullysynthetic{ + pixel_x = 11 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/obj/structure/extinguisher_cabinet/directional/east{ + pixel_y = 7 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 +/obj/machinery/firealarm/directional/east{ + pixel_y = -5 }, -/turf/open/floor/plasteel/white, -/area/ship/crew/canteen/kitchen) +/obj/effect/decal/cleanable/confetti, +/obj/item/cigbutt, +/turf/open/floor/plasteel/grimy, +/area/ship/crew) "Ih" = ( -/obj/structure/table, -/obj/item/wrench, -/obj/item/tank/internals/emergency_oxygen, -/obj/effect/decal/cleanable/cobweb, -/obj/machinery/light/directional/west, -/turf/open/floor/mineral/plastitanium, +/obj/structure/cable/pink{ + icon_state = "1-6" + }, +/obj/structure/ore_box, +/turf/open/floor/plasteel/patterned, /area/ship/cargo) "Jf" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/engineering/engine) +/turf/closed/wall/r_wall, +/area/ship/hallway/port) +"Jt" = ( +/obj/structure/sign/warning/docking, +/turf/closed/wall/yesdiag, +/area/ship/maintenance/fore) "Kz" = ( -/obj/effect/turf_decal/industrial/outline/yellow, +/obj/effect/turf_decal/borderfloor{ + dir = 5 + }, /obj/structure/rack, -/obj/item/storage/toolbox/emergency, -/obj/item/circuitboard/machine/ore_redemption, -/obj/effect/turf_decal/industrial/warning/corner{ - dir = 4 +/obj/item/stack/sheet/plastic/five, +/obj/item/stack/sheet/glass/twenty, +/obj/item/stack/sheet/metal/twenty, +/obj/effect/turf_decal/box/corners{ + dir = 8 }, -/obj/machinery/light/directional/east, -/turf/open/floor/plating, +/turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "KB" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 +/turf/closed/wall, +/area/ship/maintenance/fore) +"KM" = ( +/obj/machinery/atmospherics/components/binary/valve/layer4, +/obj/effect/decal/cleanable/oil/streak, +/obj/item/cigbutt, +/obj/effect/turf_decal/corner/opaque/neutral/half, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/port) +"KR" = ( +/obj/machinery/door/airlock/mining/glass{ + name = "Cargo Bay" }, -/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/layer2{ - dir = 4 +/obj/structure/cable/pink{ + icon_state = "1-2" }, -/turf/open/floor/plating, -/area/ship/cargo) -"KM" = ( -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/structure/ore_box, -/obj/effect/turf_decal/industrial/warning/corner{ +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/effect/decal/cleanable/cobweb, -/obj/machinery/atmospherics/components/binary/pump/layer4{ - dir = 1; - name = "Scrubbers to Outside" +/obj/effect/turf_decal/industrial/warning/fulltile, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"La" = ( +/obj/item/clothing/head/cone{ + pixel_x = 11; + pixel_y = 4 }, -/turf/open/floor/plating, -/area/ship/cargo) -"KR" = ( -/obj/structure/table/wood, -/obj/item/storage/fancy/cigarettes/cigars/havana{ - pixel_y = 5 +/obj/structure/extinguisher_cabinet/directional/east{ + pixel_y = 7 }, -/obj/item/crowbar/red, -/obj/item/lighter{ - pixel_x = -8; - pixel_y = 8 +/obj/machinery/firealarm/directional/east{ + pixel_y = -5 }, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/carpet, -/area/ship/crew) -"La" = ( -/obj/effect/spawner/structure/window/shuttle, -/obj/machinery/door/poddoor{ - id = "whiteship_windows"; - name = "Exterior Window Blast Door" +/obj/item/cigbutt, +/obj/effect/turf_decal/industrial/warning, +/turf/open/floor/plasteel/mono{ + dir = 1 }, -/obj/machinery/door/firedoor/border_only, -/turf/open/floor/plating, /area/ship/cargo) "LC" = ( -/obj/effect/decal/cleanable/greenglow, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/manifold/orange/visible{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "1-2" +/obj/structure/cable/cyan{ + icon_state = "4-8" }, -/obj/structure/cable{ - icon_state = "1-8" +/obj/structure/cable/pink{ + icon_state = "2-5" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/turf/open/floor/plating, -/area/ship/engineering/engine) +/turf/open/floor/plasteel/dark, +/area/ship/engineering) "Mj" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/suit_storage_unit/independent/mining/eva, -/turf/open/floor/mineral/plastitanium, +/obj/machinery/mineral/unloading_machine, +/obj/structure/railing, +/turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "MI" = ( -/obj/machinery/power/smes/shuttle{ - dir = 4 - }, -/obj/machinery/door/window/westright{ - dir = 4 - }, /obj/structure/cable{ icon_state = "0-8" }, -/obj/structure/window/reinforced/spawner, +/obj/machinery/power/smes/shuttle, /obj/effect/turf_decal/industrial/warning{ dir = 4 }, -/obj/machinery/door/poddoor/shutters{ - id = "kiloengine"; - name = "Engine Shutters"; - dir = 4 +/obj/machinery/door/poddoor{ + dir = 4; + id = "kilothrusters" + }, +/obj/structure/window/reinforced{ + dir = 8 }, /turf/open/floor/plating, -/area/ship/engineering/engine) +/area/ship/engineering) "MY" = ( -/obj/structure/closet/secure_closet/personal, -/obj/effect/turf_decal/trimline/opaque/white/filled/line{ - dir = 1 - }, -/obj/item/gun/energy/e_gun/mini, -/obj/item/stock_parts/cell/gun/mini, -/obj/item/clothing/shoes/workboots, -/obj/item/clothing/shoes/workboots, -/obj/item/clothing/shoes/workboots, -/obj/item/clothing/shoes/cowboy, -/obj/item/clothing/shoes/cowboy, -/obj/item/clothing/shoes/cowboy, -/obj/item/clothing/head/cowboy, -/obj/item/clothing/head/cowboy, -/obj/item/clothing/head/cowboy, -/obj/item/clothing/head/cowboy, -/obj/item/clothing/head/cowboy, -/obj/item/clothing/head/cowboy, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 1 +/obj/structure/chair/sofa/brown/old/corner/directional/north, +/obj/structure/sign/poster/random{ + pixel_x = -32; + pixel_y = 0 }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/mineral/plastitanium, +/turf/open/floor/plasteel/grimy, /area/ship/crew) "Ng" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/obj/effect/turf_decal/industrial/warning/corner, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 - }, -/obj/structure/cable{ +/obj/structure/cable/pink{ icon_state = "1-8" }, -/turf/open/floor/plating, -/area/ship/engineering/engine) -"Nq" = ( -/obj/machinery/conveyor{ - id = "NTMSLoad2"; - name = "on ramp" - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/machinery/door/poddoor{ - id = "kilocargo"; - name = "NTMS-037 Bay Blast Door" +/obj/structure/cable/pink{ + icon_state = "4-9" }, -/obj/effect/turf_decal/industrial/warning{ - dir = 1 +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/pink{ + icon_state = "8-10" }, -/obj/machinery/power/shieldwallgen/atmos/roundstart{ - dir = 8; - id = "kiloshield" +/mob/living/simple_animal/hostile/netherworld/migo{ + environment_smash = 0; + faction = list("neutral"); + melee_damage_lower = 5; + melee_damage_upper = 10; + name = "maurice" }, /turf/open/floor/plating, +/area/ship/engineering) +"Nq" = ( +/turf/closed/wall/r_wall/yesdiag, /area/ship/cargo) "NB" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/corner/opaque/red, -/obj/effect/turf_decal/corner/opaque/red{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 +/obj/machinery/door/firedoor/border_only{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 +/obj/machinery/door/firedoor/border_only{ + dir = 8 }, -/obj/machinery/status_display{ - pixel_x = -32; - pixel_y = -32 +/obj/effect/turf_decal/industrial/warning/fulltile, +/obj/machinery/door/airlock{ + dir = 4; + name = "Restroom" }, -/turf/open/floor/plasteel/white, -/area/ship/crew/canteen/kitchen) +/turf/open/floor/plasteel/dark, +/area/ship/crew) "NI" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/sink{ + dir = 8; + pixel_x = 14 }, -/obj/effect/turf_decal/corner/opaque/red, -/obj/effect/turf_decal/corner/opaque/red{ - dir = 1 +/obj/structure/mirror{ + pixel_x = 24; + pixel_y = 0 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/obj/structure/toilet{ + pixel_y = 18 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 +/obj/machinery/light/small/directional/north{ + pixel_x = 11 }, -/turf/open/floor/plasteel/white, -/area/ship/crew/canteen/kitchen) -"NT" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 4 +/obj/machinery/light_switch{ + pixel_x = -12; + pixel_y = 20 }, -/obj/effect/decal/cleanable/greenglow, -/obj/structure/cable{ - icon_state = "1-8" +/obj/item/storage/pill_bottle/happy{ + pixel_x = 12; + pixel_y = 12 }, -/obj/effect/turf_decal/industrial/warning{ - dir = 4 +/mob/living/simple_animal/hostile/cockroach, +/obj/effect/decal/cleanable/vomit/old{ + pixel_x = -5 }, -/turf/open/floor/mineral/titanium/blue, +/turf/open/floor/plasteel/patterned, +/area/ship/crew) +"NT" = ( +/turf/open/floor/plasteel/dark, /area/ship/bridge) "NU" = ( -/obj/machinery/conveyor{ - id = "NTMSLoad2"; - name = "on ramp" - }, -/obj/structure/window/reinforced{ - dir = 8 +/obj/structure/table/wood, +/obj/structure/cable/pink{ + icon_state = "2-5" }, -/turf/open/floor/plating, -/area/ship/cargo) -"OH" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 4 }, +/obj/item/flashlight/lamp/green{ + pixel_y = 3 + }, +/obj/structure/sign/poster/random{ + pixel_x = -32; + pixel_y = 0 + }, +/turf/open/floor/carpet, +/area/ship/crew/dorm) +"Of" = ( +/turf/closed/wall/r_wall, +/area/ship/maintenance/fore) +"OH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 8 }, -/obj/effect/turf_decal/industrial/warning/corner{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/structure/cable{ - icon_state = "1-8" +/obj/effect/turf_decal/industrial/warning{ + dir = 4 }, -/obj/structure/cable{ - icon_state = "2-8" +/obj/effect/decal/cleanable/blood/old, +/obj/structure/cable/pink{ + icon_state = "2-10" }, -/turf/open/floor/mineral/titanium/yellow, +/turf/open/floor/plasteel/patterned, /area/ship/cargo) +"OQ" = ( +/turf/closed/wall/r_wall/rust, +/area/ship/engineering) "Pg" = ( -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/computer/helm{ +/obj/machinery/computer/helm/retro{ dir = 8 }, -/obj/machinery/light/directional/east, -/turf/open/floor/mineral/plastitanium, -/area/ship/bridge) -"PS" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light_switch{ - pixel_y = -23; - dir = 1 - }, -/obj/effect/decal/cleanable/greenglow, -/obj/structure/closet/crate/internals, -/obj/item/tank/internals/oxygen, -/obj/item/tank/internals/oxygen{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath{ - pixel_x = -3; - pixel_y = 3 +/obj/effect/turf_decal/corner/opaque/neutral/half{ + dir = 8 }, -/obj/effect/turf_decal/industrial/warning/corner, -/turf/open/floor/plating, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/bridge) +"PJ" = ( +/turf/closed/wall/r_wall/rust, /area/ship/cargo) +"PS" = ( +/obj/structure/table/reinforced, +/obj/machinery/microwave, +/obj/effect/turf_decal/corner/transparent/beige/full, +/obj/effect/turf_decal/corner/transparent/brown/diagonal, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel, +/area/ship/crew) "PW" = ( -/obj/machinery/porta_turret/ship/weak{ - dir = 10 - }, -/turf/closed/wall/mineral/titanium, -/area/ship/bridge) +/turf/closed/wall/r_wall/yesdiag, +/area/ship/crew/dorm) "Qw" = ( -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/effect/mapping_helpers/airlock/locked, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/layer_manifold{ - dir = 4 +/obj/structure/sign/warning/docking, +/turf/closed/wall, +/area/ship/maintenance/fore) +"Rq" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/poddoor/shutters{ + id = "kilowindows" }, -/obj/machinery/door/airlock/external{ - name = "Mining Airlock"; +/turf/open/floor/plating/airless, +/area/ship/crew/dorm) +"RJ" = ( +/obj/structure/chair/stool{ dir = 8 }, -/obj/docking_port/mobile{ - dir = 4; - launch_status = 0; - name = "Mining Shuttle"; - preferred_direction = 4; - port_direction = 2 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 }, -/turf/open/floor/mineral/plastitanium, -/area/ship/cargo) -"Rq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/greenglow, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/corner/opaque/red, -/obj/effect/turf_decal/corner/opaque/red{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/ship/crew/canteen/kitchen) -"RJ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - icon_state = "0-2" +/obj/machinery/button/door{ + id = "kilowindows"; + name = "Window Lockdown"; + pixel_x = -6; + pixel_y = 20 }, -/obj/effect/turf_decal/industrial/warning{ - dir = 9 +/obj/machinery/button/door{ + id = "kilobridge"; + name = "Bridge Lockdown"; + pixel_x = 6; + pixel_y = 20 }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/machinery/light_switch{ - pixel_x = -13; - pixel_y = 23 +/obj/structure/cable/pink{ + icon_state = "2-8" }, -/turf/open/floor/mineral/titanium/blue, +/turf/open/floor/plasteel/dark, /area/ship/bridge) "Sx" = ( -/obj/structure/closet/secure_closet/freezer{ - locked = 0; - name = "fridge" - }, -/obj/item/reagent_containers/food/snacks/sausage, -/obj/item/reagent_containers/food/snacks/sandwich, -/obj/effect/turf_decal/trimline/opaque/white/filled/line{ - dir = 1 +/obj/structure/table/reinforced, +/obj/item/cutting_board{ + anchored = 1 }, -/obj/item/storage/cans/sixbeer, -/turf/open/floor/mineral/plastitanium, -/area/ship/crew/canteen/kitchen) +/obj/item/melee/knife/kitchen, +/obj/effect/turf_decal/corner/transparent/beige/full, +/obj/effect/turf_decal/corner/transparent/brown/diagonal, +/turf/open/floor/plasteel, +/area/ship/crew) "Ti" = ( -/obj/effect/spawner/structure/window/shuttle, -/obj/machinery/door/poddoor{ - id = "whiteship_windows"; - name = "Exterior Window Blast Door" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/poddoor/shutters{ + id = "kilowindows" }, -/turf/open/floor/plating, +/turf/open/floor/plating/airless, /area/ship/crew) "Tn" = ( -/obj/machinery/power/smes/shuttle{ - dir = 4 - }, -/obj/machinery/door/window/westright{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/structure/window/reinforced/spawner/north, -/obj/effect/turf_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/door/poddoor/shutters{ - id = "kiloengine"; - name = "Engine Shutters"; - dir = 8 +/obj/structure/bed, +/obj/structure/cable/pink{ + icon_state = "1-6" }, -/turf/open/floor/plating, -/area/ship/engineering/engine) +/obj/item/bedsheet/dorms, +/obj/machinery/light/directional/west, +/turf/open/floor/carpet, +/area/ship/crew/dorm) "To" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/reagent_dispensers/watertank, -/obj/item/reagent_containers/glass/bucket, -/obj/item/mop, -/obj/item/storage/bag/trash{ - pixel_x = 6 +/obj/machinery/door/poddoor{ + id = "kilocargo" }, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/structure/cable, -/obj/effect/turf_decal/industrial/warning{ - dir = 2 +/obj/structure/cable/pink{ + icon_state = "0-6" }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 +/obj/machinery/power/shieldwallgen/atmos/roundstart{ + dir = 4; + id = "kilofield" }, -/obj/machinery/power/apc/auto_name/directional/south, -/turf/open/floor/plating, -/area/ship/engineering/engine) +/turf/open/floor/plasteel/patterned/ridged, +/area/ship/cargo) +"Tr" = ( +/turf/closed/wall/rust, +/area/ship/engineering) "TD" = ( -/obj/structure/table, -/obj/machinery/button/door{ - id = "whiteship_bridge"; - name = "Bridge Blast Door Control"; - pixel_x = -6; - pixel_y = -2; - dir = 1 +/obj/machinery/light/directional/south, +/obj/structure/table/reinforced, +/obj/item/megaphone/cargo{ + pixel_x = 4; + pixel_y = 5 }, -/obj/machinery/button/door{ - id = "whiteship_windows"; - name = "Windows Blast Door Control"; - pixel_x = -6; - pixel_y = 8; - dir = 1 +/obj/item/cigbutt{ + pixel_x = -17; + pixel_y = 5 }, -/obj/item/radio{ - pixel_x = 6; - pixel_y = 4 +/obj/effect/turf_decal/corner/opaque/neutral/half{ + dir = 1 }, -/turf/open/floor/mineral/plastitanium, +/turf/open/floor/plasteel/dark, /area/ship/bridge) "TG" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/effect/decal/cleanable/greenglow, -/obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/air, -/turf/open/floor/plating, -/area/ship/engineering/engine) +/turf/closed/wall, +/area/ship/hallway/port) +"TY" = ( +/turf/closed/wall/r_wall/rust, +/area/ship/bridge) "Ua" = ( -/obj/effect/spawner/structure/window/shuttle, -/obj/machinery/door/poddoor{ - id = "whiteship_windows"; - name = "Exterior Window Blast Door" +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/poddoor/shutters{ + id = "kilowindows" }, -/obj/machinery/door/firedoor/border_only, -/turf/open/floor/plating, -/area/ship/engineering/engine) +/turf/open/floor/plating/airless, +/area/ship/engineering) "Ud" = ( -/obj/effect/turf_decal/box/corners, -/obj/effect/turf_decal/box/corners{ - dir = 8 - }, -/obj/item/wrench, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/plating, +/turf/closed/wall, /area/ship/cargo) "Un" = ( -/obj/effect/spawner/structure/window/shuttle, -/obj/machinery/door/poddoor{ - id = "whiteship_windows"; - name = "Exterior Window Blast Door" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 +/obj/structure/grille, +/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/poddoor/shutters{ + id = "kilowindows" }, -/turf/open/floor/plating, -/area/ship/engineering/engine) +/turf/open/floor/plating/airless, +/area/ship/hallway/port) "Uv" = ( -/obj/structure/frame/computer{ - anchored = 1; - dir = 1 +/obj/docking_port/stationary{ + dir = 4; + dwidth = 15; + height = 15; + width = 30 }, -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/effect/decal/cleanable/dirt, -/obj/item/shard, -/turf/open/floor/mineral/plastitanium, -/area/ship/bridge) +/turf/template_noop, +/area/template_noop) "UY" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 - }, -/turf/open/floor/wood, +/obj/structure/chair/sofa/brown/old/right/directional/north, +/turf/open/floor/plasteel/grimy, /area/ship/crew) "Va" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 1 +/obj/structure/closet/crate/secure/weapon, +/obj/structure/cable/pink{ + icon_state = "6-10" }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/greenglow, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/mineral/titanium/yellow, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 2 + }, +/obj/structure/cable/pink{ + icon_state = "9-10" + }, +/obj/effect/decal/cleanable/oil, +/obj/item/ammo_box/a12g, +/obj/item/gun/ballistic/shotgun/doublebarrel/no_mag, +/turf/open/floor/plasteel/patterned, /area/ship/cargo) "Vd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/machinery/suit_storage_unit/independent/engineering, -/obj/effect/turf_decal/industrial/warning{ - dir = 6 +/obj/structure/cable/pink{ + icon_state = "8-10" }, -/turf/open/floor/plating, -/area/ship/engineering/engine) -"Vh" = ( -/obj/structure/frame/computer{ - anchored = 1; - dir = 1 +/obj/structure/cable/pink{ + icon_state = "5-10" }, -/obj/machinery/light/directional/south, -/obj/machinery/computer/security/telescreen{ - dir = 1; - name = "NTMS-037 Monitor"; - network = list("ntms"); - pixel_y = -30 - }, -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/item/stack/cable_coil/cut, -/turf/open/floor/mineral/plastitanium, -/area/ship/bridge) -"Vq" = ( -/obj/machinery/porta_turret/ship/weak{ - dir = 10 +/obj/machinery/atmospherics/components/binary/pump/layer2{ + dir = 1 }, -/turf/closed/wall/mineral/titanium, -/area/ship/crew/canteen/kitchen) -"Vx" = ( -/obj/effect/turf_decal/industrial/warning, -/obj/effect/decal/cleanable/greenglow, -/obj/structure/toilet{ - dir = 4; - pixel_x = -7 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/light/small/directional/east{ + pixel_y = 8 }, -/obj/structure/sink{ +/obj/effect/decal/cleanable/oil, +/obj/machinery/button/door{ dir = 8; - pixel_x = 14 + id = "kilothrusters"; + name = "Thruster Lockdown"; + pixel_x = 21 }, -/obj/machinery/shower{ - pixel_x = -11; - pixel_y = 18 +/turf/open/floor/plasteel/dark, +/area/ship/engineering) +"Vh" = ( +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/machinery/atmospherics/components/unary/tank/air{ + dir = 8; + piping_layer = 2 }, -/obj/machinery/firealarm/directional/west, -/obj/machinery/newscaster/directional/north, -/obj/machinery/light/small/broken/directional/east, -/turf/open/floor/carpet/blue, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"Vq" = ( +/turf/closed/wall/r_wall/yesdiag, /area/ship/crew) -"VQ" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "NTMSLoad"; - name = "off ramp" +"Vt" = ( +/obj/effect/turf_decal/miskilamo_small{ + dir = 1 }, -/obj/structure/window/reinforced{ - dir = 4 +/turf/open/floor/engine/hull, +/area/ship/external/dark) +"Vx" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 }, -/turf/open/floor/plating, -/area/ship/cargo) +/obj/item/cigbutt, +/turf/open/floor/carpet, +/area/ship/crew/dorm) +"VQ" = ( +/obj/effect/turf_decal/miskilamo_small/left{ + dir = 1 + }, +/turf/open/floor/engine/hull, +/area/ship/external/dark) "We" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/rack, -/obj/item/storage/belt/utility, -/obj/item/radio{ - pixel_x = -3; - pixel_y = 3 +/obj/machinery/suit_storage_unit/inherit, +/obj/effect/turf_decal/borderfloor{ + dir = 1 + }, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable/pink, +/obj/effect/turf_decal/box/corners{ + dir = 8 + }, +/obj/effect/turf_decal/box/corners, +/obj/item/reagent_containers/food/drinks/bottle/absinthe, +/obj/item/clothing/suit/space/hardsuit/mining/independent, +/obj/item/clothing/mask/breath, +/obj/structure/cable/pink{ + icon_state = "1-5" }, -/obj/item/radio, -/obj/effect/turf_decal/industrial/hatch/yellow, -/turf/open/floor/mineral/plastitanium, +/turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "Xd" = ( -/obj/structure/chair/comfy/shuttle, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/greenglow, -/obj/structure/cable{ - icon_state = "1-4" +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_x = -7; + pixel_y = 4 }, -/obj/effect/turf_decal/industrial/warning{ - dir = 6 +/obj/item/pen/fourcolor, +/obj/machinery/airalarm/directional/south, +/obj/item/radio/intercom/wideband/directional/west, +/obj/item/reagent_containers/food/drinks/coffee{ + pixel_x = 10; + pixel_y = 7 }, -/turf/open/floor/mineral/titanium/blue, +/obj/effect/turf_decal/corner/opaque/neutral/half{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/dark, /area/ship/bridge) "XQ" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/obj/item/storage/toolbox/mechanical{ - pixel_y = 6 +/obj/machinery/cryopod{ + dir = 8 }, -/obj/item/spacecash/bundle/c200, -/turf/open/floor/mineral/plastitanium, -/area/ship/bridge) +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/box, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hallway/central) "XR" = ( -/obj/structure/closet/secure_closet/personal, -/obj/effect/turf_decal/trimline/opaque/white/filled/line{ - dir = 1 - }, -/obj/effect/decal/cleanable/greenglow, -/obj/item/stock_parts/cell/gun/mini, -/obj/item/clothing/under/utility, -/obj/item/clothing/under/utility, -/obj/item/clothing/under/utility, -/obj/item/clothing/under/utility/skirt, -/obj/item/clothing/under/utility/skirt, -/obj/item/clothing/under/utility/skirt, -/obj/item/clothing/suit/toggle/hazard, -/obj/item/clothing/suit/toggle/hazard, -/obj/item/clothing/suit/toggle/hazard, -/obj/item/clothing/suit/hazardvest, -/obj/item/clothing/suit/hazardvest, -/obj/item/clothing/suit/hazardvest, -/obj/effect/turf_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/mineral/plastitanium, +/turf/closed/wall, +/area/ship/crew) +"Yn" = ( +/turf/closed/wall/r_wall/rust, /area/ship/crew) "Yu" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/greenglow, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 - }, -/turf/open/floor/plating, -/area/ship/cargo) -"YJ" = ( -/obj/machinery/washing_machine, -/obj/effect/turf_decal/trimline/opaque/white/filled/line{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/mineral/plastitanium, +/obj/structure/grille, +/obj/structure/window/fulltile, +/obj/structure/curtain/cloth/grey, +/turf/open/floor/plating/airless, /area/ship/crew) -"YL" = ( -/obj/effect/decal/cleanable/greenglow, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ +"YJ" = ( +/obj/structure/dresser{ dir = 1 }, +/obj/item/reagent_containers/food/drinks/beer{ + pixel_x = -9; + pixel_y = 12 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/dorm) +"YL" = ( +/obj/structure/chair/sofa/brown/old/directional/east, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 + dir = 5 }, -/turf/open/floor/plasteel/showroomfloor, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/plasteel/grimy, /area/ship/crew) "ZC" = ( -/obj/structure/closet/crate/bin, -/obj/effect/decal/cleanable/dirt, -/obj/item/trash/syndi_cakes, -/obj/item/organ/stomach, -/obj/machinery/light_switch{ - dir = 1; - pixel_y = 23 - }, -/obj/effect/turf_decal/corner/opaque/red, -/obj/effect/turf_decal/corner/opaque/red{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/effect/turf_decal/industrial/warning/corner{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/turf/open/floor/plasteel/white, -/area/ship/crew/canteen/kitchen) +/turf/open/floor/plasteel/grimy, +/area/ship/crew) "ZG" = ( -/obj/structure/falsewall/titanium, +/obj/structure/cable/pink{ + icon_state = "4-9" + }, +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/cockroach, /turf/open/floor/plating, -/area/ship/crew) +/area/ship/engineering) (1,1,1) = {" aa aa -aa AQ ak +AQ bn bn -kA -bn bn +Tr ak AQ aa @@ -2405,14 +2048,13 @@ aa (2,1,1) = {" aa aa -aa -kA +OQ ar -cW +kA +MI +MI MI kA -Tn -fu ar kA aa @@ -2421,8 +2063,7 @@ aa (3,1,1) = {" aa aa -aa -Jf +kA av bQ AV @@ -2430,15 +2071,14 @@ cY ng gC oj -Un +Ua aa aa "} (4,1,1) = {" aa aa -aa -Jf +kA eo fv LC @@ -2446,115 +2086,108 @@ Ng cM hh oP -Un +Ua aa aa "} (5,1,1) = {" aa aa -aa -Jf -Jf +kA +AQ gs aU Vd -mz +fs ZG -mz -mz +AP +kA aa aa "} (6,1,1) = {" aa aa -aa -Jf +Ua cb yd cr -mz -mz +AQ +Vh cZ Bm -Ti +kA aa aa "} (7,1,1) = {" aa aa -aa Ua aS ca +tb cq -mz -KR -da -UY -Ti +cq +cq +cq +wh aa aa "} (8,1,1) = {" aa aa -aa -Ua +vl TG cC -To -mz -mz +cq mz +NU +Tn AE -mz +wh PW aa "} (9,1,1) = {" aa aa -aa Jf jU bU ck -mz +sG Vx ig xF YJ -Ti +Rq aa "} (10,1,1) = {" aa -aa -aa -Jf +cK +Un aJ bV -Jf -mz -mz -mz -sG XR -mz +XR +zH +XR +tW +XR +yF aa "} (11,1,1) = {" aa -aa dF cP KM bg +XR yn -mz EG hS YL @@ -2564,103 +2197,96 @@ aa "} (12,1,1) = {" aa -ac -ac -ac +Vt +Un iM rc Yu -mz -mz -mz +Sx +iT +cw wc -mz -mz +UY +Ti aa "} (13,1,1) = {" aa -qv VQ -nO +Jf aC bM -cK +XR PS -bA +cW ZC HP aZ -bA +yF Vq "} (14,1,1) = {" -vU -rq -iT -de -bL +aa +fu +ac +Ud bX Ud -nJ -cV +XR +XR rO -wh +tW NB -Sx -yF +XR +Yn "} (15,1,1) = {" -aa Nq -NU +ac am eN bY cB -Co +im dt sD -xk +xn NI zc -bA +yF "} (16,1,1) = {" -aa -ac -ac -ac -ac +To +nJ +da +AB bZ Kz im bA Ew -zH -Rq -dc -yF +xk +xk +xk +nO "} (17,1,1) = {" -aa -aa -ac +Co +cV Ih -ac +Da bG -ac -ac -bA -bA -bA +vU +KR +bL +rq +de EU -bA -bA +dc +vv "} (18,1,1) = {" -aa -aa +cf La hR Va @@ -2669,15 +2295,14 @@ cj bF bF io -AP +bF GK XQ vv "} (19,1,1) = {" -aa -aa -La +Nq +ac Mj ay bT @@ -2685,14 +2310,13 @@ ci bF GM jK -fs -Da -Vh bF +bF +lw +bP "} (20,1,1) = {" aa -aa ac jx pV @@ -2703,66 +2327,77 @@ RJ nd bH Xd -Uv bF +bP "} (21,1,1) = {" aa -aa -ac +PJ hN jl OH mr -cw +bF gp NT BP TD -BS +bP Bu "} (22,1,1) = {" aa -aa -ac -ac -AB +Of +Of +Of xe -cf -bF +Of +bP Ds sW Pg BS -Bu +BS aa "} (23,1,1) = {" aa -aa -ac -bm KB +bm +Ce kb cJ -bF -bP -bF -bF -Bu +TY +TY +BS +BS +BS aa aa "} (24,1,1) = {" aa -aa rW -ac +KB Qw qw -ac -rW +qv +Jt +aa +aa +aa +aa +aa +aa +"} +(25,1,1) = {" +aa +aa +aa +aa +Uv +aa +aa aa aa aa diff --git a/_maps/shuttles/independent/independent_lagoon.dmm b/_maps/shuttles/independent/independent_lagoon.dmm index 77b0d605e91b..5130aed76be3 100644 --- a/_maps/shuttles/independent/independent_lagoon.dmm +++ b/_maps/shuttles/independent/independent_lagoon.dmm @@ -1171,9 +1171,6 @@ "hT" = ( /obj/structure/table/wood, /obj/item/clothing/mask/gas/clown_hat, -/obj/item/bikehorn, -/obj/item/clothing/shoes/clown_shoes, -/obj/item/megaphone/clown, /obj/item/reagent_containers/food/drinks/soda_cans/canned_laughter, /obj/item/radio/intercom/directional/south, /turf/open/floor/carpet/nanoweave/purple, @@ -1361,12 +1358,12 @@ "iR" = ( /obj/structure/table/reinforced, /obj/item/storage/bag/tray, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /obj/structure/cable{ icon_state = "2-4" }, /obj/item/kitchen/rollingpin, -/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/reagent_containers/condiment/enzyme, /obj/effect/turf_decal/corner/opaque/white/diagonal, /obj/item/radio/intercom/directional/west, /turf/open/floor/plasteel, @@ -1569,12 +1566,12 @@ /obj/structure/closet/secure_closet/freezer/kitchen, /obj/item/storage/fancy/egg_box, /obj/item/storage/fancy/egg_box, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/rice, -/obj/item/reagent_containers/food/condiment/rice, -/obj/item/reagent_containers/food/condiment/sugar, -/obj/item/reagent_containers/food/condiment/sugar, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/rice, +/obj/item/reagent_containers/condiment/rice, +/obj/item/reagent_containers/condiment/sugar, +/obj/item/reagent_containers/condiment/sugar, /obj/effect/turf_decal/corner/opaque/white/diagonal, /obj/machinery/firealarm/directional/north, /turf/open/floor/plasteel, @@ -2069,7 +2066,7 @@ pixel_y = 1 }, /obj/item/toy/cards/deck, -/obj/item/reagent_containers/food/snacks/butterbiscuit{ +/obj/item/food/butterbiscuit{ pixel_x = 6; pixel_y = 6 }, @@ -2347,7 +2344,7 @@ }, /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos, /obj/item/clothing/gloves/color/black, -/obj/structure/fireaxecabinet{ +/obj/structure/cabinet/fireaxe{ dir = 8; pixel_x = 28 }, @@ -3931,11 +3928,11 @@ /area/ship/hallway/aft) "An" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = 5; pixel_y = 5 }, -/obj/item/reagent_containers/food/condiment/peppermill, +/obj/item/reagent_containers/condiment/peppermill, /obj/machinery/door/firedoor/border_only, /obj/effect/turf_decal/corner/opaque/white/diagonal, /turf/open/floor/plasteel, @@ -4751,7 +4748,7 @@ /obj/structure/table/wood, /obj/item/paper_bin, /obj/item/pen/fountain, -/obj/item/kitchen/knife/letter_opener, +/obj/item/melee/knife/letter_opener, /obj/item/pen, /turf/open/floor/carpet/black, /area/ship/crew/library) @@ -5617,7 +5614,6 @@ /area/ship/hallway/starboard) "Mz" = ( /obj/structure/table/wood, -/obj/item/nullrod, /turf/open/floor/wood, /area/ship/crew/chapel) "MD" = ( @@ -6720,11 +6716,7 @@ /area/ship/hallway/aft) "TX" = ( /obj/structure/table, -/obj/item/clothing/shoes/wheelys{ - pixel_x = 4; - pixel_y = 9 - }, -/obj/item/melee/skateboard/hoverboard{ +/obj/item/skateboard/hoverboard{ pixel_x = -4 }, /turf/open/floor/eighties, diff --git a/_maps/shuttles/independent/independent_mudskipper.dmm b/_maps/shuttles/independent/independent_mudskipper.dmm index d7a3341b8927..26474b9c4c2f 100644 --- a/_maps/shuttles/independent/independent_mudskipper.dmm +++ b/_maps/shuttles/independent/independent_mudskipper.dmm @@ -9,7 +9,7 @@ icon_state = "0-1" }, /obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel/tech, +/turf/open/floor/plasteel/dark, /area/ship/engineering/engine) "ag" = ( /obj/machinery/power/shuttle/engine/electric{ @@ -18,34 +18,27 @@ /obj/structure/cable{ icon_state = "0-4" }, -/turf/open/floor/plating, +/turf/open/floor/engine/hull, /area/ship/engineering/engine) "ak" = ( -/obj/effect/turf_decal/siding/wood/end{ - dir = 8; - color = "#543C30" - }, -/obj/effect/decal/cleanable/dirt/dust, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2, /obj/structure/extinguisher_cabinet/directional/south, -/obj/structure/cable{ - icon_state = "1-8" - }, /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/wood/walnut, +/obj/effect/turf_decal/corner/opaque/bottlegreen/full, +/turf/open/floor/plasteel/dark, /area/ship/bridge) "ao" = ( /obj/machinery/power/terminal{ dir = 8 }, /obj/machinery/atmospherics/components/binary/pump{ - name = "Plasma to Engines"; - dir = 1 + dir = 1; + name = "Plasma to Engines" }, /obj/structure/cable{ icon_state = "1-4" @@ -53,11 +46,6 @@ /obj/structure/cable{ icon_state = "0-4" }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/techfloor{ - dir = 8 - }, /turf/open/floor/plasteel/dark, /area/ship/engineering/engine) "ar" = ( @@ -70,70 +58,51 @@ /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plasteel/grimy, +/obj/effect/turf_decal/corner/transparent/beige/full, +/obj/effect/turf_decal/corner/transparent/brown/diagonal, +/turf/open/floor/plasteel, /area/ship/hallway/aft) "bS" = ( -/obj/effect/decal/cleanable/dirt/dust, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /obj/structure/cable{ icon_state = "1-2" }, -/turf/open/floor/plasteel/grimy, +/obj/effect/turf_decal/corner/transparent/beige/full, +/obj/effect/turf_decal/corner/transparent/brown/diagonal, +/turf/open/floor/plasteel, /area/ship/hallway/aft) -"bZ" = ( -/obj/machinery/power/smes/shuttle/precharged{ - dir = 4 - }, -/obj/structure/window/reinforced/spawner/west, -/obj/machinery/door/window/eastleft{ - layer = 3.1 - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "mudskipper_engine" - }, -/turf/open/floor/plating, -/area/ship/engineering/engine) "cn" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, /obj/machinery/airalarm/directional/east, /obj/machinery/light_switch{ - pixel_y = 23; - pixel_x = -3 + pixel_x = -3; + pixel_y = 23 }, -/turf/open/floor/plasteel/dark, +/obj/structure/chair/handrail, +/turf/open/floor/plasteel/patterned, /area/ship/maintenance) "cs" = ( /turf/template_noop, /area/template_noop) "cx" = ( -/obj/effect/turf_decal/techfloor{ - dir = 4 - }, /obj/machinery/door/firedoor/border_only{ dir = 8 }, /obj/effect/turf_decal/miskilamo_small{ dir = 8 }, +/obj/effect/decal/cleanable/dirt, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "1-10" + }, +/turf/open/floor/plasteel/mono{ + dir = 1 }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/dark, /area/ship/cargo) "cB" = ( -/obj/effect/turf_decal/siding/wood{ - color = "#543C30"; - dir = 5 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 6 }, @@ -141,46 +110,42 @@ dir = 4 }, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "4-9" }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/carpet, /area/ship/crew) "dc" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, +/turf/closed/wall, /area/ship/hallway/central) "dw" = ( /obj/structure/window/reinforced/spawner, -/obj/structure/table/reinforced{ - color = "#c1b6a5" - }, /obj/machinery/button/door{ dir = 8; - pixel_x = 22; - pixel_y = 15; id = "mudskipper_engine"; - name = "Engine Shutters" + name = "Engine Shutters"; + pixel_x = 22; + pixel_y = 15 }, /obj/machinery/cell_charger, /obj/item/storage/toolbox/mechanical, -/turf/open/floor/plasteel/tech/grid, +/obj/structure/table/reinforced, +/turf/open/floor/plasteel/tech, /area/ship/engineering/engine) "dN" = ( /obj/machinery/modular_computer/console/preset/command{ dir = 8 }, -/obj/effect/turf_decal/corner/transparent/neutral, /obj/machinery/light_switch{ - pixel_y = 23; - pixel_x = -3 + pixel_x = -3; + pixel_y = 23 }, -/turf/open/floor/plasteel/dark, +/obj/effect/turf_decal/corner/opaque/neutral/half{ + dir = 8 + }, +/obj/effect/turf_decal/box, +/turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) "dQ" = ( -/obj/effect/turf_decal/siding/wood{ - color = "#543C30"; - dir = 6 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, @@ -192,8 +157,10 @@ /obj/structure/cable{ icon_state = "0-8" }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel/grimy, +/obj/structure/chair/handrail{ + dir = 1 + }, +/turf/open/floor/carpet, /area/ship/crew) "dT" = ( /obj/machinery/suit_storage_unit/inherit, @@ -207,41 +174,46 @@ dir = 4; pixel_x = -22 }, +/obj/effect/turf_decal/borderfloor{ + dir = 6 + }, /turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "dZ" = ( -/obj/effect/turf_decal/techfloor{ - dir = 1 - }, /obj/effect/decal/cleanable/glass, /obj/structure/extinguisher_cabinet/directional/west{ pixel_y = 5 }, /obj/machinery/button/door{ dir = 4; - pixel_x = -33; - pixel_y = -7; id = "mudskipper_door"; - name = "Cargo Door" + name = "Cargo Door"; + pixel_x = -33; + pixel_y = -7 }, /obj/machinery/button/shieldwallgen{ dir = 4; - pixel_x = -21; - pixel_y = -7; id = "mudskipper_shield"; - name = "Cargo Holofield" + name = "Cargo Holofield"; + pixel_x = -21; + pixel_y = -7 }, -/turf/open/floor/plasteel/dark, +/obj/structure/cable{ + icon_state = "2-10" + }, +/obj/structure/chair/handrail{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned, /area/ship/cargo) "ec" = ( -/obj/effect/turf_decal/techfloor{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt/dust, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, -/turf/open/floor/plasteel/dark, +/obj/effect/turf_decal/borderfloor{ + dir = 1 + }, +/turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "ee" = ( /obj/effect/turf_decal/industrial/warning, @@ -250,19 +222,15 @@ }, /obj/structure/window/reinforced/spawner/west, /obj/structure/window/reinforced/spawner/east, -/turf/open/floor/plasteel/tech/airless, +/turf/open/floor/engine/hull, /area/ship/external/dark) "en" = ( -/obj/structure/catwalk/over/plated_catwalk/dark, /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 10 }, -/turf/open/floor/plating, +/turf/open/floor/plasteel/dark, /area/ship/engineering/engine) "eu" = ( -/obj/effect/turf_decal/techfloor{ - dir = 1 - }, /obj/structure/railing{ dir = 8 }, @@ -274,8 +242,12 @@ /obj/structure/cable{ icon_state = "2-4" }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/tech, /area/ship/engineering/engine) +"ev" = ( +/turf/closed/wall, +/area/ship/crew/cryo) "eL" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, @@ -283,21 +255,18 @@ /obj/structure/sign/poster/contraband/smoke{ pixel_x = 32 }, -/obj/effect/turf_decal/siding/wood{ - color = "#543C30"; - dir = 4 - }, /obj/item/toy/cards/deck{ pixel_y = 3 }, -/turf/open/floor/wood/walnut, +/obj/effect/turf_decal/corner/transparent/beige/full, +/obj/effect/turf_decal/corner/transparent/brown/diagonal, +/turf/open/floor/plasteel, /area/ship/hallway/aft) "eX" = ( /obj/machinery/atmospherics/components/unary/passive_vent, -/turf/open/floor/engine/hull/reinforced, +/turf/open/floor/engine/hull, /area/ship/external/dark) "gf" = ( -/obj/structure/catwalk/over/plated_catwalk/dark, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 8 }, @@ -310,6 +279,10 @@ /obj/structure/cable{ icon_state = "2-8" }, +/obj/structure/cable{ + icon_state = "5-6" + }, +/obj/structure/catwalk/over/plated_catwalk, /turf/open/floor/plating, /area/ship/hallway/central) "gB" = ( @@ -318,17 +291,19 @@ dir = 4; id = "mudskipper_door" }, -/turf/open/floor/engine, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/turf/open/floor/plasteel/patterned/ridged, /area/ship/cargo) "gR" = ( /obj/effect/turf_decal/box, -/obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/oil{ icon_state = "floor4" }, /obj/structure/closet/crate/secure{ - name = "scavenging supplies"; desc = "A secure crate. This one is particularly large."; + name = "scavenging supplies"; storage_capacity = 40 }, /obj/item/reagent_containers/glass/chem_jug/thermite, @@ -349,24 +324,29 @@ /obj/item/circular_saw, /obj/item/multitool, /obj/item/stack/marker_beacon/thirty, -/turf/open/floor/plasteel/tech, +/obj/item/gun/energy/plasmacutter, +/obj/structure/cable{ + icon_state = "2-10" + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "gT" = ( -/obj/structure/chair{ +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/corner/transparent/beige/full, +/obj/effect/turf_decal/corner/transparent/brown/diagonal, +/obj/structure/chair/plastic{ dir = 1 }, -/obj/effect/turf_decal/siding/wood{ - color = "#543C30"; - dir = 6 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/wood/walnut, +/turf/open/floor/plasteel, /area/ship/hallway/aft) +"hn" = ( +/turf/closed/wall/rust/yesdiag, +/area/ship/external/dark) "hr" = ( /obj/machinery/power/smes/engineering, -/obj/effect/turf_decal/techfloor{ - dir = 5 - }, /obj/structure/cable{ icon_state = "0-8" }, @@ -374,20 +354,20 @@ /turf/open/floor/plasteel/tech, /area/ship/engineering/engine) "hH" = ( -/turf/closed/wall/mineral/plastitanium, +/turf/closed/wall/yesdiag, /area/ship/external/dark) "hX" = ( /obj/structure/grille, /turf/open/floor/engine/hull/reinforced, /area/ship/external/dark) "hY" = ( -/obj/structure/catwalk/over/plated_catwalk/dark, /obj/structure/cable{ icon_state = "1-8" }, /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/catwalk/over/plated_catwalk/dark, /turf/open/floor/plating, /area/ship/engineering/engine) "ib" = ( @@ -400,66 +380,67 @@ /obj/effect/turf_decal/industrial/warning{ dir = 4 }, -/turf/open/floor/engine/hull/reinforced, +/turf/open/floor/engine/hull, /area/ship/cargo) "ic" = ( -/obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/oil{ icon_state = "floor4" }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable{ - icon_state = "0-2" + icon_state = "0-6" }, +/obj/effect/turf_decal/corner/opaque/bottlegreen/full, /turf/open/floor/plasteel/dark, /area/ship/bridge) "iy" = ( -/obj/effect/decal/cleanable/dirt/dust, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, -/turf/open/floor/plasteel/dark, +/obj/effect/turf_decal/corner/transparent/beige/full, +/obj/effect/turf_decal/corner/transparent/brown/diagonal, +/turf/open/floor/plasteel, /area/ship/hallway/aft) "iY" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 +/obj/structure/cable{ + icon_state = "4-9" }, -/obj/effect/turf_decal/industrial/warning{ - dir = 8 +/obj/structure/sign/poster/random{ + pixel_y = -32 }, -/obj/effect/turf_decal/industrial/warning{ - dir = 4 +/obj/structure/chair/handrail{ + dir = 1 }, -/turf/open/floor/plasteel/tech, +/turf/open/floor/plasteel, /area/ship/hallway/central) +"js" = ( +/turf/closed/wall/rust, +/area/ship/bridge) +"jz" = ( +/turf/closed/wall/rust, +/area/ship/engineering/engine) "kB" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, /obj/machinery/airalarm/directional/west, /obj/machinery/light_switch{ - pixel_y = 23; - pixel_x = 3 + pixel_x = 3; + pixel_y = 23 }, -/turf/open/floor/plasteel/showroomfloor, +/turf/open/floor/plasteel/patterned, /area/ship/crew/toilet) "kV" = ( /obj/machinery/vending/coffee, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/cobweb, -/obj/effect/turf_decal/techfloor{ - dir = 1 - }, /obj/structure/extinguisher_cabinet/directional/west{ pixel_y = -5 }, /obj/machinery/light/dim/directional/north, +/obj/effect/turf_decal/corner/opaque/neutral/three_quarters, /turf/open/floor/plasteel/dark, /area/ship/hallway/central) "kX" = ( @@ -467,33 +448,31 @@ dir = 4 }, /obj/machinery/airalarm/directional/north, -/obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/dim/directional/west{ bulb_power = 0.5 }, -/obj/effect/turf_decal/techfloor{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/tech, /area/ship/engineering/engine) "kY" = ( /obj/effect/turf_decal/industrial/warning{ dir = 4 }, -/turf/open/floor/engine/hull/reinforced, +/turf/open/floor/engine/hull, /area/ship/cargo) +"lg" = ( +/turf/closed/wall/r_wall/rust, +/area/ship/crew/toilet) "lj" = ( /obj/machinery/power/shuttle/engine/fueled/plasma{ dir = 4 }, -/turf/open/floor/plating, +/turf/open/floor/engine/hull, /area/ship/engineering/engine) "ma" = ( -/obj/structure/catwalk/over/plated_catwalk/dark, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, -/turf/open/floor/plating, +/turf/open/floor/engine/hull, /area/ship/external/dark) "mt" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, @@ -505,24 +484,14 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/effect/turf_decal/industrial/warning/fulltile, /obj/machinery/door/airlock{ - name = "Bathroom" + dir = 1; + name = "Restroom" }, -/turf/open/floor/plasteel/tech, +/turf/open/floor/plasteel/dark, /area/ship/crew/toilet) "mC" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 8 }, @@ -532,10 +501,11 @@ /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plasteel/tech, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating, /area/ship/hallway/central) "mF" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, +/turf/closed/wall/r_wall, /area/ship/cargo) "mS" = ( /obj/structure/catwalk, @@ -550,12 +520,12 @@ dir = 1; id = "mudskipper_shield" }, -/turf/open/floor/engine, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/turf/open/floor/plasteel/patterned/ridged, /area/ship/cargo) "nj" = ( -/obj/effect/turf_decal/techfloor{ - dir = 5 - }, /obj/structure/sign/warning/vacuum/external{ pixel_y = 28 }, @@ -568,60 +538,45 @@ /obj/structure/cable{ icon_state = "2-4" }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/mono{ + dir = 1 + }, /area/ship/cargo) "nm" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/chair, -/obj/effect/turf_decal/siding/wood{ - color = "#543C30"; - dir = 9 - }, -/turf/open/floor/wood/walnut{ - icon_state = "wood-broken7" - }, +/obj/effect/turf_decal/corner/transparent/beige/full, +/obj/effect/turf_decal/corner/transparent/brown/diagonal, +/obj/structure/chair/plastic, +/turf/open/floor/plasteel, /area/ship/hallway/aft) "nx" = ( /obj/machinery/door/airlock/external, /obj/machinery/atmospherics/pipe/layer_manifold, -/obj/effect/turf_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/industrial/warning/fulltile, /turf/open/floor/plasteel/tech, /area/ship/hallway/aft) "nM" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/table/reinforced{ - color = "#c1b6a5" - }, /obj/machinery/light/small/directional/north{ pixel_x = 6 }, /obj/machinery/computer/helm/viewscreen/computer, /obj/machinery/airalarm/directional/east, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/box, /turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) "nR" = ( -/obj/effect/turf_decal/corner_techfloor_grid{ - dir = 8 - }, -/obj/effect/turf_decal/techfloor/corner{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ dir = 8 }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "nV" = ( /obj/structure/closet/wall/blue/directional/west{ - secure = 1; - locked = 1 + locked = 1; + secure = 1 }, /obj/item/gun/energy/laser/scatter, /obj/item/stock_parts/cell/gun/upgraded, @@ -639,66 +594,48 @@ /turf/open/floor/plasteel/dark, /area/ship/bridge) "ot" = ( -/obj/effect/turf_decal/techfloor{ - dir = 4 - }, /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/door/firedoor/border_only{ dir = 8 }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/cable{ - icon_state = "1-8" - }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/number/four{ dir = 8 }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/mono{ + dir = 1 + }, /area/ship/cargo) "ov" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/airalarm/directional/east, /obj/machinery/photocopier, /obj/machinery/firealarm/directional/north, -/turf/open/floor/plasteel/tech, +/obj/effect/turf_decal/corner/transparent/beige/full, +/obj/effect/turf_decal/corner/transparent/brown/diagonal, +/turf/open/floor/plasteel, /area/ship/hallway/aft) "oC" = ( -/obj/effect/turf_decal/siding/wood/end{ - dir = 4; - color = "#543C30" - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 8 }, /obj/machinery/firealarm/directional/south, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "4-10" }, -/turf/open/floor/wood/walnut, +/obj/effect/turf_decal/corner/opaque/bottlegreen/full, +/turf/open/floor/plasteel/dark, /area/ship/bridge) "oG" = ( -/obj/machinery/door/airlock/grunge{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 8 }, -/obj/effect/turf_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 8 - }, +/obj/effect/turf_decal/industrial/warning/fulltile, /obj/machinery/door/firedoor/border_only{ dir = 4 }, @@ -708,10 +645,15 @@ /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plasteel/tech, +/obj/effect/turf_decal/industrial/warning/fulltile, +/obj/machinery/door/airlock/public/glass{ + dir = 4; + name = "Office" + }, +/turf/open/floor/plasteel/dark, /area/ship/bridge) "oU" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, +/turf/closed/wall, /area/ship/crew/toilet) "po" = ( /obj/structure/catwalk, @@ -725,7 +667,10 @@ /obj/machinery/power/shieldwallgen/atmos/roundstart{ id = "mudskipper_shield" }, -/turf/open/floor/engine, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/turf/open/floor/plasteel/patterned/ridged, /area/ship/cargo) "pF" = ( /obj/machinery/firealarm/directional/west{ @@ -734,74 +679,72 @@ /obj/machinery/light/small/directional/south, /obj/structure/table/reinforced, /obj/structure/bedsheetbin, -/obj/effect/turf_decal/techfloor{ - dir = 10 - }, -/turf/open/floor/plasteel/tech/grid, +/turf/open/floor/plasteel/patterned, /area/ship/maintenance) "pY" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/plasteel/dark, /area/ship/bridge) "qy" = ( -/obj/effect/turf_decal/corner/transparent/neutral{ - dir = 4 - }, -/obj/machinery/computer/crew{ - dir = 8; - icon_state = "computer-right" - }, /obj/machinery/button/door{ dir = 1; - pixel_x = -6; - pixel_y = -21; + id = "mudskipper_bridge"; name = "Bridge Lockdown"; - id = "mudskipper_bridge" + pixel_x = -6; + pixel_y = -21 }, -/turf/open/floor/plasteel/dark, +/obj/effect/turf_decal/corner/opaque/neutral/half{ + dir = 8 + }, +/obj/effect/turf_decal/box, +/obj/machinery/computer/crew/retro{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) "qE" = ( -/obj/structure/catwalk/over/plated_catwalk/dark, /obj/machinery/atmospherics/pipe/manifold/orange/hidden{ dir = 4 }, /obj/structure/cable{ icon_state = "2-5" }, -/turf/open/floor/plating, +/turf/open/floor/plasteel/dark, /area/ship/engineering/engine) "qN" = ( -/obj/machinery/cryopod, -/obj/effect/turf_decal/techfloor{ - dir = 10 +/obj/machinery/cryopod{ + dir = 8 }, -/obj/effect/turf_decal/industrial/hatch/yellow, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, /obj/item/radio/intercom/directional/north{ pixel_x = -3 }, -/turf/open/floor/plasteel/dark, +/obj/effect/turf_decal/box, +/turf/open/floor/plasteel/tech/grid, /area/ship/crew/cryo) "rr" = ( /obj/structure/chair/office{ dir = 8 }, -/obj/effect/decal/cleanable/dirt/dust, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/machinery/light_switch{ dir = 8; pixel_x = 22; pixel_y = -3 }, -/turf/open/floor/plasteel/tech, +/obj/effect/turf_decal/corner/opaque/bottlegreen/full, +/turf/open/floor/plasteel/dark, /area/ship/bridge) +"rG" = ( +/turf/closed/wall/r_wall, +/area/ship/crew/toilet) "rO" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/catwalk/over/plated_catwalk/dark, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 9 }, @@ -811,15 +754,10 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/catwalk/over/plated_catwalk, /turf/open/floor/plating, /area/ship/cargo) "sa" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/chair, -/obj/effect/turf_decal/siding/wood{ - dir = 5; - color = "#543C30" - }, /obj/machinery/newscaster/directional/east{ pixel_y = -6 }, @@ -828,17 +766,20 @@ pixel_x = 22; pixel_y = 5 }, -/turf/open/floor/wood/walnut, +/obj/effect/turf_decal/corner/transparent/beige/full, +/obj/effect/turf_decal/corner/transparent/brown/diagonal, +/obj/structure/chair/plastic, +/turf/open/floor/plasteel, /area/ship/hallway/aft) "sf" = ( -/obj/machinery/computer/helm{ - dir = 8; - icon_state = "computer-left" +/obj/effect/turf_decal/corner/opaque/neutral/half{ + dir = 8 }, -/obj/effect/turf_decal/corner/transparent/neutral{ - dir = 6 +/obj/effect/turf_decal/box, +/obj/machinery/computer/helm/retro{ + dir = 8 }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) "sp" = ( /obj/machinery/atmospherics/pipe/manifold/cyan/visible/layer4{ @@ -848,33 +789,26 @@ /obj/machinery/meter/atmos/layer2{ name = "waste to external meter" }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/tech, /area/ship/engineering/engine) "sA" = ( -/obj/effect/turf_decal/techfloor{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt/dust, /obj/machinery/door/firedoor/border_only{ dir = 8 }, /obj/effect/turf_decal/miskilamo_small/right{ dir = 8 }, -/obj/structure/cable{ - icon_state = "1-2" +/turf/open/floor/plasteel/mono{ + dir = 1 }, -/turf/open/floor/plasteel/dark, /area/ship/cargo) "sH" = ( /obj/structure/catwalk, /obj/structure/window/reinforced/spawner/east, /obj/structure/window/reinforced/spawner/west, -/turf/open/floor/engine/airless, +/turf/open/floor/engine/hull, /area/ship/external/dark) "sI" = ( -/obj/effect/turf_decal/techfloor, /obj/structure/railing{ dir = 8 }, @@ -890,42 +824,42 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/table/reinforced, /obj/machinery/microwave, -/obj/effect/turf_decal/techfloor{ - dir = 5 - }, /obj/machinery/light/directional/east, -/turf/open/floor/plasteel/tech, +/obj/effect/turf_decal/corner/opaque/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, /area/ship/hallway/aft) "th" = ( -/obj/effect/turf_decal/borderfloor/full, -/obj/effect/turf_decal/industrial/traffic{ - dir = 1 - }, -/obj/effect/turf_decal/industrial/traffic, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "2-8" }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/tech/techmaint, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned, /area/ship/cargo) "ti" = ( -/obj/effect/decal/cleanable/dirt/dust, /obj/structure/sign/warning/incident{ pixel_x = -32 }, /obj/machinery/computer/cargo/retro{ dir = 4 }, +/obj/effect/turf_decal/borderfloor{ + dir = 1 + }, /turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "tI" = ( -/obj/effect/decal/cleanable/dirt/dust, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "2-6" }, -/turf/open/floor/plasteel/tech, +/obj/effect/turf_decal/corner/transparent/beige/full, +/obj/effect/turf_decal/corner/transparent/brown/diagonal, +/turf/open/floor/plasteel, /area/ship/hallway/aft) "tK" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ @@ -936,23 +870,13 @@ /obj/structure/cable{ icon_state = "0-8" }, -/turf/open/floor/plasteel/showroomfloor, +/turf/open/floor/plasteel/patterned, /area/ship/crew/toilet) "uk" = ( -/obj/effect/turf_decal/techfloor{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt/dust, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "uz" = ( -/obj/effect/turf_decal/corner_techfloor_grid{ - dir = 4 - }, -/obj/effect/turf_decal/techfloor/corner{ - dir = 4 - }, /obj/structure/reagent_dispensers/fueltank, /obj/effect/turf_decal/industrial/hatch/yellow, /obj/structure/railing{ @@ -962,17 +886,12 @@ pixel_x = 7; pixel_y = 28 }, -/turf/open/floor/plasteel/dark, -/area/ship/cargo) -"uW" = ( -/obj/machinery/door/airlock/grunge{ - name = "Bridge"; - req_one_access_txt = "20" - }, -/obj/effect/turf_decal/industrial/warning, /obj/effect/turf_decal/industrial/warning{ - dir = 1 + dir = 4 }, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/cargo) +"uW" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /obj/machinery/door/firedoor/border_only{ @@ -983,6 +902,15 @@ dir = 2; id = "mudskipper_bridge" }, +/obj/structure/cable{ + icon_state = "1-5" + }, +/obj/effect/turf_decal/industrial/warning/fulltile, +/obj/machinery/door/airlock/command{ + dir = 1; + name = "Bridge"; + req_access_txt = "19" + }, /turf/open/floor/plasteel/dark, /area/ship/bridge) "vn" = ( @@ -991,11 +919,11 @@ /obj/structure/sign/poster/contraband/punch_shit{ pixel_x = 32 }, -/obj/effect/turf_decal/techfloor{ - dir = 4 - }, /obj/item/storage/fancy/donut_box, -/turf/open/floor/plasteel/tech, +/obj/effect/turf_decal/corner/opaque/neutral/half{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, /area/ship/hallway/aft) "vI" = ( /obj/structure/cable{ @@ -1007,10 +935,15 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, -/obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/plastic, -/turf/open/floor/plasteel/tech, +/obj/structure/cable{ + icon_state = "1-5" + }, +/turf/open/floor/plasteel/dark, /area/ship/engineering/engine) +"vP" = ( +/turf/closed/wall/r_wall/rust, +/area/ship/bridge) "wi" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 @@ -1022,25 +955,24 @@ /obj/structure/cable{ icon_state = "0-1" }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/patterned, /area/ship/maintenance) "wj" = ( -/obj/effect/turf_decal/industrial/outline/red, -/obj/effect/decal/cleanable/dirt/dust, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 8 }, -/turf/open/floor/plasteel/tech, +/obj/structure/cable{ + icon_state = "4-5" + }, +/turf/open/floor/plasteel/patterned, /area/ship/cargo) "ws" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, +/turf/closed/wall, /area/ship/engineering/engine) "xk" = ( -/obj/effect/turf_decal/techfloor, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/light_switch{ dir = 8; pixel_x = 25; @@ -1049,6 +981,12 @@ /obj/item/kirbyplants{ icon_state = "plant-14" }, +/obj/structure/cable{ + icon_state = "5-9" + }, +/obj/effect/turf_decal/corner/opaque/neutral/three_quarters{ + dir = 4 + }, /turf/open/floor/plasteel/dark, /area/ship/hallway/central) "xo" = ( @@ -1060,9 +998,7 @@ pixel_x = 22; pixel_y = -6 }, -/turf/open/floor/wood/walnut{ - icon_state = "wood-broken7" - }, +/turf/open/floor/plasteel/grimy, /area/ship/crew) "xp" = ( /obj/structure/toilet{ @@ -1070,39 +1006,32 @@ }, /obj/machinery/light/dim/directional/south, /obj/structure/curtain, -/turf/open/floor/plasteel/showroomfloor, +/turf/open/floor/plasteel/patterned, /area/ship/crew/toilet) "xH" = ( -/obj/structure/table/reinforced{ - color = "#c1b6a5" - }, /obj/machinery/recharger{ pixel_y = 4 }, -/turf/open/floor/plasteel/tech, +/obj/structure/table/reinforced, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "xU" = ( -/obj/effect/turf_decal/techfloor{ - dir = 4 - }, /obj/machinery/power/terminal{ dir = 1 }, /obj/structure/cable{ icon_state = "0-2" }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/small/directional/east{ bulb_power = 0.2 }, /turf/open/floor/plasteel/tech, /area/ship/engineering/engine) +"xZ" = ( +/turf/closed/wall/r_wall/rust, +/area/ship/engineering/engine) "yg" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/techfloor{ - dir = 1 - }, /obj/structure/extinguisher_cabinet/directional/west{ pixel_y = -5 }, @@ -1114,24 +1043,23 @@ pixel_x = -22; pixel_y = 6 }, -/turf/open/floor/plasteel/tech, +/obj/effect/turf_decal/corner/opaque/neutral/half, +/turf/open/floor/plasteel/dark, /area/ship/hallway/aft) "yv" = ( -/obj/structure/window/plasma/reinforced/plastitanium, /obj/structure/grille, /obj/machinery/door/poddoor/shutters{ id = "mudskipper_window" }, +/obj/structure/window/fulltile, /turf/open/floor/plating, /area/ship/cargo) "yB" = ( -/obj/effect/turf_decal/techfloor, /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable{ icon_state = "0-1" }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "yS" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, @@ -1140,10 +1068,14 @@ /obj/structure/cable{ icon_state = "0-1" }, -/turf/open/floor/plasteel/grimy, +/obj/effect/turf_decal/corner/transparent/beige/full, +/obj/effect/turf_decal/corner/transparent/brown/diagonal, +/turf/open/floor/plasteel, +/area/ship/hallway/aft) +"yV" = ( +/turf/closed/wall/r_wall/rust, /area/ship/hallway/aft) "yY" = ( -/obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/dim/directional/west{ bulb_power = 0.5 }, @@ -1151,63 +1083,68 @@ dir = 1 }, /obj/machinery/portable_atmospherics/canister/toxins, -/obj/effect/turf_decal/techfloor{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/tech, /area/ship/engineering/engine) "zx" = ( /obj/machinery/atmospherics/components/unary/shuttle/heater{ dir = 4 }, -/obj/structure/window/reinforced/spawner/west, -/obj/structure/window/reinforced/spawner/north, -/obj/structure/window/reinforced/spawner, -/obj/structure/window/reinforced/spawner/east, -/obj/machinery/door/poddoor/shutters{ +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/door/poddoor{ dir = 4; id = "mudskipper_engine" }, +/obj/structure/window/reinforced{ + dir = 8 + }, /turf/open/floor/plating, /area/ship/engineering/engine) "zR" = ( -/obj/effect/decal/cleanable/dirt/dust, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 8 }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2, -/turf/open/floor/plasteel/grimy, +/obj/structure/cable{ + icon_state = "4-9" + }, +/obj/effect/turf_decal/corner/transparent/beige/full, +/obj/effect/turf_decal/corner/transparent/brown/diagonal, +/turf/open/floor/plasteel, /area/ship/hallway/aft) "zW" = ( /obj/structure/cable{ icon_state = "1-8" }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/structure/catwalk/over/plated_catwalk/dark, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 9 }, -/turf/open/floor/plating, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned, /area/ship/crew/cryo) "zX" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, +/turf/closed/wall/r_wall/rust, /area/ship/crew/cryo) +"Ag" = ( +/turf/closed/wall/r_wall, +/area/ship/hallway/aft) "Ak" = ( /obj/structure/chair/comfy/shuttle{ dir = 4 }, -/obj/effect/turf_decal/box, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, -/turf/open/floor/plasteel/tech, +/turf/open/floor/plasteel/dark, /area/ship/bridge) "AN" = ( -/obj/structure/catwalk/over/plated_catwalk/dark, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ dir = 4 }, @@ -1215,9 +1152,6 @@ dir = 9 }, /obj/structure/extinguisher_cabinet/directional/east, -/obj/structure/cable{ - icon_state = "1-8" - }, /obj/structure/cable{ icon_state = "2-8" }, @@ -1226,11 +1160,13 @@ pixel_x = 22; pixel_y = -14 }, +/obj/structure/cable{ + icon_state = "1-10" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, /turf/open/floor/plating, /area/ship/engineering/engine) "Bj" = ( -/obj/effect/turf_decal/corner_techfloor_grid, -/obj/effect/turf_decal/techfloor/corner, /obj/effect/decal/cleanable/dirt/dust, /obj/structure/sign/poster/contraband/hacking_guide{ pixel_y = -32 @@ -1240,27 +1176,27 @@ dir = 8 }, /obj/structure/reagent_dispensers/watertank, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/dark, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "Bn" = ( /obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/layer4, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/techfloor{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, +/obj/effect/turf_decal/industrial/warning, +/turf/open/floor/plasteel/tech/techmaint, /area/ship/hallway/aft) "Bw" = ( -/obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/oil{ icon_state = "floor4" }, -/turf/open/floor/plasteel/tech, +/obj/effect/turf_decal/borderfloor{ + dir = 5 + }, +/turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "BA" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ @@ -1272,10 +1208,8 @@ /obj/machinery/advanced_airlock_controller{ pixel_y = 24 }, -/obj/effect/turf_decal/techfloor{ - dir = 9 - }, -/turf/open/floor/plasteel/dark, +/obj/structure/chair/handrail, +/turf/open/floor/plasteel/tech/techmaint, /area/ship/hallway/aft) "BW" = ( /obj/effect/turf_decal/box, @@ -1295,7 +1229,8 @@ /obj/item/storage/pill_bottle/charcoal/less, /obj/item/reagent_containers/hypospray/medipen/penacid, /obj/item/reagent_containers/hypospray/medipen/penacid, -/turf/open/floor/plasteel/tech, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "Ch" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ @@ -1307,7 +1242,7 @@ /obj/structure/cable{ icon_state = "1-4" }, -/turf/open/floor/plasteel/showroomfloor, +/turf/open/floor/plasteel/patterned, /area/ship/crew/toilet) "Cr" = ( /obj/structure/table/reinforced, @@ -1315,36 +1250,34 @@ dir = 6 }, /obj/effect/decal/cleanable/dirt/dust, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, /turf/open/floor/plasteel/tech/grid, /area/ship/hallway/aft) +"Cv" = ( +/turf/closed/wall/r_wall, +/area/ship/maintenance) "CG" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/item/clothing/suit/space/eva, /obj/item/clothing/head/helmet/space/eva, /obj/machinery/suit_storage_unit/inherit/industrial, +/obj/effect/turf_decal/industrial/warning{ + dir = 9 + }, /turf/open/floor/plasteel/tech/grid, /area/ship/hallway/aft) "Dj" = ( -/obj/effect/turf_decal/borderfloor/full, -/obj/effect/turf_decal/industrial/traffic{ - dir = 1 - }, -/obj/effect/turf_decal/industrial/traffic, -/obj/effect/decal/cleanable/dirt/dust, /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/tech/techmaint, +/obj/structure/cable{ + icon_state = "5-8" + }, +/turf/open/floor/plasteel/patterned, /area/ship/cargo) "Dp" = ( -/obj/effect/turf_decal/siding/wood{ - color = "#543C30"; - dir = 1 - }, -/obj/effect/turf_decal/siding/wood{ - color = "#543C30" - }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ dir = 1 }, @@ -1352,14 +1285,18 @@ dir = 1 }, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "2-8" }, -/turf/open/floor/wood/walnut{ - icon_state = "wood-broken2" +/obj/structure/cable{ + icon_state = "2-9" }, +/obj/effect/turf_decal/corner/opaque/bottlegreen/full, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"DA" = ( +/turf/closed/wall/r_wall, /area/ship/bridge) "DC" = ( -/obj/structure/catwalk/over/plated_catwalk/dark, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ dir = 1 }, @@ -1370,59 +1307,47 @@ icon_state = "2-8" }, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "6-8" }, +/obj/structure/catwalk/over/plated_catwalk, /turf/open/floor/plating, /area/ship/hallway/central) "DS" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/techfloor{ - dir = 1 - }, /obj/item/kirbyplants{ icon_state = "plant-21" }, /obj/machinery/light_switch{ - pixel_y = 23; - pixel_x = -3 + pixel_x = -3; + pixel_y = 23 + }, +/obj/effect/turf_decal/corner/opaque/neutral/three_quarters{ + dir = 1 }, /turf/open/floor/plasteel/dark, /area/ship/hallway/central) +"DU" = ( +/turf/closed/wall/r_wall, +/area/ship/crew/cryo) "Ed" = ( -/obj/effect/turf_decal/corner_techfloor_grid{ - dir = 1 - }, -/obj/effect/turf_decal/techfloor/corner{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ dir = 8 }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/patterned, /area/ship/cargo) "Eg" = ( -/obj/effect/turf_decal/techfloor{ - dir = 4 - }, /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/door/firedoor/border_only{ dir = 8 }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/number/eight{ dir = 4 }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/mono{ + dir = 1 + }, /area/ship/cargo) "Ey" = ( -/obj/effect/turf_decal/siding/wood{ - color = "#543C30"; - dir = 10 - }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ dir = 8 }, @@ -1433,39 +1358,37 @@ icon_state = "2-4" }, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "2-9" }, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/carpet, /area/ship/crew) "EP" = ( -/obj/effect/turf_decal/techfloor{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt/dust, /obj/machinery/door/firedoor/border_only{ dir = 8 }, -/obj/structure/cable{ - icon_state = "1-4" - }, /obj/machinery/button/shieldwallgen{ dir = 1; - pixel_x = -6; - pixel_y = -21; id = "mudskipper_shield"; - name = "Cargo Holofield" + name = "Cargo Holofield"; + pixel_x = -6; + pixel_y = -21 }, /obj/machinery/button/door{ dir = 1; - pixel_x = 6; - pixel_y = -21; id = "mudskipper_door"; - name = "Cargo Door" + name = "Cargo Door"; + pixel_x = 6; + pixel_y = -21 }, /obj/effect/turf_decal/number/six{ dir = 8 }, -/turf/open/floor/plasteel/dark, +/obj/structure/cable{ + icon_state = "4-9" + }, +/turf/open/floor/plasteel/mono{ + dir = 1 + }, /area/ship/cargo) "EQ" = ( /obj/structure/tank_dispenser/oxygen, @@ -1474,19 +1397,21 @@ }, /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/dim/directional/north, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, /turf/open/floor/plasteel/tech/grid, /area/ship/hallway/aft) "Ft" = ( /obj/structure/bed, /obj/item/bedsheet/dorms, /obj/structure/curtain/bounty, -/obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light_switch{ dir = 1; - pixel_y = -21; - pixel_x = 3 + pixel_x = 3; + pixel_y = -21 }, -/turf/open/floor/wood/walnut, +/turf/open/floor/plasteel/grimy, /area/ship/crew) "FN" = ( /obj/machinery/suit_storage_unit/inherit, @@ -1496,39 +1421,38 @@ }, /obj/item/clothing/suit/space/engineer, /obj/item/clothing/head/helmet/space/light/engineer, +/obj/effect/turf_decal/borderfloor{ + dir = 4 + }, /turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "Gk" = ( -/obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, /obj/machinery/door/poddoor/shutters/preopen{ dir = 4; id = "mudskipper_bridge" }, +/obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/ship/bridge) "Gq" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, +/turf/closed/wall, /area/ship/crew) "GI" = ( /obj/machinery/cryopod{ - dir = 1 - }, -/obj/effect/turf_decal/techfloor{ - dir = 9 + dir = 8 }, -/obj/effect/turf_decal/industrial/hatch/yellow, /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/airalarm/directional/south, -/turf/open/floor/plasteel/dark, +/obj/effect/turf_decal/box, +/turf/open/floor/plasteel/tech/grid, /area/ship/crew/cryo) "GW" = ( -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/wood/walnut{ - icon_state = "wood-broken7" +/obj/structure/cable{ + icon_state = "6-10" }, +/turf/open/floor/plasteel/grimy, /area/ship/crew) "Hk" = ( -/obj/structure/catwalk/over/plated_catwalk/dark, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 6 }, @@ -1538,37 +1462,29 @@ /obj/structure/cable{ icon_state = "2-4" }, -/turf/open/floor/plating, +/turf/open/floor/plasteel/dark, /area/ship/engineering/engine) "Id" = ( -/obj/effect/turf_decal/techfloor{ - dir = 8 - }, /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/table/reinforced{ - color = "#c1b6a5" - }, /obj/item/stack/sheet/metal/five{ pixel_y = 3 }, /obj/item/stack/sheet/glass/five{ pixel_y = 6 }, -/turf/open/floor/plasteel/dark, +/obj/structure/table/reinforced, +/turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "IL" = ( -/obj/structure/catwalk/over/plated_catwalk/dark, /obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer2, /obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "1-8" + icon_state = "2-8" }, /obj/structure/cable{ - icon_state = "2-8" + icon_state = "4-8" }, +/obj/structure/catwalk/over/plated_catwalk, /turf/open/floor/plating, /area/ship/hallway/central) "IP" = ( @@ -1587,18 +1503,17 @@ pixel_y = 3 }, /obj/item/radio{ - pixel_y = 3; - pixel_x = -6 + pixel_x = -6; + pixel_y = 3 }, /obj/item/radio{ - pixel_y = 3; - pixel_x = -6 + pixel_x = -6; + pixel_y = 3 }, /turf/open/floor/plasteel/tech/grid, /area/ship/crew/cryo) "IU" = ( -/obj/structure/catwalk, -/turf/open/floor/engine/airless, +/turf/open/floor/engine/hull, /area/ship/external/dark) "JN" = ( /obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/layer2{ @@ -1607,14 +1522,13 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 8 }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/techfloor{ - dir = 1 +/obj/effect/turf_decal/industrial/warning{ + dir = 4 }, -/turf/open/floor/plasteel/dark, +/obj/structure/chair/handrail, +/turf/open/floor/plasteel/tech/techmaint, /area/ship/hallway/aft) "JS" = ( -/obj/effect/decal/cleanable/dirt/dust, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ dir = 8 }, @@ -1624,10 +1538,9 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/turf/open/floor/plasteel/grimy, +/obj/effect/turf_decal/corner/transparent/beige/full, +/obj/effect/turf_decal/corner/transparent/brown/diagonal, +/turf/open/floor/plasteel, /area/ship/hallway/aft) "Kt" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ @@ -1636,14 +1549,19 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 9 }, -/turf/open/floor/plasteel/grimy, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/turf_decal/corner/transparent/beige/full, +/obj/effect/turf_decal/corner/transparent/brown/diagonal, +/turf/open/floor/plasteel, /area/ship/hallway/aft) "KA" = ( /obj/structure/window/reinforced/spawner, /obj/item/paper_bin, /obj/item/analyzer{ - pixel_y = 3; - pixel_x = 13 + pixel_x = 13; + pixel_y = 3 }, /obj/item/pen, /obj/structure/cable{ @@ -1652,17 +1570,14 @@ /obj/structure/cable{ icon_state = "1-8" }, -/obj/structure/table/reinforced{ - color = "#c1b6a5" - }, -/turf/open/floor/plasteel/tech/grid, +/obj/structure/table/reinforced, +/turf/open/floor/plasteel/tech, /area/ship/engineering/engine) "KT" = ( /obj/machinery/washing_machine, -/obj/effect/turf_decal/techfloor{ - dir = 6 - }, -/turf/open/floor/plasteel/tech/grid, +/obj/effect/turf_decal/box, +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel/patterned, /area/ship/maintenance) "KU" = ( /obj/machinery/power/apc/auto_name/directional/north, @@ -1670,11 +1585,14 @@ /obj/structure/cable{ icon_state = "0-2" }, -/obj/effect/turf_decal/techfloor{ - dir = 1 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/plasteel/dark, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/chair/handrail{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned, /area/ship/crew/cryo) "Lw" = ( /obj/machinery/firealarm/directional/west{ @@ -1685,40 +1603,51 @@ pixel_x = -22; pixel_y = -9 }, -/obj/effect/turf_decal/techfloor, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, /obj/machinery/computer/cryopod/retro/directional/south, -/turf/open/floor/plasteel/dark, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/chair/handrail{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned, /area/ship/crew/cryo) "LV" = ( -/obj/structure/catwalk/over/plated_catwalk/dark, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 8 }, -/obj/structure/cable{ - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ dir = 1 }, +/obj/structure/catwalk/over/plated_catwalk, /turf/open/floor/plating, /area/ship/hallway/central) +"LY" = ( +/obj/effect/turf_decal/corner/opaque/neutral/half, +/obj/effect/decal/cleanable/dirt/dust, +/obj/structure/closet/emcloset, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) "Mf" = ( /turf/template_noop, /area/space) "Mi" = ( -/obj/structure/catwalk/over/plated_catwalk/dark, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 8 }, -/obj/structure/cable{ - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer2{ dir = 1 }, +/obj/structure/cable{ + icon_state = "6-8" + }, +/obj/structure/cable{ + icon_state = "4-10" + }, +/obj/structure/catwalk/over/plated_catwalk, /turf/open/floor/plating, /area/ship/hallway/central) "MB" = ( @@ -1734,38 +1663,33 @@ /obj/machinery/power/smes/shuttle/precharged{ dir = 4 }, -/obj/structure/window/reinforced/spawner/west, -/obj/machinery/door/window/eastright{ - layer = 3.1 - }, /obj/structure/cable{ icon_state = "0-8" }, -/obj/machinery/door/poddoor/shutters{ +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/door/poddoor{ dir = 4; id = "mudskipper_engine" }, +/obj/structure/window/reinforced{ + dir = 8 + }, /turf/open/floor/plating, /area/ship/engineering/engine) "MK" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, +/turf/closed/wall, /area/ship/maintenance) +"Ne" = ( +/turf/closed/wall/rust, +/area/ship/crew) "Ni" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/turf_decal/industrial/warning, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/tech, +/obj/effect/turf_decal/corner/transparent/beige/full, +/obj/effect/turf_decal/corner/transparent/brown/diagonal, +/turf/open/floor/plasteel, /area/ship/hallway/aft) "Nj" = ( /obj/machinery/door/airlock/external{ @@ -1777,12 +1701,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 4 }, -/obj/effect/turf_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 8 - }, +/obj/effect/turf_decal/industrial/warning/fulltile, /turf/open/floor/plasteel/tech, /area/ship/hallway/aft) "Nl" = ( @@ -1790,7 +1709,7 @@ dir = 4 }, /obj/machinery/light/floor, -/turf/open/floor/engine/hull/reinforced, +/turf/open/floor/engine/hull, /area/ship/cargo) "NJ" = ( /obj/effect/turf_decal/box, @@ -1812,52 +1731,50 @@ /obj/item/reagent_containers/food/drinks/waterbottle, /obj/item/reagent_containers/food/drinks/waterbottle, /obj/item/reagent_containers/food/drinks/waterbottle, -/turf/open/floor/plasteel/tech, +/obj/structure/cable{ + icon_state = "1-6" + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "NN" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/turf/open/floor/plasteel/tech, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/corner/transparent/beige/full, +/obj/effect/turf_decal/corner/transparent/brown/diagonal, +/turf/open/floor/plasteel, /area/ship/hallway/aft) "NU" = ( -/obj/effect/turf_decal/techfloor{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt/dust, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "Oc" = ( /obj/item/paper_bin, -/obj/structure/table/reinforced{ - color = "#c1b6a5" - }, -/turf/open/floor/plasteel/tech/grid, +/obj/structure/table/reinforced, +/obj/effect/turf_decal/corner/opaque/bottlegreen/full, +/turf/open/floor/plasteel/dark, /area/ship/bridge) "OB" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, +/turf/closed/wall, /area/ship/bridge) "OD" = ( -/obj/structure/chair{ +/obj/machinery/airalarm/directional/east, +/obj/structure/chair/plastic{ dir = 8 }, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/plasteel/tech, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) +"OR" = ( +/turf/closed/wall/r_wall, +/area/ship/crew) "Pr" = ( -/obj/machinery/door/airlock/grunge{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 8 }, -/obj/effect/turf_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 4 - }, /obj/machinery/door/firedoor/border_only{ dir = 8 }, @@ -1870,66 +1787,66 @@ /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plasteel/tech, +/obj/effect/turf_decal/industrial/warning/fulltile, +/obj/machinery/door/airlock/public/glass{ + dir = 4; + name = "Canteen" + }, +/turf/open/floor/plasteel/dark, /area/ship/hallway/central) "PO" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/techfloor/corner{ - dir = 8 - }, -/obj/effect/turf_decal/techfloor/corner, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-8" }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel, /area/ship/hallway/central) "PR" = ( -/obj/structure/window/plasma/reinforced/plastitanium, /obj/structure/grille, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/door/poddoor/shutters{ id = "mudskipper_window" }, +/obj/structure/window/fulltile, /turf/open/floor/plating, /area/ship/hallway/aft) "PU" = ( -/obj/effect/turf_decal/techfloor{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "Qp" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, +/turf/closed/wall, /area/ship/hallway/aft) "Qt" = ( -/obj/structure/window/plasma/reinforced/plastitanium, /obj/structure/grille, /obj/machinery/atmospherics/pipe/layer_manifold, /obj/machinery/door/poddoor/shutters{ id = "mudskipper_window" }, +/obj/structure/window/fulltile, /turf/open/floor/plating, /area/ship/engineering/engine) "Qu" = ( /obj/machinery/autolathe/hacked, -/turf/open/floor/plasteel/tech, +/obj/effect/turf_decal/borderfloor{ + dir = 4 + }, +/turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "Qx" = ( /obj/effect/decal/cleanable/glass, -/obj/effect/turf_decal/techfloor/corner{ - dir = 8 - }, -/obj/effect/turf_decal/techfloor/corner, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "1-9" }, -/turf/open/floor/plasteel/dark, +/obj/structure/cable{ + icon_state = "2-5" + }, +/turf/open/floor/plasteel, /area/ship/hallway/central) "QF" = ( /obj/machinery/power/terminal{ @@ -1938,10 +1855,6 @@ /obj/structure/cable{ icon_state = "0-4" }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/techfloor{ - dir = 8 - }, /turf/open/floor/plasteel/dark, /area/ship/engineering/engine) "Rc" = ( @@ -1951,38 +1864,39 @@ }, /obj/machinery/button/door{ dir = 1; - pixel_x = 6; - pixel_y = -21; id = "mudskipper_window"; - name = "Window Shutters" + name = "Window Shutters"; + pixel_x = 6; + pixel_y = -21 }, /obj/machinery/light/small/directional/west{ - pixel_y = -6; - bulb_power = 0.6 + bulb_power = 0.6; + pixel_y = -6 + }, +/obj/effect/turf_decal/corner/opaque/neutral/three_quarters{ + dir = 8 }, /turf/open/floor/plasteel/dark, /area/ship/bridge) "Rl" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/table, -/obj/effect/turf_decal/siding/wood{ - color = "#543C30"; - dir = 8 - }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = 10; pixel_y = 5 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 18; pixel_y = 2 }, /obj/item/paper/pamphlet{ + name = "Salvage And You"; pixel_x = -3; - pixel_y = 2; - name = "Salvage And You" + pixel_y = 2 }, -/turf/open/floor/wood/walnut, +/obj/effect/turf_decal/corner/transparent/beige/full, +/obj/effect/turf_decal/corner/transparent/brown/diagonal, +/turf/open/floor/plasteel, /area/ship/hallway/aft) "Rn" = ( /obj/machinery/door/firedoor/border_only, @@ -1994,15 +1908,16 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/door/airlock/grunge{ - name = "Utility Closet" +/obj/machinery/door/airlock{ + name = "Custodial Closet" }, -/turf/open/floor/plasteel/tech, +/obj/effect/turf_decal/industrial/warning/fulltile, +/turf/open/floor/plasteel/dark, /area/ship/maintenance) "Rv" = ( /obj/item/gps/mining{ - pixel_y = 6; - gpstag = "SCAV0" + gpstag = "SCAV0"; + pixel_y = 6 }, /obj/item/clipboard{ pixel_x = 5; @@ -2020,10 +1935,8 @@ pixel_y = 32 }, /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/table/reinforced{ - color = "#c1b6a5" - }, -/turf/open/floor/plasteel/tech/grid, +/obj/structure/table/reinforced, +/turf/open/floor/plasteel/dark, /area/ship/bridge) "RR" = ( /obj/structure/tank_dispenser/oxygen, @@ -2034,19 +1947,14 @@ /obj/structure/filingcabinet/double, /obj/item/folder, /obj/machinery/light/small/directional/west{ - pixel_y = 6; - bulb_power = 0.6 + bulb_power = 0.6; + pixel_y = 6 }, +/obj/effect/turf_decal/corner/opaque/neutral/three_quarters, +/obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel/dark, /area/ship/bridge) "So" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/turf_decal/industrial/warning, -/obj/machinery/door/airlock{ - name = "Crew Quarters" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, /obj/machinery/door/firedoor/border_only{ dir = 1 @@ -2056,7 +1964,11 @@ /obj/structure/cable{ icon_state = "1-2" }, -/turf/open/floor/plasteel/tech, +/obj/effect/turf_decal/industrial/warning/fulltile, +/obj/machinery/door/airlock{ + name = "Dormitory" + }, +/turf/open/floor/plasteel/dark, /area/ship/crew) "Sq" = ( /obj/structure/curtain, @@ -2069,10 +1981,6 @@ /turf/open/floor/plasteel/showroomfloor, /area/ship/crew/toilet) "ST" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/techfloor{ - dir = 1 - }, /obj/item/storage/cans/sixbeer, /obj/effect/spawner/lootdrop/donkpockets, /obj/structure/closet/secure_closet/freezer{ @@ -2081,17 +1989,18 @@ }, /obj/item/reagent_containers/food/snacks/meat/slab, /obj/item/reagent_containers/food/snacks/meat/slab, -/turf/open/floor/plasteel/tech, +/obj/effect/turf_decal/corner/opaque/neutral/half, +/obj/effect/decal/cleanable/dirt/dust, +/turf/open/floor/plasteel/dark, /area/ship/hallway/aft) "Ti" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ dir = 4; name = "airlock waste injector" }, -/turf/open/floor/engine/hull/reinforced, +/turf/open/floor/engine/hull, /area/ship/external/dark) "Tn" = ( -/obj/structure/catwalk/over/plated_catwalk/dark, /obj/structure/cable{ icon_state = "1-2" }, @@ -2104,19 +2013,10 @@ /obj/structure/cable{ icon_state = "2-4" }, +/obj/structure/catwalk/over/plated_catwalk/dark, /turf/open/floor/plating, /area/ship/engineering/engine) "TV" = ( -/obj/machinery/door/airlock/grunge{ - dir = 4; - name = "Cargo Bay" - }, -/obj/effect/turf_decal/industrial/traffic{ - dir = 4 - }, -/obj/effect/turf_decal/industrial/traffic{ - dir = 8 - }, /obj/machinery/door/firedoor/border_only{ dir = 4 }, @@ -2132,7 +2032,15 @@ /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plasteel/tech, +/obj/structure/cable{ + icon_state = "5-10" + }, +/obj/machinery/door/airlock/mining{ + dir = 8; + name = "Cargo Bay" + }, +/obj/effect/turf_decal/industrial/warning/fulltile, +/turf/open/floor/plasteel/dark, /area/ship/hallway/central) "Ud" = ( /obj/effect/turf_decal/box, @@ -2144,6 +2052,7 @@ pixel_y = -5 }, /obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/tech, /area/ship/engineering/engine) "Ui" = ( @@ -2151,8 +2060,11 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 1 }, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/plasteel/dark, /area/ship/bridge) +"Uo" = ( +/turf/closed/wall/r_wall/yesdiag, +/area/ship/crew/cryo) "UF" = ( /obj/machinery/door/airlock/engineering{ dir = 4; @@ -2164,12 +2076,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 8 }, -/obj/effect/turf_decal/industrial/warning{ - dir = 4 - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 8 - }, /obj/machinery/door/firedoor/border_only{ dir = 8 }, @@ -2179,7 +2085,8 @@ /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plasteel/tech, +/obj/effect/turf_decal/industrial/warning/fulltile, +/turf/open/floor/plasteel/dark, /area/ship/bridge) "UL" = ( /obj/machinery/suit_storage_unit/inherit, @@ -2187,6 +2094,10 @@ /obj/machinery/light/directional/west, /obj/item/clothing/suit/space/engineer, /obj/item/clothing/head/helmet/space/light/engineer, +/obj/effect/turf_decal/borderfloor{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "UZ" = ( @@ -2196,16 +2107,17 @@ /obj/item/flashlight/lamp/green{ pixel_y = 4 }, -/turf/open/floor/wood/walnut, +/obj/structure/cable{ + icon_state = "5-6" + }, +/turf/open/floor/plasteel/grimy, /area/ship/crew) "Vn" = ( /obj/machinery/vending/cigarette, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/wrapping, -/obj/effect/turf_decal/techfloor{ - dir = 1 - }, +/obj/effect/turf_decal/corner/opaque/neutral/half, /turf/open/floor/plasteel/dark, /area/ship/hallway/central) "Vo" = ( @@ -2216,11 +2128,6 @@ /obj/structure/cable{ icon_state = "0-4" }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/techfloor{ - dir = 8 - }, /turf/open/floor/plasteel/dark, /area/ship/engineering/engine) "Vy" = ( @@ -2229,38 +2136,23 @@ /obj/structure/curtain/bounty, /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/light/dim/directional/north, -/turf/open/floor/wood/walnut, +/turf/open/floor/plasteel/grimy, /area/ship/crew) "VP" = ( -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/techfloor/corner{ - dir = 4 - }, -/obj/effect/turf_decal/techfloor/corner{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "1-10" }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel, /area/ship/hallway/central) "VW" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, +/turf/closed/wall, /area/ship/external/dark) +"Wk" = ( +/turf/closed/wall/rust, +/area/ship/maintenance) "Wm" = ( -/obj/machinery/door/airlock/grunge{ - dir = 4; - name = "Cryogenic Storage" - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 8 - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 4 }, @@ -2270,7 +2162,12 @@ /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plasteel/tech, +/obj/effect/turf_decal/industrial/warning/fulltile, +/obj/machinery/door/airlock{ + dir = 4; + name = "Cryo Room" + }, +/turf/open/floor/plasteel/dark, /area/ship/crew) "Wz" = ( /obj/structure/sink{ @@ -2285,7 +2182,7 @@ /obj/structure/window/reinforced/tinted/frosted{ dir = 8 }, -/turf/open/floor/plasteel/showroomfloor, +/turf/open/floor/plasteel/patterned, /area/ship/crew/toilet) "Xc" = ( /obj/machinery/blackbox_recorder, @@ -2293,35 +2190,46 @@ /obj/machinery/light/small/directional/north{ pixel_x = -6 }, +/obj/effect/turf_decal/box, /turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) "Xh" = ( /obj/structure/table/reinforced, -/obj/effect/turf_decal/techfloor, /obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable{ icon_state = "0-1" }, +/obj/effect/turf_decal/corner/opaque/neutral/three_quarters{ + dir = 8 + }, /turf/open/floor/plasteel/dark, /area/ship/hallway/central) "Xk" = ( -/obj/effect/turf_decal/industrial/outline/red, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/tech, +/obj/structure/cable{ + icon_state = "1-10" + }, +/obj/structure/cable{ + icon_state = "5-8" + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned, /area/ship/cargo) "Xm" = ( -/obj/structure/window/plasma/reinforced/plastitanium, /obj/structure/grille, /obj/machinery/door/poddoor/shutters{ id = "mudskipper_window" }, +/obj/structure/window/fulltile, /turf/open/floor/plating, /area/ship/hallway/aft) +"XI" = ( +/turf/closed/wall/r_wall/rust, +/area/ship/cargo) "XK" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer4{ dir = 1 @@ -2330,26 +2238,22 @@ dir = 10 }, /obj/structure/cable{ - icon_state = "2-8" + icon_state = "6-8" }, -/turf/open/floor/plasteel/dark, +/obj/effect/turf_decal/corner/transparent/beige/full, +/obj/effect/turf_decal/corner/transparent/brown/diagonal, +/turf/open/floor/plasteel, /area/ship/hallway/aft) "XU" = ( -/obj/structure/chair{ +/obj/effect/turf_decal/corner/transparent/beige/full, +/obj/effect/turf_decal/corner/transparent/brown/diagonal, +/obj/structure/chair/plastic{ dir = 1 }, -/obj/effect/turf_decal/siding/wood{ - color = "#543C30" - }, -/obj/effect/turf_decal/siding/wood{ - dir = 10; - color = "#543C30" - }, -/turf/open/floor/wood/walnut, +/turf/open/floor/plasteel, /area/ship/hallway/aft) "Yc" = ( /obj/effect/turf_decal/box, -/obj/effect/decal/cleanable/dirt/dust, /obj/structure/rack, /obj/item/gps/mining{ gpstag = "SCAV1" @@ -2363,20 +2267,23 @@ /obj/item/gps/mining{ gpstag = "SCAV1" }, -/obj/item/kitchen/knife/combat/survival, -/obj/item/kitchen/knife/combat/survival, +/obj/item/melee/knife/survival, +/obj/item/melee/knife/survival, /obj/item/flashlight/seclite, /obj/item/flashlight/seclite, -/turf/open/floor/plasteel/tech, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "Yd" = ( -/obj/structure/window/plasma/reinforced/plastitanium, /obj/structure/grille, /obj/machinery/door/poddoor/shutters{ id = "mudskipper_window" }, +/obj/structure/window/fulltile, /turf/open/floor/plating, /area/ship/crew) +"Yi" = ( +/turf/closed/wall/r_wall/yesdiag, +/area/ship/maintenance) "Yq" = ( /obj/effect/decal/cleanable/oil{ icon_state = "floor4" @@ -2386,45 +2293,40 @@ target_pressure = 1000 }, /obj/machinery/atmospherics/components/binary/volume_pump/layer2{ - name = "Scrubbers to External"; - dir = 1 + dir = 1; + name = "Scrubbers to External" }, /obj/structure/cable{ icon_state = "2-8" }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel/tech, +/turf/open/floor/plasteel/dark, +/area/ship/engineering/engine) +"Yu" = ( +/turf/closed/wall/r_wall, /area/ship/engineering/engine) "Yv" = ( /obj/structure/closet/crate/bin, /obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/techfloor{ - dir = 1 - }, /obj/machinery/firealarm/directional/east{ pixel_y = -5 }, /obj/machinery/light/dim/directional/north, +/obj/effect/turf_decal/corner/opaque/neutral/half, /turf/open/floor/plasteel/dark, /area/ship/hallway/central) "YK" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 1 +/obj/structure/cable{ + icon_state = "2-9" }, -/obj/effect/turf_decal/industrial/warning, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 +/obj/effect/turf_decal/corner/transparent/beige/full, +/obj/effect/turf_decal/corner/transparent/brown/diagonal, +/obj/structure/chair/handrail{ + dir = 8 }, -/turf/open/floor/plasteel/tech, +/turf/open/floor/plasteel, /area/ship/hallway/aft) "YL" = ( /obj/machinery/power/port_gen/pacman, -/obj/effect/turf_decal/techfloor{ - dir = 6 - }, /obj/structure/cable{ icon_state = "0-1" }, @@ -2434,7 +2336,6 @@ /area/ship/engineering/engine) "Zi" = ( /obj/effect/decal/cleanable/dirt/dust, -/obj/structure/catwalk/over/plated_catwalk/dark, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer4{ dir = 8 }, @@ -2442,39 +2343,33 @@ dir = 8 }, /obj/structure/cable{ - icon_state = "2-8" + icon_state = "1-2" }, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-4" }, +/obj/structure/catwalk/over/plated_catwalk, /turf/open/floor/plating, /area/ship/cargo) +"Zx" = ( +/turf/closed/wall/r_wall/rust, +/area/ship/crew) "ZC" = ( -/obj/effect/turf_decal/siding/wood{ - color = "#543C30"; - dir = 9 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ dir = 6 }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plasteel/grimy, +/turf/open/floor/carpet, /area/ship/crew) "ZJ" = ( -/obj/structure/chair{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/turf_decal/techfloor, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, /obj/machinery/airalarm/directional/south, -/turf/open/floor/plasteel/dark, +/obj/structure/chair/plastic{ + dir = 1 + }, +/turf/open/floor/plasteel, /area/ship/hallway/central) (1,1,1) = {" @@ -2489,7 +2384,7 @@ ag ag lj ag -ws +jz cs cs cs @@ -2500,16 +2395,16 @@ cs cs hX IU -ws -ws -bZ +Yu +Yu +MF zx -bZ +MF MF zx MF -ws -ws +xZ +Yu IU hX cs @@ -2519,7 +2414,7 @@ cs cs hX cs -ws +Yu kX QF en @@ -2528,7 +2423,7 @@ Vo qE ao yY -ws +Yu cs hX cs @@ -2547,7 +2442,7 @@ KA eu hY sI -ws +Yu IU hX hX @@ -2557,7 +2452,7 @@ cs hX cs cs -ws +xZ Ud Hk AN @@ -2566,7 +2461,7 @@ dw hr xU YL -ws +Yu cs cs hX @@ -2575,18 +2470,18 @@ cs (6,1,1) = {" hX IU -OB -OB +DA +DA OB UF OB +js +js OB -OB -OB -OB -Qp -Qp +js Qp +Ag +Ag Ti hX cs @@ -2594,7 +2489,7 @@ cs (7,1,1) = {" cs cs -OB +DA Xc ic ak @@ -2613,7 +2508,7 @@ cs (8,1,1) = {" cs cs -OB +DA Rv Oc Dp @@ -2632,18 +2527,18 @@ MB (9,1,1) = {" cs cs -OB +vP nM rr oC -OB +js dN sf qy OB JN CG -Qp +Ag IU cs cs @@ -2651,8 +2546,8 @@ cs (10,1,1) = {" hX IU -OB -OB +DA +DA OB oG OB @@ -2661,8 +2556,8 @@ Gk Gk OB Nj -Qp -Qp +yV +Ag IU hX cs @@ -2709,7 +2604,7 @@ cs hX cs cs -Qp +Ag sT vn Qp @@ -2718,7 +2613,7 @@ ar sa eL gT -Qp +Ag cs cs hX @@ -2727,9 +2622,9 @@ cs (14,1,1) = {" hX IU -Gq -Gq -Gq +OR +OR +Ne Gq Gq dc @@ -2737,8 +2632,8 @@ Pr dc oU oU -oU -oU +rG +rG IU hX cs @@ -2746,7 +2641,7 @@ cs (15,1,1) = {" cs cs -Gq +OR Vy UZ Ft @@ -2757,7 +2652,7 @@ Xh oU kB xp -oU +rG cs cs cs @@ -2776,7 +2671,7 @@ Qx mt Ch Wz -oU +lg cs cs cs @@ -2788,14 +2683,14 @@ Yd xo cB dQ -Gq +Ne DS Mi ZJ oU tK Sq -oU +lg IU hX cs @@ -2803,18 +2698,18 @@ cs (18,1,1) = {" hX cs -Gq +Zx Gq Wm Gq -Gq -dc +Ne +LY mC iY MK MK -MK -MK +Wk +Cv cs hX cs @@ -2826,14 +2721,14 @@ zX KU zW Lw -zX +ev Vn DC PO Rn wi pF -MK +Cv cs hX cs @@ -2841,18 +2736,18 @@ cs (20,1,1) = {" hX IU -zX +DU qN IP GI -zX +ev Yv LV xk MK cn KT -MK +Cv IU hX cs @@ -2860,18 +2755,18 @@ cs (21,1,1) = {" cs cs -zX -zX -zX -zX -zX +Uo +DU +ev +ev +ev dc TV dc MK MK -MK -MK +Cv +Yi cs cs cs @@ -2938,7 +2833,7 @@ cs hX IU mF -mF +XI uz gR Xk @@ -2983,7 +2878,7 @@ gB gB gB mS -mF +XI IU IU hX @@ -2995,7 +2890,7 @@ cs cs cs VW -hH +hn Nl kY ib @@ -3033,14 +2928,14 @@ cs cs cs cs -hH -hH +hn +hn cs cs cs cs hH -hH +hn cs cs cs @@ -3058,7 +2953,7 @@ cs cs cs cs -hH +hn cs cs cs diff --git a/_maps/shuttles/independent/independent_rigger.dmm b/_maps/shuttles/independent/independent_rigger.dmm index 42a9f999f3f7..d6cb54aed39c 100644 --- a/_maps/shuttles/independent/independent_rigger.dmm +++ b/_maps/shuttles/independent/independent_rigger.dmm @@ -241,8 +241,8 @@ /obj/item/storage/cans/sixbeer, /obj/effect/spawner/lootdrop/ration, /obj/effect/spawner/lootdrop/ration, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/sugar, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/sugar, /obj/item/radio/intercom/directional/north, /turf/open/floor/plasteel/white, /area/ship/crew/canteen) @@ -845,7 +845,7 @@ }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/door/airlock/mining/glass{ - name = "Mech Bay" + name = "Exosuit Bay" }, /turf/open/floor/plasteel/tech, /area/ship/cargo) @@ -869,7 +869,7 @@ "kG" = ( /obj/machinery/door/poddoor{ id = "riggs_cargo"; - name = "Mech Bay Blast Door" + name = "Exosuit Bay Blast Door" }, /turf/open/floor/engine/hull/interior, /area/ship/cargo) @@ -1179,7 +1179,7 @@ "pv" = ( /obj/effect/turf_decal/corner/opaque/yellow/diagonal, /obj/structure/table, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /turf/open/floor/plasteel/white, /area/ship/crew/canteen) "pD" = ( @@ -1488,7 +1488,7 @@ "sT" = ( /obj/machinery/door/poddoor{ id = "riggs_cargo"; - name = "Mech Bay Blast Door" + name = "Exosuit Bay Blast Door" }, /obj/structure/cable{ icon_state = "0-2" @@ -3309,7 +3309,7 @@ "Oy" = ( /obj/machinery/door/poddoor{ id = "riggs_cargo"; - name = "Mech Bay Blast Door" + name = "Exosuit Bay Blast Door" }, /obj/structure/cable{ icon_state = "0-2" @@ -4398,10 +4398,10 @@ }, /obj/effect/turf_decal/corner/opaque/yellow/diagonal, /obj/structure/table, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -7 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -14 }, /turf/open/floor/plasteel/white, @@ -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_schmiedeberg.dmm b/_maps/shuttles/independent/independent_schmiedeberg.dmm index ce7b407a4731..3ae3915db4d3 100644 --- a/_maps/shuttles/independent/independent_schmiedeberg.dmm +++ b/_maps/shuttles/independent/independent_schmiedeberg.dmm @@ -68,13 +68,13 @@ "aO" = ( /obj/structure/table, /obj/item/storage/bag/tray, -/obj/item/reagent_containers/food/condiment/enzyme, -/obj/item/kitchen/knife, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/enzyme, +/obj/item/melee/knife/kitchen, +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -5; pixel_y = 10 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 3; pixel_y = 11 }, @@ -2063,8 +2063,8 @@ /obj/item/flashlight/seclite, /obj/item/flashlight/seclite, /obj/item/flashlight/seclite, -/obj/item/kitchen/knife/combat/survival, -/obj/item/kitchen/knife/combat/survival, +/obj/item/melee/knife/survival, +/obj/item/melee/knife/survival, /obj/structure/sign/poster/retro/lasergun_new{ pixel_x = -32 }, @@ -2516,13 +2516,13 @@ /obj/structure/closet/secure_closet/freezer/wall/directional/north, /obj/item/storage/fancy/egg_box, /obj/item/storage/fancy/egg_box, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/sugar, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/rice, -/obj/item/reagent_containers/food/condiment/peppermill, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/sugar, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/rice, +/obj/item/reagent_containers/condiment/peppermill, /obj/effect/decal/cleanable/food/flour, /turf/open/floor/concrete/slab_3, /area/ship/crew/canteen) diff --git a/_maps/shuttles/independent/independent_shetland.dmm b/_maps/shuttles/independent/independent_shetland.dmm index f147aeb82276..3bf95ea99b6f 100644 --- a/_maps/shuttles/independent/independent_shetland.dmm +++ b/_maps/shuttles/independent/independent_shetland.dmm @@ -84,7 +84,7 @@ "aR" = ( /obj/effect/turf_decal/corner/opaque/neutral/half, /obj/item/cutting_board, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /obj/structure/table/reinforced, /turf/open/floor/plasteel/dark, /area/ship/crew/canteen) @@ -131,12 +131,18 @@ dir = 4 }, /obj/item/radio/intercom/directional/south, +/obj/structure/chair/handrail{ + dir = 1 + }, /turf/open/floor/plasteel/dark, /area/ship/engineering) "bm" = ( /obj/effect/turf_decal/industrial/warning{ dir = 1 }, +/obj/structure/chair/handrail{ + dir = 4 + }, /turf/open/floor/plasteel/tech/techmaint, /area/ship/hallway/port) "bv" = ( @@ -169,6 +175,7 @@ dir = 4 }, /obj/structure/catwalk/over/plated_catwalk, +/obj/structure/chair/handrail, /turf/open/floor/plating, /area/ship/hallway/fore) "bD" = ( @@ -244,7 +251,7 @@ /obj/machinery/door/firedoor/border_only{ dir = 1 }, -/turf/open/floor/plating, +/turf/open/floor/plasteel/dark, /area/ship/crew/canteen) "cD" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible{ @@ -336,6 +343,9 @@ /obj/structure/cable{ icon_state = "5-9" }, +/obj/structure/chair/handrail{ + dir = 8 + }, /turf/open/floor/plasteel/dark, /area/ship/engineering/engine) "cR" = ( @@ -377,6 +387,9 @@ }, /obj/machinery/atmospherics/pipe/simple/cyan/visible/layer5, /obj/item/radio/intercom/directional/east, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, /turf/open/floor/plasteel/dark, /area/ship/engineering/engine) "dl" = ( @@ -419,6 +432,7 @@ pixel_x = -20; pixel_y = 5 }, +/obj/effect/turf_decal/industrial/warning, /turf/open/floor/plating, /area/ship/engineering/electrical) "dT" = ( @@ -458,6 +472,7 @@ /obj/effect/decal/cleanable/cobweb, /obj/item/trash/candy, /obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/cockroach, /turf/open/floor/plating, /area/ship/engineering/electrical) "en" = ( @@ -472,6 +487,7 @@ /obj/machinery/door/firedoor/border_only{ dir = 8 }, +/obj/effect/turf_decal/industrial/warning/fulltile, /turf/open/floor/plasteel/dark, /area/ship/bridge) "es" = ( @@ -509,7 +525,7 @@ "ez" = ( /obj/effect/landmark/start/shaft_miner, /obj/machinery/computer/helm/viewscreen/directional/east, -/turf/open/floor/plasteel/patterned/cargo_one, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "eC" = ( /obj/machinery/suit_storage_unit/inherit/industrial, @@ -697,6 +713,9 @@ dir = 9 }, /obj/structure/extinguisher_cabinet/directional/south, +/obj/structure/chair/handrail{ + dir = 1 + }, /turf/open/floor/plasteel, /area/ship/hallway/starboard) "gc" = ( @@ -761,6 +780,9 @@ "gt" = ( /obj/machinery/light/directional/south, /obj/effect/decal/cleanable/dirt, +/obj/structure/chair/handrail{ + dir = 1 + }, /turf/open/floor/plasteel/dark, /area/ship/hallway/fore) "gF" = ( @@ -835,7 +857,6 @@ /area/ship/hallway/fore) "hp" = ( /obj/structure/table, -/obj/machinery/computer/cryopod/directional/west, /obj/machinery/newscaster/directional/south, /obj/item/cigbutt{ pixel_x = -10; @@ -843,6 +864,7 @@ }, /obj/item/cigbutt, /obj/item/reagent_containers/food/snacks/chips, +/obj/machinery/computer/cryopod/retro/directional/west, /turf/open/floor/plasteel/tech/grid, /area/ship/crew/cryo) "hv" = ( @@ -930,9 +952,6 @@ /obj/machinery/atmospherics/pipe/simple/cyan/visible/layer5{ dir = 5 }, -/obj/structure/cable/yellow{ - icon_state = "4-10" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, @@ -945,6 +964,12 @@ /obj/machinery/atmospherics/pipe/simple/dark/visible{ dir = 10 }, +/obj/structure/cable/yellow{ + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, /turf/open/floor/plasteel/dark, /area/ship/engineering/engine) "ib" = ( @@ -977,6 +1002,7 @@ dir = 8 }, /obj/structure/extinguisher_cabinet/directional/north, +/obj/structure/chair/handrail, /turf/open/floor/plasteel, /area/ship/hallway/port) "is" = ( @@ -984,7 +1010,7 @@ /obj/effect/turf_decal/corner/transparent/beige/full, /obj/effect/turf_decal/corner/transparent/brown/diagonal, /obj/item/toy/redbutton, -/obj/item/kitchen/knife/plastic, +/obj/item/melee/knife/plastic, /obj/item/kitchen/fork/plastic{ pixel_x = 5 }, @@ -1070,6 +1096,9 @@ /obj/effect/turf_decal/corner/transparent/beige/full, /obj/effect/turf_decal/corner/transparent/brown/diagonal, /obj/item/radio/intercom/directional/east, +/obj/structure/chair/handrail{ + dir = 8 + }, /turf/open/floor/plasteel, /area/ship/crew/canteen) "jj" = ( @@ -1121,6 +1150,7 @@ /obj/effect/turf_decal/corner/opaque/bottlegreen/full, /obj/machinery/firealarm/directional/west, /obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/hostile/cockroach, /turf/open/floor/plasteel/dark, /area/ship/security) "jC" = ( @@ -1176,7 +1206,7 @@ /obj/structure/cable{ icon_state = "0-1" }, -/turf/open/floor/engine/hull/interior, +/turf/open/floor/plasteel/patterned/ridged, /area/ship/cargo) "jY" = ( /turf/closed/wall, @@ -1227,6 +1257,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, +/obj/structure/chair/handrail, /turf/open/floor/plating, /area/ship/hallway/starboard) "ki" = ( @@ -1235,6 +1266,9 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/chair/handrail{ + dir = 1 + }, /turf/open/floor/plasteel, /area/ship/hallway/port) "kt" = ( @@ -1336,6 +1370,9 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 9 }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /turf/open/floor/plating, /area/ship/engineering/engine) "lu" = ( @@ -1455,7 +1492,7 @@ }, /obj/machinery/button/door{ dir = 1; - id = "amogusthrusters"; + id = "shetportthrusters"; name = "Thruster Lockdown"; pixel_y = -21 }, @@ -1513,7 +1550,7 @@ /obj/item/kitchen/fork/plastic{ pixel_x = 5 }, -/obj/item/kitchen/knife/plastic, +/obj/item/melee/knife/plastic, /turf/open/floor/plasteel, /area/ship/crew/canteen) "nt" = ( @@ -1581,6 +1618,9 @@ pixel_x = -25 }, /obj/machinery/atmospherics/components/unary/vent_pump/siphon/layer4, +/obj/structure/chair/handrail{ + dir = 4 + }, /turf/open/floor/plasteel/tech/techmaint, /area/ship/hallway/port) "of" = ( @@ -1715,6 +1755,9 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 1 }, +/obj/structure/chair/handrail{ + dir = 8 + }, /turf/open/floor/plasteel/dark, /area/ship/hallway/fore) "ph" = ( @@ -1748,6 +1791,7 @@ dir = 1 }, /obj/effect/decal/cleanable/vomit/old, +/mob/living/simple_animal/hostile/cockroach, /turf/open/floor/plasteel/patterned, /area/ship/crew/toilet) "pI" = ( @@ -1832,6 +1876,9 @@ /obj/machinery/atmospherics/components/unary/vent_pump/layer2{ dir = 1 }, +/obj/structure/chair/handrail{ + dir = 8 + }, /turf/open/floor/plasteel/tech/techmaint, /area/ship/hallway/starboard) "qa" = ( @@ -1841,7 +1888,8 @@ "qb" = ( /obj/structure/crate_shelf, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/patterned/cargo_one, +/obj/effect/turf_decal/box, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "qg" = ( /obj/structure/closet/secure_closet/engineering_personal{ @@ -1930,6 +1978,9 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 1 }, +/obj/structure/chair/handrail{ + dir = 1 + }, /turf/open/floor/plasteel, /area/ship/hallway/central) "qM" = ( @@ -2144,6 +2195,9 @@ /obj/structure/cable{ icon_state = "1-6" }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, /turf/open/floor/plasteel/dark, /area/ship/engineering/engine) "sb" = ( @@ -2184,7 +2238,10 @@ /obj/structure/cable{ icon_state = "2-9" }, -/turf/open/floor/plasteel/patterned/cargo_one, +/obj/effect/turf_decal/borderfloor{ + dir = 9 + }, +/turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "su" = ( /obj/structure/disposalpipe/segment, @@ -2240,7 +2297,7 @@ pixel_y = 5 }, /obj/machinery/button/door{ - id = "amogusthrusters"; + id = "shetstarboardengine"; name = "Thruster Lockdown"; pixel_y = 24 }, @@ -2408,6 +2465,9 @@ pixel_y = 5 }, /obj/machinery/atmospherics/pipe/simple/dark/visible/layer1, +/obj/structure/chair/handrail{ + dir = 8 + }, /turf/open/floor/plasteel/dark, /area/ship/hallway/aft) "uM" = ( @@ -2417,6 +2477,9 @@ /obj/machinery/atmospherics/components/unary/vent_pump/siphon/layer4{ dir = 1 }, +/obj/structure/chair/handrail{ + dir = 4 + }, /turf/open/floor/plasteel/tech/techmaint, /area/ship/hallway/starboard) "uO" = ( @@ -2440,6 +2503,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/chair/handrail, /turf/open/floor/plasteel, /area/ship/hallway/starboard) "va" = ( @@ -2518,6 +2582,12 @@ }, /turf/open/floor/plasteel/dark, /area/ship/hallway/fore) +"vL" = ( +/obj/structure/chair/handrail{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/ship/hallway/central) "vN" = ( /obj/structure/catwalk/over/plated_catwalk/dark, /obj/structure/cable/yellow{ @@ -2549,6 +2619,9 @@ "vV" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /obj/item/kirbyplants/fullysynthetic, +/obj/structure/sign/poster/random{ + pixel_y = 32 + }, /turf/open/floor/carpet/blue, /area/ship/bridge) "vX" = ( @@ -2675,7 +2748,13 @@ }, /obj/machinery/door/poddoor{ dir = 4; - id = "amogusthrusters" + id = "shetstarboardengine" + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 }, /turf/open/floor/plating, /area/ship/maintenance/starboard) @@ -2686,9 +2765,6 @@ /turf/open/floor/plasteel/dark, /area/ship/engineering/engine) "wW" = ( -/obj/structure/cable/yellow{ - icon_state = "1-6" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 6 }, @@ -2698,6 +2774,12 @@ /obj/machinery/atmospherics/pipe/simple/dark/visible{ dir = 4 }, +/obj/structure/cable/yellow{ + icon_state = "1-5" + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, /turf/open/floor/plating, /area/ship/engineering/engine) "xd" = ( @@ -2770,11 +2852,11 @@ "xz" = ( /obj/effect/turf_decal/corner/opaque/neutral/half, /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -4; pixel_y = 10 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 4; pixel_y = 10 }, @@ -2912,6 +2994,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, +/obj/structure/chair/handrail, /turf/open/floor/plating, /area/ship/hallway/central) "yP" = ( @@ -2949,6 +3032,10 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/random{ + pixel_x = -32; + pixel_y = 0 + }, /turf/open/floor/plasteel/grimy, /area/ship/security) "yY" = ( @@ -3092,7 +3179,8 @@ /obj/effect/turf_decal/box, /obj/item/tank/internals/oxygen/red, /obj/item/radio/intercom/directional/east, -/turf/open/floor/plasteel/patterned/cargo_one, +/obj/effect/turf_decal/borderfloor, +/turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "Ab" = ( /obj/structure/catwalk/over/plated_catwalk/dark, @@ -3115,12 +3203,6 @@ /obj/effect/turf_decal/number/zero{ dir = 8 }, -/obj/structure/cable/yellow{ - icon_state = "5-9" - }, -/obj/structure/cable/yellow{ - icon_state = "5-10" - }, /obj/machinery/atmospherics/pipe/layer_manifold/visible{ dir = 4 }, @@ -3147,7 +3229,7 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plating, +/turf/open/floor/plasteel/dark, /area/ship/crew/canteen) "Ax" = ( /obj/structure/table/wood, @@ -3337,6 +3419,9 @@ "CF" = ( /obj/machinery/light/small/directional/east, /obj/machinery/atmospherics/components/unary/vent_pump/layer2, +/obj/structure/chair/handrail{ + dir = 8 + }, /turf/open/floor/plasteel/tech/techmaint, /area/ship/hallway/port) "CH" = ( @@ -3356,8 +3441,8 @@ populate = 0 }, /obj/effect/turf_decal/corner/opaque/neutral/half, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/sugar, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/sugar, /turf/open/floor/plasteel/dark, /area/ship/crew/canteen) "CK" = ( @@ -3405,7 +3490,10 @@ /obj/item/pickaxe, /obj/effect/turf_decal/box, /obj/machinery/light/small/directional/east, -/turf/open/floor/plasteel/patterned/cargo_one, +/obj/effect/turf_decal/borderfloor{ + dir = 1 + }, +/turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "Dm" = ( /obj/machinery/cryopod{ @@ -3537,6 +3625,7 @@ }, /obj/item/radio/intercom/directional/north, /obj/effect/decal/cleanable/dirt, +/obj/structure/chair/handrail, /turf/open/floor/plasteel/dark, /area/ship/engineering/atmospherics) "EA" = ( @@ -3622,6 +3711,9 @@ /area/ship/crew/janitor) "ER" = ( /obj/effect/turf_decal/industrial/warning, +/obj/structure/chair/handrail{ + dir = 4 + }, /turf/open/floor/plasteel/tech/techmaint, /area/ship/hallway/starboard) "EX" = ( @@ -3634,6 +3726,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/chair/handrail, /turf/open/floor/plasteel, /area/ship/hallway/central) "FE" = ( @@ -3663,7 +3756,7 @@ id = "amogusdoors"; name = "Cargo Bay Blast Door" }, -/turf/open/floor/engine/hull/interior, +/turf/open/floor/plasteel/patterned/ridged, /area/ship/cargo) "Gg" = ( /obj/machinery/light/dim/directional/south, @@ -3690,7 +3783,10 @@ /obj/item/clothing/gloves/color/black, /obj/item/clothing/head/hardhat/mining, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/patterned/cargo_one, +/obj/effect/turf_decal/borderfloor{ + dir = 10 + }, +/turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "Gt" = ( /obj/effect/turf_decal/corner/opaque/neutral/three_quarters{ @@ -3702,6 +3798,7 @@ /obj/structure/sign/warning/vacuum/external{ pixel_y = 24 }, +/obj/structure/chair/handrail, /turf/open/floor/plasteel/dark, /area/ship/hallway/port) "Gw" = ( @@ -3964,6 +4061,7 @@ /obj/machinery/power/terminal{ dir = 1 }, +/obj/effect/turf_decal/industrial/warning, /turf/open/floor/plating, /area/ship/engineering/electrical) "IE" = ( @@ -3973,6 +4071,9 @@ /obj/structure/sign/warning/vacuum/external{ pixel_y = -21 }, +/obj/structure/chair/handrail{ + dir = 1 + }, /turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "IJ" = ( @@ -4107,6 +4208,9 @@ /obj/machinery/atmospherics/pipe/simple/dark/visible/layer1{ dir = 9 }, +/obj/structure/chair/handrail{ + dir = 8 + }, /turf/open/floor/plasteel/dark, /area/ship/hallway/aft) "JQ" = ( @@ -4185,6 +4289,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, +/obj/structure/sign/poster/random{ + pixel_y = 32 + }, /turf/open/floor/plating, /area/ship/hallway/central) "Kq" = ( @@ -4251,6 +4358,17 @@ /obj/effect/decal/cleanable/oil, /turf/open/floor/engine/vacuum, /area/ship/engineering/engine) +"Li" = ( +/obj/structure/bed, +/obj/structure/curtain/bounty, +/obj/item/bedsheet/dorms, +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/random{ + pixel_x = -32; + pixel_y = 0 + }, +/turf/open/floor/plasteel/grimy, +/area/ship/crew/dorm) "Ll" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -4308,7 +4426,13 @@ }, /obj/machinery/door/poddoor{ dir = 4; - id = "amogusthrusters" + id = "shetportthrusters" + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 }, /turf/open/floor/plating, /area/ship/maintenance/port) @@ -4428,6 +4552,9 @@ /obj/effect/turf_decal/industrial/warning/fulltile, /turf/open/floor/plasteel/dark, /area/ship/hallway/port) +"Mf" = ( +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) "Mk" = ( /obj/structure/table/wood, /obj/structure/bedsheetbin, @@ -4435,6 +4562,13 @@ /obj/machinery/newscaster/directional/east, /turf/open/floor/plasteel/grimy, /area/ship/crew/dorm) +"Ml" = ( +/obj/effect/turf_decal/industrial/warning, +/obj/structure/chair/handrail{ + dir = 8 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/hallway/starboard) "Mr" = ( /obj/structure/window/reinforced/fulltile, /obj/structure/grille, @@ -4522,9 +4656,6 @@ }, /turf/open/floor/plasteel, /area/ship/hallway/central) -"MV" = ( -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) "Na" = ( /turf/closed/wall/rust, /area/ship/crew/canteen) @@ -4539,13 +4670,17 @@ "Ne" = ( /obj/structure/crate_shelf, /obj/machinery/firealarm/directional/north, -/turf/open/floor/plasteel/patterned/cargo_one, +/obj/effect/turf_decal/box, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "Ni" = ( /obj/structure/bed, /obj/structure/curtain/bounty, /obj/item/bedsheet/dorms, /obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/random{ + pixel_y = 32 + }, /turf/open/floor/plasteel/grimy, /area/ship/crew/dorm) "Nl" = ( @@ -4604,6 +4739,7 @@ /obj/structure/cable{ icon_state = "4-8" }, +/mob/living/simple_animal/hostile/cockroach, /turf/open/floor/plating, /area/ship/engineering/engine) "NR" = ( @@ -4716,6 +4852,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" = ( @@ -4857,7 +4995,13 @@ }, /obj/machinery/door/poddoor{ dir = 4; - id = "amogusthrusters" + id = "shetportthrusters" + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 }, /turf/open/floor/plating, /area/ship/maintenance/port) @@ -4941,6 +5085,15 @@ }, /turf/open/floor/plating, /area/ship/hallway/fore) +"Qu" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/chair/handrail{ + dir = 8 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/hallway/port) "Qy" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -5013,7 +5166,13 @@ }, /obj/machinery/door/poddoor{ dir = 4; - id = "amogusthrusters" + id = "shetstarboardengine" + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 }, /turf/open/floor/plating, /area/ship/maintenance/starboard) @@ -5076,6 +5235,9 @@ }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, /obj/structure/catwalk/over/plated_catwalk, +/obj/structure/chair/handrail{ + dir = 1 + }, /turf/open/floor/plating, /area/ship/hallway/port) "Ry" = ( @@ -5281,7 +5443,7 @@ /obj/structure/cable{ icon_state = "0-4" }, -/turf/open/floor/plasteel/patterned/cargo_one, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "Tk" = ( /obj/structure/cable{ @@ -5307,7 +5469,7 @@ /obj/structure/cable{ icon_state = "2-4" }, -/turf/open/floor/plasteel/patterned/cargo_one, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "TO" = ( /obj/machinery/firealarm/directional/south, @@ -5347,6 +5509,7 @@ /obj/machinery/door/firedoor/border_only{ dir = 8 }, +/obj/effect/turf_decal/industrial/warning/fulltile, /turf/open/floor/plasteel/dark, /area/ship/bridge) "TX" = ( @@ -5366,6 +5529,9 @@ /obj/effect/turf_decal/corner/transparent/beige/full, /obj/effect/turf_decal/corner/transparent/brown/diagonal, /obj/machinery/light/directional/west, +/obj/structure/chair/handrail{ + dir = 4 + }, /turf/open/floor/plasteel, /area/ship/crew/canteen) "Ug" = ( @@ -5410,7 +5576,7 @@ /turf/open/floor/plating, /area/ship/hallway/aft) "UJ" = ( -/turf/open/floor/plasteel/patterned/cargo_one, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "UT" = ( /obj/machinery/recharger, @@ -5484,6 +5650,7 @@ }, /obj/machinery/firealarm/directional/north, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/structure/chair/handrail, /turf/open/floor/plasteel/patterned, /area/ship/crew/cryo) "VN" = ( @@ -5521,15 +5688,18 @@ /area/ship/engineering/engine) "VS" = ( /obj/machinery/light/directional/south, +/obj/structure/chair/handrail{ + dir = 1 + }, /turf/open/floor/plasteel, /area/ship/hallway/fore) "VV" = ( -/obj/structure/cable/yellow{ - icon_state = "2-5" - }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 1 }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, /turf/open/floor/plasteel/dark, /area/ship/engineering/engine) "VZ" = ( @@ -5545,7 +5715,8 @@ /obj/structure/cable{ icon_state = "1-6" }, -/turf/open/floor/plasteel/patterned/cargo_one, +/obj/effect/turf_decal/box, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "We" = ( /turf/closed/wall/r_wall/rust/yesdiag, @@ -5574,7 +5745,8 @@ /obj/structure/crate_shelf, /obj/machinery/light/small/directional/west, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/patterned/cargo_one, +/obj/effect/turf_decal/box, +/turf/open/floor/plasteel/patterned/grid, /area/ship/cargo) "Wq" = ( /obj/structure/grille, @@ -5598,7 +5770,7 @@ /obj/structure/cable{ icon_state = "0-1" }, -/turf/open/floor/engine/hull/interior, +/turf/open/floor/plasteel/patterned/ridged, /area/ship/cargo) "Ws" = ( /obj/effect/turf_decal/corner/transparent/beige/full, @@ -5621,6 +5793,9 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 4 }, +/obj/structure/chair/handrail{ + dir = 4 + }, /turf/open/floor/plasteel/patterned, /area/ship/crew/toilet) "WB" = ( @@ -5639,6 +5814,9 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 1 }, +/obj/structure/chair/handrail{ + dir = 1 + }, /turf/open/floor/plasteel/patterned, /area/ship/crew/cryo) "WG" = ( @@ -5651,6 +5829,7 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/industrial/warning, /turf/open/floor/plating, /area/ship/engineering/electrical) "WM" = ( @@ -5673,6 +5852,9 @@ /area/ship/bridge) "Xg" = ( /obj/structure/extinguisher_cabinet/directional/south, +/obj/structure/chair/handrail{ + dir = 1 + }, /turf/open/floor/plasteel/dark, /area/ship/hallway/fore) "Xh" = ( @@ -5730,6 +5912,9 @@ dir = 8 }, /obj/structure/extinguisher_cabinet/directional/east, +/obj/structure/chair/handrail{ + dir = 8 + }, /turf/open/floor/plasteel/dark, /area/ship/engineering/engine) "XJ" = ( @@ -5738,6 +5923,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 8 }, +/obj/structure/chair/handrail, /turf/open/floor/plasteel, /area/ship/hallway/central) "XK" = ( @@ -5766,6 +5952,9 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/cable/yellow{ + icon_state = "4-10" + }, /turf/open/floor/plasteel/dark, /area/ship/engineering/engine) "XY" = ( @@ -5796,7 +5985,7 @@ /obj/item/kitchen/fork/plastic{ pixel_x = 5 }, -/obj/item/kitchen/knife/plastic, +/obj/item/melee/knife/plastic, /turf/open/floor/plasteel, /area/ship/crew/canteen) "Yp" = ( @@ -5936,6 +6125,10 @@ dir = 8 }, /obj/structure/curtain, +/obj/structure/sign/poster/random{ + pixel_x = -32; + pixel_y = 0 + }, /turf/open/floor/plasteel/white, /area/ship/medical) "ZJ" = ( @@ -5944,8 +6137,8 @@ }, /obj/structure/curtain, /obj/item/soap, -/obj/effect/turf_decal/corner_techfloor_grid{ - dir = 1 +/obj/effect/turf_decal/steeldecal/steel_decals10{ + dir = 9 }, /turf/open/floor/plasteel/freezer, /area/ship/crew/toilet) @@ -6469,7 +6662,7 @@ fz "} (18,1,1) = {" BL -bm +Qu CF XY we @@ -6491,7 +6684,7 @@ sk RP rJ pY -ER +Ml iG OU "} @@ -6626,7 +6819,7 @@ Gy ND jY Kn -ZV +vL rr fW fW @@ -6794,7 +6987,7 @@ aI aI aI iz -ZV +vL rr sX su @@ -6835,7 +7028,7 @@ OU ao Ok uh -Ni +Li mJ mJ mJ @@ -6908,7 +7101,7 @@ gq wQ MT pl -MV +Mf xZ qO CH diff --git a/_maps/shuttles/independent/independent_sunskipper.dmm b/_maps/shuttles/independent/independent_sunskipper.dmm index de92179a11f7..3edffc72acbc 100644 --- a/_maps/shuttles/independent/independent_sunskipper.dmm +++ b/_maps/shuttles/independent/independent_sunskipper.dmm @@ -196,11 +196,11 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/item/reagent_containers/food/condiment/ketchup{ +/obj/item/reagent_containers/condiment/ketchup{ pixel_x = -6; pixel_y = 8 }, -/obj/item/reagent_containers/food/condiment/mayonnaise{ +/obj/item/reagent_containers/condiment/mayonnaise{ pixel_x = 6; pixel_y = 8 }, @@ -349,11 +349,11 @@ pixel_x = -7; pixel_y = 9 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_y = 13; pixel_x = 4 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_y = 13; pixel_x = 11 }, @@ -441,7 +441,7 @@ pixel_y = 5; anchored = 1 }, -/obj/item/kitchen/knife{ +/obj/item/melee/knife/kitchen{ pixel_x = -11; pixel_y = 9 }, @@ -873,8 +873,8 @@ }, /obj/item/pickaxe, /obj/item/pickaxe, -/obj/item/kitchen/knife/hunting, -/obj/item/kitchen/knife/hunting, +/obj/item/melee/knife/hunting, +/obj/item/melee/knife/hunting, /obj/item/clothing/suit/hazardvest, /obj/item/clothing/suit/hazardvest, /obj/item/clothing/head/hardhat/mining, @@ -3172,11 +3172,11 @@ /area/template_noop) "Pe" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ pixel_x = -6; pixel_y = 8 }, -/obj/item/reagent_containers/food/condiment/oliveoil{ +/obj/item/reagent_containers/condiment/oliveoil{ pixel_x = 6; pixel_y = 8 }, @@ -3273,7 +3273,7 @@ /obj/structure/closet/secure_closet/freezer/kitchen, /obj/effect/turf_decal/borderfloorblack, /obj/effect/turf_decal/box, -/obj/item/reagent_containers/food/condiment/rice, +/obj/item/reagent_containers/condiment/rice, /turf/open/floor/plasteel/dark, /area/ship/crew/canteen/kitchen) "QB" = ( @@ -3554,10 +3554,10 @@ /obj/structure/closet/crate{ name = "supplies crate" }, -/obj/item/reagent_containers/food/condiment/saltshaker, -/obj/item/reagent_containers/food/condiment/saltshaker, -/obj/item/reagent_containers/food/condiment/peppermill, -/obj/item/reagent_containers/food/condiment/peppermill, +/obj/item/reagent_containers/condiment/saltshaker, +/obj/item/reagent_containers/condiment/saltshaker, +/obj/item/reagent_containers/condiment/peppermill, +/obj/item/reagent_containers/condiment/peppermill, /obj/item/storage/box/lights/mixed, /obj/item/storage/box/drinkingglasses, /obj/item/storage/fancy/candle_box, @@ -3656,11 +3656,11 @@ "VG" = ( /obj/machinery/light/directional/west, /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/soysauce{ +/obj/item/reagent_containers/condiment/soysauce{ pixel_x = -6; pixel_y = 8 }, -/obj/item/reagent_containers/food/condiment/bbqsauce{ +/obj/item/reagent_containers/condiment/bbqsauce{ pixel_x = 6; pixel_y = 8 }, diff --git a/_maps/shuttles/independent/independent_tranquility.dmm b/_maps/shuttles/independent/independent_tranquility.dmm index 08738bbe821f..020de62890e7 100644 --- a/_maps/shuttles/independent/independent_tranquility.dmm +++ b/_maps/shuttles/independent/independent_tranquility.dmm @@ -544,20 +544,20 @@ dir = 1 }, /obj/effect/turf_decal/corner/transparent/bar, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/sugar, -/obj/item/reagent_containers/food/condiment/sugar, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/sugar, +/obj/item/reagent_containers/condiment/sugar, /obj/item/storage/box/ingredients/carnivore, /obj/item/storage/box/ingredients/fruity, /obj/item/storage/box/ingredients/grains, /obj/item/storage/box/ingredients/vegetarian, /obj/item/storage/box/ingredients/wildcard, /obj/item/storage/box/ingredients/wildcard, -/obj/item/reagent_containers/food/condiment/enzyme, -/obj/item/reagent_containers/food/condiment/mayonnaise, -/obj/item/reagent_containers/food/condiment/rice, -/obj/item/reagent_containers/food/condiment/rice, +/obj/item/reagent_containers/condiment/enzyme, +/obj/item/reagent_containers/condiment/mayonnaise, +/obj/item/reagent_containers/condiment/rice, +/obj/item/reagent_containers/condiment/rice, /obj/item/storage/box/condimentbottles, /obj/structure/closet/secure_closet/wall/directional/west{ name = "Kitchen Cabinet" @@ -1160,7 +1160,7 @@ /area/ship/crew/dorm) "iq" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -11; pixel_y = 6 }, @@ -1329,9 +1329,7 @@ /obj/item/clothing/under/dress/skirt/red, /obj/item/clothing/suit/longcoat, /obj/item/clothing/suit/jacket/letterman_red, -/obj/item/clothing/head/wizard/marisa, /obj/item/clothing/head/soft/mime, -/obj/item/clothing/shoes/wheelys, /obj/item/clothing/shoes/sandal, /obj/item/clothing/shoes/sneakers/black, /turf/open/floor/carpet/green, @@ -1687,7 +1685,7 @@ /obj/effect/turf_decal/corner/transparent/bar, /obj/structure/table/reinforced, /obj/machinery/light/directional/south, -/obj/item/kitchen/knife/butcher{ +/obj/item/melee/knife/butcher{ pixel_x = -6; pixel_y = 7 }, @@ -2735,7 +2733,7 @@ /area/ship/crew/crewtwo) "wA" = ( /obj/structure/table, -/obj/item/reagent_containers/food/snacks/cakeslice/lime, +/obj/item/food/cakeslice/lime, /obj/item/kitchen/fork/plastic{ pixel_x = -11 }, @@ -3002,7 +3000,7 @@ /area/ship/hallway/port) "yL" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 13; pixel_y = 2 }, @@ -3515,7 +3513,7 @@ /area/ship/crew/hydroponics) "CH" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/garlicbread, +/obj/item/food/garlicbread, /obj/item/reagent_containers/food/snacks/grown/citrus/orange{ pixel_x = -8; pixel_y = 7 @@ -5415,10 +5413,10 @@ /obj/item/reagent_containers/food/snacks/meat/slab/synthmeat, /obj/item/reagent_containers/food/snacks/meat/slab/synthmeat, /obj/item/reagent_containers/food/snacks/meat/slab/synthmeat, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/soymilk, -/obj/item/reagent_containers/food/condiment/soymilk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/reagent_containers/condiment/soymilk, /obj/item/storage/fancy/egg_box, /obj/item/storage/fancy/egg_box, /obj/structure/closet/secure_closet/wall/directional/east{ @@ -6032,11 +6030,11 @@ pixel_x = -11; pixel_y = 11 }, -/obj/item/reagent_containers/food/snacks/store/bread/banana{ +/obj/item/food/bread/banana{ pixel_x = 14; pixel_y = 1 }, -/obj/item/reagent_containers/food/snacks/breadslice/banana, +/obj/item/food/breadslice/banana, /turf/open/floor/plasteel, /area/ship/crew/cryo) "Vg" = ( @@ -6540,10 +6538,6 @@ /obj/effect/turf_decal/techfloor{ dir = 1 }, -/obj/item/disk/tech_disk/major{ - pixel_x = -7; - pixel_y = -5 - }, /obj/item/disk/tech_disk{ pixel_x = -3; pixel_y = -2 diff --git a/_maps/shuttles/inteq/inteq_colossus.dmm b/_maps/shuttles/inteq/inteq_colossus.dmm index 5925b9c0acdd..74ac142692c6 100644 --- a/_maps/shuttles/inteq/inteq_colossus.dmm +++ b/_maps/shuttles/inteq/inteq_colossus.dmm @@ -180,23 +180,6 @@ /obj/effect/turf_decal/industrial/warning/fulltile, /turf/open/floor/engine/hull/reinforced/interior, /area/ship/maintenance/starboard) -"cd" = ( -/obj/item/storage/backpack/messenger/inteq, -/obj/item/storage/backpack/messenger/inteq, -/obj/item/storage/backpack/messenger/inteq, -/obj/item/clothing/head/beret/sec/inteq, -/obj/item/clothing/head/beret/sec/inteq, -/obj/item/clothing/head/beret/sec/inteq, -/obj/item/clothing/head/soft/inteq, -/obj/item/clothing/head/soft/inteq, -/obj/item/clothing/head/soft/inteq, -/obj/structure/closet/wall/directional/north{ - icon_door = "orange_wall"; - name = "uniform closet" - }, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/plasteel/grimy, -/area/ship/crew) "cq" = ( /obj/structure/cable{ icon_state = "1-2" @@ -262,6 +245,29 @@ /obj/machinery/newscaster/directional/west, /turf/open/floor/plasteel/dark, /area/ship/crew/office) +"cT" = ( +/obj/item/storage/backpack/messenger/inteq, +/obj/item/storage/backpack/messenger/inteq, +/obj/item/storage/backpack/messenger/inteq, +/obj/item/clothing/head/beret/sec/inteq, +/obj/item/clothing/head/beret/sec/inteq, +/obj/item/clothing/head/beret/sec/inteq, +/obj/item/clothing/head/soft/inteq, +/obj/item/clothing/head/soft/inteq, +/obj/item/clothing/head/soft/inteq, +/obj/structure/closet/wall/directional/north{ + icon_door = "orange_wall"; + name = "uniform closet" + }, +/obj/machinery/firealarm/directional/east, +/obj/item/clothing/suit/hooded/wintercoat/security/inteq, +/obj/item/clothing/suit/hooded/wintercoat/security/inteq, +/obj/item/clothing/suit/hooded/wintercoat/security/inteq, +/obj/item/clothing/suit/hooded/wintercoat/security/inteq/alt, +/obj/item/clothing/suit/hooded/wintercoat/security/inteq/alt, +/obj/item/clothing/suit/hooded/wintercoat/security/inteq/alt, +/turf/open/floor/plasteel/grimy, +/area/ship/crew) "dq" = ( /obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, /obj/structure/cable{ @@ -646,6 +652,13 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) +"gH" = ( +/obj/machinery/porta_turret/ship/inteq{ + id = "colossus_grid"; + dir = 4 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew) "gJ" = ( /obj/effect/turf_decal/siding/thinplating/corner{ dir = 8 @@ -888,6 +901,25 @@ }, /turf/open/floor/plating, /area/ship/engineering) +"ja" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 1 + }, +/obj/machinery/turretid/ship{ + pixel_y = 24; + id = "colossus_grid" + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) "jo" = ( /obj/machinery/atmospherics/components/unary/tank/toxins{ piping_layer = 1 @@ -1105,6 +1137,13 @@ /obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/fore) +"mb" = ( +/obj/machinery/porta_turret/ship/inteq/light{ + id = "colossus_grid"; + dir = 5 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/hallway/port) "mq" = ( /obj/structure/cable{ icon_state = "1-8" @@ -1424,12 +1463,6 @@ /obj/effect/turf_decal/techfloor, /turf/open/floor/plasteel/tech/grid, /area/ship/crew/cryo) -"qJ" = ( -/obj/machinery/porta_turret/ship/ballistic{ - dir = 9 - }, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/bridge) "qK" = ( /obj/structure/cable/yellow{ icon_state = "1-4" @@ -1700,6 +1733,13 @@ /obj/item/pen, /turf/open/floor/plasteel/dark, /area/ship/crew/office) +"sT" = ( +/obj/machinery/porta_turret/ship/inteq/light{ + id = "colossus_grid"; + dir = 5 + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/crew) "td" = ( /obj/structure/cable{ icon_state = "1-2" @@ -2027,6 +2067,13 @@ "vH" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/cargo) +"vJ" = ( +/obj/machinery/porta_turret/ship/inteq{ + id = "colossus_grid"; + dir = 5 + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/maintenance/port) "vZ" = ( /obj/effect/turf_decal/industrial/warning/fulltile, /obj/machinery/door/poddoor{ @@ -2129,12 +2176,6 @@ }, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/central) -"xh" = ( -/obj/machinery/porta_turret/ship/ballistic{ - dir = 5 - }, -/turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) "xr" = ( /obj/effect/turf_decal/trimline/opaque/yellow/line{ dir = 1 @@ -2400,6 +2441,13 @@ }, /turf/open/floor/plating, /area/ship/maintenance/port) +"Bi" = ( +/obj/machinery/porta_turret/ship/inteq{ + id = "colossus_grid"; + dir = 9 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew/office) "Bj" = ( /obj/effect/turf_decal/trimline/opaque/yellow/line, /obj/effect/turf_decal/siding/thinplating, @@ -2984,9 +3032,6 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/n2{ - dir = 1 - }, /obj/machinery/power/terminal{ dir = 4 }, @@ -2997,14 +3042,11 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/dark/visible/layer5, /obj/machinery/atmospherics/pipe/simple/orange/hidden/layer1, +/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/o2{ + dir = 1 + }, /turf/open/floor/plasteel/tech, /area/ship/engineering) -"Hu" = ( -/obj/machinery/porta_turret/ship/ballistic{ - dir = 6 - }, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/bridge) "HD" = ( /obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, /obj/structure/cable{ @@ -3278,8 +3320,9 @@ /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/security/armory) "Ll" = ( -/obj/machinery/porta_turret/ship/ballistic{ - dir = 5 +/obj/machinery/porta_turret/ship/inteq{ + id = "colossus_grid"; + dir = 4 }, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/bridge) @@ -3423,13 +3466,13 @@ /obj/effect/turf_decal/trimline/opaque/yellow/line{ dir = 8 }, -/obj/item/ammo_box/magazine/gal{ +/obj/item/ammo_box/magazine/f4_308{ pixel_x = -5 }, -/obj/item/ammo_box/magazine/gal{ +/obj/item/ammo_box/magazine/f4_308{ pixel_x = 5 }, -/obj/item/gun/ballistic/automatic/marksman/gal/inteq{ +/obj/item/gun/ballistic/automatic/marksman/f4/inteq{ pixel_x = -8; pixel_y = 3 }, @@ -3480,24 +3523,6 @@ /obj/effect/landmark/start/security_officer, /turf/open/floor/plasteel/dark, /area/ship/crew/office) -"NH" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 8 - }, -/obj/machinery/turretid/lethal{ - pixel_y = 22 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 4 - }, -/obj/effect/turf_decal/corner/opaque/yellow{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) "NP" = ( /obj/item/kirbyplants/random, /obj/effect/turf_decal/corner/opaque/yellow, @@ -3533,7 +3558,8 @@ /turf/open/floor/plasteel/patterned, /area/ship/cargo) "Oa" = ( -/obj/machinery/porta_turret/ship/ballistic{ +/obj/machinery/porta_turret/ship/inteq/light{ + id = "colossus_grid"; dir = 6 }, /turf/closed/wall/mineral/plastitanium, @@ -3605,6 +3631,13 @@ }, /turf/open/floor/engine/hull/reinforced, /area/ship/maintenance/starboard) +"OI" = ( +/obj/machinery/porta_turret/ship/inteq{ + id = "colossus_grid"; + dir = 6 + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/maintenance/starboard) "OV" = ( /obj/structure/cable{ icon_state = "2-4" @@ -3758,6 +3791,13 @@ }, /turf/open/floor/plating, /area/ship/maintenance/starboard) +"Qw" = ( +/obj/machinery/porta_turret/ship/inteq{ + id = "colossus_grid"; + dir = 10 + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/security/armory) "QC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 10 @@ -3814,12 +3854,6 @@ /obj/machinery/light/directional/north, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/central) -"QZ" = ( -/obj/machinery/porta_turret/ship/ballistic{ - dir = 10 - }, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/bridge) "Rb" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ name = "exhaust injector" @@ -3911,6 +3945,13 @@ /obj/effect/landmark/start/station_engineer, /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo) +"RZ" = ( +/obj/machinery/porta_turret/ship/inteq/light{ + id = "talos_grid"; + dir = 6 + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/security) "Sa" = ( /obj/effect/turf_decal/borderfloor{ dir = 4 @@ -3936,13 +3977,13 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/components/trinary/filter/atmos/o2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/dark/visible/layer5, /obj/machinery/atmospherics/pipe/simple/orange/hidden/layer1, +/obj/machinery/atmospherics/components/trinary/filter/atmos/n2, /turf/open/floor/plasteel/tech, /area/ship/engineering) "Sg" = ( @@ -4299,10 +4340,10 @@ /obj/item/reagent_containers/spray/pepper, /obj/item/reagent_containers/spray/pepper, /obj/item/reagent_containers/spray/pepper, -/obj/item/kitchen/knife/combat/survival, -/obj/item/kitchen/knife/combat/survival, -/obj/item/kitchen/knife/combat/survival, -/obj/item/kitchen/knife/combat/survival, +/obj/item/melee/knife/survival, +/obj/item/melee/knife/survival, +/obj/item/melee/knife/survival, +/obj/item/melee/knife/survival, /turf/open/floor/plasteel/tech/grid, /area/ship/security/armory) "WG" = ( @@ -4752,7 +4793,7 @@ XJ (8,1,1) = {" XJ XJ -xh +vJ bo bo bo @@ -4768,7 +4809,7 @@ rl rl rl rl -Oa +OI XJ "} (9,1,1) = {" @@ -4949,7 +4990,7 @@ XJ "} (17,1,1) = {" XJ -qJ +Bi ZB ZB ZB @@ -4967,7 +5008,7 @@ Dq Dq Dq Dq -QZ +Qw "} (18,1,1) = {" XJ @@ -5187,7 +5228,7 @@ XA XA XA XA -Oa +RZ "} (28,1,1) = {" Yy @@ -5213,7 +5254,7 @@ XJ "} (29,1,1) = {" XJ -Ll +mb hD hD hD @@ -5281,7 +5322,7 @@ XJ XJ XJ tX -NH +ja tI Ae Sj @@ -5314,7 +5355,7 @@ fN fN Yr zF -cd +cT GW vq gu @@ -5358,11 +5399,11 @@ XJ XJ XJ XJ -xh +sT xT xT xT -Hu +gH XJ "} (36,1,1) = {" diff --git a/_maps/shuttles/inteq/inteq_talos.dmm b/_maps/shuttles/inteq/inteq_talos.dmm index 491853b5266c..2ab9a9405507 100644 --- a/_maps/shuttles/inteq/inteq_talos.dmm +++ b/_maps/shuttles/inteq/inteq_talos.dmm @@ -102,6 +102,13 @@ }, /turf/open/floor/circuit/telecomms/mainframe, /area/ship/engineering/communications) +"aC" = ( +/obj/machinery/porta_turret/ship/inteq{ + dir = 5; + id = "talos_grid" + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/maintenance/port) "aD" = ( /obj/machinery/computer/telecomms/monitor{ network = "irmg_commnet" @@ -654,6 +661,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 @@ -813,6 +848,13 @@ /obj/item/cigbutt, /turf/open/floor/plating/airless, /area/ship/storage/port) +"fs" = ( +/obj/machinery/porta_turret/ship/inteq{ + dir = 5; + id = "talos_grid" + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/engineering/communications) "fC" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/trimline/opaque/yellow/warning{ @@ -874,7 +916,6 @@ icon_state = "0-2" }, /obj/effect/decal/cleanable/dirt, -/obj/structure/extinguisher_cabinet/directional/north, /obj/structure/extinguisher_cabinet/directional/east, /turf/open/floor/plasteel/grimy, /area/ship/crew) @@ -904,33 +945,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, @@ -1324,33 +1338,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 @@ -1612,42 +1599,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" @@ -2139,7 +2090,7 @@ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/structure/fireaxecabinet{ +/obj/structure/cabinet/fireaxe{ dir = 1; pixel_y = -32 }, @@ -2737,6 +2688,20 @@ /obj/item/radio/headset, /turf/open/floor/plasteel/tech/grid, /area/ship/crew/cryo) +"qt" = ( +/obj/machinery/porta_turret/ship/inteq{ + dir = 6; + id = "talos_grid" + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/maintenance/starboard) +"qz" = ( +/obj/machinery/porta_turret/ship/inteq{ + dir = 5; + id = "talos_grid" + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/hallway/port) "qB" = ( /obj/effect/turf_decal/industrial/traffic, /obj/effect/decal/cleanable/dirt, @@ -3103,38 +3068,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 @@ -3414,23 +3347,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 @@ -4165,26 +4081,6 @@ /obj/effect/mapping_helpers/airlock/abandoned, /turf/open/floor/plating/airless, /area/ship/maintenance/port) -"zf" = ( -/obj/item/storage/backpack/messenger/inteq, -/obj/item/storage/backpack/messenger/inteq, -/obj/item/storage/backpack/messenger/inteq, -/obj/item/clothing/head/beret/sec/inteq, -/obj/item/clothing/head/beret/sec/inteq, -/obj/item/clothing/head/beret/sec/inteq, -/obj/item/clothing/head/soft/inteq, -/obj/item/clothing/head/soft/inteq, -/obj/item/clothing/head/soft/inteq, -/obj/structure/closet{ - icon_door = "orange"; - name = "inteq wardrobe" - }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable{ - icon_state = "0-2" - }, -/turf/open/floor/carpet/black, -/area/ship/crew/dorm) "zg" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/effect/spawner/lootdrop/grille_or_trash, @@ -4549,12 +4445,6 @@ }, /turf/open/floor/plasteel/tech/grid, /area/ship/engineering/engine) -"Bd" = ( -/obj/machinery/porta_turret/ship/weak{ - dir = 9 - }, -/turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) "Bh" = ( /obj/structure/cable{ icon_state = "1-2" @@ -4630,11 +4520,13 @@ }, /obj/structure/crate_shelf, /obj/structure/closet/crate/medical, -/obj/item/storage/firstaid/regular{ - pixel_x = 5 +/obj/item/storage/firstaid/brute{ + pixel_x = -8; + pixel_y = 0 }, -/obj/item/storage/firstaid/medical{ - pixel_x = -5 +/obj/item/storage/firstaid/fire{ + pixel_x = 9; + pixel_y = 0 }, /obj/item/storage/box/bodybags, /turf/open/floor/plasteel/patterned/cargo_one, @@ -4663,6 +4555,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/grimy, /area/ship/crew) +"Cr" = ( +/obj/machinery/porta_turret/ship/inteq/light{ + id = "talos_grid"; + dir = 9 + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/engineering/communications) "Cs" = ( /obj/structure/cable/yellow{ icon_state = "1-2" @@ -4757,6 +4656,32 @@ }, /turf/open/floor/plasteel/grimy, /area/ship/crew) +"CY" = ( +/obj/item/storage/backpack/messenger/inteq, +/obj/item/storage/backpack/messenger/inteq, +/obj/item/storage/backpack/messenger/inteq, +/obj/item/clothing/head/beret/sec/inteq, +/obj/item/clothing/head/beret/sec/inteq, +/obj/item/clothing/head/beret/sec/inteq, +/obj/item/clothing/head/soft/inteq, +/obj/item/clothing/head/soft/inteq, +/obj/item/clothing/head/soft/inteq, +/obj/structure/closet{ + icon_door = "orange"; + name = "inteq wardrobe" + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/item/clothing/suit/hooded/wintercoat/security/inteq, +/obj/item/clothing/suit/hooded/wintercoat/security/inteq, +/obj/item/clothing/suit/hooded/wintercoat/security/inteq, +/obj/item/clothing/suit/hooded/wintercoat/security/inteq/alt, +/obj/item/clothing/suit/hooded/wintercoat/security/inteq/alt, +/obj/item/clothing/suit/hooded/wintercoat/security/inteq/alt, +/turf/open/floor/carpet/black, +/area/ship/crew/dorm) "Dd" = ( /obj/structure/cable{ icon_state = "1-8" @@ -4896,7 +4821,7 @@ autolinkers = list("hub","processor4","bus"); network = "irmg_commnet" }, -/turf/open/floor/circuit/telecomms/mainframe, +/turf/closed/wall/mineral/plastitanium, /area/ship/engineering/communications) "Ep" = ( /obj/item/trash/can, @@ -4927,6 +4852,13 @@ }, /turf/open/floor/plasteel/telecomms_floor, /area/ship/engineering/communications) +"ED" = ( +/obj/machinery/porta_turret/ship/inteq/light{ + id = "talos_grid"; + dir = 10 + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/storage) "EL" = ( /obj/structure/cable{ icon_state = "4-8" @@ -4936,6 +4868,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 @@ -5220,12 +5189,6 @@ }, /turf/open/floor/plasteel/telecomms_floor, /area/ship/storage) -"GA" = ( -/obj/machinery/porta_turret/ship/weak{ - dir = 5 - }, -/turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) "GG" = ( /obj/machinery/light/small/directional/west, /obj/structure/cable{ @@ -5340,6 +5303,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, @@ -5630,9 +5610,9 @@ pixel_x = -1; pixel_y = 3 }, -/obj/item/kitchen/knife/combat/survival, -/obj/item/kitchen/knife/combat/survival, -/obj/item/kitchen/knife/combat/survival, +/obj/item/melee/knife/survival, +/obj/item/melee/knife/survival, +/obj/item/melee/knife/survival, /turf/open/floor/plasteel/tech/grid, /area/ship/security/armory) "JT" = ( @@ -5952,9 +5932,6 @@ /obj/effect/spawner/structure/window/plasma/reinforced/plastitanium, /turf/open/floor/plating, /area/ship/engineering/engine) -"Me" = ( -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/template_noop) "Mf" = ( /obj/structure/chair{ dir = 4 @@ -6243,37 +6220,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 @@ -6303,6 +6249,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 @@ -6385,12 +6359,6 @@ /obj/structure/closet/crate, /turf/open/floor/plating/airless, /area/ship/storage/starboard) -"Pw" = ( -/obj/machinery/porta_turret/ship/weak{ - dir = 10 - }, -/turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) "Py" = ( /obj/structure/cable{ icon_state = "1-2" @@ -6560,6 +6528,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{ @@ -6623,6 +6623,13 @@ }, /turf/open/floor/plasteel/telecomms_floor, /area/ship/engineering/communications) +"Rf" = ( +/obj/machinery/porta_turret/ship/inteq{ + dir = 6; + id = "talos_grid" + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/security) "Rg" = ( /obj/structure/cable{ icon_state = "4-8" @@ -6714,12 +6721,6 @@ }, /turf/open/floor/carpet/black, /area/ship/crew/dorm) -"RO" = ( -/obj/machinery/porta_turret/ship/weak{ - dir = 6 - }, -/turf/closed/wall/mineral/plastitanium, -/area/template_noop) "RT" = ( /turf/open/floor/plating/airless, /area/ship/storage/port) @@ -6730,12 +6731,6 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/ship/maintenance/port) -"RW" = ( -/obj/machinery/turretid/lethal{ - pixel_y = 32 - }, -/turf/open/floor/carpet/orange, -/area/ship/bridge) "RY" = ( /obj/effect/turf_decal/industrial/warning/fulltile, /obj/machinery/door/airlock/hatch{ @@ -7495,6 +7490,13 @@ }, /turf/open/floor/plating, /area/ship/engineering/engine) +"WN" = ( +/obj/machinery/porta_turret/ship/inteq{ + dir = 6; + id = "talos_grid" + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/storage) "WR" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -7504,12 +7506,6 @@ }, /turf/open/floor/carpet/orange, /area/ship/bridge) -"Xa" = ( -/obj/machinery/porta_turret/ship/weak{ - dir = 6 - }, -/turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) "Xg" = ( /turf/open/floor/carpet/black, /area/ship/crew/dorm) @@ -7531,6 +7527,13 @@ /obj/machinery/atmospherics/components/unary/portables_connector/visible/layer2, /turf/open/floor/plasteel/tech/grid, /area/ship/engineering) +"Xo" = ( +/obj/machinery/turretid/ship{ + pixel_y = 24; + id = "talos_grid" + }, +/turf/open/floor/carpet/orange, +/area/ship/bridge) "Xs" = ( /obj/effect/turf_decal/techfloor{ dir = 4 @@ -7808,6 +7811,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{ @@ -8009,7 +8044,7 @@ sw "} (5,1,1) = {" sw -Bd +Cr vp vp vp @@ -8038,7 +8073,7 @@ sV sV sV sV -Pw +ED sw "} (6,1,1) = {" @@ -8048,7 +8083,7 @@ ZU eC Zu SK -Ok +ZA vp HB MS @@ -8152,9 +8187,9 @@ aD MC zR vp -jY -gk -iE +EQ +es +OJ Xn gP qh @@ -8213,7 +8248,7 @@ cV "} (11,1,1) = {" sw -GA +fs vp vp sW @@ -8242,7 +8277,7 @@ sc jW sV sV -Xa +WN sw "} (12,1,1) = {" @@ -8251,7 +8286,7 @@ MV sw og sW -zf +CY GG tr Xg @@ -8575,9 +8610,9 @@ hT sq Rg Hq -sM +QP bI -ug +Hv Hq sw sw @@ -8590,7 +8625,7 @@ sw sw sw sw -Me +sw lC Ks IT @@ -8663,7 +8698,7 @@ lC ae bU mX -RW +Xo WR Tj mX @@ -8726,7 +8761,7 @@ sw sw sw sw -Me +sw lC qF Zj @@ -8759,8 +8794,8 @@ sw sw sw sw -Me -RO +sw +sw lC UP gp @@ -8963,7 +8998,7 @@ sw sw sw sw -GA +qz yp jj Gl @@ -8988,7 +9023,7 @@ as QR WG mK -Xa +Rf sw sw sw @@ -9578,7 +9613,7 @@ sw sw sw sw -GA +aC Pp fN Pp @@ -9597,7 +9632,7 @@ Gq If YZ fK -Xa +qt sw sw sw diff --git a/_maps/shuttles/inteq/inteq_valor.dmm b/_maps/shuttles/inteq/inteq_valor.dmm index 0b41578dd31b..3f709a261b15 100644 --- a/_maps/shuttles/inteq/inteq_valor.dmm +++ b/_maps/shuttles/inteq/inteq_valor.dmm @@ -123,7 +123,7 @@ /obj/effect/turf_decal/borderfloorwhite, /obj/machinery/light/directional/south, /turf/open/floor/plasteel/white, -/area/ship/medical) +/area/ship/medical/surgery) "bJ" = ( /obj/effect/turf_decal/siding/thinplating/dark, /obj/effect/turf_decal/trimline/opaque/brown/line, @@ -136,7 +136,7 @@ dir = 4 }, /turf/open/floor/plasteel/dark, -/area/ship/medical) +/area/ship/medical/surgery) "bN" = ( /obj/structure/catwalk/over/plated_catwalk, /obj/machinery/power/apc/auto_name/directional/east, @@ -149,6 +149,9 @@ }, /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "2-8" + }, /turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "bR" = ( @@ -353,7 +356,7 @@ }, /obj/structure/chair, /turf/open/floor/plasteel/dark, -/area/ship/medical) +/area/ship/medical/surgery) "dG" = ( /obj/effect/turf_decal/industrial/traffic/corner{ dir = 4 @@ -366,6 +369,12 @@ dir = 8; name = "Custodian Closet" }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, /turf/open/floor/plasteel/tech/techmaint, /area/ship/crew/canteen) "dM" = ( @@ -407,7 +416,7 @@ name = "Surgery" }, /turf/open/floor/plasteel/dark, -/area/ship/medical) +/area/ship/medical/surgery) "dO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -500,8 +509,8 @@ /obj/item/megaphone/sec, /obj/item/clothing/suit/armor/vest, /obj/item/clothing/suit/armor/vest, -/obj/item/kitchen/knife/combat/survival, -/obj/item/kitchen/knife/combat/survival, +/obj/item/melee/knife/survival, +/obj/item/melee/knife/survival, /obj/machinery/recharger{ pixel_x = -16; pixel_y = 5 @@ -539,14 +548,14 @@ }, /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) +/area/ship/medical/surgery) "eV" = ( /obj/structure/cable{ icon_state = "1-4" @@ -640,10 +649,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, @@ -733,8 +742,13 @@ dir = 5 }, /turf/open/floor/plasteel/dark, -/area/ship/medical) +/area/ship/medical/surgery) "gq" = ( +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -20; + pixel_x = -3 + }, /turf/open/floor/plasteel/mono/dark, /area/ship/cargo) "gt" = ( @@ -762,7 +776,7 @@ dir = 4 }, /turf/open/floor/plasteel/dark, -/area/ship/medical) +/area/ship/medical/surgery) "gZ" = ( /obj/machinery/door/airlock/external{ dir = 4 @@ -840,6 +854,9 @@ }, /turf/open/floor/plasteel/tech/grid, /area/ship/crew/cryo) +"hJ" = ( +/turf/open/floor/plasteel/dark, +/area/ship/medical/surgery) "hN" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 4 @@ -862,8 +879,13 @@ dir = 8; pixel_x = 12 }, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 20; + pixel_y = 8 + }, /turf/open/floor/plasteel/patterned/brushed, -/area/ship/medical) +/area/ship/medical/surgery) "id" = ( /obj/structure/cable{ icon_state = "1-2" @@ -1018,7 +1040,7 @@ id = "valor_external" }, /turf/open/floor/plating, -/area/ship/medical) +/area/ship/medical/surgery) "jN" = ( /obj/structure/chair/office, /obj/machinery/power/apc/auto_name/directional/west, @@ -1063,6 +1085,11 @@ pixel_x = 1; pixel_y = 16 }, +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -20; + pixel_x = 4 + }, /turf/open/floor/plasteel/patterned/ridged, /area/ship/medical) "jU" = ( @@ -1094,6 +1121,12 @@ dir = 4; name = "Starboard Engines" }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, /turf/open/floor/plasteel/dark, /area/ship/maintenance/starboard) "kx" = ( @@ -1178,6 +1211,10 @@ /obj/machinery/door/airlock/grunge{ name = "Medbay" }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, /turf/open/floor/plasteel/dark, /area/ship/medical) "lc" = ( @@ -1329,6 +1366,10 @@ }, /turf/open/floor/plasteel/dark, /area/ship/crew/canteen) +"ml" = ( +/obj/machinery/light/directional/west, +/turf/open/floor/plasteel/patterned, +/area/ship/medical) "mp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -1338,6 +1379,9 @@ }, /turf/open/floor/plasteel/tech, /area/ship/medical) +"mr" = ( +/turf/closed/wall/mineral/plastitanium, +/area/ship/medical/surgery) "mt" = ( /obj/structure/rack, /obj/item/tank/internals/plasmaman/full, @@ -1479,8 +1523,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, +/obj/machinery/light/directional/north, /turf/open/floor/plasteel/dark, -/area/ship/medical) +/area/ship/medical/surgery) "nz" = ( /obj/machinery/door/firedoor/border_only{ dir = 8 @@ -1509,8 +1554,12 @@ /obj/machinery/door/airlock/medical/glass{ name = "Surgical Bay" }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, /turf/open/floor/plasteel/white, -/area/ship/medical) +/area/ship/medical/surgery) "nU" = ( /obj/effect/turf_decal/corner/opaque/yellow{ dir = 1 @@ -1551,6 +1600,9 @@ /obj/item/flashlight/lamp/green, /turf/open/floor/carpet/black, /area/ship/crew/dorm) +"ou" = ( +/turf/open/floor/plasteel/mono/dark, +/area/ship/cargo) "oy" = ( /obj/effect/turf_decal/trimline/opaque/brown/warning{ dir = 6 @@ -1569,7 +1621,7 @@ dir = 4 }, /turf/open/floor/plasteel/dark, -/area/ship/medical) +/area/ship/medical/surgery) "oz" = ( /obj/structure/cable{ icon_state = "6-8" @@ -1658,6 +1710,9 @@ /obj/structure/cable{ icon_state = "2-4" }, +/obj/structure/cable{ + icon_state = "1-4" + }, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/central) "pt" = ( @@ -1719,7 +1774,7 @@ /obj/structure/table/optable, /obj/structure/curtain, /turf/open/floor/plasteel/patterned/brushed, -/area/ship/medical) +/area/ship/medical/surgery) "pL" = ( /obj/machinery/power/terminal{ dir = 8 @@ -1789,8 +1844,12 @@ icon_state = "1-2" }, /obj/machinery/door/airlock/hatch, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, /turf/open/floor/plasteel/patterned, -/area/ship/medical) +/area/ship/medical/surgery) "qt" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ @@ -1846,7 +1905,7 @@ id = "valor_surgery" }, /turf/open/floor/plating, -/area/ship/medical) +/area/ship/medical/surgery) "qW" = ( /obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/layer2{ dir = 4 @@ -1890,6 +1949,20 @@ }, /turf/open/floor/plating, /area/ship/crew/dorm) +"rh" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20; + pixel_y = -1 + }, +/turf/open/floor/plating, +/area/ship/hallway/central) "rL" = ( /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo) @@ -1904,8 +1977,11 @@ /obj/structure/cable{ icon_state = "1-8" }, +/obj/structure/cable{ + icon_state = "1-4" + }, /turf/open/floor/plasteel/dark, -/area/ship/medical) +/area/ship/medical/surgery) "rX" = ( /obj/structure/sign/poster/contraband/inteq_gec{ pixel_y = 32 @@ -1951,6 +2027,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" = ( @@ -1995,8 +2072,12 @@ /obj/machinery/door/airlock/medical{ name = "Morgue" }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, /turf/open/floor/plasteel/white, -/area/ship/medical) +/area/ship/medical/surgery) "ss" = ( /obj/structure/rack, /obj/item/pickaxe/emergency, @@ -2010,8 +2091,12 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 20 + }, /turf/open/floor/plasteel/dark, -/area/ship/medical) +/area/ship/medical/surgery) "sy" = ( /obj/effect/turf_decal/corner/opaque/yellow{ dir = 1 @@ -2082,6 +2167,11 @@ pixel_y = 10 }, /obj/machinery/firealarm/directional/west, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20; + pixel_y = -10 + }, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/central) "sM" = ( @@ -2233,7 +2323,7 @@ dir = 1 }, /turf/open/floor/plasteel/dark, -/area/ship/medical) +/area/ship/medical/surgery) "uA" = ( /obj/effect/turf_decal/trimline/opaque/yellow/filled/warning{ dir = 4 @@ -2465,12 +2555,11 @@ /turf/open/floor/plasteel/dark, /area/ship/crew/canteen) "xg" = ( -/obj/machinery/door/firedoor/border_only, /obj/effect/turf_decal/siding/thinplating/dark/corner{ dir = 8 }, /turf/open/floor/plasteel/dark, -/area/ship/medical) +/area/ship/medical/surgery) "xj" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/cargo) @@ -2726,7 +2815,7 @@ /obj/effect/turf_decal/borderfloorblack, /obj/structure/bodycontainer/morgue, /turf/open/floor/plasteel/patterned/brushed, -/area/ship/medical) +/area/ship/medical/surgery) "zE" = ( /obj/effect/turf_decal/siding/thinplating/dark{ dir = 1 @@ -2767,8 +2856,12 @@ "zI" = ( /obj/effect/turf_decal/borderfloorblack, /obj/machinery/door/airlock/hatch, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, /turf/open/floor/plasteel/patterned, -/area/ship/medical) +/area/ship/medical/surgery) "zK" = ( /obj/docking_port/stationary{ dir = 4; @@ -2799,6 +2892,10 @@ /obj/effect/turf_decal/siding/thinplating/dark{ dir = 9 }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20 + }, /turf/open/floor/plasteel/dark, /area/ship/medical) "zT" = ( @@ -2884,11 +2981,11 @@ 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) +/area/ship/medical/surgery) "AG" = ( /obj/structure/bed, /obj/item/bedsheet/hos{ @@ -2967,6 +3064,10 @@ desc = "A poster encouraging you to work for your future."; pixel_y = 32 }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20 + }, /turf/open/floor/plasteel/dark, /area/ship/medical) "Bc" = ( @@ -2983,6 +3084,13 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel/dark, /area/ship/crew/canteen) +"BB" = ( +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -20 + }, +/turf/template_noop, +/area/template_noop) "BC" = ( /obj/structure/filingcabinet/double, /obj/structure/sign/poster/official/help_others{ @@ -3081,7 +3189,7 @@ pixel_x = 28 }, /turf/open/floor/plasteel/white, -/area/ship/medical) +/area/ship/medical/surgery) "CH" = ( /obj/effect/turf_decal/trimline/opaque/yellow/filled/warning, /obj/structure/cable{ @@ -3329,8 +3437,9 @@ /obj/effect/turf_decal/trimline/opaque/brown/line{ dir = 5 }, +/obj/machinery/light/directional/north, /turf/open/floor/plasteel/dark, -/area/ship/medical) +/area/ship/medical/surgery) "EJ" = ( /obj/effect/turf_decal/siding/thinplating/corner{ dir = 1 @@ -3462,7 +3571,7 @@ /area/ship/crew/canteen) "FY" = ( /turf/open/floor/plasteel/patterned/brushed, -/area/ship/medical) +/area/ship/medical/surgery) "FZ" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 1 @@ -3531,6 +3640,20 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/central) +"GT" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20; + pixel_y = 4 + }, +/turf/open/floor/plating, +/area/ship/hallway/central) "Hg" = ( /obj/effect/turf_decal/siding/thinplating{ dir = 1 @@ -3566,6 +3689,9 @@ /obj/machinery/door/airlock/hatch{ name = "Port Hallway" }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, /turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "HA" = ( @@ -3630,6 +3756,10 @@ /obj/structure/mirror{ pixel_y = -24 }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20 + }, /turf/open/floor/plasteel/patterned/brushed, /area/ship/crew/canteen) "HT" = ( @@ -4034,14 +4164,14 @@ /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) +/area/ship/medical/surgery) "LL" = ( /obj/structure/closet/secure_closet{ icon_state = "med_secure"; @@ -4088,6 +4218,10 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -20 + }, /turf/open/floor/plasteel/stairs{ dir = 8 }, @@ -4152,11 +4286,25 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 8 }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, /turf/open/floor/plasteel/patterned, /area/ship/cargo) "Nh" = ( /turf/closed/wall/mineral/plastitanium, /area/ship/cargo) +"Nk" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ship/medical/surgery) "Nn" = ( /obj/structure/table/reinforced, /obj/effect/decal/cleanable/cobweb, @@ -4174,6 +4322,10 @@ /obj/item/soap{ pixel_x = -6 }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20 + }, /turf/open/floor/plasteel/tech/techmaint, /area/ship/crew/canteen) "NA" = ( @@ -4308,6 +4460,7 @@ /obj/effect/turf_decal/techfloor{ dir = 4 }, +/obj/machinery/light/directional/east, /turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "Ok" = ( @@ -4317,6 +4470,14 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/patterned, /area/ship/cargo) +"Ox" = ( +/obj/structure/grille, +/obj/structure/window/plasma/reinforced/plastitanium, +/obj/machinery/door/poddoor/shutters{ + id = "valor_external" + }, +/turf/open/floor/plating, +/area/ship/medical/surgery) "Oz" = ( /obj/structure/table, /obj/item/folder{ @@ -4350,7 +4511,7 @@ /obj/effect/turf_decal/borderfloorblack, /obj/machinery/light/directional/south, /turf/open/floor/plasteel/patterned/brushed, -/area/ship/medical) +/area/ship/medical/surgery) "OM" = ( /turf/open/floor/pod, /area/ship/cargo) @@ -4409,14 +4570,19 @@ dir = 8 }, /turf/open/floor/plasteel/dark, -/area/ship/medical) +/area/ship/medical/surgery) "Pg" = ( /obj/structure/sink{ dir = 4; pixel_x = -12 }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20; + pixel_y = 8 + }, /turf/open/floor/plasteel/white, -/area/ship/medical) +/area/ship/medical/surgery) "Pk" = ( /obj/effect/turf_decal/corner/opaque/brown{ dir = 4 @@ -4450,10 +4616,9 @@ /obj/effect/turf_decal/trimline/opaque/brown/line{ dir = 1 }, -/obj/machinery/light/directional/north, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, /turf/open/floor/plasteel/dark, -/area/ship/medical) +/area/ship/medical/surgery) "PU" = ( /turf/closed/wall/mineral/plastitanium, /area/ship/crew/cryo) @@ -4532,8 +4697,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) @@ -4581,8 +4746,12 @@ /turf/open/floor/plasteel/tech/grid, /area/ship/cargo) "Re" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/power/apc/auto_name/directional/west, /turf/open/floor/plasteel/dark, -/area/ship/medical) +/area/ship/medical/surgery) "Rh" = ( /turf/closed/wall/mineral/plastitanium, /area/ship/security) @@ -4598,6 +4767,12 @@ /obj/item/clothing/head/soft/inteq, /obj/structure/closet/wall/directional/north, /obj/machinery/airalarm/directional/east, +/obj/item/clothing/suit/hooded/wintercoat/security/inteq/alt, +/obj/item/clothing/suit/hooded/wintercoat/security/inteq/alt, +/obj/item/clothing/suit/hooded/wintercoat/security/inteq/alt, +/obj/item/clothing/suit/hooded/wintercoat/security/inteq, +/obj/item/clothing/suit/hooded/wintercoat/security/inteq, +/obj/item/clothing/suit/hooded/wintercoat/security/inteq, /turf/open/floor/carpet/black, /area/ship/crew/dorm) "RF" = ( @@ -4697,6 +4872,9 @@ }, /turf/open/floor/carpet/black, /area/ship/crew/dorm) +"SL" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/medical/surgery) "SX" = ( /obj/machinery/power/terminal{ dir = 1 @@ -4801,7 +4979,7 @@ dir = 1 }, /turf/open/floor/plasteel/dark, -/area/ship/medical) +/area/ship/medical/surgery) "Uj" = ( /obj/effect/turf_decal/siding/thinplating/dark, /obj/structure/cable{ @@ -4853,6 +5031,15 @@ }, /turf/open/floor/plasteel/dark, /area/ship/crew/canteen) +"UD" = ( +/obj/machinery/suit_storage_unit/inherit, +/obj/item/clothing/suit/space/inteq, +/obj/item/clothing/head/helmet/space/inteq, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/cargo) "UN" = ( /obj/effect/turf_decal/siding/thinplating, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ @@ -5039,10 +5226,12 @@ dir = 9 }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/obj/machinery/firealarm/directional/west, +/obj/machinery/firealarm/directional/west{ + pixel_y = 4 + }, /obj/structure/chair, /turf/open/floor/plasteel/dark, -/area/ship/medical) +/area/ship/medical/surgery) "WQ" = ( /obj/structure/cable/yellow{ icon_state = "0-2" @@ -5124,8 +5313,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; @@ -5214,12 +5403,18 @@ /area/ship/medical) "Yi" = ( /turf/open/floor/plasteel/white, -/area/ship/medical) +/area/ship/medical/surgery) "Yn" = ( /obj/machinery/door/airlock/grunge{ dir = 8; name = "Restroom" }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, /turf/open/floor/plasteel/patterned/brushed, /area/ship/crew/canteen) "Yt" = ( @@ -5255,14 +5450,16 @@ /turf/open/floor/plating, /area/ship/maintenance/starboard) "YL" = ( -/obj/machinery/door/firedoor/border_only, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/cable{ + icon_state = "2-8" + }, /turf/open/floor/plasteel/dark, -/area/ship/medical) +/area/ship/medical/surgery) "YM" = ( /obj/effect/turf_decal/corner/opaque/yellow{ dir = 1 @@ -5297,6 +5494,12 @@ dir = 4; name = "Port Engines" }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, /turf/open/floor/plating, /area/ship/maintenance/port) "Zc" = ( @@ -5474,7 +5677,7 @@ cu Td Td Td -Td +BB Nh xj qG @@ -5588,13 +5791,13 @@ xj Td Td Td -bB -LI +mr +SL ns -LI +SL pC zD -LI +SL "} (8,1,1) = {" Zu @@ -5621,13 +5824,13 @@ xj Td Td Td -WC +Ox WO gp -LI +SL FY OK -LI +SL "} (9,1,1) = {" Zu @@ -5654,13 +5857,13 @@ xj Td Td Td -WC +Ox dA Pe si hW AE -LI +SL "} (10,1,1) = {" Zu @@ -5683,17 +5886,17 @@ OM OM Kz ZF -LI +SL jL jL jL -LI +SL PL bJ -LI -LI -LI -LI +SL +SL +SL +SL "} (11,1,1) = {" Zu @@ -5717,8 +5920,8 @@ Mn de KU zI -Re -Re +hJ +hJ xg Re Ui @@ -5726,7 +5929,7 @@ gU nK Pg eU -LI +SL "} (12,1,1) = {" tZ @@ -5751,15 +5954,15 @@ Fa MR qk su -su +Nk +Nk YL -su ux rO qR Yi bI -LI +SL "} (13,1,1) = {" tZ @@ -5792,7 +5995,7 @@ oy qR CF LJ -LI +SL "} (14,1,1) = {" tZ @@ -5817,15 +6020,15 @@ zT nX LI jG -Io +ml Au LI -LI +SL dN -LI -LI -LI -LI +SL +SL +SL +SL "} (15,1,1) = {" tZ @@ -5835,9 +6038,9 @@ tZ Qc AP HC -gq -gq -gq +ou +ou +ou Hw nX ct @@ -5868,8 +6071,8 @@ ME iN xl HC -gq -gq +ou +ou gq xj Rc @@ -5901,9 +6104,9 @@ tZ VD Um DT +UD Oj -Oj -Oj +UD DT DT DT @@ -5967,7 +6170,7 @@ mB ma CH jk -lc +GT Sh lc ht @@ -5983,7 +6186,7 @@ hj id lc Sh -lc +rh bR XD NZ diff --git a/_maps/shuttles/inteq/inteq_vaquero.dmm b/_maps/shuttles/inteq/inteq_vaquero.dmm index 9e8f7d6c81f5..92e024ba7bf6 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 @@ -1194,25 +1191,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine/hull/reinforced, /area/ship/external/dark) -"tx" = ( -/obj/item/storage/backpack/messenger/inteq, -/obj/item/storage/backpack/messenger/inteq, -/obj/item/storage/backpack/messenger/inteq, -/obj/item/clothing/head/beret/sec/inteq, -/obj/item/clothing/head/beret/sec/inteq, -/obj/item/clothing/head/beret/sec/inteq, -/obj/item/clothing/head/soft/inteq, -/obj/item/clothing/head/soft/inteq, -/obj/item/clothing/head/soft/inteq, -/obj/structure/closet/wall/directional/north{ - icon_door = "orange_wall"; - name = "uniform closet" - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 8 - }, -/turf/open/floor/carpet/black, -/area/ship/crew) "ui" = ( /turf/closed/wall/mineral/plastitanium, /area/ship/hallway/central) @@ -1279,18 +1257,6 @@ }, /turf/open/floor/plasteel/patterned/grid, /area/ship/crew/toilet) -"vd" = ( -/obj/machinery/porta_turret/ship/weak{ - dir = 5 - }, -/obj/docking_port/mobile{ - dir = 2; - launch_status = 0; - port_direction = 8; - preferred_direction = 4 - }, -/turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) "vg" = ( /obj/docking_port/stationary{ dir = 8; @@ -1426,12 +1392,6 @@ }, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/cargo) -"xX" = ( -/obj/machinery/porta_turret/ship/weak{ - dir = 6 - }, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/bridge) "xZ" = ( /obj/effect/turf_decal/industrial/warning/fulltile, /obj/machinery/door/airlock/external{ @@ -1584,12 +1544,6 @@ }, /turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) -"zP" = ( -/obj/machinery/porta_turret/ship/weak{ - dir = 6 - }, -/turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) "zR" = ( /obj/structure/chair{ dir = 1 @@ -1978,6 +1932,13 @@ /obj/item/clothing/suit/armor/vest/security/warden/inteq, /turf/open/floor/plasteel/dark, /area/ship/security) +"DT" = ( +/obj/machinery/porta_turret/ship/inteq{ + dir = 6; + id = "vaquero_grid" + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew) "Eh" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/cargo) @@ -2065,6 +2026,13 @@ /obj/machinery/firealarm/directional/west, /turf/open/floor/plasteel/dark, /area/ship/crew/office) +"Fm" = ( +/obj/machinery/porta_turret/ship/inteq{ + dir = 5; + id = "vaquero_grid" + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew/office) "Fu" = ( /obj/machinery/door/airlock{ dir = 4; @@ -2207,9 +2175,9 @@ pixel_y = 23 }, /obj/effect/decal/cleanable/dirt/dust, -/obj/item/kitchen/knife/combat/survival, -/obj/item/kitchen/knife/combat/survival, -/obj/item/kitchen/knife/combat/survival, +/obj/item/melee/knife/survival, +/obj/item/melee/knife/survival, +/obj/item/melee/knife/survival, /turf/open/floor/plasteel/tech/grid, /area/ship/security) "HN" = ( @@ -2271,19 +2239,6 @@ /obj/machinery/holopad/emergency/command, /turf/open/floor/carpet/orange, /area/ship/bridge) -"Iy" = ( -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 4 - }, -/obj/effect/turf_decal/corner/opaque/yellow{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/turretid{ - pixel_y = 25 - }, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) "IN" = ( /obj/effect/turf_decal/industrial/warning{ dir = 1 @@ -2567,6 +2522,13 @@ }, /turf/open/floor/plasteel/patterned/grid, /area/ship/hallway/central) +"NO" = ( +/obj/machinery/porta_turret/ship/inteq{ + dir = 6; + id = "vaquero_grid" + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/security) "NR" = ( /obj/structure/cable{ icon_state = "1-8" @@ -2872,12 +2834,6 @@ /obj/structure/ore_box, /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo) -"Td" = ( -/obj/machinery/porta_turret/ship/weak{ - dir = 5 - }, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/bridge) "Ti" = ( /obj/machinery/vending/coffee, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, @@ -2896,6 +2852,20 @@ /obj/effect/turf_decal/siding/thinplating/dark, /turf/open/floor/plasteel/tech, /area/ship/cargo) +"TC" = ( +/obj/effect/turf_decal/corner/opaque/brown{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/yellow{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt/dust, +/obj/machinery/turretid/ship{ + pixel_y = 26; + id = "vaquero_grid" + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) "TK" = ( /obj/machinery/computer/cargo{ dir = 8 @@ -2936,6 +2906,31 @@ }, /turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) +"TX" = ( +/obj/item/storage/backpack/messenger/inteq, +/obj/item/storage/backpack/messenger/inteq, +/obj/item/storage/backpack/messenger/inteq, +/obj/item/clothing/head/beret/sec/inteq, +/obj/item/clothing/head/beret/sec/inteq, +/obj/item/clothing/head/beret/sec/inteq, +/obj/item/clothing/head/soft/inteq, +/obj/item/clothing/head/soft/inteq, +/obj/item/clothing/head/soft/inteq, +/obj/structure/closet/wall/directional/north{ + icon_door = "orange_wall"; + name = "uniform closet" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/item/clothing/suit/hooded/wintercoat/security/inteq, +/obj/item/clothing/suit/hooded/wintercoat/security/inteq, +/obj/item/clothing/suit/hooded/wintercoat/security/inteq, +/obj/item/clothing/suit/hooded/wintercoat/security/inteq/alt, +/obj/item/clothing/suit/hooded/wintercoat/security/inteq/alt, +/obj/item/clothing/suit/hooded/wintercoat/security/inteq/alt, +/turf/open/floor/carpet/black, +/area/ship/crew) "Uf" = ( /obj/structure/table, /obj/item/flashlight/lamp/green, @@ -2955,6 +2950,19 @@ /obj/machinery/light/small/directional/west, /turf/open/floor/carpet/black, /area/ship/crew) +"UO" = ( +/obj/docking_port/mobile{ + dir = 2; + launch_status = 0; + port_direction = 8; + preferred_direction = 4 + }, +/obj/machinery/porta_turret/ship/inteq{ + dir = 5; + id = "vaquero_grid" + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/medical) "UV" = ( /obj/machinery/door/airlock/public/glass{ dir = 4; @@ -3644,7 +3652,7 @@ ec lr FK Ul -Iy +TC In qe VI @@ -3672,7 +3680,7 @@ Ul sS bu Gq -tx +TX jg LB "} @@ -3697,7 +3705,7 @@ bL Gq "} (17,1,1) = {" -Td +Fm VN VN VN @@ -3714,7 +3722,7 @@ id te Gq Gq -xX +DT "} (18,1,1) = {" ww @@ -3880,7 +3888,7 @@ ww ww ww ww -vd +UO lo lo lo @@ -3891,7 +3899,7 @@ ww te te te -zP +NO ww ww ww diff --git a/_maps/shuttles/nanotrasen/nanotrasen_delta.dmm b/_maps/shuttles/nanotrasen/nanotrasen_delta.dmm index e5890b401cfa..351e8e2df037 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_delta.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_delta.dmm @@ -1371,7 +1371,8 @@ /turf/open/floor/plasteel/tech/techmaint, /area/ship/engineering) "jH" = ( -/obj/machinery/porta_turret/ship/weak{ +/obj/machinery/porta_turret/ship/nt/light{ + id = "delta_grid"; dir = 9 }, /turf/closed/wall/mineral/titanium, @@ -2057,18 +2058,14 @@ pixel_x = -24; pixel_y = -5 }, -/obj/machinery/turretid{ - icon_state = "control_kill"; - lethal = 1; - locked = 0; - pixel_y = -28; - req_access = null - }, /obj/structure/table, /obj/machinery/recharger, /obj/item/spacecash/bundle/c1000, /obj/item/spacecash/bundle/c1000, /obj/item/areaeditor/shuttle, +/obj/machinery/turretid/ship{ + pixel_y = -24 + }, /turf/open/floor/plasteel/dark, /area/ship/bridge) "Aw" = ( @@ -2894,7 +2891,8 @@ /turf/open/floor/plasteel/white, /area/ship/science/robotics) "WG" = ( -/obj/machinery/porta_turret/ship/weak{ +/obj/machinery/porta_turret/ship/nt/light{ + id = "delta_grid"; dir = 4 }, /turf/closed/wall/mineral/titanium, @@ -3020,7 +3018,8 @@ /turf/open/floor/plasteel/white, /area/ship/science/robotics) "YZ" = ( -/obj/machinery/porta_turret/ship/weak{ +/obj/machinery/porta_turret/ship/nt/light{ + id = "delta_grid"; dir = 10 }, /turf/closed/wall/mineral/titanium, diff --git a/_maps/shuttles/nanotrasen/nanotrasen_gecko.dmm b/_maps/shuttles/nanotrasen/nanotrasen_gecko.dmm index 351f188e3369..2cb4e641cd53 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_gecko.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_gecko.dmm @@ -383,6 +383,7 @@ /obj/item/clothing/under/rank/cargo/miner, /obj/item/clothing/gloves/color/black, /obj/item/clothing/glasses/meson, +/obj/item/gun/energy/plasmacutter, /turf/open/floor/plasteel/patterned/grid, /area/ship/cargo/port) "dC" = ( @@ -4112,6 +4113,7 @@ /obj/item/clothing/under/rank/cargo/miner, /obj/item/clothing/gloves/color/black, /obj/item/clothing/glasses/meson, +/obj/item/gun/energy/plasmacutter, /turf/open/floor/plasteel/patterned/grid, /area/ship/cargo/starboard) "Qc" = ( diff --git a/_maps/shuttles/nanotrasen/nanotrasen_osprey.dmm b/_maps/shuttles/nanotrasen/nanotrasen_harrier.dmm similarity index 52% rename from _maps/shuttles/nanotrasen/nanotrasen_osprey.dmm rename to _maps/shuttles/nanotrasen/nanotrasen_harrier.dmm index 0c860abb9e20..9e5d93f7af77 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_osprey.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_harrier.dmm @@ -1,966 +1,1022 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ac" = ( -/obj/structure/chair/comfy/orange/directional/north, -/obj/structure/closet/secure_closet/wall/directional/west{ - icon_door = "sec_wall"; - icon_state = "sec_wall"; - name = "gun locker"; - req_access_txt = "19" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/cable{ - icon_state = "1-2" +"ad" = ( +/obj/effect/turf_decal/corner/opaque/white{ + dir = 4 }, -/obj/item/storage/backpack/duffelbag/sec, -/obj/item/storage/backpack/messenger/sec, -/obj/item/storage/backpack/satchel/sec, -/obj/item/storage/backpack/security, -/obj/item/clothing/accessory/armband, -/obj/item/clothing/suit/armor/vest, -/obj/item/storage/box/handcuffs, -/obj/item/storage/box/deputy, -/obj/item/stock_parts/cell/gun, -/obj/item/stock_parts/cell/gun/mini, -/obj/item/stock_parts/cell/gun/mini, -/obj/item/ammo_box/magazine/co9mm, -/obj/item/ammo_box/magazine/co9mm, -/obj/item/gun/energy/e_gun, -/obj/item/gun/ballistic/automatic/pistol/commander/no_mag, -/obj/item/gun/energy/e_gun/mini, -/obj/item/gun/energy/e_gun/mini, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) -"aj" = ( -/obj/structure/disposalpipe/segment{ +/obj/effect/turf_decal/corner/opaque/white{ dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 }, -/turf/open/floor/wood, -/area/ship/crew/canteen) -"ak" = ( -/obj/effect/turf_decal/corner/opaque/ntblue{ +/obj/structure/disposalpipe/segment{ dir = 8 }, /turf/open/floor/plasteel, -/area/ship/hallway/central) -"ao" = ( -/obj/machinery/atmospherics/components/unary/passive_vent{ - dir = 4; - icon_state = "passive_vent_map-2"; - piping_layer = 1 +/area/ship/crew/canteen) +"ai" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 }, -/turf/open/floor/engine/hull, -/area/ship/external) -"ap" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/wood, +/area/ship/crew) +"aq" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/structure/cable{ icon_state = "1-2" }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"av" = ( /obj/structure/cable{ - icon_state = "2-8" + icon_state = "5-10" }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"ar" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 10 +/obj/structure/cable{ + icon_state = "1-10" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 9 - }, -/obj/structure/cable{ - icon_state = "2-8" + dir = 4 }, -/obj/structure/cable{ - icon_state = "1-8" +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/cargo) -"aE" = ( -/obj/structure/sign/nanotrasen, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/cargo/office) -"aI" = ( -/obj/item/radio/intercom/directional/north, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"aL" = ( /obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/machinery/computer/cargo{ +/turf/open/floor/plasteel/mono, +/area/ship/hallway/starboard) +"aA" = ( +/obj/docking_port/stationary{ + dwidth = 15; + height = 15; + width = 30 + }, +/turf/template_noop, +/area/template_noop) +"aC" = ( +/obj/structure/fluff/hedge, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/line{ dir = 8 }, -/obj/effect/turf_decal/corner/opaque/brown{ +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/line{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 1 +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/crew/canteen) +"aE" = ( +/obj/effect/turf_decal/industrial/warning/fulltile, +/obj/machinery/door/poddoor{ + dir = 4; + id = "harrier_disposals"; + name = "Disposals Blast Door" }, -/turf/open/floor/plasteel, -/area/ship/cargo/office) -"aW" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 +/obj/machinery/power/shieldwallgen/atmos/roundstart{ + dir = 4; + id = "harrier_disposalfield"; + locked = 1 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"aY" = ( -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 + icon_state = "0-4" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 +/turf/open/floor/plating, +/area/ship/engineering) +"aH" = ( +/obj/structure/fluff/hedge, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/end, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/crew/canteen) +"aL" = ( +/obj/structure/sign/warning/docking{ + pixel_y = 9 }, -/obj/structure/cable{ - icon_state = "4-8" +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/hallway/port) +"aO" = ( +/obj/structure/railing{ + dir = 8 }, -/obj/structure/sign/poster/official/get_your_legs{ - pixel_y = 32 +/obj/structure/extinguisher_cabinet/directional/north, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 8 }, -/obj/machinery/camera/autoname{ - dir = 6 +/obj/structure/bed/dogbed, +/mob/living/simple_animal/pet/dog/corgi/puppy{ + name = "Louis Tennant" }, -/obj/structure/railing, -/turf/open/floor/plasteel/stairs{ +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"aR" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/area/ship/hallway/central) -"bb" = ( -/obj/effect/turf_decal/corner/transparent/neutral{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/structure/sign/poster/retro/we_watch{ - pixel_x = 32 - }, -/obj/machinery/camera/autoname{ +/obj/machinery/light/directional/north, +/obj/structure/disposalpipe/segment{ dir = 8 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/mono, /area/ship/hallway/central) -"bg" = ( -/obj/effect/turf_decal/box/corners, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +"aX" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/plating, +/area/ship/engineering/engine) +"ba" = ( +/turf/open/floor/plasteel/mono, +/area/ship/hallway/starboard) +"bc" = ( +/obj/machinery/door/airlock/mining{ + name = "Cargo Office"; + req_access_txt = "31" + }, /obj/structure/cable{ icon_state = "1-2" }, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/cargo) -"bh" = ( -/obj/effect/turf_decal/corner/opaque/green{ - dir = 1 - }, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"bl" = ( -/obj/machinery/door/airlock/external/glass, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/effect/turf_decal/borderfloor, -/turf/open/floor/plasteel/tech, -/area/ship/hallway/central) -"bs" = ( -/obj/structure/table, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/plasteel, -/area/ship/crew/cryo) -"bw" = ( -/obj/effect/turf_decal/industrial/warning/corner{ +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ dir = 1 }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/light/directional/north, -/turf/open/floor/plasteel/dark, -/area/ship/science/ai_chamber) -"bA" = ( -/obj/effect/turf_decal/corner/transparent/neutral, -/obj/structure/disposalpipe/segment{ - dir = 9 +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/borderfloor{ + dir = 1 }, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"bF" = ( /turf/open/floor/plasteel, /area/ship/cargo) -"bG" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "osprey_packagesort" +"bd" = ( +/obj/structure/window/reinforced{ + dir = 8 }, -/obj/machinery/light/directional/south, -/turf/open/floor/plating, -/area/ship/cargo/office) -"bH" = ( -/obj/machinery/autolathe, -/obj/machinery/airalarm/directional/east, -/obj/effect/turf_decal/corner/opaque/yellow{ - dir = 4 +/obj/effect/turf_decal/industrial/warning{ + dir = 8 }, -/obj/effect/turf_decal/corner/opaque/yellow{ +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ dir = 1 }, -/obj/effect/turf_decal/corner/opaque/yellow, -/obj/structure/sign/poster/official/safety_eye_protection{ - pixel_y = 32 +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/crew/janitor) +"be" = ( +/obj/structure/sign/directions/security{ + dir = 8 }, -/turf/open/floor/plasteel/patterned/grid, +/obj/structure/sign/directions/engineering{ + dir = 8; + pixel_y = 6 + }, +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/hallway/central) +"bg" = ( +/obj/item/radio/intercom/directional/east, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/plasteel, /area/ship/engineering) -"bN" = ( -/obj/effect/turf_decal/corner/opaque/blue{ - dir = 1 +"bi" = ( +/obj/structure/cable{ + icon_state = "0-4" }, -/obj/effect/turf_decal/corner/opaque/blue{ +/obj/machinery/power/terminal{ dir = 8 }, /obj/effect/turf_decal/industrial/warning{ dir = 8 }, -/obj/effect/turf_decal/industrial/stand_clear{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel, -/area/ship/cargo) -"bT" = ( -/obj/structure/spider/stickyweb, -/obj/effect/spawner/lootdrop/maintenance, -/obj/item/toy/figure/cargotech, /turf/open/floor/plating, -/area/ship/cargo) -"cd" = ( -/obj/machinery/door/airlock/medical{ - name = "Infirmary"; - req_access_txt = "5"; - dir = 4 +/area/ship/engineering/atmospherics) +"bk" = ( +/obj/effect/turf_decal/atmos/air, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + external_pressure_bound = 13000 }, -/obj/effect/turf_decal/industrial/warning{ - dir = 4 +/turf/open/floor/engine/air, +/area/ship/engineering/atmospherics) +"bn" = ( +/obj/structure/cable{ + icon_state = "1-8" }, -/obj/effect/turf_decal/borderfloor{ - dir = 8 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/arrow_ccw{ + dir = 1 }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"bp" = ( +/obj/machinery/firealarm/directional/south, +/obj/structure/extinguisher_cabinet/directional/east, +/obj/effect/turf_decal/trimline/opaque/blue/line, +/obj/structure/chair/handrail{ + dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/white, /area/ship/medical) -"ce" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +"bu" = ( /obj/structure/cable{ - icon_state = "1-2" + icon_state = "4-8" }, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) -"cg" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 }, -/obj/machinery/light_switch{ - dir = 1; - pixel_x = -5; - pixel_y = -24 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"ch" = ( -/obj/effect/turf_decal/corner/opaque/brown{ +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/plasteel/mono, +/area/ship/crew/canteen) +"bv" = ( +/obj/machinery/photocopier, +/obj/machinery/light/directional/west, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"bH" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ dir = 8 }, +/obj/effect/turf_decal/trimline/opaque/vired/filled/corner, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/starboard) +"bJ" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 10 + dir = 5 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 10 +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 4; + sortTypes = list(17,18,19,20,21); + tag = "Kitchen" }, +/turf/open/floor/plasteel/mono, +/area/ship/crew/canteen) +"bK" = ( /obj/structure/cable{ - icon_state = "1-2" + icon_state = "0-2" }, -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) -"ci" = ( +/obj/machinery/atmospherics/pipe/simple/purple/visible, +/obj/machinery/atmospherics/pipe/simple/orange/visible/layer5, +/obj/machinery/power/smes/engineering, +/turf/open/floor/plating, +/area/ship/engineering/engine) +"bL" = ( /obj/structure/reagent_dispensers/fueltank, -/obj/machinery/light/directional/south, -/turf/open/floor/plasteel/patterned/grid, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/plasteel/tech, /area/ship/engineering) -"co" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/ship/science) -"cp" = ( -/obj/machinery/atmospherics/pipe/simple/dark/visible{ - dir = 10 +"bM" = ( +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/corner{ + dir = 1 }, -/obj/machinery/atmospherics/components/binary/pump/layer4{ - dir = 1; - icon_state = "pump_map-5"; - piping_layer = 5 +/turf/open/floor/plasteel, +/area/ship/storage/eva) +"bR" = ( +/obj/effect/turf_decal/ntspaceworks_big/one{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/supply/visible/layer2{ - dir = 9 +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 20; + pixel_y = 0 }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"cq" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/crew/canteen) -"ct" = ( -/obj/structure/closet/secure_closet{ - icon_state = "science"; - name = "scientist's locker"; - req_access_txt = "47" +/obj/structure/chair/handrail{ + dir = 8 }, -/obj/effect/turf_decal/corner/opaque/mauve{ - dir = 4 +/turf/open/floor/plasteel/patterned, +/area/ship/engineering) +"bU" = ( +/obj/structure/chair/sofa/blue/corpo/right, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/line{ + dir = 1 }, -/obj/effect/turf_decal/corner/opaque/mauve{ +/turf/open/floor/plasteel, +/area/ship/hallway/central) +"bW" = ( +/obj/effect/turf_decal/industrial/warning{ dir = 1 }, -/obj/item/storage/backpack/duffelbag, -/obj/item/storage/backpack/messenger/tox, -/obj/item/storage/backpack/satchel/tox, -/obj/item/storage/backpack/science, -/obj/item/clothing/shoes/sneakers/white, -/obj/item/clothing/under/rank/rnd/scientist/skirt, -/obj/item/clothing/under/rank/rnd/scientist, -/obj/item/clothing/suit/toggle/labcoat/science, -/obj/item/clothing/glasses/science, -/obj/machinery/light/directional/north, -/turf/open/floor/plasteel/white, -/area/ship/science) -"cD" = ( -/obj/machinery/door/window/brigdoor/westleft{ - name = "AI Core Access"; - req_one_access_txt = "16" +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/structure/rack, -/obj/item/aicard, -/obj/item/borg/upgrade/ai, -/obj/item/mmi/posibrain, -/turf/open/floor/circuit, -/area/ship/science/ai_chamber) -"cI" = ( -/turf/open/floor/plasteel/dark, -/area/ship/science/ai_chamber) -"cJ" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 8 +/obj/structure/cable{ + icon_state = "2-8" }, -/obj/effect/turf_decal/industrial/warning{ +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 4 }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"cK" = ( -/obj/structure/disposalpipe/segment{ - dir = 8 +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 +/obj/structure/disposalpipe/segment{ + dir = 10 }, -/turf/open/floor/wood, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/port) +"bX" = ( +/obj/machinery/vending/boozeomat, +/turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/crew/canteen) -"cL" = ( -/obj/machinery/airalarm/directional/west, +"cb" = ( +/obj/machinery/photocopier, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/wood, +/area/ship/crew/law_office) +"cc" = ( +/obj/structure/chair/sofa/blue/corpo/left/directional/west, /obj/effect/turf_decal/siding/wood{ - dir = 9 + dir = 6 }, +/obj/item/radio/intercom/directional/south, /turf/open/floor/wood, -/area/ship/crew/canteen) -"cN" = ( -/obj/machinery/mineral/unloading_machine{ - input_dir = 2; - output_dir = 1 +/area/ship/crew) +"cf" = ( +/obj/structure/sign/departments/engineering, +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/hallway/port) +"cg" = ( +/obj/machinery/power/smes/shuttle/precharged{ + dir = 4 }, -/turf/open/floor/plating, -/area/ship/cargo) -"cT" = ( -/obj/machinery/atmospherics/pipe/simple/dark/visible{ - dir = 5 +/obj/structure/cable{ + icon_state = "0-8" }, -/obj/structure/window/plasma/reinforced, -/obj/machinery/atmospherics/pipe/simple/supply/visible/layer2{ - dir = 6 +/turf/open/floor/plating, +/area/ship/engineering) +"ch" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"cY" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 }, -/obj/effect/turf_decal/corner/transparent/neutral{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"cl" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 10 + dir = 6 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 10 + dir = 6 }, -/obj/structure/cable{ - icon_state = "2-8" +/turf/open/floor/plasteel/mono, +/area/ship/hallway/starboard) +"cm" = ( +/obj/machinery/door/airlock/external, +/obj/machinery/atmospherics/pipe/layer_manifold, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/port) +"co" = ( +/obj/structure/chair/comfy/blue/corpo{ + dir = 1 }, -/obj/machinery/light_switch{ - pixel_x = 20; - dir = 8; - pixel_y = 0 +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable{ + icon_state = "0-4" }, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"dm" = ( -/obj/effect/turf_decal/industrial/stand_clear, +/turf/open/floor/wood, +/area/ship/crew/law_office) +"cp" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/crew/cryo) +"ct" = ( /obj/structure/cable{ icon_state = "1-2" }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"do" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "AI Chamber"; - req_access_txt = "24" - }, -/obj/structure/disposalpipe/segment{ - dir = 2 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/poddoor/preopen{ - id = "osprey_disposals_preopen" +/turf/open/floor/plasteel/mono, +/area/ship/storage/eva) +"cx" = ( +/obj/structure/chair/sofa/blue/corpo/left, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/line{ + dir = 1 }, -/obj/effect/turf_decal/industrial/warning/fulltile, -/obj/machinery/atmospherics/pipe/simple/dark/hidden/layer5, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/green/hidden/layer1, -/turf/open/floor/plasteel/tech/grid, -/area/ship/science/ai_chamber) -"dr" = ( -/obj/effect/turf_decal/industrial/warning/corner{ +/turf/open/floor/plasteel, +/area/ship/hallway/central) +"cy" = ( +/obj/machinery/atmospherics/pipe/manifold/purple/visible, +/obj/effect/turf_decal/industrial/warning{ dir = 8 }, -/obj/machinery/turretid{ - pixel_y = -28; - req_access = null; - req_access_txt = "16" +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"cz" = ( +/obj/machinery/vending/coffee, +/obj/machinery/light/directional/west, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"cB" = ( +/turf/closed/wall/mineral/titanium/interior, +/area/ship/hallway/starboard) +"cE" = ( +/obj/structure/table, +/obj/item/storage/box/cups{ + pixel_y = 6 }, -/obj/machinery/light/directional/south, +/obj/machinery/airalarm/directional/west, /turf/open/floor/plasteel/dark, -/area/ship/science/ai_chamber) -"dw" = ( -/obj/machinery/cryopod{ - dir = 1 +/area/ship/bridge) +"cF" = ( +/obj/effect/spawner/structure/window/shuttle, +/obj/machinery/atmospherics/pipe/simple/purple/visible{ + dir = 8 }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/plasteel/tech/grid, -/area/ship/crew/cryo) -"dx" = ( +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"cH" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/machinery/light/directional/south, /obj/structure/disposalpipe/segment{ - dir = 5 + dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ +/obj/effect/turf_decal/trimline/opaque/nsorange/line{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ship/cargo) +"cN" = ( +/obj/structure/tank_dispenser/oxygen, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/effect/turf_decal/borderfloor{ dir = 4 }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hallway/port) +"cS" = ( /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-2" }, -/turf/open/floor/plasteel/freezer, -/area/ship/crew/toilet) -"dE" = ( -/obj/structure/sign/departments/medbay/alt, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/medical) -"dJ" = ( -/obj/effect/turf_decal/corner/transparent/neutral{ +/obj/machinery/atmospherics/pipe/simple/brown/visible/layer1, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 6 + }, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"cW" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/turf_decal/trimline/opaque/nsorange/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/corner{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/bar, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/mono, /area/ship/hallway/central) -"dK" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 1 +"cY" = ( +/obj/structure/railing, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ +/obj/effect/turf_decal/siding/wideplating/dark, +/turf/open/floor/plasteel/stairs{ + dir = 8 + }, +/area/ship/bridge) +"da" = ( +/obj/effect/turf_decal/industrial/warning{ dir = 1 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 }, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/cargo) -"dN" = ( -/obj/structure/disposalpipe/segment{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/industrial/caution, +/obj/structure/chair/handrail{ dir = 8 }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/hallway/port) +"dd" = ( +/obj/structure/table, +/obj/structure/bedsheetbin, +/obj/machinery/light_switch{ + dir = 1; + pixel_x = -7; + pixel_y = -20 + }, +/obj/machinery/firealarm/directional/south{ + pixel_x = 5 + }, +/turf/open/floor/plasteel/freezer, +/area/ship/crew/toilet) +"de" = ( +/obj/machinery/advanced_airlock_controller{ + pixel_x = -24 + }, +/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/layer2{ + dir = 1 + }, +/obj/effect/turf_decal/borderfloor{ + dir = 4 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hallway/port) +"di" = ( +/obj/structure/bed, +/obj/item/bedsheet/medical, +/obj/structure/curtain, /turf/open/floor/plasteel/white, /area/ship/medical) -"dP" = ( -/obj/structure/bed, -/obj/structure/curtain/cloth/fancy, -/obj/item/bedsheet/captain, -/turf/open/floor/carpet/royalblue, -/area/ship/bridge) -"dS" = ( +"dj" = ( +/obj/structure/table/optable, +/turf/open/floor/plasteel/showroomfloor, +/area/ship/medical) +"do" = ( /obj/structure/cable{ - icon_state = "1-8" + icon_state = "4-8" }, -/obj/structure/window/plasma/reinforced{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/machinery/camera/autoname{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"ea" = ( -/obj/effect/turf_decal/industrial/warning{ +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/trimline/opaque/nsorange/filled/corner, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"dr" = ( +/obj/structure/closet/emcloset/wall/directional/west, +/turf/open/floor/plasteel, +/area/ship/bridge) +"dt" = ( +/obj/structure/sign/departments/restroom, +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/crew) +"dv" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 1 }, -/obj/structure/cable{ - icon_state = "0-4" +/obj/effect/turf_decal/trimline/opaque/vired/filled/line{ + dir = 4 }, -/obj/machinery/power/apc/auto_name/directional/west, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/crew/cryo) -"eh" = ( -/obj/effect/spawner/structure/window/shuttle, -/obj/machinery/door/poddoor/shutters{ - id = "ospreycargo" +/turf/open/floor/plasteel/dark, +/area/ship/security) +"dz" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_x = -6 }, -/obj/machinery/door/firedoor/window, -/turf/open/floor/plating, -/area/ship/cargo/office) -"ej" = ( -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 4 +/obj/item/stamp/captain{ + pixel_x = 6 + }, +/obj/item/pen/fountain/captain{ + pixel_x = -6 }, +/turf/open/floor/carpet/royalblue, +/area/ship/bridge) +"dA" = ( +/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/layer4, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/hallway/port) +"dB" = ( /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/turf_decal/corner/opaque/solgovgold{ - dir = 9 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 }, -/turf/open/floor/plasteel/dark, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/mono/dark, /area/ship/bridge) -"ep" = ( -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ +"dF" = ( +/obj/effect/turf_decal/industrial/loading{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 4 +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ship/cargo) +"dG" = ( +/turf/closed/wall/mineral/titanium/exterior, +/area/ship/storage/eva) +"dI" = ( +/obj/machinery/door/airlock{ + dir = 4; + name = "Custodial Closet"; + req_access_txt = "26" }, /obj/structure/cable{ - icon_state = "2-8" + icon_state = "4-8" }, -/obj/structure/cable{ - icon_state = "1-8" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 }, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"ez" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/corner/opaque/mauve, -/obj/effect/turf_decal/corner/opaque/mauve{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ dir = 8 }, -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/door/firedoor/border_only{ + dir = 4 }, -/turf/open/floor/plasteel/white, -/area/ship/science) -"eB" = ( -/obj/machinery/vending/cola/random, /obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/effect/turf_decal/corner/opaque/purple{ +/obj/effect/turf_decal/borderfloor{ dir = 8 }, /turf/open/floor/plasteel, -/area/ship/hallway/central) -"eD" = ( -/obj/structure/bed, -/obj/structure/curtain/cloth/fancy, -/obj/item/bedsheet/head_of_personnel, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/carpet/blue, -/area/ship/bridge) -"eE" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/effect/turf_decal/industrial/warning{ +/area/ship/crew/janitor) +"dJ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 4 }, -/turf/open/floor/plating, -/area/ship/engineering) -"eG" = ( -/obj/structure/disposalpipe/segment, +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_x = -32 + }, +/turf/open/floor/plasteel/mono, +/area/ship/crew/canteen) +"dK" = ( +/obj/machinery/suit_storage_unit/standard_unit, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 + dir = 5 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 9 +/obj/structure/sign/poster/official/safety_internals{ + pixel_x = -32 }, -/obj/structure/cable{ - icon_state = "1-8" +/obj/effect/turf_decal/borderfloor{ + dir = 4 }, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"eP" = ( -/obj/structure/disposalpipe/segment{ +/turf/open/floor/plasteel/tech/grid, +/area/ship/hallway/port) +"dL" = ( +/obj/effect/turf_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/structure/chair/handrail{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/hallway/port) +"dN" = ( +/obj/structure/railing{ + dir = 10; + layer = 3.1 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/trimline/opaque/nsorange/filled/corner{ dir = 4 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/chair/handrail{ + dir = 8 }, -/obj/effect/turf_decal/corner/opaque/blue{ - dir = 1 +/turf/open/floor/plasteel, +/area/ship/storage/eva) +"dO" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" }, -/obj/effect/turf_decal/corner/opaque/blue{ - dir = 4 +/obj/structure/cable/yellow{ + icon_state = "1-4" }, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"eT" = ( -/obj/structure/disposalpipe/sorting/mail/flip{ +/obj/machinery/atmospherics/pipe/simple/green/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/purple/hidden, +/obj/structure/catwalk/over/plated_catwalk, +/obj/machinery/computer/atmos_control/incinerator{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ship/engineering/engine) +"dV" = ( +/turf/closed/wall/mineral/titanium/exterior, +/area/ship/hallway/starboard) +"dX" = ( +/obj/effect/spawner/structure/window/shuttle, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"ea" = ( +/obj/structure/closet/secure_closet/engineering_welding, +/obj/effect/turf_decal/industrial/outline/yellow, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"ec" = ( +/obj/structure/table/reinforced, +/obj/machinery/computer/secure_data/laptop{ dir = 4; - sortTypes = list(5); - tag = "CE Office" + pixel_y = 6 }, /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/sign/poster/official/moth/hardhats{ - pixel_y = -32 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"eX" = ( -/obj/effect/turf_decal/industrial/warning{ +/obj/effect/turf_decal/trimline/opaque/vired/filled/line{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"eg" = ( +/obj/machinery/computer/helm/viewscreen/directional/south, +/turf/open/floor/carpet/executive, +/area/ship/crew/law_office) +"ei" = ( +/obj/machinery/computer/security{ dir = 4 }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"eZ" = ( -/obj/structure/sign/warning/vacuum/external, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/science/ai_chamber) -"fa" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/trimline/opaque/vired/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/vired/corner{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/camera, +/obj/structure/window/reinforced{ + dir = 8 }, -/turf/open/floor/plasteel, -/area/ship/cargo) -"fb" = ( -/obj/structure/bed, -/obj/item/bedsheet/dorms, -/obj/structure/curtain/bounty, -/obj/structure/sign/poster/official/ue_no{ - pixel_x = -32 - }, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"fc" = ( -/obj/structure/table/wood, -/obj/machinery/light/small/directional/north, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"fg" = ( -/obj/structure/disposalpipe/segment{ +/turf/open/floor/plasteel/dark, +/area/ship/security) +"ej" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 8 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, +/turf/open/floor/plasteel/showroomfloor, +/area/ship/medical) +"er" = ( /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-8" }, -/turf/open/floor/plasteel, -/area/ship/cargo) -"fh" = ( -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/item/trash/can/food/peaches/maint, -/obj/machinery/light/small/directional/north, -/turf/open/floor/plating, -/area/ship/cargo) -"fj" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 }, -/obj/structure/cable{ - icon_state = "1-2" +/obj/effect/turf_decal/siding/wood, +/obj/machinery/light/small/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 9 }, +/turf/open/floor/wood, +/area/ship/crew) +"es" = ( +/obj/structure/closet/secure_closet/engineering_electrical, /obj/structure/cable{ - icon_state = "1-4" + icon_state = "1-8" }, -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) -"fn" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk, -/obj/item/radio/intercom/directional/north{ - pixel_y = 22 +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/industrial/outline/yellow, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"ew" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/plating, -/area/ship/crew/janitor) -"fF" = ( -/obj/effect/turf_decal/industrial/warning{ +/obj/machinery/flasher{ + id = "Cell 1"; + pixel_x = -21 + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"ex" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/machinery/airalarm/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"ez" = ( /obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high/plus, -/obj/effect/turf_decal/corner/opaque/mauve{ - dir = 4 +/obj/item/lighter{ + pixel_x = 6; + pixel_y = 1 }, -/obj/effect/turf_decal/corner/opaque/mauve{ - dir = 1 +/obj/item/storage/fancy/cigarettes/cigpack_cannabis{ + pixel_x = -3; + pixel_y = 11 }, +/turf/open/floor/plasteel, +/area/ship/engineering) +"eA" = ( +/obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable{ icon_state = "0-2" }, -/obj/item/assembly/flash/handheld{ - pixel_x = 5 +/turf/open/floor/circuit, +/area/ship/science/ai_chamber) +"eG" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/item/assembly/flash/handheld{ - pixel_x = -5 +/obj/machinery/door/airlock/engineering/glass{ + dir = 4; + name = "Engineering"; + req_access_txt = "10" }, -/obj/machinery/power/apc/auto_name/directional/north, -/turf/open/floor/plasteel/white, -/area/ship/science) -"fJ" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/turf/open/floor/engine/hull, -/area/ship/external) -"fU" = ( -/obj/machinery/button/door{ - dir = 1; - id = "osprey_atmos"; - pixel_y = -25 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 }, -/obj/effect/turf_decal/industrial/warning{ +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ dir = 4 }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"ga" = ( -/obj/structure/table, /obj/structure/disposalpipe/segment{ dir = 8 }, +/obj/effect/turf_decal/borderfloor{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering) +"eJ" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/arrow_cw{ + dir = 1 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"eQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/turf/open/floor/wood, -/area/ship/crew/canteen) -"gc" = ( /obj/structure/disposalpipe/segment{ - dir = 2 - }, -/obj/effect/turf_decal/corner/transparent/neutral{ - dir = 1 + dir = 8 }, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/mono, /area/ship/hallway/central) -"gg" = ( -/obj/effect/turf_decal/industrial/warning{ +"eX" = ( +/obj/machinery/door/airlock/medical{ + dir = 4; + req_access_txt = "45" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"gi" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/turf/open/floor/plasteel, -/area/ship/cargo) -"go" = ( -/obj/machinery/atmospherics/pipe/layer_manifold/visible{ +/obj/machinery/door/firedoor/border_only{ dir = 4 }, -/obj/structure/sign/poster/contraband/tools{ - pixel_y = 32 +/obj/machinery/door/firedoor/border_only{ + dir = 8 }, -/obj/structure/reagent_dispensers/foamtank, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"gt" = ( -/obj/effect/turf_decal/corner/opaque/white{ +/turf/open/floor/plasteel/white, +/area/ship/medical) +"eY" = ( +/turf/open/floor/carpet/executive, +/area/ship/crew/law_office) +"eZ" = ( +/obj/structure/noticeboard{ + name = "Supply Requests Board"; + pixel_y = 25 + }, +/obj/structure/table/reinforced, +/obj/machinery/door/window/eastright, +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = "harriercargo" + }, +/obj/machinery/door/firedoor/border_only{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/white{ +/obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/effect/landmark/start/cook, -/obj/machinery/holopad/emergency/bar, -/turf/open/floor/plasteel, -/area/ship/crew/canteen) -"gw" = ( -/obj/effect/turf_decal/industrial/warning, -/turf/open/floor/plasteel/patterned, +/turf/open/floor/plating, /area/ship/cargo) -"gy" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, +"fb" = ( /obj/structure/cable{ - icon_state = "1-4" + icon_state = "1-2" }, -/obj/structure/cable{ - icon_state = "1-8" +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/purple/hidden, +/obj/structure/disposalpipe/segment, +/obj/structure/closet/emcloset/wall/directional/west, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering) +"fc" = ( +/obj/structure/table/wood/reinforced, +/obj/machinery/fax/nanotrasen, +/obj/machinery/light/small/directional/east, +/obj/machinery/button/door{ + dir = 1; + id = "harrieriaa"; + name = "window shutter"; + pixel_y = -22 + }, +/turf/open/floor/wood, +/area/ship/crew/law_office) +"fd" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/instrument/guitar{ + pixel_y = -2 }, -/obj/effect/turf_decal/industrial/shutoff, /turf/open/floor/plasteel, -/area/ship/hallway/central) -"gB" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ +/area/ship/engineering) +"fh" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/effect/turf_decal/industrial/warning{ dir = 1 }, -/turf/open/floor/plasteel, -/area/ship/crew/cryo) -"gC" = ( -/obj/machinery/door/poddoor/shutters{ - id = "osprey_atmos"; - name = "Atmospherics Storage"; +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 8 }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/atmospherics) -"gE" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/industrial/warning, +/obj/item/radio/intercom/directional/east, /turf/open/floor/plasteel/patterned, -/area/ship/cargo) -"gH" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"gJ" = ( -/obj/effect/turf_decal/borderfloor{ - dir = 8 - }, -/obj/machinery/advanced_airlock_controller{ - pixel_x = -24 +/area/ship/engineering/engine) +"fi" = ( +/obj/machinery/suit_storage_unit/standard_unit, +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 }, -/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/layer2, /turf/open/floor/plasteel/tech/grid, +/area/ship/storage/eva) +"fl" = ( +/obj/structure/chair/sofa/blue/corpo/left/directional/north, +/turf/open/floor/plasteel, /area/ship/hallway/central) -"gM" = ( -/obj/effect/spawner/structure/window/shuttle, -/obj/machinery/door/poddoor/shutters{ - id = "ospreywindows" +"fn" = ( +/obj/structure/sink{ + dir = 8; + pixel_x = 12; + pixel_y = 0 }, -/obj/machinery/door/firedoor/heavy, -/turf/open/floor/plating, -/area/ship/crew/canteen) -"gT" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/bridge) -"gV" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/crew/cryo) -"gW" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/effect/turf_decal/industrial/shutoff, -/turf/open/floor/plasteel, -/area/ship/cargo) -"gX" = ( -/obj/machinery/power/terminal, -/obj/structure/cable, -/turf/open/floor/plating, -/area/ship/engineering) -"hc" = ( -/obj/effect/landmark/start/cargo_technician, -/turf/open/floor/plasteel, -/area/ship/cargo/office) -"hd" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 8 +/obj/structure/sign/poster/official/cleanliness{ + pixel_x = 32 }, -/turf/open/floor/circuit, -/area/ship/science/ai_chamber) -"hg" = ( +/turf/open/floor/plasteel/white, +/area/ship/medical) +"fr" = ( /obj/effect/turf_decal/industrial/warning{ dir = 1 }, @@ -968,3046 +1024,2821 @@ dir = 9 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/hallway/central) -"hh" = ( -/turf/closed/wall/mineral/titanium, -/area/ship/science) -"hj" = ( -/obj/machinery/mass_driver{ - dir = 8; - id = "osprey_disposals" +/obj/structure/chair/handrail{ + dir = 8 }, -/obj/item/reagent_containers/food/snacks/deadmouse, -/obj/structure/window/reinforced{ - dir = 4 +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/hallway/starboard) +"fu" = ( +/obj/machinery/atmospherics/pipe/simple/brown/visible/layer1{ + dir = 8 }, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"fv" = ( +/obj/effect/spawner/structure/window/shuttle, +/obj/machinery/door/firedoor/window, /turf/open/floor/plating, -/area/ship/crew/janitor) -"hl" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/corner/opaque/lightgrey{ - dir = 9 +/area/ship/medical) +"fw" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 }, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) -"hm" = ( -/obj/machinery/holopad/emergency/atmos, -/obj/effect/turf_decal/box, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"hr" = ( -/obj/machinery/power/smes/engineering, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/structure/cable{ - icon_state = "0-4" - }, -/obj/effect/turf_decal/industrial/outline/yellow, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"hs" = ( -/obj/structure/sign/number/eight{ - color = "Black"; - dir = 1 - }, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/science) -"ht" = ( -/obj/structure/closet/secure_closet{ - icon_state = "cap"; - name = "\proper captain's locker"; - req_access_txt = "20" + icon_state = "1-2" }, -/obj/item/storage/backpack/duffelbag/captain, -/obj/item/storage/backpack/messenger/com, -/obj/item/storage/backpack/satchel/cap, -/obj/item/storage/backpack/captain, -/obj/item/clothing/shoes/laceup, -/obj/item/clothing/under/nanotrasen/captain/skirt, -/obj/item/clothing/under/nanotrasen/captain, -/obj/item/clothing/suit/armor/nanotrasen/captain, -/obj/item/clothing/suit/armor/nanotrasen/captain/parade, -/obj/item/clothing/glasses/sunglasses, -/obj/item/clothing/head/caphat/nt, -/obj/item/storage/belt/sabre, -/obj/item/assembly/flash/handheld, -/obj/item/disk/nuclear/fake{ - desc = "An ICW-era self-destruct authorization disk. The codes on this are long past obsolete, but it's still a flagrant violation of company policy."; - name = "outdated nuclear authentication disk" - }, -/obj/item/clothing/head/caphat/parade, -/obj/item/clothing/suit/armor/vest/capcarapace, -/obj/item/clothing/gloves/color/captain/nt, -/turf/open/floor/carpet/royalblue, +/turf/open/floor/plasteel/mono/dark, /area/ship/bridge) -"hv" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 5 +"fz" = ( +/obj/structure/sign/directions/engineering{ + dir = 8; + pixel_y = 6 }, -/turf/open/floor/plasteel/grimy, -/area/ship/crew/dorm) -"hw" = ( -/obj/machinery/computer/rdconsole/core, -/obj/effect/turf_decal/industrial/outline/yellow, -/turf/open/floor/plasteel/dark, -/area/ship/science) -"hy" = ( -/obj/structure/chair, -/obj/structure/disposalpipe/segment{ +/obj/structure/sign/directions/command{ dir = 8 }, -/turf/open/floor/plasteel, +/turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/hallway/central) -"hD" = ( -/obj/machinery/disposal/deliveryChute{ - dir = 4 +"fH" = ( +/obj/machinery/atmospherics/pipe/simple/brown/visible/layer1, +/obj/machinery/atmospherics/pipe/simple/purple/visible{ + dir = 10 }, -/obj/structure/window/reinforced{ - dir = 1 +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"fI" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/hallway/starboard) +"fO" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 }, -/obj/machinery/door/window/eastright, -/obj/structure/disposalpipe/trunk, -/obj/structure/window/reinforced{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/structure/window/reinforced, -/turf/open/floor/plating, -/area/ship/cargo) -"hG" = ( -/turf/open/floor/plasteel/white, -/area/ship/science) -"hL" = ( /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plasteel/stairs{ - dir = 4 - }, -/area/ship/hallway/central) -"hQ" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 8 - }, -/obj/docking_port/mobile{ +/obj/structure/extinguisher_cabinet/directional/south, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"fR" = ( +/obj/structure/filingcabinet/chestdrawer{ + density = 0; dir = 4; - launch_status = 0; - preferred_direction = 4; - port_direction = 2 - }, -/turf/open/floor/engine/hull, -/area/ship/external) -"hU" = ( -/obj/machinery/atmospherics/components/unary/shuttle/heater{ - dir = 4 + pixel_x = -6 }, -/obj/machinery/door/window/eastright{ - name = "Engine Access" +/turf/open/floor/plasteel/white, +/area/ship/medical) +"fT" = ( +/turf/open/floor/plasteel/white, +/area/ship/medical) +"fX" = ( +/obj/structure/bodycontainer/morgue{ + dir = 2 }, -/obj/structure/window/plasma/reinforced/spawner/west, -/obj/structure/window/plasma/reinforced/spawner, -/obj/machinery/door/poddoor{ - id = "osprey_thruster_starboard"; - name = "Thruster Blast Door"; - dir = 4 +/obj/machinery/light/small/directional/east, +/turf/open/floor/plasteel/showroomfloor, +/area/ship/medical) +"fZ" = ( +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 20; + pixel_y = 0 }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"ie" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/carpet/blue, +/area/ship/crew/dorm) +"gf" = ( /obj/structure/cable{ - icon_state = "1-2" + icon_state = "1-4" }, -/obj/effect/landmark/observer_start, -/obj/structure/disposalpipe/segment{ - dir = 2 +/obj/effect/turf_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 }, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"ik" = ( -/obj/machinery/portable_atmospherics/scrubber/huge/movable, -/obj/machinery/light/small/directional/east, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering/atmospherics) -"il" = ( /obj/structure/disposalpipe/segment{ - dir = 8 + dir = 9 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/engine) +"gg" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"in" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/light_switch{ + pixel_x = -5; + pixel_y = 20 }, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"ip" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/structure/disposalpipe/segment{ + dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 1; - sortTypes = list(4); - tag = "Engineering" +/turf/open/floor/plasteel, +/area/ship/crew) +"gk" = ( +/turf/closed/wall/mineral/titanium/exterior, +/area/ship/security) +"gm" = ( +/obj/structure/chair/comfy/blue/corpo/directional/west, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/carpet/blue, +/area/ship/crew/dorm) +"gn" = ( +/obj/structure/AIcore, +/obj/item/radio/intercom/wideband/directional/west, +/obj/item/radio/intercom/directional/north{ + freqlock = 1; + frequency = 1351 }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/circuit, +/area/ship/science/ai_chamber) +"go" = ( +/obj/effect/turf_decal/industrial/warning, /obj/structure/cable{ - icon_state = "1-8" + icon_state = "1-2" }, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"ir" = ( -/obj/machinery/newscaster/directional/north{ - pixel_y = 32 +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 20; + pixel_y = 5 }, -/obj/machinery/camera/autoname, -/obj/machinery/jukebox, -/obj/effect/turf_decal/corner/opaque/white{ +/obj/effect/turf_decal/trimline/opaque/ntblue/arrow_cw{ dir = 8 }, -/obj/effect/turf_decal/corner/opaque/white{ +/obj/effect/turf_decal/trimline/opaque/nsorange/filled/corner{ dir = 4 }, -/obj/machinery/light/directional/east, -/turf/open/floor/plasteel, -/area/ship/crew/canteen) -"it" = ( -/obj/machinery/sleeper{ +/turf/open/floor/plasteel/patterned, +/area/ship/storage/eva) +"gq" = ( +/obj/effect/turf_decal/corner/opaque/white{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/lime{ - dir = 1 - }, -/obj/effect/turf_decal/corner/opaque/lime{ +/obj/effect/turf_decal/corner/opaque/white{ dir = 8 }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"iv" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 8 +/obj/structure/chair/handrail{ + dir = 1 }, -/turf/open/floor/plasteel/grimy, -/area/ship/crew/dorm) -"iw" = ( -/turf/closed/wall/mineral/titanium, -/area/ship/cargo) -"iA" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 +/turf/open/floor/plasteel, +/area/ship/crew/canteen) +"gA" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/effect/turf_decal/corner/opaque/ntblue{ - dir = 8 +/obj/structure/cable{ + icon_state = "2-8" }, -/obj/effect/turf_decal/corner/opaque/ntblue{ - dir = 1 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/turf/open/floor/plasteel, +/area/ship/crew) +"gC" = ( +/obj/structure/cable{ + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/light/directional/north, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"iD" = ( -/obj/structure/table/reinforced, -/obj/machinery/reagentgrinder{ - pixel_y = 8 - }, -/obj/effect/turf_decal/corner/opaque/white{ - dir = 4 +/obj/machinery/light_switch{ + dir = 1; + pixel_x = -5; + pixel_y = -20 }, -/obj/effect/turf_decal/corner/opaque/white{ +/obj/structure/disposalpipe/segment{ dir = 8 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/mono, /area/ship/crew/canteen) -"iI" = ( -/turf/closed/wall/mineral/titanium, -/area/ship/cargo/office) -"iM" = ( -/obj/structure/table, -/obj/item/storage/toolbox/mechanical{ - pixel_x = 4; - pixel_y = 9 - }, -/obj/item/stack/cable_coil/cyan{ - pixel_x = -3 +"gD" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/item/stack/cable_coil/cyan{ - pixel_x = 5 +/turf/open/floor/carpet/executive, +/area/ship/crew/law_office) +"gE" = ( +/obj/effect/spawner/structure/window/shuttle, +/obj/machinery/door/firedoor/window, +/obj/machinery/door/poddoor{ + dir = 1; + id = "harrierbridge"; + name = "Window Blast Door" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 10 +/obj/structure/cable{ + icon_state = "0-2" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plating, +/area/ship/bridge) +"gF" = ( /obj/structure/cable{ - icon_state = "1-2" + icon_state = "4-8" }, -/obj/item/storage/box/stockparts/basic, -/turf/open/floor/plasteel/white, -/area/ship/science) -"iO" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/freezer, +/area/ship/crew/toilet) +"gH" = ( /obj/structure/bed, +/obj/item/bedsheet/nanotrasen, /obj/structure/curtain/bounty, -/obj/item/bedsheet/dorms, /turf/open/floor/wood, -/area/ship/crew/dorm) -"iQ" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/brown, -/obj/machinery/light/directional/south, -/obj/structure/railing{ +/area/ship/crew/law_office) +"gM" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/starboard) +"gN" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 4 }, -/turf/open/floor/plasteel, -/area/ship/cargo) -"iZ" = ( -/obj/structure/ore_box, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/machinery/power/apc/auto_name/directional/west, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/cargo) -"ja" = ( -/obj/structure/sign/number/one{ - color = "Black"; - dir = 1 +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 }, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/science) -"jc" = ( -/obj/machinery/light/directional/north, -/turf/open/floor/plasteel/freezer, -/area/ship/crew/toilet) -"je" = ( /obj/structure/disposalpipe/segment{ - dir = 8 + dir = 10 }, -/obj/effect/turf_decal/industrial/warning{ - dir = 8 +/turf/open/floor/plasteel/mono, +/area/ship/hallway/port) +"gO" = ( +/obj/item/storage/backpack/satchel/med, +/obj/item/clothing/shoes/sneakers/white, +/obj/item/clothing/under/nanotrasen/medical, +/obj/item/clothing/suit/toggle/labcoat/nanotrasen, +/obj/item/clothing/glasses/hud/health, +/obj/item/storage/pill_bottle/stimulant{ + pixel_x = 5 }, -/turf/open/floor/plasteel, -/area/ship/crew/janitor) -"jk" = ( -/obj/machinery/medical_kiosk, -/obj/effect/turf_decal/corner/opaque/blue{ - dir = 8 +/obj/structure/closet/secure_closet/medical3{ + populate = 0 }, -/obj/effect/turf_decal/corner/opaque/blue, -/obj/structure/sign/poster/official/help_others{ - pixel_y = -32 +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable{ + icon_state = "0-8" }, /turf/open/floor/plasteel/white, /area/ship/medical) -"jn" = ( -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "2-4" +"gQ" = ( +/obj/item/table_bell{ + pixel_x = -4; + pixel_y = 13 }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"jo" = ( -/obj/effect/turf_decal/industrial/loading{ - dir = 1 +/obj/structure/table/reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/obj/structure/window/reinforced{ + dir = 4 }, -/obj/structure/ore_box, -/obj/machinery/button/door{ - dir = 8; - id = "ospreydoors"; - name = "Blast Door Control"; - pixel_x = 25; - pixel_y = 5 +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = "harriercargo" }, -/obj/machinery/button/shieldwallgen{ - dir = 8; - id = "osprey_cargofield"; - pixel_x = 24; - pixel_y = -5 +/obj/machinery/door/firedoor/border_only{ + dir = 4 }, -/turf/open/floor/plasteel/patterned/cargo_one, +/turf/open/floor/plating, /area/ship/cargo) -"jC" = ( -/obj/machinery/suit_storage_unit/standard_unit, -/obj/effect/turf_decal/borderfloor{ - dir = 8 +"gU" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 6 + dir = 4 }, -/obj/structure/sign/poster/official/safety_internals{ - pixel_x = -32 +/obj/machinery/light_switch{ + pixel_x = -5; + pixel_y = 20 }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/hallway/central) -"jG" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 4 +/obj/effect/turf_decal/siding/yellow{ + dir = 1 }, /obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/structure/table, -/obj/effect/turf_decal/corner/opaque/brown{ +/turf/open/floor/plasteel, +/area/ship/engineering) +"gV" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 1 - }, -/obj/item/storage/box/shipping, -/turf/open/floor/plasteel, -/area/ship/cargo/office) -"jM" = ( -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 4; - sortTypes = list(17,18,19,20,21); - tag = "Kitchen" +/turf/open/floor/plasteel/mono, +/area/ship/crew/canteen) +"gX" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/wood, -/area/ship/crew/canteen) -"jU" = ( -/obj/structure/sink/kitchen{ - dir = 4; - pixel_x = -12 +/obj/machinery/atmospherics/pipe/simple/brown/visible/layer1, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"ha" = ( +/obj/machinery/door/airlock/external/glass, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/borderfloor, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/port) +"hj" = ( +/obj/structure/sign/warning/vacuum, +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/storage/eva) +"hq" = ( +/obj/structure/crate_shelf, +/obj/structure/closet/crate{ + name = "food crate" }, -/obj/effect/turf_decal/corner/opaque/white{ +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/obj/effect/spawner/lootdrop/ration, +/obj/item/storage/cans/sixbeer, +/obj/machinery/light/directional/west, +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) +"hx" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/white{ - dir = 8 - }, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/plasteel, -/area/ship/crew/canteen) -"kb" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"ke" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Infirmary"; +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 4 }, /obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/turf/open/floor/plasteel/mono, +/area/ship/hallway/starboard) +"hy" = ( +/obj/structure/table, +/obj/item/storage/box/lights/mixed{ + pixel_x = 4; + pixel_y = 9 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ +/obj/item/storage/box/mousetraps{ + pixel_x = -9 + }, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/crew/janitor) +"hA" = ( +/obj/effect/turf_decal/trimline/transparent/white/filled/warning{ dir = 4 }, -/obj/effect/turf_decal/borderfloor{ +/obj/effect/turf_decal/trimline/transparent/white/filled/warning{ dir = 8 }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, /obj/machinery/door/firedoor/border_only{ dir = 8 }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"kf" = ( -/obj/machinery/door/airlock{ - name = "Custodial Closet"; +/obj/machinery/door/firedoor/border_only{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 8 +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"hB" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/obj/machinery/door/airlock/medical/glass{ + dir = 4; + name = "Infirmary"; + req_ship_access = 0 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/effect/turf_decal/borderfloor{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/border_only{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/machinery/door/firedoor/border_only{ +/obj/structure/disposalpipe/segment{ dir = 8 }, -/turf/open/floor/plasteel, -/area/ship/crew/janitor) -"ki" = ( -/obj/effect/turf_decal/industrial/warning{ +/obj/effect/turf_decal/borderfloor{ dir = 8 }, -/obj/machinery/light/small/directional/north, /turf/open/floor/plasteel, -/area/ship/crew/janitor) -"ko" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/purple{ +/area/ship/medical) +"hD" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ dir = 1 }, -/obj/effect/turf_decal/corner/opaque/purple{ - dir = 4 - }, -/obj/structure/railing{ - dir = 4 +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/borderfloor, +/obj/machinery/door/airlock/public/glass{ + dir = 1; + name = "Canteen" }, -/obj/machinery/light/directional/north, /turf/open/floor/plasteel, -/area/ship/cargo) -"kB" = ( -/obj/machinery/atmospherics/components/unary/shuttle/heater{ - dir = 4 - }, -/obj/machinery/door/window/eastleft{ - name = "Engine Access" - }, -/obj/structure/window/plasma/reinforced/spawner/west, -/obj/structure/window/plasma/reinforced/spawner/north, -/obj/machinery/door/poddoor{ - id = "osprey_thruster_starboard"; - name = "Thruster Blast Door"; - dir = 4 +/area/ship/crew/canteen) +"hE" = ( +/obj/structure/sign/poster/contraband/syndiemoth{ + pixel_y = 32 }, +/obj/item/toy/plush/moth/firewatch, +/obj/item/toy/sword, /turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"kD" = ( -/obj/structure/window/plasma/reinforced, +/area/ship/engineering/engine) +"hH" = ( +/obj/effect/spawner/structure/window/shuttle, +/obj/machinery/door/firedoor/window, +/turf/open/floor/plating, +/area/ship/engineering) +"hI" = ( +/obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "0-4" }, -/obj/machinery/atmospherics/pipe/simple/cyan/visible, -/obj/effect/turf_decal/atmos/air{ +/turf/open/floor/carpet/blue, +/area/ship/crew/dorm) +"hL" = ( +/obj/effect/landmark/start/janitor, +/obj/structure/chair{ dir = 1 }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"kG" = ( -/obj/machinery/power/terminal{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ dir = 8 }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/crew/janitor) +"hP" = ( /obj/structure/cable{ - icon_state = "0-4" + icon_state = "1-8" }, -/obj/effect/turf_decal/industrial/warning{ - dir = 4 +/obj/structure/cable{ + icon_state = "1-4" }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"kL" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -6; - pixel_y = 3 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 }, -/obj/item/pen{ - pixel_x = 7 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 }, -/obj/item/folder{ - pixel_x = -6; - pixel_y = 3 +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ship/storage/eva) +"hQ" = ( +/obj/machinery/computer/monitor{ + dir = 8; + icon_state = "computer-left" }, -/obj/machinery/button/door{ - dir = 4; - id = "ospreysci"; - name = "Shutter Control"; - pixel_x = -25; - pixel_y = -5 +/turf/open/floor/plasteel, +/area/ship/engineering) +"hV" = ( +/obj/machinery/door/airlock/command{ + name = "Restroom" }, -/obj/machinery/light_switch{ - dir = 4; - pixel_x = -24; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/effect/turf_decal/borderfloorblack, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"hY" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/science/ai_chamber) +"if" = ( +/obj/machinery/holopad/emergency/medical, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 }, -/obj/effect/turf_decal/corner/opaque/mauve, -/obj/effect/turf_decal/corner/opaque/mauve{ +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/opaque/blue/filled/corner, +/obj/effect/turf_decal/trimline/opaque/blue/filled/corner{ dir = 8 }, -/obj/effect/turf_decal/corner/opaque/mauve{ +/obj/effect/turf_decal/trimline/opaque/blue/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/blue/filled/corner{ dir = 1 }, /turf/open/floor/plasteel/white, -/area/ship/science) -"kP" = ( -/turf/open/floor/engine/hull, -/area/ship/external) -"kQ" = ( +/area/ship/medical) +"ig" = ( /turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/crew/janitor) -"kS" = ( -/obj/structure/disposalpipe/segment{ - dir = 2 +/area/ship/crew/law_office) +"ih" = ( +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/industrial/stand_clear, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ship/storage/eva) +"ir" = ( +/obj/structure/sign/departments/medbay/alt, +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/medical) +"iy" = ( +/obj/machinery/light/small/directional/east, +/obj/structure/closet/wall/directional/south, +/obj/item/clothing/shoes/sneakers/black, +/obj/item/clothing/suit/apron/chef, +/obj/item/clothing/under/rank/civilian/chef, +/obj/item/clothing/head/chefhat, +/obj/item/storage/backpack/messenger, +/turf/open/floor/plasteel/freezer, +/area/ship/crew/canteen) +"iz" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/white, +/area/ship/medical) +"iA" = ( +/obj/machinery/suit_storage_unit/standard_unit, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 }, -/obj/structure/disposalpipe/segment{ - dir = 8 +/obj/structure/sign/poster/official/safety_internals{ + pixel_x = -32 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/corner/opaque/brown{ +/obj/effect/turf_decal/borderfloor{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 1 +/turf/open/floor/plasteel/tech/grid, +/area/ship/hallway/starboard) +"iD" = ( +/obj/structure/cable{ + icon_state = "1-8" }, /obj/structure/cable{ icon_state = "1-2" }, -/turf/open/floor/plasteel, -/area/ship/cargo/office) -"kU" = ( -/obj/machinery/recharge_station, -/turf/open/floor/circuit, -/area/ship/science/ai_chamber) -"kV" = ( -/obj/effect/spawner/structure/window/shuttle, -/obj/machinery/door/poddoor/shutters{ - id = "ospreywindows"; +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/machinery/door/firedoor/heavy, -/turf/open/floor/plating, -/area/ship/hallway/central) -"kZ" = ( -/obj/machinery/vending/snack/random, -/obj/structure/disposalpipe/segment{ - dir = 5 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/effect/turf_decal/corner/transparent/neutral{ - dir = 1 +/obj/structure/disposalpipe/segment{ + dir = 8 }, -/obj/structure/railing{ - layer = 2.91 +/obj/effect/turf_decal/trimline/opaque/ntblue/line{ + dir = 8 }, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"la" = ( -/obj/item/kirbyplants/random, -/obj/machinery/light/directional/north, -/obj/structure/railing, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"lb" = ( +/turf/open/floor/plasteel/mono, +/area/ship/hallway/port) +"iG" = ( +/obj/structure/chair/office, /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/turf_decal/industrial/warning{ - dir = 1 - }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"lh" = ( -/obj/structure/chair{ +/turf/open/floor/carpet/royalblue, +/area/ship/bridge) +"iI" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/wood, -/area/ship/crew/canteen) -"li" = ( -/turf/template_noop, -/area/template_noop) -"lk" = ( -/obj/effect/spawner/structure/window/shuttle, -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/obj/machinery/door/poddoor/shutters{ - id = "ospreycargo" +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/machinery/door/firedoor/window, -/turf/open/floor/plating, -/area/ship/cargo/office) -"ll" = ( /obj/structure/disposalpipe/segment{ - dir = 2 + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/port) +"iM" = ( /obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/poddoor/preopen{ - id = "osprey_disposals_preopen" - }, -/obj/effect/turf_decal/industrial/warning/fulltile, -/obj/machinery/atmospherics/pipe/simple/dark/hidden/layer5, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/machinery/atmospherics/pipe/simple/green/hidden/layer1, -/obj/structure/sign/warning/securearea{ - pixel_x = 25 - }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/science/ai_chamber) -"lr" = ( -/obj/machinery/door/window/brigdoor/westleft{ - name = "AI Core Access"; - req_one_access_txt = "16" + icon_state = "1-4" }, -/obj/structure/AIcore, -/obj/item/circuitboard/aicore, -/obj/item/stack/sheet/rglass{ - amount = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 }, -/obj/item/radio/intercom/directional/south, -/obj/item/radio/intercom/directional/north{ - frequency = 1351; - freqlock = 1 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/item/radio/intercom/wideband/directional/east, -/turf/open/floor/circuit, -/area/ship/science/ai_chamber) -"lt" = ( /obj/structure/disposalpipe/segment{ - dir = 8 + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/ntblue/line{ + dir = 1 }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"iP" = ( /obj/effect/turf_decal/siding/wood{ dir = 8 }, +/obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/wood, -/area/ship/crew/canteen) -"lv" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/area/ship/crew) +"iQ" = ( +/obj/machinery/door/window/westleft{ + req_access_txt = "2" }, -/turf/open/floor/carpet/blue, -/area/ship/bridge) -"ly" = ( -/obj/structure/chair{ +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/trimline/opaque/vired/filled/warning{ dir = 8 }, -/obj/structure/disposalpipe/segment{ - dir = 8 +/obj/effect/turf_decal/trimline/opaque/vired/corner, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"iS" = ( +/obj/effect/turf_decal/trimline/opaque/ntblue/line{ + dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"iT" = ( +/obj/structure/disposaloutlet{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 +/obj/structure/disposalpipe/trunk{ + dir = 1 }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/wood, -/area/ship/crew/canteen) -"lz" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"lA" = ( -/obj/machinery/portable_atmospherics/pump, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering/atmospherics) -"lF" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/conveyor{ + dir = 1; + id = "harrier_garbage" }, +/turf/open/floor/plating, +/area/ship/crew/janitor) +"iV" = ( /obj/structure/cable{ - icon_state = "2-4" + icon_state = "4-8" }, -/turf/open/floor/plasteel, -/area/ship/cargo) -"lJ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/effect/turf_decal/industrial/warning, -/turf/open/floor/plasteel, -/area/ship/cargo/office) -"lL" = ( -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/machinery/rnd/server, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/plasteel/dark, -/area/ship/science) -"lM" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/structure/closet/secure_closet{ - icon_state = "atmos"; - name = "\proper atmospheric technician's locker"; - req_access = list(24) +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 2; + sortTypes = list(9,10,11); + tag = "Medbay" }, -/obj/item/storage/backpack/industrial, -/obj/item/clothing/shoes/workboots, -/obj/item/clothing/under/rank/engineering/atmospheric_technician, -/obj/item/clothing/under/rank/engineering/atmospheric_technician/skirt, -/obj/item/clothing/suit/hazardvest, -/obj/item/clothing/head/hardhat/weldhat/dblue, -/obj/item/storage/belt/utility/atmostech, -/obj/item/extinguisher/advanced, -/obj/effect/turf_decal/corner/opaque/bottlegreen{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/yellow, -/obj/item/holosign_creator/atmos, -/obj/item/storage/box/metalfoam, -/obj/item/pipe_dispenser, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"lV" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 +/obj/effect/turf_decal/trimline/opaque/ntblue/line{ + dir = 4 }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"je" = ( +/obj/effect/turf_decal/trimline/transparent/white/filled/warning, +/turf/open/floor/plasteel/mono, +/area/ship/storage/eva) +"jf" = ( +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"jl" = ( /obj/structure/cable{ - icon_state = "1-2" + icon_state = "4-8" }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"lY" = ( -/obj/structure/table/reinforced, -/obj/machinery/microwave{ - pixel_y = 5 +/obj/machinery/door/airlock/atmos{ + dir = 8; + name = "Atmospherics"; + req_access_txt = "10" }, -/obj/effect/turf_decal/corner/opaque/white{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/white{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/plasteel, -/area/ship/crew/canteen) -"mf" = ( -/obj/structure/disposalpipe/segment{ +/obj/machinery/door/firedoor/border_only{ dir = 8 }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 9 +/obj/machinery/door/firedoor/border_only{ + dir = 4 }, -/obj/structure/extinguisher_cabinet/directional/south, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"mg" = ( /obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ +/obj/effect/turf_decal/borderfloor{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/turf/open/floor/plasteel, +/area/ship/engineering/atmospherics) +"jm" = ( +/obj/machinery/door/airlock/engineering{ + dir = 4; + name = "Engineering Office"; + req_access_txt = "10" }, /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"mj" = ( -/obj/machinery/cryopod, -/obj/structure/window/reinforced{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/crew/cryo) -"mo" = ( -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 8; - sortType = 6; - tag = "Atmospherics" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/effect/turf_decal/borderfloor{ dir = 4 }, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering) +"ju" = ( /obj/structure/cable{ - icon_state = "4-8" + icon_state = "5-10" }, -/obj/machinery/light_switch{ - pixel_y = 24 +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/starboard) +"jx" = ( +/obj/machinery/disposal/bin, +/obj/machinery/door/window/northleft{ + dir = 4; + req_access_txt = "19" }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"mq" = ( -/obj/structure/disposalpipe/sorting/mail{ - dir = 2; - sortTypes = list(2,3); - tag = "QM Office" +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"jA" = ( +/obj/machinery/door/airlock/security{ + name = "Security Office" }, /obj/structure/cable{ icon_state = "1-2" }, -/turf/open/floor/plasteel, -/area/ship/cargo/office) -"mu" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "osprey_production" - }, -/turf/open/floor/plating, -/area/ship/cargo) -"my" = ( -/obj/structure/table, -/obj/item/stack/packageWrap{ - pixel_y = 9 - }, -/obj/item/hand_labeler{ - pixel_x = 2; - pixel_y = 8 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/door/firedoor/border_only{ + dir = 1 }, -/obj/effect/turf_decal/corner/opaque/mauve{ +/obj/machinery/door/firedoor/border_only, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/borderfloor{ dir = 1 }, -/obj/effect/turf_decal/corner/opaque/mauve{ - dir = 8 +/turf/open/floor/plasteel/dark, +/area/ship/security) +"jD" = ( +/obj/structure/fluff/hedge, +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/end{ + dir = 1 }, -/obj/item/storage/box/gloves{ - pixel_x = -3; - pixel_y = -8 +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/crew/canteen) +"jH" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/medical) +"jI" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/plasteel/white, -/area/ship/science) -"mB" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/industrial/caution, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/hallway/central) -"mF" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 + dir = 4 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ +/turf/open/floor/plasteel/dark, +/area/ship/science/ai_chamber) +"jL" = ( +/obj/effect/turf_decal/corner/opaque/white{ dir = 4 }, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/siding, +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_x = 32 + }, /turf/open/floor/plasteel, -/area/ship/cargo/office) -"mH" = ( -/obj/structure/closet/crate, -/obj/item/stack/sheet/metal/five{ - pixel_x = -3 +/area/ship/crew/canteen) +"jM" = ( +/obj/structure/cable/yellow{ + icon_state = "0-4" }, -/obj/item/stack/sheet/glass/five{ - pixel_x = 2; - pixel_y = 5 +/obj/machinery/power/terminal, +/obj/machinery/atmospherics/pipe/simple/purple/visible{ + dir = 10 }, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/cargo) -"mI" = ( -/obj/effect/turf_decal/corner/opaque/ntblue{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/orange/visible/layer5{ + dir = 10 }, -/obj/effect/turf_decal/corner/opaque/ntblue{ - dir = 8 +/obj/structure/sign/warning/electricshock{ + pixel_y = 24 + }, +/turf/open/floor/plating, +/area/ship/engineering/engine) +"jN" = ( +/obj/machinery/door/airlock{ + name = "Internal Affairs Office"; + req_access_txt = "38" }, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/machinery/light/directional/south, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/borderfloor, /turf/open/floor/plasteel, +/area/ship/crew/law_office) +"jT" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/turf/open/floor/plasteel/mono, /area/ship/hallway/central) -"mR" = ( -/obj/effect/turf_decal/corner/opaque/purple{ - dir = 4 +"jU" = ( +/obj/machinery/power/ship_gravity, +/obj/structure/cable{ + icon_state = "0-8" }, -/obj/effect/turf_decal/corner/opaque/purple{ - dir = 1 +/turf/open/floor/circuit, +/area/ship/engineering/engine) +"ka" = ( +/obj/structure/cable{ + icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel, /area/ship/cargo) -"mV" = ( -/obj/structure/chair/office{ - dir = 4 +"km" = ( +/obj/structure/closet/secure_closet/armory1{ + populate = 0; + req_access = list(2) }, -/obj/effect/turf_decal/siding/wood{ - dir = 6 +/obj/machinery/airalarm/directional/east, +/obj/item/clothing/suit/armor/nanotrasen, +/obj/item/clothing/suit/armor/nanotrasen/slim, +/obj/item/clothing/head/helmet/sec, +/obj/item/clothing/head/helmet/sec, +/obj/effect/turf_decal/trimline/opaque/vired/filled/warning{ + dir = 8 }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/plasteel/grimy, -/area/ship/crew/dorm) -"mW" = ( -/turf/open/floor/plasteel, -/area/ship/cargo/office) -"mY" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/obj/effect/turf_decal/industrial/warning/corner{ - dir = 1 - }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"mZ" = ( +/obj/machinery/light/small/directional/south, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"kn" = ( /obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/closet/secure_closet/engineering_welding, -/obj/machinery/button/door{ - dir = 1; - id = "osprey_thruster_port"; - name = "Blast Door Control"; - pixel_y = -25 + icon_state = "6-9" }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"na" = ( -/obj/structure/window/reinforced{ - dir = 1 +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"ko" = ( +/obj/structure/cable{ + icon_state = "2-8" }, -/obj/structure/tank_dispenser/oxygen, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/cargo) -"nf" = ( -/obj/structure/sink{ - dir = 8; - pixel_x = 12 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 }, -/obj/structure/mirror{ - pixel_x = 25 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/carpet/executive, +/area/ship/crew/law_office) +"kq" = ( +/obj/machinery/atmospherics/pipe/simple/brown/visible/layer1{ + dir = 8 }, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/plasteel/freezer, -/area/ship/crew/toilet) -"nl" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 10 +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 9 }, -/turf/open/floor/plasteel/grimy, -/area/ship/crew/dorm) -"nx" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 8 +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"kr" = ( +/obj/machinery/jukebox, +/obj/effect/turf_decal/trimline/opaque/ntblue/line{ + dir = 6 }, -/obj/machinery/light/directional/south, -/obj/structure/window/reinforced{ +/turf/open/floor/plasteel, +/area/ship/crew/canteen) +"ky" = ( +/obj/structure/railing{ dir = 8 }, -/obj/structure/window/reinforced{ - dir = 4 +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable{ + icon_state = "0-1" }, -/obj/machinery/door/window/northleft{ - req_access_txt = "19" +/obj/structure/cable{ + icon_state = "1-4" }, -/obj/effect/turf_decal/corner/opaque/ntblue{ +/obj/effect/turf_decal/siding/wideplating/dark{ dir = 8 }, -/obj/effect/turf_decal/corner/opaque/ntblue, /turf/open/floor/plasteel/dark, /area/ship/bridge) -"nE" = ( -/obj/effect/turf_decal/box/corners{ - dir = 1 - }, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/cargo) -"nK" = ( -/obj/structure/sign/warning/docking{ - pixel_y = 9 - }, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/hallway/central) -"nL" = ( -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/obj/machinery/door/airlock/medical{ - name = "Infirmary"; - req_access_txt = "5" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +"kA" = ( +/obj/machinery/light/directional/east, +/turf/open/floor/plasteel/mono, +/area/ship/crew/canteen) +"kE" = ( +/obj/structure/closet/crate/trashcart/laundry, +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/ship/crew) +"kH" = ( /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/unres{ +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + icon_state = "4-10" + }, +/obj/effect/turf_decal/industrial/warning{ dir = 1 }, -/obj/effect/turf_decal/borderfloor{ +/obj/machinery/atmospherics/pipe/simple/purple/visible, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 1 }, -/obj/effect/turf_decal/corner/opaque/blue{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 }, -/obj/effect/turf_decal/corner/opaque/blue, -/obj/machinery/door/firedoor/border_only{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/orange/visible/layer5, +/obj/effect/turf_decal/industrial/warning, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/engine) +"kJ" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/machinery/door/firedoor/border_only, -/turf/open/floor/plasteel, -/area/ship/medical) -"nT" = ( -/obj/structure/filingcabinet/double/grey, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 8 +/obj/machinery/door/airlock{ + dir = 4; + name = "Cryogenic Storage" }, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 }, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/plasteel, -/area/ship/cargo/office) -"nZ" = ( -/obj/structure/disposalpipe/segment{ - dir = 2 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/effect/turf_decal/corner/opaque/brown, -/obj/effect/turf_decal/corner/opaque/brown{ +/obj/machinery/door/firedoor/border_only{ dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ +/obj/machinery/door/firedoor/border_only{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 4 +/obj/effect/turf_decal/borderfloor{ + dir = 8 }, +/turf/open/floor/plasteel, +/area/ship/crew/cryo) +"kM" = ( /obj/structure/cable{ icon_state = "1-2" }, -/turf/open/floor/plasteel, -/area/ship/cargo) -"oi" = ( +/obj/machinery/atmospherics/pipe/simple/brown/visible/layer1{ + dir = 9 + }, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 20; + pixel_y = 0 + }, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"kO" = ( /obj/structure/cable{ - icon_state = "1-8" + icon_state = "2-4" }, +/turf/open/floor/plasteel/mono, +/area/ship/crew/canteen) +"kR" = ( /obj/structure/cable{ - icon_state = "1-2" + icon_state = "0-4" }, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 5 +/obj/machinery/power/terminal{ + dir = 8 }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"oo" = ( -/obj/machinery/space_heater, /obj/effect/turf_decal/industrial/warning{ dir = 8 }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering/atmospherics) -"os" = ( -/obj/machinery/cryopod, -/obj/machinery/light/small/directional/west, -/turf/open/floor/plasteel/tech/grid, -/area/ship/crew/cryo) -"ot" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/turf/open/floor/plating, +/area/ship/engineering) +"kV" = ( +/obj/structure/cable{ + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) -"ou" = ( -/obj/effect/turf_decal/industrial/warning, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 10 + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/industrial/caution{ - dir = 1 +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/corner{ + dir = 8 }, -/turf/open/floor/plasteel/tech/techmaint, +/turf/open/floor/plasteel/mono, /area/ship/hallway/central) -"ow" = ( -/obj/machinery/firealarm/directional/west, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) -"oB" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 4 +"la" = ( +/obj/machinery/computer/crew{ + dir = 8; + icon_state = "computer-right" }, -/obj/effect/turf_decal/corner/opaque/mauve, -/obj/effect/turf_decal/corner/opaque/mauve{ - dir = 8 +/obj/structure/cable{ + icon_state = "2-4" }, -/obj/machinery/camera/autoname{ - dir = 10 +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/open/floor/plasteel/white, -/area/ship/science) -"oE" = ( -/obj/structure/closet/wall/directional/south{ - icon_door = "grey_wall" - }, -/obj/item/clothing/under/color/grey, -/obj/item/clothing/under/color/grey, -/obj/item/clothing/under/color/grey, -/obj/item/clothing/under/color/grey, -/obj/item/clothing/under/color/grey, -/obj/item/clothing/shoes/sneakers/black, -/obj/item/clothing/shoes/sneakers/black, -/obj/item/clothing/shoes/sneakers/black, -/obj/item/clothing/shoes/sneakers/black, -/obj/item/clothing/shoes/sneakers/black, -/obj/item/storage/backpack/duffelbag, -/obj/item/storage/backpack/duffelbag, -/obj/item/storage/backpack/messenger, -/obj/item/storage/backpack/messenger, -/obj/item/storage/backpack/satchel, -/obj/item/storage/backpack/satchel, -/obj/item/storage/backpack, -/obj/item/storage/backpack, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"oF" = ( -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/cargo) -"oK" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 4 +/turf/open/floor/plasteel/tech/grid, +/area/ship/bridge) +"lg" = ( +/obj/structure/mirror{ + pixel_y = 32 }, -/turf/open/floor/plasteel/freezer, -/area/ship/crew/toilet) -"oN" = ( -/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/layer4{ - dir = 1 +/obj/structure/sink{ + pixel_y = 17 }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/hallway/central) -"oO" = ( -/obj/structure/disposalpipe/segment{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/plasteel/freezer, +/area/ship/bridge) +"lj" = ( +/obj/effect/turf_decal/trimline/transparent/white/filled/warning, +/obj/structure/cable{ + icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/mono, +/area/ship/storage/eva) +"ln" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 + dir = 5 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 + dir = 6 }, /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/closet/firecloset/wall/directional/north, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"oQ" = ( -/obj/machinery/power/smes/engineering, +/turf/open/floor/carpet/blue, +/area/ship/crew/dorm) +"ls" = ( +/obj/structure/disposalpipe/sorting/mail{ + dir = 2; + sortType = 1; + sortTypes = list(1, 22); + tag = "Disposals" + }, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ship/hallway/starboard) +"lA" = ( /obj/structure/cable{ - icon_state = "0-8" - }, -/obj/effect/turf_decal/industrial/outline/yellow, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"oU" = ( -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 + icon_state = "4-8" }, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "2-8" }, -/obj/effect/turf_decal/siding/wood{ - dir = 8 +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 }, -/turf/open/floor/wood, -/area/ship/crew/canteen) -"oW" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/southright{ - dir = 1; - name = "Medical Desk"; - req_access_txt = "5" +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 }, -/obj/item/table_bell, -/obj/effect/turf_decal/corner/opaque/blue{ - dir = 8 +/obj/effect/turf_decal/siding/yellow{ + dir = 1 }, -/obj/effect/turf_decal/corner/opaque/blue, -/obj/machinery/door/poddoor/shutters{ - id = "ospreymed" +/obj/structure/extinguisher_cabinet/directional/north, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 8; + sortTypes = list(4, 5); + tag = "Engineering" }, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"oX" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Infirmary"; +/turf/open/floor/plasteel, +/area/ship/engineering) +"lD" = ( +/obj/structure/sign/departments/security, +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/security) +"lE" = ( +/obj/structure/fluff/hedge, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, /obj/structure/disposalpipe/segment{ dir = 8 }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/hallway/central) +"lH" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/plasteel, +/area/ship/bridge) +"lP" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 +/obj/structure/disposalpipe/segment{ + dir = 9 }, -/obj/effect/turf_decal/borderfloor{ - dir = 4 +/turf/open/floor/plasteel, +/area/ship/cargo) +"lQ" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 +/obj/machinery/atmospherics/components/binary/volume_pump/on{ + name = "Recycling to Environment"; + piping_layer = 1 }, -/obj/machinery/door/firedoor/border_only{ +/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ dir = 8 }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"pe" = ( -/obj/effect/turf_decal/industrial/warning/fulltile, -/obj/machinery/door/poddoor{ - id = "osprey_disposals"; - name = "Disposals Blast Door"; - dir = 4 +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"lX" = ( +/obj/structure/closet/wardrobe/mixed{ + name = "custodial wardrobe"; + populate = 0 }, -/obj/machinery/atmospherics/pipe/simple/green/hidden/layer1{ - dir = 4 +/obj/structure/cable{ + icon_state = "0-2" }, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/item/radio/intercom/directional/north, +/obj/item/clothing/under/nanotrasen/janitor, +/obj/item/clothing/head/nanotrasen/cap/janitor, +/obj/item/clothing/shoes/galoshes, +/obj/item/storage/belt/janitor, +/obj/item/clothing/gloves/color/black, /turf/open/floor/plating, -/area/ship/science/ai_chamber) -"pk" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/area/ship/crew/janitor) +"mc" = ( /obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel, -/area/ship/crew/cryo) -"pm" = ( -/obj/structure/frame/computer{ - dir = 8 + icon_state = "1-4" }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/bridge) -"pp" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 + dir = 5 }, -/turf/open/floor/carpet/royalblue, -/area/ship/bridge) -"pq" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 +/obj/structure/extinguisher_cabinet/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 5 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 6 +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/crew/janitor) +"mk" = ( +/obj/structure/cable/yellow{ + icon_state = "2-8" }, -/obj/structure/cable{ - icon_state = "1-4" +/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 }, -/turf/open/floor/plasteel/freezer, -/area/ship/crew/toilet) -"pv" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 9 +/obj/machinery/airalarm/directional/east, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/engine) +"mm" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 }, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-8" }, -/turf/open/floor/plasteel/grimy, -/area/ship/crew/dorm) -"pz" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"ms" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/dark, +/area/ship/crew/cryo) +"my" = ( +/obj/machinery/power/generator{ dir = 4 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/cable/yellow{ + icon_state = "0-8" }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ +/turf/open/floor/plating, +/area/ship/engineering/engine) +"mB" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"pC" = ( -/obj/structure/disposalpipe/segment{ +/turf/open/floor/plasteel/mono, +/area/ship/crew/canteen) +"mC" = ( +/obj/effect/turf_decal/industrial/warning/corner{ dir = 8 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 +/obj/effect/turf_decal/industrial/warning/corner, +/obj/structure/disposalpipe/segment{ + dir = 6 }, -/turf/open/floor/wood, -/area/ship/crew/canteen) -"pD" = ( -/obj/machinery/power/shuttle/engine/electric{ - dir = 4 +/obj/machinery/button/ignition{ + dir = 4; + id = "harrier_igniter"; + pixel_x = -20 + }, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/engine) +"mG" = ( +/obj/structure/table/glass, +/obj/item/storage/backpack/duffelbag/med/surgery{ + pixel_x = -3; + pixel_y = 13 + }, +/obj/machinery/defibrillator_mount/loaded{ + pixel_y = -25 }, +/obj/item/clothing/gloves/color/latex/nitrile, +/obj/item/clothing/suit/nanotrasen/medical_smock, +/obj/item/clothing/head/nanotrasen/surgical, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/plasteel/showroomfloor, +/area/ship/medical) +"mH" = ( +/obj/structure/railing, /obj/structure/cable{ - icon_state = "0-4" + icon_state = "1-4" }, -/turf/open/floor/plating, -/area/ship/engineering) -"pH" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 6 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"pJ" = ( -/obj/machinery/door/poddoor/shutters{ - id = "osprey_atmos"; - name = "Atmospherics Storage"; - dir = 4 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/atmospherics) -"pK" = ( /obj/structure/disposalpipe/segment{ dir = 8 }, -/turf/open/floor/wood, -/area/ship/crew/canteen) -"pL" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/southleft{ +/turf/open/floor/plasteel, +/area/ship/cargo) +"mJ" = ( +/obj/machinery/conveyor{ dir = 1; - name = "Research Desk"; - req_access_txt = "47" + id = "harrier_garbage" }, -/obj/item/table_bell, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/poddoor/shutters{ - id = "ospreysci" - }, -/obj/machinery/door/firedoor, /turf/open/floor/plating, -/area/ship/science) -"pP" = ( -/obj/machinery/atmospherics/components/unary/tank/toxins, -/obj/effect/turf_decal/industrial/outline/yellow, +/area/ship/crew/janitor) +"mK" = ( +/obj/machinery/light/directional/north, +/obj/structure/chair/handrail, +/turf/open/floor/plasteel/freezer, +/area/ship/crew/toilet) +"mN" = ( /obj/structure/cable{ - icon_state = "2-8" + icon_state = "1-8" }, -/obj/machinery/camera/autoname, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, /obj/machinery/light_switch{ - pixel_x = 11; - pixel_y = 23 - }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"pT" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" + dir = 1; + pixel_x = -5; + pixel_y = -20 }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 4 +/obj/structure/disposalpipe/segment{ + dir = 5 }, -/obj/machinery/light/directional/north, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"pU" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 4 +/obj/effect/turf_decal/trimline/opaque/ntblue/line{ + dir = 8 }, -/turf/open/floor/carpet/blue, -/area/ship/bridge) -"qa" = ( -/obj/machinery/power/port_gen/pacman, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/port) +"mO" = ( +/obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable{ - icon_state = "0-2" + icon_state = "0-8" }, /obj/effect/turf_decal/industrial/outline/yellow, -/obj/structure/sign/warning/enginesafety{ - pixel_y = 32 - }, -/turf/open/floor/plating, +/obj/structure/closet/toolcloset, +/turf/open/floor/plasteel/patterned, /area/ship/engineering) -"qb" = ( -/obj/structure/closet/secure_closet{ - icon_state = "science"; - name = "scientist's locker"; - req_access_txt = "47" - }, -/obj/effect/turf_decal/corner/opaque/mauve{ - dir = 4 +"mV" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/effect/turf_decal/corner/opaque/mauve{ - dir = 1 +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/plasteel/mono, +/area/ship/crew/canteen) +"mW" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/item/storage/backpack/duffelbag, -/obj/item/storage/backpack/messenger/tox, -/obj/item/storage/backpack/satchel/tox, -/obj/item/storage/backpack/science, -/obj/item/clothing/shoes/sneakers/white, -/obj/item/clothing/under/rank/rnd/scientist/skirt, -/obj/item/clothing/under/rank/rnd/scientist, -/obj/item/clothing/suit/toggle/labcoat/science, -/obj/item/clothing/glasses/science, -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/plasteel/white, -/area/ship/science) -"qc" = ( -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/portables_connector, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"qp" = ( -/obj/machinery/meter, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ship/storage/eva) +"mZ" = ( +/obj/structure/table/reinforced, +/obj/item/cutting_board, +/obj/item/melee/knife/butcher, +/obj/item/kitchen/rollingpin, +/obj/effect/turf_decal/corner/opaque/white{ dir = 4 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/effect/turf_decal/corner/opaque/white{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 4 +/obj/machinery/light_switch{ + pixel_x = -7; + pixel_y = 20 }, -/obj/machinery/atmospherics/pipe/simple/green/visible, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"qs" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/obj/machinery/firealarm/directional/north{ + pixel_x = 5 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 +/turf/open/floor/plasteel, +/area/ship/crew/canteen) +"na" = ( +/obj/structure/table/reinforced, +/obj/item/reagent_containers/condiment/ketchup{ + pixel_x = 9; + pixel_y = 16 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/item/reagent_containers/condiment/mayonnaise{ + pixel_y = 16 }, -/obj/structure/disposalpipe/segment{ - dir = 8 +/obj/item/reagent_containers/condiment/hotsauce{ + pixel_x = -9; + pixel_y = 15 }, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"qv" = ( -/obj/structure/disposalpipe/segment{ - dir = 8 +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_x = -5; + pixel_y = 5 }, -/obj/effect/turf_decal/corner/transparent/neutral, -/obj/structure/closet/emcloset/wall/directional/south, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"qw" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 5; + pixel_y = 5 }, -/obj/item/trash/can, -/turf/open/floor/wood, +/turf/open/floor/plating, /area/ship/crew/canteen) -"qL" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 4 - }, +"nf" = ( /obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/turf_decal/industrial/stand_clear{ - dir = 8 + icon_state = "1-2" }, /turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"ng" = ( +/turf/closed/wall/mineral/titanium/exterior, +/area/ship/crew/law_office) +"nj" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel, /area/ship/cargo) -"qM" = ( -/obj/effect/turf_decal/industrial/warning/corner{ - dir = 1 - }, -/obj/structure/marker_beacon, -/turf/open/floor/engine/hull, -/area/ship/external) -"qN" = ( +"nv" = ( +/obj/machinery/deepfryer, /obj/effect/turf_decal/corner/opaque/white{ dir = 4 }, /obj/effect/turf_decal/corner/opaque/white{ dir = 8 }, -/obj/structure/closet{ - icon_door = "black"; - name = "wardrobe" - }, -/obj/item/storage/backpack/duffelbag, -/obj/item/storage/backpack/messenger, -/obj/item/storage/backpack, -/obj/item/storage/backpack/satchel/leather, -/obj/item/clothing/shoes/sneakers/white, -/obj/item/clothing/shoes/laceup, -/obj/item/clothing/under/rank/civilian/chef, -/obj/item/clothing/under/rank/civilian/chef/skirt, -/obj/item/clothing/under/rank/civilian/bartender, -/obj/item/clothing/under/rank/civilian/bartender/skirt, -/obj/item/clothing/suit/toggle/chef, -/obj/item/clothing/accessory/waistcoat, -/obj/item/clothing/head/chefhat, -/obj/item/clothing/head/bowler, -/obj/item/storage/box/drinkingglasses, -/obj/item/storage/fancy/candle_box, -/obj/item/radio/intercom/directional/east, /turf/open/floor/plasteel, /area/ship/crew/canteen) -"qX" = ( -/obj/machinery/atmospherics/components/unary/shuttle/heater{ - dir = 4 +"nx" = ( +/obj/effect/turf_decal/corner/opaque/ntblue/full, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 8 }, -/obj/machinery/door/window/eastleft{ - name = "Engine Access" +/turf/open/floor/plasteel, +/area/ship/hallway/central) +"nz" = ( +/obj/machinery/mass_driver{ + dir = 8; + id = "harrier_disposals" }, -/obj/structure/window/plasma/reinforced/spawner/west, -/obj/structure/window/plasma/reinforced/spawner/north, -/obj/machinery/door/poddoor{ - id = "osprey_thruster_port"; - name = "Thruster Blast Door"; +/turf/open/floor/plating, +/area/ship/crew/janitor) +"nQ" = ( +/obj/structure/chair/comfy/blue/corpo{ + dir = 8 + }, +/obj/effect/landmark/start/lawyer, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/turf/open/floor/plating, -/area/ship/engineering) -"ra" = ( +/turf/open/floor/carpet/executive, +/area/ship/crew/law_office) +"nZ" = ( /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 9 +/obj/machinery/airalarm/directional/west, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/starboard) +"oe" = ( +/obj/machinery/suit_storage_unit/standard_unit, +/obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/siding/thinplating, +/turf/open/floor/plasteel/tech/grid, +/area/ship/storage/eva) +"og" = ( +/obj/structure/cable{ + icon_state = "6-8" }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"rd" = ( -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/structure/closet/crate/science{ - name = "cyborg parts crate" +/obj/structure/chair/handrail, +/turf/open/floor/plasteel, +/area/ship/hallway/port) +"oi" = ( +/obj/structure/toilet{ + pixel_y = 10 }, -/obj/item/bodypart/leg/right/robot, -/obj/item/bodypart/r_arm/robot, -/obj/item/bodypart/leg/left/robot, -/obj/item/bodypart/l_arm/robot, -/obj/item/bodypart/head/robot, -/obj/item/bodypart/chest/robot, -/obj/item/robot_suit, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/machinery/light/small/directional/west, /turf/open/floor/plasteel/dark, -/area/ship/science) -"rf" = ( -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/area/ship/security) +"oj" = ( /obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/structure/sign/warning/securearea{ - pixel_x = 25 + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/green/hidden/layer1, -/obj/structure/catwalk/over, -/turf/open/floor/plating, -/area/ship/science/ai_chamber) -"ry" = ( -/obj/item/storage/backpack/explorer, -/obj/item/storage/backpack/satchel/explorer, -/obj/item/storage/backpack/duffelbag, -/obj/structure/closet/secure_closet{ - icon_state = "mining"; - name = "mining wardrobe"; - req_access_txt = "48" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 }, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/under/rank/cargo/miner, -/obj/item/storage/belt/mining/alt, -/obj/item/clothing/gloves/color/black, -/obj/item/clothing/head/hardhat/mining, -/obj/structure/sign/poster/contraband/ss13{ - pixel_y = -32 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/cargo) -"rz" = ( -/obj/structure/bed, -/obj/structure/curtain/bounty, -/obj/item/bedsheet/dorms, -/obj/structure/sign/poster/official/soft_cap_pop_art{ - pixel_y = 32 +/obj/structure/disposalpipe/segment{ + dir = 10 }, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"rG" = ( -/obj/machinery/power/shuttle/engine/fueled/plasma{ - dir = 4 +/obj/effect/turf_decal/trimline/opaque/ntblue/line, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"ok" = ( +/turf/closed/wall/mineral/titanium/exterior, +/area/ship/engineering/engine) +"ol" = ( +/obj/structure/closet/secure_closet/captains{ + populate = 0 }, -/turf/open/floor/plating, -/area/ship/engineering) -"rH" = ( +/obj/machinery/firealarm/directional/west, +/obj/item/clothing/shoes/laceup, +/obj/item/clothing/under/nanotrasen/captain, +/obj/item/clothing/suit/armor/nanotrasen/captain/parade, +/obj/item/clothing/neck/cloak/nanotrasen, +/obj/item/storage/backpack/captain, +/obj/item/clothing/head/nanotrasen/captain/peaked, +/obj/item/clothing/glasses/sunglasses, +/obj/item/storage/belt/sabre, +/obj/machinery/light/small/directional/north, +/turf/open/floor/carpet/royalblue, +/area/ship/crew/dorm/dormtwo) +"op" = ( +/obj/structure/table/reinforced, +/obj/machinery/microwave, /obj/effect/turf_decal/corner/opaque/white{ dir = 4 }, /obj/effect/turf_decal/corner/opaque/white{ dir = 8 }, +/obj/item/radio/intercom/directional/north, /turf/open/floor/plasteel, /area/ship/crew/canteen) -"rJ" = ( -/obj/effect/turf_decal/industrial/warning, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 10 - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/hallway/central) -"rN" = ( -/obj/structure/disposalpipe/segment{ - dir = 8 +"ow" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_y = 6 }, +/obj/machinery/firealarm/directional/west, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"ox" = ( /obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 + dir = 6 }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"rO" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 4 +/obj/machinery/light_switch{ + pixel_x = -5; + pixel_y = 20 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 }, +/turf/open/floor/plasteel, +/area/ship/bridge) +"oG" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/cargo) +"oT" = ( /obj/structure/cable{ - icon_state = "1-8" + icon_state = "4-8" }, +/turf/open/floor/wood, +/area/ship/crew/law_office) +"oU" = ( +/obj/machinery/power/apc/auto_name/directional/west, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "0-4" }, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"rP" = ( -/obj/structure/chair/stool/bar{ - dir = 1 +/turf/open/floor/carpet/royalblue, +/area/ship/crew/dorm/dormtwo) +"oV" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/effect/turf_decal/corner/opaque/white{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 }, -/obj/effect/turf_decal/corner/opaque/white{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/turf/open/floor/plasteel, -/area/ship/crew/canteen) -"rS" = ( -/obj/effect/turf_decal/corner/transparent/neutral, /obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/machinery/light/directional/south, -/turf/open/floor/plasteel, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/corner, +/turf/open/floor/plasteel/mono, /area/ship/hallway/central) -"rX" = ( -/obj/effect/turf_decal/corner/transparent/neutral{ +"oX" = ( +/obj/machinery/atmospherics/pipe/simple/brown/visible/layer1{ dir = 8 }, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"rZ" = ( -/obj/structure/chair/stool/bar{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 2 +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/light/small/directional/north, +/obj/structure/chair/handrail, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"pd" = ( /obj/effect/turf_decal/corner/opaque/white{ dir = 8 }, /obj/effect/turf_decal/corner/opaque/white{ dir = 4 }, -/turf/open/floor/plasteel, -/area/ship/crew/canteen) -"sd" = ( -/obj/structure/sign/nanotrasen, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/science) -"si" = ( -/obj/structure/disposalpipe/segment{ - dir = 2 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 }, -/obj/effect/turf_decal/corner/opaque/yellow{ - dir = 1 +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/effect/turf_decal/siding{ + dir = 9 }, /turf/open/floor/plasteel, -/area/ship/hallway/central) -"sl" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/peppermill{ - pixel_x = -4; - pixel_y = 10 - }, -/obj/item/reagent_containers/food/condiment/saltshaker{ - pixel_x = 4; - pixel_y = 10 +/area/ship/crew/canteen) +"pp" = ( +/obj/structure/railing{ + dir = 8 }, -/obj/effect/turf_decal/corner/opaque/white{ - dir = 4 +/obj/structure/cable{ + icon_state = "2-4" }, -/obj/effect/turf_decal/corner/opaque/white{ +/obj/effect/turf_decal/siding/wideplating/dark{ dir = 8 }, -/obj/item/table_bell, -/obj/machinery/door/poddoor/shutters{ - id = "ospreykitchen" +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"pr" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible/layer1{ + dir = 9 }, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel, -/area/ship/crew/canteen) -"sq" = ( -/obj/machinery/atmospherics/components/binary/valve/digital/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ +/obj/machinery/atmospherics/pipe/simple/orange/visible/layer5{ dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/dark/visible/layer5, -/turf/open/floor/plasteel/patterned/grid, +/obj/machinery/atmospherics/pipe/manifold4w/purple/visible, +/turf/open/floor/plasteel/patterned, /area/ship/engineering/atmospherics) -"ss" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 4 +"pF" = ( +/obj/structure/closet/secure_closet/brig, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable{ + icon_state = "0-2" }, -/turf/open/floor/plasteel/white, -/area/ship/science) -"su" = ( +/obj/effect/turf_decal/trimline/opaque/vired/line{ + dir = 1 + }, +/obj/item/storage/box/evidence{ + req_access_txt = "2" + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"pH" = ( /obj/effect/spawner/structure/window/shuttle, +/obj/machinery/door/firedoor/window, /obj/machinery/door/poddoor/shutters{ - id = "ospreywindows"; - dir = 4 + dir = 1; + id = "harrieriaa" }, /turf/open/floor/plating, -/area/ship/hallway/central) -"sw" = ( -/obj/machinery/atmospherics/pipe/simple/supply/visible/layer2, -/obj/machinery/atmospherics/pipe/simple/dark/visible/layer5, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"sy" = ( -/obj/effect/turf_decal/corner/opaque/purple{ - dir = 1 - }, -/obj/structure/rack, -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) -"sC" = ( -/obj/structure/chair/stool/bar{ - dir = 1 +/area/ship/crew/law_office) +"pI" = ( +/obj/machinery/light/small/directional/west, +/turf/open/floor/wood, +/area/ship/crew/law_office) +"pP" = ( +/turf/closed/wall/mineral/titanium/exterior, +/area/ship/crew/canteen) +"pQ" = ( +/obj/machinery/disposal/bin, +/obj/machinery/light/directional/north, +/obj/structure/disposalpipe/trunk{ + dir = 4 }, -/obj/effect/landmark/start/assistant, -/obj/effect/turf_decal/corner/opaque/white{ +/obj/structure/railing{ dir = 8 }, -/obj/effect/turf_decal/corner/opaque/white{ - dir = 4 - }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/ship/crew/canteen) -"sE" = ( -/obj/item/reagent_containers/food/snacks/canned/beans{ - pixel_x = -5; - pixel_y = 3 - }, -/obj/item/reagent_containers/food/snacks/canned/beans{ - pixel_x = 2; - pixel_y = 3 - }, -/obj/item/reagent_containers/food/snacks/canned/beans{ - pixel_x = -2 - }, -/obj/item/reagent_containers/food/drinks/waterbottle/large{ - pixel_x = 5 - }, -/obj/item/reagent_containers/food/drinks/waterbottle/large{ - pixel_x = 1; - pixel_y = -3 - }, -/obj/item/reagent_containers/food/drinks/waterbottle/large{ - pixel_x = 8; - pixel_y = -3 - }, -/obj/structure/closet/crate{ - name = "food crate" - }, -/obj/item/storage/cans/sixbeer, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/effect/spawner/lootdrop/ration, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ +"pR" = ( +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/line{ dir = 4 }, +/turf/open/floor/plasteel, +/area/ship/hallway/central) +"pW" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/carpet/cyan, +/area/ship/crew) +"pX" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" + dir = 9 }, /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo) -"sG" = ( -/turf/closed/wall/mineral/titanium, -/area/ship/hallway/central) -"sI" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/structure/closet/emcloset/wall/directional/south, -/turf/open/floor/plasteel, -/area/ship/crew/cryo) -"sJ" = ( -/obj/effect/turf_decal/corner/transparent/neutral{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +"pY" = ( /obj/structure/cable{ icon_state = "1-2" }, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"sO" = ( -/obj/machinery/firealarm/directional/east, -/turf/open/floor/plasteel/dark, -/area/ship/science) -"sZ" = ( -/obj/effect/turf_decal/corner/opaque/bottlegreen{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/ntspaceworks_big/seven{ dir = 8 }, -/obj/structure/disposalpipe/junction/flip, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"tb" = ( -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/structure/frame/computer, -/obj/machinery/light/directional/east, -/turf/open/floor/plasteel/dark, -/area/ship/science) -"tc" = ( -/obj/structure/table/reinforced, -/obj/machinery/fax/nanotrasen, -/obj/effect/turf_decal/corner/opaque/ntblue, -/obj/effect/turf_decal/corner/opaque/ntblue{ +/turf/open/floor/plasteel/patterned, +/area/ship/engineering) +"pZ" = ( +/obj/structure/chair/comfy/blue/corpo/directional/south{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/ntblue{ - dir = 1 +/obj/structure/sign/poster/official/random{ + pixel_x = -32 + }, +/obj/effect/turf_decal/trimline/opaque/ntblue/line{ + dir = 10 }, +/turf/open/floor/plasteel, +/area/ship/crew/canteen) +"qf" = ( +/obj/structure/chair/comfy/blue/corpo/directional/north, +/obj/effect/turf_decal/trimline/opaque/ntblue/line, /turf/open/floor/plasteel/dark, /area/ship/bridge) -"ti" = ( -/obj/machinery/door/airlock/external/glass, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/borderfloor{ - dir = 1 - }, -/turf/open/floor/plasteel/tech, -/area/ship/hallway/central) -"tm" = ( -/obj/machinery/disposal/bin{ - name = "biohazard disposal unit" - }, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/effect/turf_decal/corner/opaque/blue{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/blue{ - dir = 1 - }, -/obj/machinery/light/directional/west, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"to" = ( +"qg" = ( /obj/structure/cable{ - icon_state = "0-2" - }, -/obj/machinery/power/apc/auto_name/directional/north, -/turf/open/floor/plasteel/freezer, -/area/ship/crew/toilet) -"tp" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 + icon_state = "4-9" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"qh" = ( /obj/structure/cable{ - icon_state = "1-8" + icon_state = "5-10" }, -/turf/open/floor/plasteel, -/area/ship/crew/cryo) -"tr" = ( -/obj/machinery/computer/security{ - dir = 8; - icon_state = "computer-right" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/bridge) -"tx" = ( -/obj/effect/spawner/structure/window/shuttle, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "ospreybridge"; +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/machinery/door/firedoor/window, -/turf/open/floor/plating, -/area/ship/bridge) -"tF" = ( -/obj/structure/cable{ - icon_state = "1-2" +/obj/structure/disposalpipe/segment{ + dir = 8 }, -/obj/machinery/atmospherics/components/unary/passive_vent{ - dir = 1 +/turf/open/floor/plasteel/mono, +/area/ship/hallway/starboard) +"ql" = ( +/obj/structure/chair, +/obj/effect/turf_decal/trimline/opaque/ntblue/line{ + dir = 9 }, -/turf/open/floor/engine/air, -/area/ship/engineering/atmospherics) -"tG" = ( -/obj/effect/turf_decal/box/corners{ - dir = 1 +/turf/open/floor/plasteel, +/area/ship/crew/canteen) +"qo" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 }, -/obj/structure/closet/crate, -/obj/item/vending_refill/coffee, -/obj/effect/spawner/lootdrop/maintenance/three, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/turf/open/floor/plasteel/patterned/cargo_one, +/turf/open/floor/plasteel, /area/ship/cargo) -"tH" = ( +"qp" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 + }, /obj/structure/disposalpipe/segment{ dir = 6 }, -/turf/open/floor/plasteel, -/area/ship/cargo/office) -"tL" = ( -/obj/effect/turf_decal/corner/transparent/neutral{ - dir = 4 +/turf/open/floor/plasteel/mono, +/area/ship/hallway/starboard) +"qq" = ( +/obj/effect/spawner/structure/window/shuttle, +/obj/machinery/atmospherics/pipe/simple/orange/hidden/layer5{ + dir = 8 }, -/obj/structure/closet/emcloset/wall/directional/north, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"tO" = ( -/obj/structure/closet/secure_closet/freezer/kitchen, -/obj/effect/turf_decal/corner/opaque/white{ +/turf/open/floor/plating, +/area/ship/engineering/engine) +"qr" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/white{ +/turf/open/floor/carpet/cyan, +/area/ship/crew) +"qw" = ( +/obj/structure/chair/comfy/blue/corpo/directional/south{ dir = 8 }, +/obj/effect/turf_decal/trimline/opaque/ntblue/line, /turf/open/floor/plasteel, /area/ship/crew/canteen) -"tT" = ( -/obj/structure/disposalpipe/segment{ - dir = 8 +"qx" = ( +/turf/open/floor/plasteel, +/area/ship/hallway/central) +"qB" = ( +/obj/structure/cable{ + icon_state = "0-1" }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 +/obj/machinery/power/smes/engineering, +/turf/open/floor/plating, +/area/ship/engineering/engine) +"qE" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 }, -/turf/open/floor/wood, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/mono, /area/ship/crew/canteen) -"tY" = ( -/obj/effect/turf_decal/borderfloor{ +"qF" = ( +/obj/effect/turf_decal/trimline/transparent/white/filled/warning{ dir = 1 }, -/obj/machinery/door/airlock/command{ - name = "Bridge"; - req_access_txt = "19" - }, +/obj/effect/turf_decal/trimline/transparent/white/filled/warning, /obj/machinery/door/firedoor/border_only{ dir = 1 }, /obj/machinery/door/firedoor/border_only, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) -"ud" = ( -/obj/machinery/computer/helm{ - dir = 8 - }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/bridge) -"uh" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"ui" = ( -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/machinery/power/apc/auto_name/directional/north, -/turf/open/floor/plasteel/dark, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/port) +"qI" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/crew/canteen) +"qJ" = ( +/obj/item/bodypart/leg/right/robot, +/obj/item/bodypart/r_arm/robot, +/obj/item/bodypart/leg/left/robot, +/obj/item/bodypart/l_arm/robot, +/obj/item/bodypart/head/robot, +/obj/item/bodypart/chest/robot, +/obj/item/robot_suit, +/obj/machinery/recharge_station, +/turf/open/floor/circuit, /area/ship/science/ai_chamber) -"uk" = ( -/obj/effect/turf_decal/industrial/warning, -/obj/effect/turf_decal/siding/white{ +"qK" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, +/obj/effect/turf_decal/borderfloor{ + dir = 1 + }, /turf/open/floor/plasteel/tech/techmaint, -/area/ship/crew/cryo) -"un" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/area/ship/storage/eva) +"qO" = ( +/obj/effect/turf_decal/corner/opaque/ntblue/full, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 1 }, -/obj/machinery/holopad/emergency/medical, -/obj/effect/turf_decal/box/white{ - color = "#2CB2E8" +/turf/open/floor/plasteel, +/area/ship/hallway/central) +"qQ" = ( +/turf/closed/wall/mineral/titanium/exterior, +/area/ship/crew) +"qX" = ( +/obj/structure/railing{ + dir = 8 }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"uq" = ( -/obj/structure/disposalpipe/segment{ +/obj/effect/turf_decal/siding/wideplating/dark{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"rc" = ( +/obj/structure/cable{ + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 }, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"ut" = ( -/obj/structure/chair, -/obj/effect/landmark/start/janitor, -/obj/structure/disposalpipe/sorting/mail{ - dir = 4; - sortType = 1; - tag = "Disposals" +/obj/structure/disposalpipe/segment{ + dir = 8 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 4 +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"rf" = ( +/obj/machinery/atmospherics/pipe/simple/purple/visible{ + dir = 10 }, /obj/effect/turf_decal/industrial/warning{ dir = 8 }, -/turf/open/floor/plasteel, -/area/ship/crew/janitor) -"ux" = ( -/obj/machinery/computer/operating, -/obj/effect/turf_decal/corner/opaque/pink{ +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"rh" = ( +/obj/structure/sign/warning/nosmoking, +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/engineering/atmospherics) +"ri" = ( +/obj/effect/turf_decal/corner/opaque/white{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/white{ dir = 8 }, -/obj/effect/turf_decal/corner/opaque/pink{ - dir = 4 +/obj/structure/sink{ + dir = 8; + pixel_x = 12 }, -/obj/effect/turf_decal/corner/opaque/pink{ - dir = 1 +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 }, -/obj/machinery/light/directional/west, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"uz" = ( -/obj/machinery/atmospherics/components/unary/passive_vent{ - dir = 4; - icon_state = "passive_vent_map-4"; - piping_layer = 5 +/turf/open/floor/plasteel, +/area/ship/crew/canteen) +"rj" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/hallway/central) +"rk" = ( +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 20; + pixel_y = 0 + }, +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 }, -/turf/open/floor/engine/hull, -/area/ship/external) -"uA" = ( -/obj/machinery/holopad/emergency/command, -/obj/effect/turf_decal/box/white, /turf/open/floor/plasteel/dark, -/area/ship/bridge) -"uC" = ( -/obj/machinery/computer/crew{ - dir = 8; - icon_state = "computer-left" +/area/ship/science/ai_chamber) +"rm" = ( +/obj/structure/railing{ + dir = 6; + layer = 3.1 }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/bridge) -"uE" = ( -/obj/structure/disposalpipe/segment{ +/obj/machinery/light/directional/west, +/turf/open/floor/plasteel, +/area/ship/storage/eva) +"rr" = ( +/obj/structure/closet/secure_closet/freezer/kitchen/mining, +/obj/structure/window/reinforced{ dir = 8 }, -/obj/effect/turf_decal/trimline/opaque/blue/corner{ +/obj/item/storage/fancy/egg_box, +/obj/item/reagent_containers/condiment/soymilk, +/turf/open/floor/plasteel/freezer, +/area/ship/crew/canteen) +"ru" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/ship/engineering/engine) +"rx" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"uI" = ( -/mob/living/simple_animal/mouse{ - desc = "This rat seems particularly old and crotchety."; - name = "Splinter" +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 }, /obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/turf/open/floor/plasteel/mono, +/area/ship/crew/canteen) +"rJ" = ( +/obj/effect/turf_decal/industrial/warning/fulltile, +/obj/machinery/door/poddoor{ + dir = 1; + id = "harrierdoors"; + name = "Cargo Bay Blast Door" + }, +/turf/open/floor/plating, +/area/ship/storage/eva) +"rK" = ( +/obj/structure/chair/sofa/blue/corpo/left/directional/north, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/line, /turf/open/floor/plasteel, -/area/ship/crew/janitor) -"uJ" = ( +/area/ship/hallway/central) +"rL" = ( +/obj/machinery/iv_drip, +/obj/machinery/light/directional/west, +/turf/open/floor/plasteel/white, +/area/ship/medical) +"rQ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, +/obj/machinery/airalarm/directional/south, /obj/structure/disposalpipe/segment{ dir = 8 }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/port) +"rR" = ( /obj/structure/cable{ - icon_state = "2-4" + icon_state = "4-8" }, -/turf/open/floor/plasteel, -/area/ship/crew/janitor) -"uM" = ( -/obj/machinery/door/airlock{ - name = "Cryopod Room" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/effect/turf_decal/borderfloor, -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/ntblue/line{ + dir = 8 }, -/obj/machinery/door/firedoor/border_only, -/turf/open/floor/plasteel, -/area/ship/crew/cryo) -"uN" = ( -/obj/effect/turf_decal/corner/transparent/neutral, -/obj/item/kirbyplants/random, /turf/open/floor/plasteel, -/area/ship/hallway/central) -"uQ" = ( -/obj/machinery/door/airlock/external, -/obj/machinery/atmospherics/pipe/layer_manifold, -/turf/open/floor/plasteel/tech, -/area/ship/hallway/central) -"vi" = ( -/obj/structure/table, -/obj/item/storage/bag/trash{ - pixel_x = 5 +/area/ship/hallway/port) +"rS" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 }, -/obj/item/mop, -/obj/item/reagent_containers/glass/bucket{ - pixel_x = -3; - pixel_y = 8 +/obj/machinery/airalarm/directional/east, +/obj/structure/chair/handrail{ + dir = 1 }, -/obj/structure/disposalpipe/segment{ - dir = 9 +/turf/open/floor/plasteel/showroomfloor, +/area/ship/medical) +"rT" = ( +/turf/closed/wall/mineral/titanium/exterior, +/area/ship/hallway/port) +"rZ" = ( +/obj/effect/landmark/start/medical_doctor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/effect/turf_decal/industrial/warning{ +/turf/open/floor/plasteel/showroomfloor, +/area/ship/medical) +"sc" = ( +/obj/effect/turf_decal/ntspaceworks_big/four{ dir = 8 }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/plating, -/area/ship/crew/janitor) -"vj" = ( -/obj/structure/disposalpipe/segment{ +/turf/open/floor/plasteel/patterned, +/area/ship/engineering) +"se" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/ntblue/line{ dir = 6 }, -/obj/structure/cable{ - icon_state = "2-4" +/turf/open/floor/plasteel, +/area/ship/crew/canteen) +"sf" = ( +/obj/machinery/suit_storage_unit/standard_unit, +/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 }, -/obj/structure/cable{ - icon_state = "1-4" +/turf/open/floor/plasteel/tech/grid, +/area/ship/storage/eva) +"sh" = ( +/obj/structure/window/reinforced{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 10 +/turf/open/floor/carpet/royalblue, +/area/ship/bridge) +"sl" = ( +/obj/item/gun/energy/e_gun, +/obj/structure/guncloset/ecase{ + req_access_txt = "20" }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/carpet/royalblue, +/area/ship/crew/dorm/dormtwo) +"sn" = ( +/obj/structure/chair/comfy/blue/corpo/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/carpet/cyan, +/area/ship/medical) +"ss" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/arrow_ccw{ dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 1 +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"st" = ( +/obj/machinery/door/airlock/command{ + dir = 4; + name = "Bridge"; + req_access = list(19, 41) }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"vl" = ( -/obj/structure/disposalpipe/segment{ - dir = 8 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/effect/turf_decal/trimline/opaque/blue/end, -/obj/effect/turf_decal/trimline/opaque/blue/line{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"vp" = ( -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/obj/machinery/cell_charger, -/obj/structure/disposalpipe/segment{ - dir = 2 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/item/stock_parts/cell/high/plus, -/obj/structure/table, -/obj/effect/turf_decal/corner/opaque/brown{ +/obj/machinery/door/firedoor/border_only{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 1 +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 }, /turf/open/floor/plasteel, -/area/ship/cargo/office) -"vx" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/obj/effect/turf_decal/industrial/warning{ - dir = 1 +/area/ship/bridge) +"sv" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"vD" = ( -/obj/structure/window/reinforced{ - dir = 4 +/turf/open/floor/plasteel/mono, +/area/ship/storage/eva) +"sw" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 }, -/obj/machinery/conveyor{ - dir = 1; - id = "osprey_garbage" +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 }, -/turf/open/floor/plating, -/area/ship/crew/janitor) -"vY" = ( -/obj/machinery/atmospherics/pipe/manifold/orange/visible, -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/extinguisher_cabinet/directional/east, +/obj/structure/disposalpipe/segment{ + dir = 9 }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/starboard) +"sy" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"wb" = ( -/obj/structure/disposalpipe/segment{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/carpet/royalblue, +/area/ship/crew/dorm/dormtwo) +"sD" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 5 }, -/turf/open/floor/plating, -/area/ship/crew/janitor) -"wc" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "osprey_packagesort" +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 }, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/plating, -/area/ship/cargo/office) -"wd" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 4 +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/cargo) -"wj" = ( -/obj/machinery/door/airlock/command{ - name = "Bridge"; - req_access_txt = "19" +/turf/open/floor/carpet/royalblue, +/area/ship/crew/dorm/dormtwo) +"sE" = ( +/obj/structure/cable{ + icon_state = "2-8" }, -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/effect/turf_decal/borderfloor, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 8; + sortTypes = list(7, 8); + tag = "Security" }, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) -"wn" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin{ - pixel_x = -6 +/obj/effect/turf_decal/trimline/opaque/vired/line, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/starboard) +"sF" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 8 }, -/obj/item/stamp/captain{ - pixel_x = 6; - pixel_y = 6 +/obj/machinery/atmospherics/pipe/simple/orange/hidden/layer5{ + dir = 8 }, -/obj/item/stamp/head_of_personnel{ - pixel_x = 6 +/obj/effect/turf_decal/industrial/warning{ + dir = 4 }, -/obj/item/pen/fountain/captain{ - pixel_x = -7 +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/engine) +"sG" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "harrier_packagesort" }, -/obj/item/pen/fourcolor, -/obj/machinery/newscaster/directional/north{ - pixel_y = 32 +/obj/machinery/light/directional/north, +/turf/open/floor/plating, +/area/ship/cargo) +"sN" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/effect/turf_decal/corner/opaque/ntblue{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 }, -/obj/effect/turf_decal/corner/opaque/ntblue{ - dir = 1 +/obj/structure/disposalpipe/segment{ + dir = 8 }, -/obj/machinery/light_switch{ - pixel_x = -11; - pixel_y = 24 +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel, +/area/ship/cargo) +"sU" = ( +/turf/open/floor/wood, +/area/ship/crew/law_office) +"ta" = ( +/obj/structure/railing, +/obj/effect/turf_decal/siding/wideplating/dark, +/turf/open/floor/plasteel/stairs{ + dir = 8 }, -/turf/open/floor/plasteel/dark, /area/ship/bridge) -"wo" = ( -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/machinery/power/smes/shuttle/precharged{ - dir = 4 +"td" = ( +/obj/effect/turf_decal/trimline/transparent/white/filled/warning{ + dir = 1 }, -/obj/machinery/door/window/eastleft{ - name = "Engine Access" +/obj/effect/turf_decal/trimline/transparent/white/filled/warning, +/obj/machinery/door/firedoor/border_only{ + dir = 1 }, -/obj/structure/window/plasma/reinforced/spawner/west, -/obj/structure/window/plasma/reinforced/spawner/north, -/obj/machinery/door/poddoor{ - id = "osprey_thruster_starboard"; - name = "Thruster Blast Door"; +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/starboard) +"tk" = ( +/obj/structure/railing, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ dir = 4 }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"wq" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/southleft{ - dir = 1; - name = "Medical Desk"; - req_access_txt = "5" - }, -/obj/effect/turf_decal/corner/opaque/blue{ +/obj/item/radio/intercom/directional/west, +/obj/effect/turf_decal/trimline/opaque/nsorange/line{ dir = 8 }, -/obj/effect/turf_decal/corner/opaque/blue, -/obj/machinery/door/poddoor/shutters{ - id = "ospreymed" +/turf/open/floor/plasteel, +/area/ship/cargo) +"tm" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 }, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"wr" = ( -/obj/structure/chair{ - dir = 1 +/turf/open/floor/carpet/executive, +/area/ship/crew/law_office) +"tq" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/toxin_output{ + dir = 8 }, -/obj/effect/turf_decal/corner/opaque/blue, -/obj/effect/turf_decal/corner/opaque/blue{ +/turf/open/floor/engine/plasma, +/area/ship/engineering/atmospherics) +"ty" = ( +/obj/effect/turf_decal/siding/wood{ dir = 8 }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"wx" = ( -/obj/machinery/door/poddoor{ - id = "ospreydoors"; - name = "Cargo Bay Blast Door"; - dir = 4 +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20 }, -/obj/effect/turf_decal/industrial/warning/fulltile, +/turf/open/floor/wood, +/area/ship/crew) +"tC" = ( +/obj/structure/rack, +/obj/item/pickaxe, +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) +"tF" = ( /obj/structure/cable{ - icon_state = "0-8" - }, -/obj/machinery/power/shieldwallgen/atmos/roundstart{ - id = "osprey_cargofield"; - locked = 1 + icon_state = "4-8" }, -/turf/open/floor/plasteel/tech, -/area/ship/cargo) -"wC" = ( -/obj/machinery/vending/snack/random, -/obj/structure/disposalpipe/segment{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"wF" = ( -/obj/structure/disposalpipe/segment{ - dir = 2 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ship/cargo) +"tG" = ( /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/manifold/dark/hidden/layer5{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"tH" = ( +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/folder/yellow, +/obj/item/stamp/denied{ + pixel_x = 4 }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/machinery/atmospherics/pipe/simple/green/hidden/layer1, -/obj/machinery/turretid{ - pixel_x = 28; - req_access = null; - req_access_txt = "16" +/obj/item/stamp{ + pixel_x = -5; + pixel_y = 9 }, -/obj/structure/catwalk/over, -/turf/open/floor/plating, -/area/ship/science/ai_chamber) -"wP" = ( -/obj/effect/turf_decal/corner/opaque/white{ - dir = 4 +/obj/item/pen/red, +/obj/machinery/button/door{ + dir = 4; + id = "harrierdoors"; + name = "External Blast Door Control"; + pixel_x = -25; + pixel_y = 6 }, -/obj/effect/turf_decal/corner/opaque/white{ - dir = 8 +/obj/machinery/button/shieldwallgen{ + dir = 4; + id = "harrier_cargofield"; + pixel_x = -24; + pixel_y = -5 }, -/obj/structure/disposalpipe/segment{ - dir = 10 +/obj/effect/turf_decal/trimline/opaque/nsorange/line{ + dir = 8 }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /turf/open/floor/plasteel, -/area/ship/crew/canteen) -"wQ" = ( -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/machinery/power/smes/shuttle/precharged{ - dir = 4 - }, -/obj/machinery/door/window/eastright{ - name = "Engine Access" - }, -/obj/structure/window/plasma/reinforced/spawner/west, -/obj/structure/window/plasma/reinforced/spawner, +/area/ship/cargo) +"tI" = ( +/obj/effect/spawner/structure/window/shuttle, /obj/machinery/door/poddoor{ - id = "osprey_thruster_starboard"; - name = "Thruster Blast Door"; - dir = 4 + dir = 1; + id = "harrierwindows"; + name = "Window Blast Door" }, /turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"wR" = ( -/obj/structure/closet/crate/freezer/blood, -/obj/machinery/iv_drip, -/obj/effect/turf_decal/corner/opaque/lime{ +/area/ship/security) +"tJ" = ( +/obj/effect/turf_decal/corner/opaque/ntblue/full, +/obj/effect/turf_decal/corner/opaque/white{ dir = 1 }, -/obj/effect/turf_decal/corner/opaque/lime{ +/obj/effect/turf_decal/corner/opaque/white, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/lime, -/obj/structure/sign/poster/official/moth/epi{ - pixel_y = 32 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/machinery/light/directional/east, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"wT" = ( -/obj/machinery/power/shuttle/engine/fueled/plasma{ - dir = 4 +/obj/structure/disposalpipe/segment{ + dir = 8 }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"wV" = ( -/obj/effect/landmark/start/atmospheric_technician, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 4 +/turf/open/floor/plasteel, +/area/ship/hallway/central) +"tN" = ( +/obj/structure/crate_shelf, +/obj/structure/closet/crate/internals, +/obj/item/clothing/suit/space/orange, +/obj/item/clothing/suit/space/orange, +/obj/item/clothing/suit/space/orange, +/obj/item/clothing/head/helmet/space/orange, +/obj/item/clothing/head/helmet/space/orange, +/obj/item/clothing/head/helmet/space/orange, +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) +"tO" = ( +/obj/structure/closet/secure_closet/freezer/meat, +/turf/open/floor/plasteel/freezer, +/area/ship/crew/canteen) +"tQ" = ( +/obj/machinery/igniter{ + id = "harrier_igniter" + }, +/obj/machinery/air_sensor/atmos/incinerator_tank, +/turf/open/floor/engine/vacuum, +/area/ship/engineering/engine) +"tS" = ( +/obj/machinery/disposal/bin{ + name = "biohazard disposal unit" }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"wW" = ( -/turf/open/floor/plasteel/stairs/right{ - dir = 4 +/obj/effect/turf_decal/box/white{ + color = "#2CB2E8" }, -/area/ship/cargo) -"wY" = ( +/obj/machinery/light/directional/east, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/ship/medical) +"tT" = ( +/obj/effect/turf_decal/trimline/opaque/vired/line, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"tV" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/machinery/light/small/directional/south, /obj/structure/disposalpipe/segment{ - dir = 2 + dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/carpet/cyan, +/area/ship/medical) +"tY" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/crew/toilet) +"tZ" = ( /obj/structure/cable{ - icon_state = "1-2" + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/dark/hidden/layer5, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/machinery/atmospherics/pipe/simple/green/hidden/layer1, -/obj/effect/turf_decal/industrial/warning{ - dir = 1 +/obj/structure/disposalpipe/segment{ + dir = 6 }, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/corner{ + dir = 4 + }, +/obj/structure/closet/emcloset/wall/directional/north, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/port) +"uc" = ( /obj/structure/cable{ - icon_state = "1-4" + icon_state = "1-8" }, -/turf/open/floor/plasteel/dark, -/area/ship/science/ai_chamber) -"xb" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 }, -/turf/open/floor/wood, -/area/ship/crew/canteen) -"xj" = ( -/obj/structure/janitorialcart{ +/turf/open/floor/plasteel/dark, +/area/ship/security) +"ud" = ( +/obj/machinery/cryopod{ dir = 8 }, -/obj/structure/disposalpipe/sorting/mail{ +/obj/machinery/light_switch{ dir = 8; - sortType = 22; - tag = "Jantor Closet" + pixel_x = 20; + pixel_y = 5 }, -/turf/open/floor/plating, -/area/ship/crew/janitor) -"xp" = ( -/obj/machinery/atmospherics/components/trinary/filter/atmos/o2, -/obj/effect/turf_decal/industrial/outline/yellow, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"xq" = ( -/obj/machinery/button/door{ - dir = 8; - id = "ospreywindows"; - name = "External Window Shutters"; - pixel_x = 32; - pixel_y = -6 +/turf/open/floor/circuit, +/area/ship/crew/cryo) +"ue" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 }, -/obj/machinery/button/door{ - dir = 8; - id = "ospreybridge"; - name = "Bridge Lockdown"; - pixel_x = 32; - pixel_y = 6 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/freezer, +/area/ship/bridge) +"uf" = ( +/obj/effect/turf_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/industrial/caution{ + dir = 1 }, -/obj/machinery/modular_computer/console/preset/command{ +/obj/structure/chair/handrail{ dir = 8 }, -/obj/item/radio/intercom/wideband/directional/east, -/turf/open/floor/plasteel/tech/grid, -/area/ship/bridge) -"xB" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Infirmary"; - dir = 4 +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/hallway/starboard) +"uh" = ( +/obj/structure/cable{ + icon_state = "6-9" }, -/obj/structure/disposalpipe/segment{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/port) +"uk" = ( +/obj/effect/turf_decal/industrial/warning{ dir = 8 }, -/obj/effect/turf_decal/borderfloor{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 4 }, -/obj/machinery/door/firedoor/border_only{ +/obj/effect/turf_decal/industrial/warning{ dir = 4 }, -/obj/machinery/door/firedoor/border_only{ +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/engine) +"ul" = ( +/obj/effect/turf_decal/corner/opaque/white{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/white{ dir = 8 }, -/turf/open/floor/plasteel/white, +/obj/effect/landmark/start/cook, +/turf/open/floor/plasteel, +/area/ship/crew/canteen) +"um" = ( +/obj/machinery/smartfridge/bloodbank/preloaded, +/turf/open/floor/plasteel/tech/grid, /area/ship/medical) -"xE" = ( -/obj/machinery/light_switch{ - dir = 1; - pixel_y = -16 +"uo" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 }, -/turf/open/floor/plasteel/dark, -/area/ship/science/ai_chamber) -"xF" = ( -/obj/effect/turf_decal/corner/opaque/green{ +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/trimline/transparent/white/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating, +/obj/structure/chair/handrail{ dir = 4 }, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"xG" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "osprey_cargoload" +/turf/open/floor/plasteel/dark, +/area/ship/science/ai_chamber) +"up" = ( +/obj/structure/cable{ + icon_state = "2-8" }, -/obj/machinery/camera/autoname{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 10 }, -/turf/open/floor/plating, -/area/ship/cargo) -"xH" = ( -/obj/effect/turf_decal/corner/opaque/purple{ - dir = 1 - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 }, -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) -"xJ" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Infirmary"; +/obj/effect/turf_decal/siding/wood{ dir = 4 }, +/obj/machinery/light/small/directional/east, /obj/structure/disposalpipe/segment{ - dir = 8 + dir = 10 }, +/turf/open/floor/wood, +/area/ship/crew) +"ur" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/turf_decal/borderfloor{ +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 4 }, -/obj/machinery/door/firedoor/border_only{ +/obj/effect/turf_decal/trimline/opaque/ntblue/arrow_cw{ dir = 4 }, -/obj/machinery/door/firedoor/border_only{ +/turf/open/floor/plasteel/patterned, +/area/ship/storage/eva) +"uu" = ( +/obj/machinery/disposal/deliveryChute{ dir = 8 }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"xK" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"xN" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"xP" = ( -/obj/machinery/power/shieldwallgen/atmos/roundstart{ - dir = 8; - id = "osprey_atmosfield" +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 }, -/obj/structure/cable{ - icon_state = "0-8" +/obj/structure/window/reinforced{ + dir = 4 }, -/obj/effect/turf_decal/industrial/warning, -/obj/effect/turf_decal/industrial/warning{ +/obj/machinery/door/window/westleft, +/obj/structure/disposalpipe/trunk{ dir = 1 }, -/obj/machinery/door/poddoor{ - id = "osprey_tank_vent" +/turf/open/floor/plating, +/area/ship/cargo) +"uv" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/visible{ + dir = 4 }, -/turf/open/floor/engine, -/area/ship/engineering/atmospherics) -"xT" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/light_switch{ + pixel_x = -5; + pixel_y = 20 }, -/obj/machinery/camera/autoname{ - dir = 10 +/obj/effect/turf_decal/siding/yellow{ + dir = 9 }, -/turf/open/floor/plasteel/stairs{ - dir = 4 +/obj/machinery/button/door{ + dir = 4; + id = "harrier_enginevent"; + name = "Blast Door Control"; + pixel_x = -25; + pixel_y = 1 }, -/area/ship/hallway/central) -"xY" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/chair/handrail, +/turf/open/floor/plasteel, +/area/ship/engineering/engine) +"uw" = ( /obj/structure/cable{ - icon_state = "1-2" + icon_state = "5-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/structure/chair/handrail{ + dir = 1 }, /turf/open/floor/plasteel, -/area/ship/hallway/central) -"yc" = ( -/obj/structure/closet/secure_closet{ - icon_state = "med"; - name = "medicine locker" +/area/ship/hallway/starboard) +"uy" = ( +/obj/machinery/light/small/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 8 }, -/obj/item/storage/firstaid/fire{ - pixel_x = -4; - pixel_y = 5 +/turf/open/floor/carpet/executive, +/area/ship/crew/law_office) +"uz" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 }, -/obj/item/storage/firstaid/regular, -/obj/machinery/button/door{ - dir = 1; - id = "ospreymed"; - name = "Shutter Control"; - pixel_x = 5; - pixel_y = -25 - }, -/obj/machinery/light_switch{ - dir = 1; - pixel_x = -5; - pixel_y = -24 +/obj/machinery/light/directional/east, +/obj/structure/cable{ + icon_state = "1-8" }, -/obj/machinery/camera/autoname{ - dir = 1 +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 4 }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"yd" = ( -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) -"yg" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"uB" = ( +/obj/docking_port/mobile{ + dir = 4; + launch_status = 0; + port_direction = 2; + preferred_direction = 4 }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"yj" = ( /turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/engineering/atmospherics) -"yl" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/turf/open/floor/plasteel, -/area/ship/crew/cryo) -"yn" = ( -/obj/structure/disposalpipe/sorting/wrap, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel, -/area/ship/cargo/office) -"yq" = ( -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ +/area/ship/crew/toilet) +"uC" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 4 }, +/obj/structure/disposalpipe/sorting/mail{ + dir = 2; + sortTypes = list(8,15,30); + tag = "Bridge" + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/port) +"uD" = ( +/obj/effect/turf_decal/industrial/warning/fulltile, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/green/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/purple/hidden, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-4" }, /obj/structure/cable{ icon_state = "1-8" }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"uG" = ( +/obj/effect/spawner/structure/window/shuttle, +/obj/machinery/door/poddoor{ + dir = 1; + id = "harrierwindows"; + name = "Window Blast Door" }, -/turf/open/floor/wood, +/turf/open/floor/plating, /area/ship/crew/canteen) -"yw" = ( -/obj/effect/turf_decal/corner/opaque/red, -/obj/effect/turf_decal/corner/opaque/white{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 4 +"uH" = ( +/obj/structure/table/reinforced, +/obj/item/table_bell{ + pixel_x = -4; + pixel_y = 13 }, -/obj/structure/cable{ - icon_state = "1-8" +/obj/machinery/door/window/westright, +/obj/machinery/door/firedoor/border_only{ + dir = 8 }, -/obj/machinery/status_display/shuttle{ - pixel_x = 32 +/turf/open/floor/carpet/cyan, +/area/ship/medical) +"uI" = ( +/obj/machinery/door/window/southright{ + dir = 8; + name = "Freezer"; + req_access_txt = "28" }, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"yC" = ( -/obj/machinery/camera/emp_proof/motion{ +/obj/structure/extinguisher_cabinet/directional/south, +/obj/effect/turf_decal/siding{ dir = 8 }, -/turf/open/floor/plasteel/dark, -/area/ship/science/ai_chamber) -"yE" = ( -/obj/machinery/vending/cola/random, -/obj/structure/disposalpipe/segment{ - dir = 8 +/turf/open/floor/plasteel/freezer, +/area/ship/crew/canteen) +"uS" = ( +/obj/machinery/door/airlock{ + name = "Dormitory" }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ dir = 1 }, -/obj/structure/railing{ - layer = 2.91 +/obj/effect/turf_decal/borderfloor{ + dir = 1 }, /turf/open/floor/plasteel, -/area/ship/hallway/central) -"yI" = ( -/obj/machinery/camera/autoname{ - dir = 5 - }, -/obj/machinery/computer/cryopod/directional/west, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/crew/cryo) -"yP" = ( -/obj/machinery/telecomms/relay{ - freq_listening = list(1351); - id = "Nanotrasen Relay"; - name = "Nanotrasen relay"; - network = "nt_commnet" +/area/ship/crew) +"uT" = ( +/obj/machinery/door/airlock/engineering{ + name = "Engine Room"; + req_access_txt = "10" }, -/obj/machinery/door/window/brigdoor/westleft{ - dir = 4; - name = "Comms Relay"; - req_one_access_txt = "61" +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/open/floor/circuit, -/area/ship/science/ai_chamber) -"yQ" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/cable{ - icon_state = "2-8" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/green/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/purple/hidden, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 }, -/obj/effect/turf_decal/corner/opaque/blue{ - dir = 4 +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/borderfloor, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"uW" = ( +/obj/machinery/atmospherics/pipe/simple/purple/visible{ + dir = 8 }, -/obj/effect/turf_decal/corner/opaque/white{ - dir = 1 +/obj/machinery/light/small/directional/south, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"uX" = ( +/obj/structure/guncloset{ + req_access_txt = "2" }, -/obj/machinery/status_display/shuttle{ - pixel_x = 32 +/obj/item/gun/energy/e_gun/mini, +/obj/item/gun/ballistic/automatic/pistol/commander/no_mag, +/obj/item/radio/intercom/directional/east, +/obj/structure/sign/nanotrasen/vigilitas{ + pixel_y = 32 }, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"yS" = ( -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/structure/frame/machine, -/turf/open/floor/plasteel/dark, -/area/ship/science) -"yT" = ( -/obj/effect/turf_decal/corner/opaque/brown{ +/obj/effect/turf_decal/trimline/opaque/vired/filled/warning{ dir = 8 }, -/obj/effect/turf_decal/industrial/warning/corner{ +/obj/item/gun/energy/disabler, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"uZ" = ( +/obj/structure/sign/nanotrasen, +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/bridge) +"va" = ( +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/trimline/opaque/nsorange/filled/arrow_ccw{ dir = 4 }, -/obj/machinery/light/directional/east, -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) -"yU" = ( -/obj/effect/turf_decal/corner/opaque/purple{ - dir = 4 +/obj/machinery/camera{ + dir = 8 }, -/obj/effect/turf_decal/corner/opaque/purple{ - dir = 1 +/obj/structure/chair/handrail{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-2" +/turf/open/floor/plasteel, +/area/ship/storage/eva) +"vd" = ( +/obj/structure/closet/secure_closet/head_of_personnel{ + populate = 0 + }, +/obj/machinery/firealarm/directional/west, +/obj/item/clothing/shoes/laceup, +/obj/item/clothing/under/nanotrasen/officer, +/obj/item/clothing/suit/toggle/nanotrasen, +/obj/item/clothing/head/nanotrasen/officer, +/obj/item/clothing/head/nanotrasen/beret, +/obj/item/clothing/glasses/sunglasses, +/obj/item/storage/backpack/satchel/leather, +/obj/item/storage/box/ids, +/obj/machinery/light/small/directional/south, +/turf/open/floor/carpet/blue, +/area/ship/crew/dorm) +"vj" = ( +/obj/structure/disposalpipe/sorting/mail{ + dir = 4; + sortTypes = list(2,3); + tag = "QM Office" }, /turf/open/floor/plasteel, /area/ship/cargo) -"yX" = ( -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/machinery/light/directional/north, -/obj/machinery/rnd/destructive_analyzer, -/turf/open/floor/plasteel/dark, -/area/ship/science) -"zb" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ship/science) -"zi" = ( -/obj/structure/disposalpipe/segment{ - dir = 2 +"vl" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 }, -/obj/effect/turf_decal/corner/opaque/green{ - dir = 1 +/obj/effect/turf_decal/trimline/opaque/ntblue/line{ + dir = 8 }, -/obj/effect/turf_decal/corner/opaque/green{ +/turf/open/floor/plasteel, +/area/ship/storage/eva) +"vm" = ( +/obj/effect/turf_decal/corner/opaque/ntblue/full, +/obj/effect/turf_decal/corner/opaque/white{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-2" - }, /turf/open/floor/plasteel, /area/ship/hallway/central) -"zl" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 4 +"vr" = ( +/obj/structure/railing, +/obj/structure/disposaloutlet{ + dir = 1 }, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/plasteel/freezer, -/area/ship/crew/toilet) -"zt" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ +/obj/structure/window/reinforced, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/conveyor{ + dir = 1; + id = "harrier_packagesort" + }, +/turf/open/floor/plating, +/area/ship/cargo) +"vs" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 4 }, +/obj/effect/turf_decal/siding/yellow, +/turf/open/floor/plasteel, +/area/ship/engineering) +"vC" = ( /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plasteel/stairs/mid{ - dir = 4 +/obj/machinery/door/airlock{ + dir = 4; + name = "Restroom"; + req_ship_access = 0 }, -/area/ship/cargo) -"zy" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Canteen"; +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/obj/effect/turf_decal/borderfloor{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, /obj/machinery/door/firedoor/border_only{ @@ -4016,1612 +3847,1496 @@ /obj/machinery/door/firedoor/border_only{ dir = 4 }, -/turf/open/floor/plasteel, -/area/ship/crew/canteen) -"zF" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/turf_decal/corner/opaque/purple{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/green{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ +/obj/effect/turf_decal/borderfloor{ dir = 4 }, -/obj/structure/cable{ - icon_state = "4-8" - }, /turf/open/floor/plasteel, -/area/ship/hallway/central) -"zJ" = ( -/obj/effect/turf_decal/corner/transparent/neutral{ - dir = 4 +/area/ship/crew) +"vI" = ( +/obj/structure/table, +/obj/item/storage/bag/trash{ + pixel_x = 5 }, -/obj/machinery/vending/snack/random, -/obj/machinery/light/directional/east, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"zL" = ( -/obj/machinery/door/airlock/command{ - name = "First Officer's Quarters"; - req_access_txt = "57"; +/obj/item/reagent_containers/glass/bucket{ + pixel_x = -3; + pixel_y = 8 + }, +/obj/item/mop, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/crew/janitor) +"vL" = ( +/obj/effect/turf_decal/trimline/transparent/white/filled/warning{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 +/obj/structure/railing/corner{ + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/borderfloor{ - dir = 8 + dir = 9 }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/mono/dark, /area/ship/bridge) -"zM" = ( -/obj/structure/disposaloutlet{ - dir = 4 +"vM" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/structure/disposalpipe/trunk{ - dir = 8 +/obj/structure/cable{ + icon_state = "2-4" }, -/obj/structure/window/reinforced{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 }, -/obj/structure/window/reinforced{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/brown/visible/layer1, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/structure/disposalpipe/segment{ + dir = 6 }, -/obj/structure/window/reinforced, -/obj/machinery/conveyor{ - dir = 4; - id = "osprey_packagesort" +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"vN" = ( +/obj/structure/chair/office{ + dir = 8 }, -/turf/open/floor/plating, -/area/ship/cargo/office) -"zN" = ( /obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/obj/effect/turf_decal/trimline/opaque/nsorange/line{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 +/obj/effect/landmark/start/quartermaster, +/turf/open/floor/plasteel, +/area/ship/cargo) +"vS" = ( +/obj/structure/filingcabinet/double/grey, +/obj/structure/sign/nanotrasen/ns{ + pixel_y = 32 }, +/turf/open/floor/plasteel, +/area/ship/cargo) +"vT" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/railing, -/turf/open/floor/plasteel/stairs{ - dir = 4 - }, -/area/ship/hallway/central) -"zQ" = ( -/obj/structure/disposalpipe/segment{ +/obj/machinery/door/firedoor/border_only{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ +/obj/machinery/door/firedoor/border_only{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/obj/effect/turf_decal/borderfloor{ + dir = 8 + }, +/obj/machinery/door/airlock/public/glass{ + dir = 4; + name = "Canteen" }, +/turf/open/floor/plasteel, +/area/ship/crew/canteen) +"vW" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/turf_decal/trimline/opaque/blue/end{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/opaque/blue/line, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"zU" = ( -/obj/effect/turf_decal/corner/transparent/neutral, -/obj/effect/turf_decal/corner/opaque/bar{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/machinery/light/directional/east, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"Ac" = ( -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/obj/effect/turf_decal/trimline/opaque/blue/corner{ - dir = 1 - }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"Ag" = ( -/obj/machinery/door/airlock/engineering{ - name = "Engineering"; - req_access_txt = "10"; - dir = 8 +/obj/effect/turf_decal/siding/wood{ + dir = 10 }, /obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/effect/turf_decal/borderfloor{ - dir = 8 +/obj/structure/closet/emcloset/wall/directional/south, +/turf/open/floor/wood, +/area/ship/crew) +"vY" = ( +/obj/structure/cable{ + icon_state = "1-8" }, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/machinery/door/firedoor/border_only{ +/obj/effect/turf_decal/ntspaceworks_big/eight{ dir = 8 }, -/obj/machinery/door/firedoor/border_only{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering) +"vZ" = ( +/obj/structure/table/reinforced, +/turf/open/floor/plating, +/area/ship/crew/canteen) +"wa" = ( +/obj/effect/spawner/structure/window/shuttle, +/obj/machinery/door/poddoor{ + dir = 1; + id = "harrierwindows"; + name = "Window Blast Door" + }, +/turf/open/floor/plating, +/area/ship/hallway/central) +"wd" = ( +/obj/effect/turf_decal/industrial/warning{ dir = 4 }, -/turf/open/floor/plasteel, -/area/ship/engineering) -"Ai" = ( -/obj/effect/turf_decal/corner/opaque/ntblue{ - dir = 8 +/obj/machinery/conveyor_switch/oneway{ + id = "harrier_packagesort" }, -/obj/structure/cable{ - icon_state = "1-8" +/obj/structure/disposalpipe/segment{ + dir = 10 }, /turf/open/floor/plasteel, -/area/ship/hallway/central) -"Aj" = ( -/obj/machinery/door/firedoor/heavy, +/area/ship/cargo) +"wn" = ( +/obj/effect/turf_decal/industrial/warning/fulltile, /obj/machinery/door/poddoor{ - id = "osprey_thruster_port"; - name = "Blast Door"; - dir = 4 + dir = 1; + id = "harrierdoors"; + name = "Cargo Bay Blast Door" }, -/obj/effect/spawner/structure/window/shuttle, -/obj/machinery/atmospherics/pipe/simple/green/hidden/layer1{ - dir = 4 +/obj/machinery/power/shieldwallgen/atmos/roundstart{ + dir = 8; + id = "harrier_cargofield"; + locked = 1 }, -/turf/open/floor/plating, -/area/ship/science/ai_chamber) -"An" = ( -/obj/effect/spawner/structure/window/shuttle, -/obj/machinery/door/poddoor/shutters{ - id = "ospreysci" +/obj/structure/cable{ + icon_state = "0-1" }, -/obj/machinery/door/firedoor/window, /turf/open/floor/plating, -/area/ship/science) -"Ap" = ( -/obj/structure/disposalpipe/segment{ - dir = 2 +/area/ship/storage/eva) +"wp" = ( +/obj/machinery/washing_machine, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plasteel, +/area/ship/crew) +"wq" = ( +/obj/structure/cable{ + icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/dark/hidden/layer5, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/machinery/atmospherics/pipe/simple/green/hidden/layer1, -/turf/open/floor/plasteel/dark, -/area/ship/science/ai_chamber) -"AB" = ( -/obj/effect/turf_decal/corner/transparent/neutral{ - dir = 4 - }, -/obj/item/kirbyplants/random, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"AR" = ( -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/obj/machinery/door/airlock/mining{ - name = "Cargo Office"; - req_access_txt = "31" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/borderfloor{ - dir = 1 +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 }, -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 +/obj/effect/turf_decal/ntspaceworks_big/six{ + dir = 8 }, -/obj/machinery/door/firedoor/border_only, -/turf/open/floor/plasteel, -/area/ship/cargo/office) -"AS" = ( /obj/structure/disposalpipe/segment{ dir = 5 }, -/obj/structure/chair/office{ +/turf/open/floor/plasteel/patterned, +/area/ship/engineering) +"wr" = ( +/obj/effect/turf_decal/corner/opaque/ntblue/full, +/obj/effect/turf_decal/corner/opaque/white, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel, +/area/ship/hallway/central) +"wz" = ( +/obj/effect/turf_decal/trimline/transparent/white/filled/warning{ + dir = 8 + }, +/obj/structure/railing/corner{ dir = 1 }, -/obj/effect/landmark/start/quartermaster, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 4 +/obj/structure/cable{ + icon_state = "2-8" }, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 }, -/turf/open/floor/plasteel, -/area/ship/cargo/office) -"AT" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 1 +/obj/structure/cable{ + icon_state = "1-8" }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"wA" = ( /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/cargo) -"Bc" = ( -/obj/structure/table/optable, -/obj/effect/turf_decal/corner/opaque/pink{ +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/pink{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/white, /area/ship/medical) -"Bl" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/components/binary/volume_pump, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"Bn" = ( +"wD" = ( /obj/structure/disposalpipe/segment, -/obj/structure/closet/emcloset/anchored, -/obj/machinery/firealarm/directional/west, -/obj/machinery/light_switch{ - dir = 4; - pixel_x = -20; - pixel_y = 10 +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/corner, +/turf/open/floor/plasteel, +/area/ship/hallway/starboard) +"wH" = ( +/turf/open/floor/plasteel/mono, +/area/ship/storage/eva) +"wL" = ( +/obj/structure/chair/comfy/blue/corpo/directional/south, +/obj/effect/turf_decal/trimline/opaque/ntblue/line{ + dir = 9 }, -/turf/open/floor/plasteel, -/area/ship/cargo) -"Bp" = ( -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_y = -32 - }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/wood, -/area/ship/crew/canteen) -"Bq" = ( -/obj/structure/disposalpipe/segment{ +/obj/effect/turf_decal/siding/thinplating/dark{ dir = 8 }, -/obj/structure/table, -/obj/item/storage/belt/utility{ - pixel_y = 6 - }, -/obj/item/hand_labeler{ - pixel_x = 15; - pixel_y = 7 - }, -/obj/item/multitool{ - pixel_x = 7; - pixel_y = 2 - }, -/obj/item/clothing/head/soft{ - pixel_x = -7 - }, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 4 +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"wM" = ( +/obj/machinery/telecomms/relay{ + freq_listening = list(1351); + id = "Nanotrasen Relay"; + name = "Nanotrasen relay"; + network = "nt_commnet" }, -/obj/effect/turf_decal/corner/opaque/brown{ +/turf/open/floor/circuit, +/area/ship/science/ai_chamber) +"wN" = ( +/turf/open/floor/plasteel/mono, +/area/ship/hallway/port) +"wO" = ( +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/line{ dir = 1 }, +/obj/structure/disposalpipe/trunk, /turf/open/floor/plasteel, -/area/ship/cargo/office) -"Bs" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/obj/structure/cable{ - icon_state = "2-4" - }, -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) -"Bu" = ( -/obj/machinery/vending/cola/random, -/obj/effect/turf_decal/corner/opaque/white{ - dir = 8 +/area/ship/hallway/central) +"wS" = ( +/obj/structure/tank_dispenser/oxygen, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 }, -/obj/effect/turf_decal/corner/opaque/white{ +/obj/effect/turf_decal/borderfloor{ dir = 4 }, -/obj/item/radio/intercom/directional/north, -/obj/machinery/light/directional/west, -/turf/open/floor/plasteel, -/area/ship/crew/canteen) -"Bv" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "osprey_packagesort" - }, -/obj/structure/sign/poster/contraband/steppyflag{ - pixel_x = 32 +/turf/open/floor/plasteel/tech/grid, +/area/ship/hallway/starboard) +"wU" = ( +/obj/structure/cable{ + icon_state = "2-4" }, -/turf/open/floor/plating, -/area/ship/cargo/office) -"BH" = ( -/obj/structure/sign/nanotrasen, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/crew/dorm) -"BK" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, /obj/structure/disposalpipe/segment{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "4-8" + dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 +/turf/open/floor/plasteel/mono, +/area/ship/crew/canteen) +"wX" = ( +/turf/closed/wall/mineral/titanium/interior, +/area/ship/crew) +"wY" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/nitrogen_output, +/turf/open/floor/engine/n2, +/area/ship/engineering/atmospherics) +"xa" = ( +/obj/effect/turf_decal/siding/yellow, +/turf/open/floor/plasteel, +/area/ship/engineering) +"xe" = ( +/obj/machinery/button/door{ + dir = 4; + id = "harriercargo"; + name = "Shutter Control"; + pixel_x = -25; + pixel_y = 5 }, -/obj/structure/cable{ - icon_state = "1-8" +/obj/machinery/button/door{ + id = "harriercargoaccess"; + name = "Cargo Bay Shutters"; + pixel_x = -6; + pixel_y = 24 }, -/obj/machinery/light/directional/south, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"BL" = ( -/obj/structure/disposalpipe/segment{ - dir = 2 +/obj/machinery/button/door{ + id = "harriereva"; + name = "EVA Storage Shutters"; + pixel_x = 6; + pixel_y = 24 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ +/obj/machinery/computer/cargo, +/obj/effect/turf_decal/trimline/opaque/nsorange/line{ dir = 8 }, +/turf/open/floor/plasteel, +/area/ship/cargo) +"xf" = ( /obj/structure/cable{ - icon_state = "1-2" + icon_state = "2-8" }, -/obj/machinery/airalarm/directional/west, -/obj/machinery/atmospherics/pipe/simple/dark/hidden/layer5, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/machinery/atmospherics/pipe/simple/green/hidden/layer1, -/turf/open/floor/plasteel/dark, -/area/ship/science/ai_chamber) -"BN" = ( /obj/structure/cable{ - icon_state = "1-4" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/components/binary/volume_pump{ - dir = 8 - }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"BU" = ( -/obj/machinery/door/window/eastleft, -/obj/structure/toilet{ - dir = 4 + dir = 10 }, -/obj/structure/curtain, -/turf/open/floor/plasteel/freezer, -/area/ship/crew/toilet) -"Cj" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 + dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 +/obj/machinery/firealarm/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 8 }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/cargo) -"Cn" = ( -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/mono, /area/ship/hallway/central) -"Cp" = ( -/obj/structure/disposalpipe/segment{ +"xg" = ( +/obj/effect/turf_decal/trimline/transparent/white/filled/warning{ dir = 8 }, -/obj/effect/turf_decal/corner/opaque/bar, -/obj/effect/turf_decal/corner/opaque/bar{ - dir = 4 +/obj/structure/railing/corner{ + dir = 1 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 + dir = 6 }, /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"Cu" = ( -/obj/effect/turf_decal/box/corners{ +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"xj" = ( +/obj/structure/railing, +/obj/effect/turf_decal/trimline/transparent/white/filled/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "4-8" }, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/cargo) -"Cv" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/cargo) -"Cw" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) -"CA" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/disposalpipe/segment{ + dir = 9 }, -/turf/open/floor/plasteel/patterned/cargo_one, +/turf/open/floor/plasteel, /area/ship/cargo) -"CC" = ( -/obj/effect/turf_decal/corner/opaque/ntblue{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 1 - }, +"xl" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"CF" = ( -/turf/closed/wall/mineral/titanium, -/area/ship/medical) -"CH" = ( -/obj/structure/disposalpipe/segment{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 10 + dir = 4 }, +/obj/item/radio/intercom/directional/north, +/turf/open/floor/plasteel/dark, +/area/ship/crew/cryo) +"xn" = ( +/turf/open/floor/plasteel/mono, +/area/ship/crew/canteen) +"xo" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/turf_decal/corner/opaque/blue{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/blue{ - dir = 1 - }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"CL" = ( -/obj/machinery/door/airlock{ - name = "Restroom"; +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, /obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/obj/structure/closet/emcloset/wall/directional/south, +/obj/structure/chair/handrail{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"xv" = ( +/obj/structure/chair{ dir = 4 }, -/obj/effect/turf_decal/borderfloor{ - dir = 8 - }, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 +/obj/effect/turf_decal/siding/yellow, +/turf/open/floor/plasteel, +/area/ship/engineering) +"xy" = ( +/obj/structure/table/wood, +/obj/machinery/airalarm/directional/north, +/turf/open/floor/carpet/cyan, +/area/ship/crew) +"xD" = ( +/obj/item/kirbyplants/random, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/structure/sign/poster/official/random{ + pixel_y = -32 }, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/line, /turf/open/floor/plasteel, -/area/ship/crew/toilet) -"CQ" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ +/area/ship/hallway/central) +"xH" = ( +/obj/structure/railing, +/obj/structure/table, +/obj/effect/turf_decal/industrial/warning{ dir = 4 }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"CT" = ( -/obj/machinery/deepfryer, -/obj/effect/turf_decal/corner/opaque/white{ +/obj/structure/disposalpipe/junction/yjunction{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/white{ - dir = 8 +/obj/item/stack/packageWrap{ + pixel_y = 11 }, -/turf/open/floor/plasteel, -/area/ship/crew/canteen) -"Dg" = ( -/obj/machinery/door/window/southright{ - name = "Kitchen"; - req_access_txt = "28" +/obj/item/stack/packageWrap{ + pixel_y = 5 }, +/obj/item/stack/wrapping_paper, +/obj/item/stack/tape, +/turf/open/floor/plasteel, +/area/ship/cargo) +"xK" = ( /obj/effect/turf_decal/corner/opaque/white{ dir = 4 }, /obj/effect/turf_decal/corner/opaque/white{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/structure/curtain/bounty, /turf/open/floor/plasteel, /area/ship/crew/canteen) -"Di" = ( -/obj/structure/filingcabinet/double, -/obj/effect/turf_decal/corner/opaque/ntblue{ - dir = 4 +"xM" = ( +/obj/structure/cable{ + icon_state = "2-8" }, -/obj/effect/turf_decal/corner/opaque/ntblue{ - dir = 1 +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 }, -/obj/machinery/light/directional/north, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) -"Dj" = ( -/obj/structure/table/glass, -/obj/item/defibrillator, -/obj/effect/turf_decal/corner/opaque/pink{ - dir = 4 +/turf/open/floor/plasteel/freezer, +/area/ship/crew/toilet) +"xN" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced{ + dir = 8 }, -/obj/effect/turf_decal/corner/opaque/pink{ +/obj/structure/window/reinforced{ dir = 1 }, -/obj/effect/turf_decal/corner/opaque/pink, -/obj/structure/sign/warning/nosmoking/circle{ - pixel_x = 25 +/obj/machinery/computer/med_data/laptop{ + dir = 4 }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"Dq" = ( -/obj/effect/turf_decal/industrial/warning/corner{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 }, -/obj/structure/marker_beacon, -/turf/open/floor/engine/hull, -/area/ship/external) -"Dx" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/cargo) -"DA" = ( -/obj/structure/cable{ - icon_state = "0-2" +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/effect/turf_decal/siding/wood{ - dir = 5 +/obj/machinery/door/firedoor/border_only{ + dir = 8 }, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/machinery/light_switch{ - pixel_x = 20; - dir = 8; - pixel_y = 11 +/obj/machinery/door/firedoor/border_only{ + dir = 1 }, -/turf/open/floor/wood, -/area/ship/crew/canteen) -"DE" = ( -/obj/effect/turf_decal/industrial/loading{ - dir = 8 +/turf/open/floor/carpet/cyan, +/area/ship/medical) +"xQ" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/effect/turf_decal/corner/opaque/brown{ +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 +/turf/open/floor/plasteel/freezer, +/area/ship/crew/toilet) +"xS" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 }, -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) -"DF" = ( -/obj/structure/sign/number/eight{ - color = "Black" +/turf/open/floor/plasteel, +/area/ship/crew) +"yc" = ( +/obj/structure/cable{ + icon_state = "5-10" }, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/cargo/office) -"DH" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/effect/turf_decal/corner/opaque/white{ - dir = 8 +/turf/open/floor/plasteel/mono, +/area/ship/hallway/starboard) +"yd" = ( +/obj/structure/railing{ + dir = 4 }, -/obj/effect/turf_decal/corner/opaque/white{ +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/purple/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/siding/yellow{ dir = 4 }, -/turf/open/floor/plasteel, -/area/ship/crew/canteen) -"DK" = ( -/obj/machinery/vending/dinnerware, -/obj/effect/turf_decal/corner/opaque/white{ +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/stairs{ + dir = 1 + }, +/area/ship/engineering/engine) +"yl" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/white{ +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ship/cargo) +"ym" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 8 }, -/obj/machinery/light/dim/directional/east, -/turf/open/floor/plasteel, -/area/ship/crew/canteen) -"DO" = ( -/obj/effect/turf_decal/industrial/warning, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 +/obj/machinery/firealarm/directional/east, +/obj/structure/closet/firecloset, +/obj/effect/turf_decal/industrial/outline/yellow, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"yr" = ( +/obj/machinery/door/airlock/mining{ + dir = 4; + name = "Storage Bay"; + req_access_txt = "31" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 }, /turf/open/floor/plasteel/patterned, /area/ship/cargo) -"DP" = ( -/obj/structure/sign/number/four{ - color = "Black"; - dir = 1 +"ys" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 6 }, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/science) -"DU" = ( -/obj/structure/sign/nanotrasen, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/bridge) -"DV" = ( -/obj/structure/chair{ +/obj/effect/turf_decal/industrial/warning, +/obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/structure/railing{ - dir = 6; - layer = 3.1 +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/engine) +"yx" = ( +/obj/effect/turf_decal/industrial/warning, +/obj/structure/cable{ + icon_state = "2-4" }, -/turf/open/floor/plasteel, -/area/ship/cargo) -"DY" = ( -/obj/structure/chair{ - dir = 8 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/effect/landmark/start/assistant, -/obj/effect/turf_decal/siding/wood{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 6 }, -/obj/machinery/firealarm/directional/south, -/obj/machinery/light/directional/east, -/turf/open/floor/wood, -/area/ship/crew/canteen) -"Ee" = ( -/obj/structure/closet/secure_closet{ - icon_state = "med_secure"; - name = "medical doctor's locker" - }, -/obj/structure/cable{ - icon_state = "0-4" +/obj/machinery/atmospherics/pipe/simple/green/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 6 }, -/obj/effect/turf_decal/corner/opaque/blue{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 8 }, -/obj/effect/turf_decal/corner/opaque/blue{ +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/ship/engineering/engine) +"yz" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 5 + }, +/obj/effect/turf_decal/industrial/warning{ dir = 1 }, -/obj/item/storage/backpack/duffelbag/med, -/obj/item/storage/backpack/messenger/med, -/obj/item/storage/backpack/satchel/med, -/obj/item/storage/backpack/medic, -/obj/item/clothing/shoes/sneakers/white, -/obj/item/clothing/under/rank/medical/doctor/skirt, -/obj/item/clothing/under/rank/medical/doctor, -/obj/item/clothing/suit/toggle/labcoat, -/obj/item/storage/belt/medical, -/obj/item/clothing/glasses/hud/health, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/machinery/light_switch{ - dir = 4; - pixel_x = -19; - pixel_y = 12 +/obj/structure/disposalpipe/segment{ + dir = 8 }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"Ek" = ( +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/engine) +"yB" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/mono, +/area/ship/crew/canteen) +"yE" = ( /obj/effect/turf_decal/industrial/warning{ - dir = 6 + dir = 5 }, -/obj/machinery/conveyor_switch/oneway{ - id = "osprey_packagesort" +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 }, /turf/open/floor/plasteel, -/area/ship/cargo/office) -"Em" = ( -/obj/machinery/door/window/eastright{ - dir = 2; - req_access = list(11) +/area/ship/cargo) +"yG" = ( +/obj/structure/table/wood, +/obj/item/storage/pill_bottle/dice, +/obj/effect/turf_decal/siding/wood, +/obj/machinery/computer/helm/viewscreen/directional/south, +/turf/open/floor/wood, +/area/ship/crew) +"yI" = ( +/obj/effect/turf_decal/trimline/transparent/white/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/transparent/white/filled/warning, +/obj/machinery/door/firedoor/border_only{ + dir = 1 }, /obj/machinery/door/firedoor/border_only, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "5-10" }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"Es" = ( -/obj/effect/turf_decal/corner/transparent/neutral{ - dir = 4 +/turf/open/floor/plasteel/mono, +/area/ship/hallway/starboard) +"yL" = ( +/obj/structure/fluff/hedge, +/obj/structure/fluff/hedge, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/line{ + dir = 1 }, -/turf/open/floor/plasteel, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/line, +/turf/open/floor/plasteel/tech/techmaint, /area/ship/hallway/central) -"Ey" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 +"yR" = ( +/obj/item/storage/backpack/medic, +/obj/item/clothing/shoes/sneakers/blue, +/obj/item/clothing/under/nanotrasen/medical/paramedic, +/obj/item/clothing/head/nanotrasen/cap/medical, +/obj/item/clothing/glasses/hud/health, +/obj/item/storage/belt/medical/paramedic, +/obj/structure/closet/secure_closet/medical3{ + icon_state = "brig_phys"; + name = "paramedic's locker"; + populate = 0; + req_access = list(5) + }, +/obj/item/storage/backpack/messenger/para, +/obj/effect/turf_decal/trimline/opaque/blue/line{ + dir = 1 }, +/turf/open/floor/plasteel/white, +/area/ship/medical) +"yS" = ( +/obj/machinery/door/airlock/external/glass{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/warning/fulltile, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 + dir = 4 }, -/obj/structure/cable{ - icon_state = "1-4" +/turf/open/floor/engine, +/area/ship/engineering/engine) +"yY" = ( +/obj/structure/toilet{ + dir = 1 }, -/obj/structure/railing, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"EA" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 4 +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 }, -/turf/open/floor/plasteel/patterned, +/turf/open/floor/plasteel/freezer, +/area/ship/bridge) +"za" = ( +/obj/machinery/conveyor/inverted{ + dir = 6; + id = "harrier_packagesort" + }, +/turf/open/floor/plating, /area/ship/cargo) -"EN" = ( +"zc" = ( /obj/effect/spawner/structure/window/shuttle, -/obj/machinery/door/poddoor/shutters{ - id = "ospreywindows"; +/obj/machinery/atmospherics/pipe/simple/brown/visible/layer1{ + dir = 8 + }, +/obj/machinery/door/poddoor{ + dir = 4; + id = "harrierwindows"; + name = "Window Blast Door" + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible/layer5{ dir = 4 }, -/obj/machinery/door/firedoor/heavy, /turf/open/floor/plating, -/area/ship/crew/cryo) -"EO" = ( -/obj/structure/closet, -/obj/item/radio, -/obj/item/radio, -/obj/item/radio, -/obj/item/radio, -/obj/item/radio, -/obj/item/radio, -/obj/item/radio, -/obj/item/radio, -/obj/item/radio, -/obj/item/radio, -/obj/machinery/firealarm/directional/south, -/obj/machinery/light/small/directional/east, -/turf/open/floor/plasteel, -/area/ship/crew/cryo) -"ET" = ( -/obj/structure/table/wood, -/obj/item/paper_bin{ - pixel_x = 6 - }, -/obj/item/folder, -/obj/item/pen, -/obj/machinery/light/small/directional/south, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"EW" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 10 - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 4 +/area/ship/engineering/atmospherics) +"zd" = ( +/obj/structure/cable{ + icon_state = "2-4" }, -/turf/open/floor/plating, -/area/ship/engineering) -"EX" = ( +/obj/machinery/light/small/directional/north, /obj/structure/disposalpipe/segment{ - dir = 10 + dir = 6 }, -/obj/effect/turf_decal/corner/opaque/brown, -/obj/effect/turf_decal/corner/opaque/brown{ +/turf/open/floor/carpet/cyan, +/area/ship/medical) +"zm" = ( +/obj/machinery/atmospherics/pipe/simple/brown/visible/layer1{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 +/obj/machinery/camera, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"zr" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 }, -/turf/open/floor/plasteel, -/area/ship/cargo) -"Fe" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "AI Chamber"; - req_access_txt = "10" +/obj/machinery/light_switch{ + pixel_x = -5; + pixel_y = 20 }, -/obj/structure/disposalpipe/segment{ - dir = 2 +/obj/machinery/firealarm/directional/north{ + pixel_x = 6 }, -/obj/effect/turf_decal/borderfloor{ +/obj/effect/turf_decal/trimline/opaque/vired/line{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel/tech/grid, -/area/ship/science/ai_chamber) -"Fj" = ( -/obj/structure/window/reinforced{ - dir = 4 +/turf/open/floor/plasteel/dark, +/area/ship/security) +"zs" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/atmos_waste{ + dir = 4; + piping_layer = 1 }, -/obj/machinery/atmospherics/pipe/manifold/orange/visible{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/orange/visible/layer5{ + dir = 6 }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"Fk" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 8 +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"zv" = ( +/obj/effect/turf_decal/trimline/opaque/blue/line, +/obj/structure/closet/emcloset/wall/directional/south, +/obj/machinery/camera{ + dir = 10 }, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) -"Fo" = ( -/obj/effect/turf_decal/corner/opaque/white{ +/turf/open/floor/plasteel/white, +/area/ship/medical) +"zx" = ( +/obj/structure/sign/directions/service{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/white{ - dir = 8 +/obj/structure/sign/directions/supply{ + dir = 4; + pixel_y = -6 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/turf/open/floor/plasteel, +/obj/structure/sign/directions/medical{ + dir = 4; + pixel_y = 6 + }, +/turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/crew/canteen) -"Fr" = ( -/obj/structure/table, -/obj/item/instrument/saxophone, -/turf/open/floor/plasteel, -/area/ship/crew/cryo) -"Fs" = ( -/obj/machinery/door/window/northleft{ - name = "Mining Storage"; - req_access_txt = "48" +"zy" = ( +/obj/machinery/atmospherics/pipe/simple/brown/visible/layer1, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/borderfloor{ +/obj/machinery/atmospherics/pipe/simple/purple/visible, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"zF" = ( +/obj/structure/fluff/hedge, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/line{ dir = 1 }, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/line, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/hallway/central) +"zI" = ( /obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 + icon_state = "1-4" }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/cargo) -"FC" = ( -/obj/structure/disposalpipe/segment{ - dir = 2 +/obj/machinery/atmospherics/components/binary/volume_pump/on/layer4{ + dir = 8; + name = "Waste to Recycling" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/siding/wood{ - dir = 1 +/obj/machinery/atmospherics/pipe/manifold/green/visible/layer1{ + dir = 4 }, -/turf/open/floor/wood, -/area/ship/crew/canteen) -"FF" = ( -/obj/machinery/button/massdriver{ - id = "osprey_disposals"; - name = "disposals button"; - pixel_x = 7; - pixel_y = 24 +/obj/machinery/atmospherics/pipe/simple/purple/visible{ + dir = 5 }, -/obj/machinery/button/door{ - id = "osprey_disposals_preopen"; - pixel_x = -7; - pixel_y = 25 +/obj/machinery/atmospherics/pipe/simple/orange/visible/layer5{ + dir = 5 }, -/obj/machinery/conveyor_switch/oneway{ - id = "osprey_garbage" +/obj/effect/turf_decal/siding/yellow/corner{ + dir = 1 }, -/turf/open/floor/plating, -/area/ship/crew/janitor) -"FI" = ( -/obj/structure/sign/warning/docking{ - pixel_y = -8 +/obj/effect/turf_decal/siding/yellow/corner{ + dir = 4 }, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/hallway/central) -"FL" = ( -/turf/open/floor/plasteel, -/area/ship/crew/cryo) -"FP" = ( /obj/structure/disposalpipe/segment{ - dir = 8 + dir = 5 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 +/turf/open/floor/plasteel, +/area/ship/engineering/engine) +"zO" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/line{ + dir = 4 }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"FV" = ( -/obj/structure/sign/departments/restroom, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/crew/toilet) -"FZ" = ( -/obj/structure/table/wood, -/obj/structure/bedsheetbin, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"Ga" = ( -/obj/structure/chair{ +/turf/open/floor/plasteel, +/area/ship/hallway/central) +"zT" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, /obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/effect/landmark/start/assistant, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"zU" = ( +/obj/structure/cable{ + icon_state = "4-10" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/turf/open/floor/wood, -/area/ship/crew/canteen) -"Ge" = ( -/obj/effect/turf_decal/corner/transparent/neutral, -/turf/open/floor/plasteel, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/plasteel/mono, /area/ship/hallway/central) -"Gk" = ( -/obj/effect/turf_decal/box/corners, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/cargo) -"Gp" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ +"zV" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/chair/handrail{ dir = 4 }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"Gr" = ( +/turf/open/floor/plasteel/mono, +/area/ship/hallway/starboard) +"zX" = ( +/obj/machinery/computer/station_alert{ + dir = 8; + icon_state = "computer-left" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, /obj/structure/cable{ icon_state = "1-2" }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/bridge) +"zY" = ( +/obj/structure/table/reinforced, +/obj/item/folder/blue, /obj/structure/cable{ icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 10 +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"Gt" = ( -/obj/effect/turf_decal/industrial/warning/fulltile, -/obj/machinery/door/poddoor{ - id = "ospreydoors"; - name = "Cargo Bay Blast Door"; - dir = 4 +/turf/open/floor/carpet/royalblue, +/area/ship/bridge) +"Ad" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 }, -/turf/open/floor/plasteel/tech, -/area/ship/cargo) -"Gu" = ( -/obj/machinery/conveyor/inverted{ - dir = 10; - id = "osprey_packagesort" +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 }, -/turf/open/floor/plating, -/area/ship/cargo/office) -"Gw" = ( -/obj/machinery/conveyor/inverted{ - dir = 6; - id = "osprey_production" +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"Ah" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/door/window/westright, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 8; + sortType = 22; + tag = "Janitor Closet" }, /turf/open/floor/plating, -/area/ship/cargo) -"Gz" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "AI Chamber"; - req_access_txt = "10" +/area/ship/crew/janitor) +"Aj" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/structure/disposalpipe/segment{ - dir = 2 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 }, -/obj/effect/turf_decal/borderfloor, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"Ak" = ( +/obj/machinery/power/apc/auto_name/directional/south, +/obj/structure/cable, +/turf/open/floor/plasteel/freezer, +/area/ship/crew/toilet) +"Al" = ( +/obj/structure/railing, +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/hand_labeler_refill, +/obj/item/hand_labeler_refill, +/obj/item/hand_labeler, +/obj/item/destTagger, +/turf/open/floor/plasteel, +/area/ship/cargo) +"Ao" = ( +/obj/machinery/computer/card{ + dir = 8; + icon_state = "computer-left" + }, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "2-4" }, -/obj/machinery/atmospherics/pipe/simple/dark/hidden/layer5, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/green/hidden/layer1, /turf/open/floor/plasteel/tech/grid, -/area/ship/science/ai_chamber) -"GC" = ( -/obj/machinery/vending/boozeomat, -/obj/effect/turf_decal/corner/opaque/white{ +/area/ship/bridge) +"Av" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/white{ +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/corner{ dir = 8 }, -/obj/structure/sign/poster/official/cleanliness{ - pixel_y = 32 - }, -/obj/machinery/light/directional/west, +/turf/open/floor/plasteel, +/area/ship/storage/eva) +"Aw" = ( +/obj/structure/table, +/obj/effect/turf_decal/trimline/opaque/ntblue/line, /turf/open/floor/plasteel, /area/ship/crew/canteen) -"GG" = ( -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/disposal/deliveryChute, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/door/window/southright, -/turf/open/floor/plating, -/area/ship/cargo/office) -"GN" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +"Ax" = ( /obj/structure/cable{ icon_state = "1-2" }, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"GU" = ( -/obj/structure/tank_dispenser/oxygen, -/obj/effect/turf_decal/borderfloor{ - dir = 8 - }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 6 + dir = 10 }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/hallway/central) -"GX" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 20; + pixel_y = 0 }, -/obj/machinery/atmospherics/pipe/simple/green/visible, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"Hb" = ( -/obj/structure/closet/secure_closet{ - icon_state = "med"; - name = "mortuary locker" +/obj/structure/disposalpipe/segment{ + dir = 10 }, -/obj/item/storage/box/bodybags{ - pixel_x = -7; - pixel_y = 4 +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/crew/janitor) +"Az" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/item/storage/box/syringes{ - pixel_x = -6 +/obj/structure/disposalpipe/segment{ + dir = 8 }, -/obj/item/storage/box/gloves, -/obj/item/reagent_containers/glass/bottle/formaldehyde{ - pixel_x = 8; - pixel_y = 8 +/obj/machinery/camera, +/obj/structure/extinguisher_cabinet/directional/north, +/turf/open/floor/carpet/cyan, +/area/ship/medical) +"AE" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/engineering/engine) +"AS" = ( +/obj/structure/bed, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"AW" = ( +/obj/structure/table/reinforced, +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/item/reagent_containers/glass/bottle{ - list_reagents = list(/datum/reagent/medicine/thializid=30); - name = "thializid bottle"; - pixel_x = 5 +/obj/structure/cable{ + icon_state = "2-8" }, -/obj/effect/turf_decal/industrial/warning/corner{ +/obj/effect/turf_decal/siding/wideplating/dark{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/blue, -/obj/effect/turf_decal/corner/opaque/blue{ +/obj/item/storage/fancy/donut_box, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"Bb" = ( +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/arrow_ccw, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"Bd" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 4 }, -/obj/item/storage/box/masks, -/obj/machinery/light/directional/east, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"Hf" = ( -/obj/machinery/power/port_gen/pacman, +/obj/effect/turf_decal/trimline/opaque/nsorange/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ship/cargo) +"Bj" = ( +/obj/machinery/holopad/emergency/kitchen, +/obj/effect/turf_decal/box, /obj/structure/cable{ - icon_state = "0-2" + icon_state = "4-8" }, -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/structure/sign/warning/electricshock{ - pixel_y = 25 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 }, -/turf/open/floor/plating, -/area/ship/engineering) -"Hi" = ( /obj/structure/disposalpipe/segment{ - dir = 10 + dir = 8 + }, +/turf/open/floor/plasteel/mono, +/area/ship/crew/canteen) +"Bm" = ( +/obj/machinery/holopad/emergency/engineering, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 }, +/obj/effect/turf_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/engine) +"Bq" = ( /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-2" }, -/obj/effect/turf_decal/corner/opaque/yellow{ +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 8 }, -/obj/effect/turf_decal/corner/opaque/yellow{ +/turf/open/floor/plasteel, +/area/ship/crew) +"Br" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced{ dir = 1 }, -/obj/effect/turf_decal/corner/opaque/blue{ +/obj/item/paper_bin, +/obj/item/folder/white, +/obj/item/pen, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"Hk" = ( -/obj/machinery/power/shuttle/engine/electric{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/ship/medical) +"Bs" = ( /obj/structure/cable{ - icon_state = "0-4" + icon_state = "1-2" }, -/turf/open/floor/plating, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/brown/visible/layer1, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/machinery/atmospherics/pipe/simple/purple/visible{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/patterned, /area/ship/engineering/atmospherics) -"Hn" = ( -/turf/open/floor/plasteel/freezer, -/area/ship/crew/toilet) -"Ho" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 +"Bx" = ( +/obj/structure/sign/departments/custodian, +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/bridge) +"BA" = ( +/obj/structure/cable{ + icon_state = "2-4" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, /turf/open/floor/plasteel, /area/ship/hallway/central) -"Ht" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, +"BF" = ( +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, -/area/ship/cargo/office) -"Hx" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin{ - pixel_x = 6 - }, -/obj/item/clipboard{ - pixel_x = -7 - }, -/obj/item/folder/white{ - pixel_x = -7 - }, -/obj/item/pen{ - pixel_x = -7 +/area/ship/bridge) +"BG" = ( +/obj/structure/chair/office/light{ + dir = 8 }, -/obj/item/stamp/cmo{ - pixel_x = -1; - pixel_y = 12 +/obj/effect/landmark/start/paramedic, +/obj/machinery/button/door{ + dir = 1; + id = "lobbydoors"; + name = "Lobby Door Control"; + normaldoorcontrol = 1; + pixel_y = -20 }, /turf/open/floor/plasteel/white, /area/ship/medical) -"Hy" = ( -/obj/effect/turf_decal/corner/opaque/purple{ - dir = 1 +"BI" = ( +/obj/effect/mapping_helpers/airlock/unres{ + dir = 4 }, -/obj/structure/rack, -/obj/item/pickaxe, -/obj/machinery/light/dim/directional/north, -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) -"HD" = ( -/obj/structure/closet/secure_closet{ - icon_state = "hop"; - name = "\proper first officer's locker"; - req_access_txt = "57" +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/structure/sign/poster/official/bless_this_spess{ - pixel_y = 32 +/obj/machinery/door/airlock/medical/glass{ + dir = 4; + name = "Infirmary"; + req_access_txt = "5" }, -/obj/item/storage/backpack/duffelbag, -/obj/item/storage/backpack/messenger, -/obj/item/storage/backpack, -/obj/item/storage/backpack/satchel/leather, -/obj/item/clothing/shoes/laceup, -/obj/item/clothing/under/nanotrasen/officer/skirt, -/obj/item/clothing/under/nanotrasen/officer, -/obj/item/clothing/suit/armor/vest/hop, -/obj/item/clothing/gloves/color/white, -/obj/item/clothing/glasses/sunglasses, -/obj/item/clothing/head/hopcap/nt, -/obj/item/assembly/flash/handheld, -/obj/item/storage/box/ids, -/obj/item/storage/box/PDAs, -/turf/open/floor/carpet/blue, -/area/ship/bridge) -"HE" = ( -/obj/machinery/door/firedoor/heavy, -/obj/machinery/door/poddoor{ - id = "osprey_thruster_port"; - name = "Blast Door"; - dir = 4 +/obj/machinery/door/firedoor/border_only{ + dir = 8 }, -/obj/effect/spawner/structure/window/shuttle, -/obj/machinery/atmospherics/pipe/simple/dark/hidden/layer5{ +/obj/machinery/door/firedoor/border_only{ dir = 4 }, -/turf/open/floor/plating, -/area/ship/science/ai_chamber) -"HK" = ( -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"HU" = ( -/obj/structure/chair{ - dir = 1 +/obj/structure/disposalpipe/segment{ + dir = 8 }, -/obj/effect/turf_decal/corner/opaque/blue{ +/obj/effect/turf_decal/borderfloor{ dir = 8 }, -/obj/effect/turf_decal/corner/opaque/blue, /turf/open/floor/plasteel/white, /area/ship/medical) -"HV" = ( -/obj/machinery/atmospherics/components/trinary/filter/atmos/n2, -/obj/effect/turf_decal/industrial/outline/yellow, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"Ib" = ( -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/obj/structure/railing, +"BO" = ( +/obj/machinery/vending/cola/random, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/line, /turf/open/floor/plasteel, /area/ship/hallway/central) -"Ie" = ( -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 8 +"BS" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/effect/turf_decal/corner/opaque/brown{ +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/arrow_cw{ dir = 1 }, -/obj/machinery/photocopier, -/obj/machinery/computer/helm/viewscreen/directional/west, -/turf/open/floor/plasteel, -/area/ship/cargo/office) -"Ig" = ( -/obj/effect/turf_decal/box/corners{ - dir = 8 +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"BU" = ( +/obj/effect/spawner/structure/window/shuttle, +/obj/machinery/door/poddoor{ + dir = 4; + id = "harrierwindows"; + name = "Window Blast Door" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/cargo) -"Ih" = ( -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/corner/opaque/blue{ - dir = 8 +/turf/open/floor/plating, +/area/ship/crew/canteen) +"BY" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/effect/turf_decal/corner/opaque/blue, -/obj/machinery/camera/autoname{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 10 }, -/obj/machinery/light/directional/west, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"Ii" = ( -/obj/effect/turf_decal/corner/transparent/neutral, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/structure/disposalpipe/segment{ - dir = 9 + dir = 6 }, -/obj/structure/cable{ - icon_state = "1-2" +/turf/open/floor/plasteel/mono, +/area/ship/crew/canteen) +"Ci" = ( +/obj/machinery/door/poddoor{ + dir = 4; + id = "harrier_enginevent" }, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"Iq" = ( -/obj/structure/table, -/obj/item/multitool{ - pixel_y = 8 +/obj/effect/turf_decal/industrial/warning/fulltile, +/turf/open/floor/engine/vacuum, +/area/ship/engineering/engine) +"Ck" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 8 }, -/obj/item/clothing/gloves/color/black, -/obj/item/clothing/glasses/welding{ - pixel_y = -1 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/turf/open/floor/plasteel/white, -/area/ship/science) -"Iv" = ( -/obj/machinery/pipedispenser, -/obj/structure/cable{ - icon_state = "2-8" +/obj/structure/disposalpipe/segment{ + dir = 8 }, -/obj/structure/cable{ - icon_state = "2-4" +/turf/open/floor/plasteel/mono, +/area/ship/crew/canteen) +"Cm" = ( +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"Cn" = ( +/obj/structure/table/wood, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 20; + pixel_y = 0 }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 6 +/obj/machinery/airalarm/directional/north, +/obj/item/reagent_containers/food/drinks/bottle/champagne{ + pixel_x = 6; + pixel_y = 22 }, -/obj/machinery/button/door{ - id = "osprey_thruster_starboard"; - name = "Blast Door Control"; - pixel_y = 25 +/obj/item/reagent_containers/food/drinks/bottle/champagne{ + pixel_x = -6; + pixel_y = 22 }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"Ix" = ( -/obj/structure/window/reinforced{ - dir = 8 +/obj/item/reagent_containers/food/drinks/modglass/large{ + pixel_x = 7; + pixel_y = 12 }, -/obj/machinery/suit_storage_unit/engine, -/obj/effect/turf_decal/corner/opaque/yellow{ - dir = 8 +/obj/item/reagent_containers/food/drinks/modglass/large{ + pixel_x = -6; + pixel_y = 12 }, -/obj/effect/turf_decal/corner/opaque/yellow{ - dir = 1 +/obj/item/reagent_containers/food/drinks/modglass/large{ + pixel_y = 6 }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"Iz" = ( -/obj/machinery/door/airlock/atmos{ - name = "Atmospherics"; - req_access_txt = "24"; - dir = 8 +/turf/open/floor/carpet/royalblue, +/area/ship/crew/dorm/dormtwo) +"Co" = ( +/obj/structure/chair/sofa/blue/corpo/left/directional/east, +/turf/open/floor/wood, +/area/ship/crew) +"Cv" = ( +/turf/closed/wall/mineral/titanium/interior, +/area/ship/security) +"Cz" = ( +/obj/structure/cable{ + icon_state = "1-4" }, -/obj/structure/disposalpipe/segment{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, +/turf/open/floor/plasteel/white, +/area/ship/medical) +"CA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 + dir = 6 }, -/obj/effect/turf_decal/borderfloor{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"CH" = ( +/obj/effect/turf_decal/trimline/transparent/white/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/transparent/white/filled/warning, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/starboard) +"CI" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"CJ" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/machinery/door/firedoor/border_only{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/turf/open/floor/plasteel, -/area/ship/engineering/atmospherics) -"IA" = ( -/obj/effect/turf_decal/box/corners{ - dir = 8 - }, -/obj/structure/closet/crate/internals, -/obj/item/clothing/suit/space/orange, -/obj/item/clothing/suit/space/orange, -/obj/item/clothing/suit/space/orange, -/obj/item/clothing/head/helmet/space/orange, -/obj/item/clothing/head/helmet/space/orange, -/obj/item/clothing/head/helmet/space/orange, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/cargo) -"IL" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/science) -"IR" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/corner/opaque/white{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/white{ - dir = 8 +/obj/machinery/camera{ + dir = 6 }, -/obj/structure/disposalpipe/segment{ - dir = 2 +/turf/open/floor/plasteel, +/area/ship/crew) +"CK" = ( +/obj/structure/closet/secure_closet/security{ + populate = 0; + req_access = list(2) }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/door/poddoor/shutters{ - id = "ospreykitchen" +/obj/structure/sign/poster/retro/lasergun_new{ + pixel_x = 32 }, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel, -/area/ship/crew/canteen) -"IT" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 +/obj/item/clothing/shoes/jackboots, +/obj/item/clothing/under/nanotrasen/security, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/head/nanotrasen/cap/security, +/obj/item/clothing/head/nanotrasen/beret/security, +/obj/item/clothing/glasses/sunglasses, +/obj/item/storage/backpack/security, +/obj/item/storage/box/handcuffs, +/obj/item/reagent_containers/spray/pepper, +/obj/item/ammo_box/magazine/co9mm, +/obj/item/ammo_box/magazine/co9mm, +/obj/item/ammo_box/c9mm, +/obj/item/ammo_box/c9mm, +/obj/item/ammo_box/c9mm/rubbershot, +/obj/effect/turf_decal/trimline/opaque/vired/line, +/obj/item/storage/belt/security, +/obj/item/melee/knife/survival, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"CN" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "harrier_packagesort" }, -/obj/structure/disposalpipe/segment{ - dir = 2 +/obj/structure/sign/poster/official/random{ + pixel_x = 32 }, -/turf/open/floor/plasteel, -/area/ship/cargo/office) -"IU" = ( -/obj/effect/landmark/start/paramedic, -/obj/effect/turf_decal/corner/opaque/lime{ +/turf/open/floor/plating, +/area/ship/cargo) +"CO" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/storage/eva) +"CP" = ( +/obj/machinery/atmospherics/pipe/simple/brown/visible/layer1, +/obj/machinery/atmospherics/pipe/simple/purple/visible, +/obj/machinery/atmospherics/pipe/simple/orange/visible/layer5{ + dir = 10 + }, +/obj/structure/chair/handrail{ + dir = 8 + }, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"CR" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 1 }, -/obj/effect/turf_decal/corner/opaque/lime{ - dir = 4 +/obj/structure/disposalpipe/segment{ + dir = 5 }, /turf/open/floor/plasteel/white, /area/ship/medical) -"IV" = ( -/obj/structure/chair{ +"CV" = ( +/obj/machinery/power/shuttle/engine/fueled/plasma{ dir = 4 }, -/obj/structure/sign/poster/official/high_class_martini{ - pixel_y = -32 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 10 +/obj/machinery/door/poddoor{ + dir = 4; + id = "harrier_thrusters_port"; + name = "Thruster Blast Door" }, -/obj/machinery/light/directional/west, -/turf/open/floor/wood, -/area/ship/crew/canteen) -"IW" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/crew/dorm) -"IX" = ( -/obj/effect/turf_decal/box/corners{ +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"CW" = ( +/obj/machinery/cryopod{ dir = 4 }, -/obj/structure/reagent_dispensers/watertank, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/cargo) -"IY" = ( -/turf/closed/wall/mineral/titanium, -/area/ship/engineering/atmospherics) -"Jc" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/shower{ +/turf/open/floor/circuit, +/area/ship/crew/cryo) +"Da" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/transparent/white/filled/warning{ dir = 8 }, -/obj/structure/sign/warning/nosmoking/circle{ - pixel_x = 25 +/turf/open/floor/plasteel/dark, +/area/ship/science/ai_chamber) +"Db" = ( +/obj/structure/chair/comfy/blue/corpo{ + dir = 4 }, -/turf/open/floor/noslip, -/area/ship/engineering) -"Jl" = ( -/obj/machinery/atmospherics/components/trinary/mixer/airmix/flipped{ +/turf/open/floor/carpet/executive, +/area/ship/crew/law_office) +"Dg" = ( +/obj/effect/turf_decal/industrial/warning/corner{ dir = 1 }, -/obj/effect/turf_decal/industrial/outline/yellow, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"Jt" = ( -/obj/structure/table, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/wood, -/area/ship/crew/canteen) -"Jw" = ( +/obj/effect/turf_decal/industrial/warning/corner{ + dir = 4 + }, /obj/structure/disposalpipe/segment{ - dir = 6 + dir = 5 }, -/obj/machinery/door/window/eastleft, -/obj/machinery/conveyor{ - dir = 1; - id = "osprey_garbage" +/obj/machinery/light/directional/west, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/engine) +"Dk" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 }, -/obj/machinery/camera/autoname{ - dir = 5 +/obj/structure/disposalpipe/segment{ + dir = 8 }, -/turf/open/floor/plating, +/turf/open/floor/plasteel/tech/techmaint, /area/ship/crew/janitor) -"JD" = ( -/obj/structure/bed, -/obj/item/bedsheet/medical, -/obj/effect/turf_decal/industrial/warning/corner, -/obj/effect/turf_decal/corner/opaque/lime, -/obj/effect/turf_decal/corner/opaque/lime{ - dir = 4 +"Dl" = ( +/obj/machinery/computer/cryopod/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 }, -/obj/machinery/firealarm/directional/east, +/turf/open/floor/plasteel/dark, +/area/ship/crew/cryo) +"Dr" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/opaque/blue/filled/end, /turf/open/floor/plasteel/white, /area/ship/medical) -"JG" = ( -/obj/machinery/disposal/bin, -/obj/effect/turf_decal/corner/opaque/white{ - dir = 4 +"Ds" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/effect/turf_decal/corner/opaque/white{ - dir = 8 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 }, -/obj/structure/disposalpipe/trunk{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/machinery/light_switch{ - dir = 1; - pixel_x = 5; - pixel_y = -24 +/obj/machinery/light/small/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 8 }, -/obj/machinery/button/door{ - dir = 1; - id = "ospreykitchen"; - name = "Shutter Control"; - pixel_x = -5; - pixel_y = -25 - }, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/plasteel, -/area/ship/crew/canteen) -"JL" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/shaker, -/obj/item/reagent_containers/food/condiment/enzyme, -/obj/effect/turf_decal/corner/opaque/white{ - dir = 4 - }, -/obj/effect/turf_decal/corner/opaque/white{ +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"Dy" = ( +/obj/structure/railing{ dir = 8 }, -/obj/item/reagent_containers/glass/rag, -/turf/open/floor/plasteel, -/area/ship/crew/canteen) -"JN" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, /obj/structure/cable{ - icon_state = "1-8" + icon_state = "1-2" }, -/obj/effect/turf_decal/industrial/warning, -/obj/effect/turf_decal/industrial/warning{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/stairs{ dir = 1 }, -/obj/machinery/door/poddoor{ - id = "osprey_tank_vent" - }, -/turf/open/floor/engine, -/area/ship/engineering/atmospherics) -"JO" = ( -/obj/machinery/holopad/emergency/engineering, -/obj/effect/turf_decal/box, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"JW" = ( -/obj/machinery/vending/cigarette, -/obj/effect/turf_decal/corner/transparent/neutral{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"JX" = ( -/obj/structure/sign/departments/engineering, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/crew/janitor) -"Ka" = ( -/obj/structure/disposalpipe/segment{ - dir = 8 +/area/ship/bridge) +"DC" = ( +/obj/machinery/door/airlock/grunge{ + dir = 4; + name = "Computer Core" }, /obj/structure/cable{ icon_state = "4-8" @@ -5629,1473 +5344,1478 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/structure/fireaxecabinet{ - pixel_y = 32 +/obj/machinery/door/firedoor/border_only{ + dir = 8 }, -/obj/structure/cable{ - icon_state = "2-8" +/obj/machinery/door/firedoor/border_only{ + dir = 4 }, -/obj/machinery/camera/autoname, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"Ko" = ( -/obj/structure/window/plasma/reinforced, +/obj/effect/turf_decal/borderfloorblack{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/science/ai_chamber) +"DD" = ( /obj/structure/cable{ - icon_state = "2-8" + icon_state = "4-8" }, -/obj/machinery/atmospherics/components/unary/thermomachine/freezer, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"KA" = ( -/obj/effect/turf_decal/industrial/warning/corner, -/obj/machinery/light/directional/east, -/turf/open/floor/plasteel/patterned, -/area/ship/cargo) -"KC" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 5 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 }, -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"KD" = ( +/obj/machinery/light/small/directional/north, +/turf/open/floor/plasteel/dark, +/area/ship/crew/cryo) +"DH" = ( /obj/structure/cable{ - icon_state = "0-4" + icon_state = "1-2" }, -/obj/machinery/power/apc/auto_name/directional/west, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"KE" = ( -/obj/structure/closet/secure_closet{ - icon_state = "brig_phys"; - name = "paramedic's locker" +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 }, -/obj/machinery/airalarm/directional/west, -/obj/effect/turf_decal/corner/opaque/blue{ +/obj/machinery/light/directional/west, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/corner{ dir = 8 }, -/obj/effect/turf_decal/corner/opaque/blue{ - dir = 1 +/turf/open/floor/plasteel/mono, +/area/ship/hallway/port) +"DM" = ( +/obj/machinery/door/firedoor/window, +/obj/effect/spawner/structure/window/shuttle, +/obj/machinery/door/poddoor{ + dir = 4; + id = "harrierbridge"; + name = "Window Blast Door" }, -/obj/item/storage/backpack/duffelbag/med, -/obj/item/storage/backpack/satchel/med, -/obj/item/storage/backpack/medic, -/obj/item/storage/backpack/messenger/para, -/obj/item/clothing/shoes/sneakers/blue, -/obj/item/clothing/under/rank/medical/paramedic/skirt, -/obj/item/clothing/under/rank/medical/paramedic, -/obj/item/clothing/head/soft/paramedic, -/obj/item/storage/belt/medical, -/obj/item/clothing/glasses/hud/health, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"KI" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"KL" = ( -/obj/structure/chair/comfy/orange/directional/south, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/structure/cable{ - icon_state = "0-2" + icon_state = "0-8" }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plating, /area/ship/bridge) -"La" = ( +"DP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"DQ" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/machinery/light/small/directional/east, +/obj/effect/turf_decal/industrial/outline/yellow, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"Eb" = ( /obj/structure/cable{ - icon_state = "1-2" + icon_state = "5-10" }, -/obj/structure/disposalpipe/junction/flip, -/turf/open/floor/plasteel, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/mono, /area/ship/hallway/central) -"Lc" = ( -/obj/machinery/computer/med_data{ - dir = 4 +"Eh" = ( +/obj/structure/railing{ + dir = 1 }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"Ll" = ( -/obj/structure/sign/departments/cargo, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/cargo/office) -"Lt" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 +/obj/effect/turf_decal/siding/yellow{ + dir = 9 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 8 +/obj/structure/extinguisher_cabinet/directional/west, +/turf/open/floor/plasteel, +/area/ship/engineering/engine) +"Ei" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 }, -/obj/structure/cable{ - icon_state = "1-4" +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/structure/cable{ - icon_state = "1-2" +/obj/structure/chair/handrail{ + dir = 1 }, -/obj/effect/turf_decal/industrial/shutoff, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/mono, /area/ship/hallway/central) -"Lz" = ( -/obj/structure/table/reinforced, +"Em" = ( +/obj/machinery/door/window/southright{ + name = "Kitchen"; + req_access_txt = "28" + }, /obj/effect/turf_decal/corner/opaque/white{ dir = 4 }, /obj/effect/turf_decal/corner/opaque/white{ dir = 8 }, -/obj/machinery/door/poddoor/shutters{ - id = "ospreykitchen" - }, -/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/ship/crew/canteen) -"LB" = ( -/obj/machinery/atmospherics/pipe/manifold/orange/visible, -/obj/effect/turf_decal/industrial/warning{ +"Eq" = ( +/obj/effect/turf_decal/atmos/oxygen, +/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/oxygen_input{ + dir = 8; + piping_layer = 1 + }, +/turf/open/floor/engine/o2, +/area/ship/engineering/atmospherics) +"Er" = ( +/obj/effect/turf_decal/trimline/transparent/white/filled/warning{ dir = 4 }, -/turf/open/floor/plating, -/area/ship/engineering) -"LE" = ( -/obj/machinery/door/window/brigdoor/westleft{ - name = "AI Core Access"; - req_one_access_txt = "16" +/obj/effect/turf_decal/trimline/transparent/white/filled/warning{ + dir = 8 }, -/obj/structure/rack, -/obj/item/aiModule/core/full/asimov, -/obj/item/aiModule/core/full/corp, -/obj/item/aiModule/core/freeformcore, -/obj/item/aiModule/reset/purge{ - pixel_y = 5 +/obj/machinery/door/firedoor/border_only{ + dir = 8 }, -/turf/open/floor/circuit, -/area/ship/science/ai_chamber) -"LF" = ( -/obj/effect/landmark/start/station_engineer, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"LK" = ( -/obj/structure/window/reinforced, -/obj/structure/table, -/obj/item/storage/toolbox/mechanical{ - pixel_x = 2; - pixel_y = 10 +/obj/machinery/door/firedoor/border_only{ + dir = 4 }, -/obj/effect/turf_decal/corner/opaque/yellow, -/obj/effect/turf_decal/corner/opaque/yellow{ - dir = 8 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/item/storage/toolbox/mechanical, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"LV" = ( -/obj/effect/turf_decal/siding/wood{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/turf/open/floor/plasteel/grimy, -/area/ship/crew/dorm) -"LW" = ( /obj/structure/disposalpipe/segment{ - dir = 2 + dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"Ev" = ( +/obj/machinery/atmospherics/pipe/simple/brown/visible/layer1{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"Ey" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/dark/hidden/layer5, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/machinery/atmospherics/pipe/simple/green/hidden/layer1, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/plasteel/dark, -/area/ship/science/ai_chamber) -"LX" = ( -/obj/structure/disposalpipe/trunk{ +/obj/effect/turf_decal/borderfloor, +/obj/structure/sign/poster/official/safety_internals{ + pixel_x = -32 + }, +/obj/structure/chair/handrail{ dir = 4 }, -/obj/structure/disposaloutlet{ - dir = 1 +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/storage/eva) +"Ez" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/structure/window/reinforced{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/machinery/conveyor{ - dir = 1; - id = "osprey_garbage" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/ntspaceworks_big/two{ + dir = 8 }, -/turf/open/floor/plating, -/area/ship/crew/janitor) -"Ma" = ( /obj/structure/disposalpipe/segment{ - dir = 2 + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering) +"EB" = ( /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/machinery/turretid{ - pixel_x = 28; - req_access = null; - req_access_txt = "16" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel, +/area/ship/cargo) +"ED" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/corner{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/dark/hidden/layer5{ - dir = 10 +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"EF" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/layer4{ + dir = 4; + piping_layer = 5 }, -/obj/machinery/atmospherics/pipe/simple/green/hidden/layer1, -/obj/structure/catwalk/over, +/turf/open/floor/engine/vacuum, +/area/ship/engineering/engine) +"EJ" = ( +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/light/small/directional/south, /turf/open/floor/plating, -/area/ship/science/ai_chamber) -"Mc" = ( -/obj/structure/sign/warning/vacuum/external, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/hallway/central) -"Mo" = ( -/obj/effect/turf_decal/industrial/warning/corner, -/obj/structure/cable, -/obj/machinery/power/apc/auto_name/directional/east, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"Mu" = ( -/obj/structure/window/reinforced{ +/area/ship/engineering/engine) +"EQ" = ( +/obj/machinery/atmospherics/pipe/simple/brown/visible/layer1{ dir = 8 }, -/obj/structure/closet/secure_closet{ - icon_state = "eng_secure"; - name = "engineer's locker"; - req_access = list(11) - }, -/obj/item/storage/backpack/industrial, -/obj/item/clothing/shoes/workboots, -/obj/item/clothing/under/rank/engineering/engineer/nt, -/obj/item/clothing/under/rank/engineering/engineer/nt/skirt, -/obj/item/clothing/suit/hazardvest, -/obj/item/clothing/head/hardhat/weldhat, -/obj/item/storage/belt/utility/full/engi, -/obj/machinery/light_switch{ - pixel_y = 24 +/obj/machinery/atmospherics/components/binary/pump/on/layer2{ + name = "Air to Supply" }, -/obj/effect/turf_decal/corner/opaque/yellow{ +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/yellow{ - dir = 1 - }, -/obj/effect/turf_decal/corner/opaque/yellow{ +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"ES" = ( +/obj/machinery/firealarm/directional/south, +/obj/structure/janitorialcart{ dir = 8 }, -/obj/item/holosign_creator/engineering, -/obj/item/storage/box/metalfoam, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"My" = ( -/obj/structure/disposalpipe/sorting/mail/flip{ +/obj/effect/turf_decal/industrial/outline/yellow, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/crew/janitor) +"EU" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/ship/cargo) +"EV" = ( +/obj/structure/bed, +/obj/structure/curtain/bounty, +/obj/item/bedsheet/nanotrasen, +/turf/open/floor/carpet/cyan, +/area/ship/crew) +"EX" = ( +/obj/machinery/door/airlock/command{ dir = 4; - sortTypes = list(16,26); - tag = "Dormitories" + name = "Captain's Quarters"; + req_access_txt = "20" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 }, /obj/structure/cable{ - icon_state = "1-4" + icon_state = "4-8" }, +/obj/effect/turf_decal/borderfloorblack{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/dorm/dormtwo) +"EY" = ( +/obj/structure/railing/corner{ + dir = 4 + }, +/obj/structure/table/reinforced, +/obj/item/flashlight/lamp/green, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "2-8" }, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"MB" = ( -/obj/structure/sign/departments/engineering, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/crew/toilet) -"MJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 2 +/turf/open/floor/carpet/royalblue, +/area/ship/bridge) +"Fi" = ( +/obj/machinery/holopad/emergency/command, +/obj/structure/cable{ + icon_state = "1-8" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/structure/cable{ icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 4 }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"Fl" = ( /obj/structure/cable{ - icon_state = "1-8" + icon_state = "5-10" }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 9 +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/dark/visible/layer5, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"ML" = ( -/obj/effect/turf_decal/box, -/obj/machinery/shower{ - dir = 8 +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"Fo" = ( +/obj/structure/cable{ + icon_state = "1-4" }, -/turf/open/floor/plasteel/showroomfloor, -/area/ship/cargo) -"MM" = ( -/turf/closed/wall/mineral/titanium, -/area/ship/engineering) -"MR" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 }, -/turf/open/floor/plasteel, -/area/ship/cargo) -"MT" = ( -/obj/machinery/power/ship_gravity, -/obj/structure/cable, -/obj/effect/turf_decal/industrial/warning/corner, -/turf/open/floor/plasteel/patterned/grid, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"Fp" = ( +/obj/structure/sign/warning/nosmoking, +/turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/engineering) -"Nd" = ( -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +"Fx" = ( +/obj/structure/railing/corner, +/obj/structure/table/reinforced, +/obj/machinery/fax/nanotrasen, /obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"Ni" = ( -/obj/effect/turf_decal/corner/opaque/ntblue{ - dir = 8 + icon_state = "1-8" }, -/obj/machinery/light/directional/west, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"Nm" = ( -/obj/effect/turf_decal/siding/wood, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/turf/open/floor/carpet/blue, +/area/ship/bridge) +"Fy" = ( +/obj/structure/table/wood, +/turf/open/floor/carpet/cyan, +/area/ship/crew) +"FD" = ( /obj/structure/cable{ - icon_state = "1-2" + icon_state = "4-8" }, -/turf/open/floor/plasteel/grimy, -/area/ship/crew/dorm) -"Np" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/effect/turf_decal/siding/yellow{ + dir = 1 }, /obj/structure/disposalpipe/segment{ dir = 8 }, +/obj/structure/sign/poster/official/safety_eye_protection{ + pixel_y = 32 + }, /turf/open/floor/plasteel, -/area/ship/hallway/central) -"Nq" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 1 +/area/ship/engineering) +"FK" = ( +/obj/machinery/computer/aifixer, +/obj/machinery/camera/motion{ + dir = 8 }, -/obj/structure/disposalpipe/segment{ - dir = 2 +/turf/open/floor/circuit, +/area/ship/science/ai_chamber) +"FN" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable{ + icon_state = "0-1" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/camera{ + dir = 8 + }, +/turf/open/floor/plasteel/mono, +/area/ship/crew/canteen) +"FO" = ( /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/arrow_ccw, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"FP" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/machinery/atmospherics/pipe/simple/dark/visible/layer5, -/obj/machinery/atmospherics/pipe/simple/green/visible/layer1{ - dir = 9 +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/arrow_cw, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"FQ" = ( +/obj/structure/cable{ + icon_state = "2-8" }, -/obj/structure/sign/poster/official/moth/piping{ - pixel_x = 32 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"Nr" = ( /obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/effect/turf_decal/corner/opaque/brown{ +/obj/effect/turf_decal/trimline/opaque/ntblue/line{ + dir = 8 + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/starboard) +"FS" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"FX" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/brown{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 1 }, -/obj/structure/table, -/obj/item/stack/sheet/metal/five{ - pixel_x = -3 +/obj/structure/disposalpipe/segment{ + dir = 8 }, -/obj/item/stack/sheet/glass/five{ - pixel_x = 2; - pixel_y = 5 +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"FY" = ( +/obj/structure/table/glass, +/obj/item/storage/box/bodybags{ + pixel_x = -7; + pixel_y = 4 }, -/obj/machinery/camera/autoname{ - dir = 6 +/obj/item/reagent_containers/glass/bottle/formaldehyde{ + pixel_x = 8; + pixel_y = 8 }, -/turf/open/floor/plasteel, -/area/ship/cargo/office) -"Nv" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 1 +/obj/machinery/light/small/directional/south, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20 }, -/obj/effect/turf_decal/corner/opaque/brown{ +/obj/item/reagent_containers/syringe, +/turf/open/floor/plasteel/showroomfloor, +/area/ship/medical) +"Ga" = ( +/obj/effect/landmark/start/station_engineer, +/obj/structure/chair{ dir = 8 }, -/obj/effect/turf_decal/corner/opaque/brown, -/obj/structure/sign/poster/retro/radio{ - pixel_x = -32 - }, -/obj/structure/extinguisher_cabinet/directional/south, /turf/open/floor/plasteel, -/area/ship/cargo/office) -"Nw" = ( -/obj/machinery/door/airlock{ - name = "Dormitory" - }, -/obj/structure/disposalpipe/segment{ - dir = 2 +/area/ship/engineering) +"Gd" = ( +/obj/structure/fluff/hedge, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/end{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/borderfloor{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/ship/crew/dorm) -"NA" = ( -/obj/effect/landmark/start/shaft_miner, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/crew/canteen) +"Gg" = ( +/obj/structure/railing, /obj/structure/cable{ - icon_state = "1-8" + icon_state = "4-8" }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/cargo) -"ND" = ( -/obj/machinery/vending/coffee, -/obj/effect/turf_decal/corner/transparent/neutral{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"NH" = ( -/obj/structure/table/glass, -/obj/item/storage/backpack/duffelbag/med/surgery{ - pixel_x = -3; - pixel_y = 13 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/effect/turf_decal/corner/opaque/pink{ +/turf/open/floor/plasteel/stairs{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/pink, -/obj/item/clothing/gloves/color/latex/nitrile, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"NP" = ( -/obj/machinery/suit_storage_unit/atmos, -/obj/effect/turf_decal/corner/opaque/bottlegreen{ +/area/ship/cargo) +"Gi" = ( +/obj/effect/spawner/structure/window/shuttle, +/obj/machinery/atmospherics/pipe/simple/brown/visible/layer1{ dir = 8 }, -/obj/effect/turf_decal/corner/opaque/yellow, -/obj/effect/turf_decal/corner/opaque/yellow{ - dir = 1 - }, -/obj/structure/window/reinforced{ +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"Gq" = ( +/obj/structure/disposalpipe/segment{ dir = 8 }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"NT" = ( -/obj/machinery/atmospherics/components/unary/tank/toxins, -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/machinery/light/directional/north, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"NW" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 1 +/obj/effect/turf_decal/trimline/opaque/nsorange/line{ + dir = 4 }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"Of" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/on/layer2{ - dir = 1 +/obj/structure/chair/handrail{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ship/storage/eva) +"Gr" = ( +/obj/machinery/power/apc/auto_name/directional/east, +/obj/structure/cable{ + icon_state = "0-8" }, /obj/effect/turf_decal/industrial/outline/yellow, -/turf/open/floor/engine/air, -/area/ship/engineering/atmospherics) -"Oh" = ( -/obj/structure/dresser, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"Oj" = ( -/obj/effect/landmark/start/scientist, -/obj/structure/chair/office/light, +/obj/item/clothing/shoes/sneakers/brown, +/obj/item/clothing/under/nanotrasen/supply/qm, +/obj/item/storage/backpack/satchel/leather, +/obj/item/clothing/glasses/sunglasses, +/obj/item/clothing/head/nanotrasen/cap/supply, +/obj/structure/closet/secure_closet/quartermaster{ + populate = 0 + }, +/obj/item/stack/tape, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) +"Gy" = ( +/turf/closed/wall/mineral/titanium/interior, +/area/ship/medical) +"Gz" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/bridge) +"GE" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/corner/opaque/mauve, -/obj/effect/turf_decal/corner/opaque/mauve{ - dir = 8 +/obj/structure/sign/warning/electricshock{ + pixel_x = -23 }, -/turf/open/floor/plasteel/white, -/area/ship/science) -"Ol" = ( -/obj/effect/turf_decal/corner/opaque/purple{ +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"GF" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/purple{ - dir = 1 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo) -"Oq" = ( -/obj/machinery/suit_storage_unit/mining/eva, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 8 +"GG" = ( +/obj/machinery/power/shuttle/engine/fueled/plasma{ + dir = 4 }, -/obj/structure/sign/poster/official/miners{ - pixel_x = 32 +/obj/machinery/door/poddoor{ + dir = 4; + id = "harrier_thrusters_starboard"; + name = "Thruster Blast Door" }, -/obj/structure/extinguisher_cabinet/directional/south, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/cargo) -"Os" = ( +/turf/open/floor/plating, +/area/ship/engineering) +"GH" = ( /obj/effect/turf_decal/industrial/warning/fulltile, +/obj/machinery/light/small/directional/south, /obj/structure/cable{ - icon_state = "0-8" - }, -/obj/machinery/power/shieldwallgen/atmos/roundstart{ - dir = 1; - id = "osprey_cargofield"; - locked = 1 - }, -/obj/machinery/door/poddoor{ - id = "ospreydoors"; - name = "Cargo Bay Blast Door"; - dir = 4 + icon_state = "4-8" }, /turf/open/floor/plasteel/tech, +/area/ship/engineering) +"GK" = ( +/obj/structure/sign/departments/cargo, +/turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/cargo) -"Ou" = ( -/obj/structure/closet/secure_closet{ - icon_door = "mixed"; - icon_state = "generic"; - name = "custodial closet" - }, -/obj/item/storage/backpack, -/obj/item/clothing/shoes/galoshes, -/obj/item/clothing/under/rank/civilian/janitor, -/obj/item/clothing/gloves/color/black, -/obj/item/clothing/glasses/science, -/obj/item/storage/belt/janitor, -/obj/item/clothing/head/soft/purple, -/obj/machinery/light_switch{ - dir = 8; - pixel_x = 24; - pixel_y = 5 +"GY" = ( +/obj/structure/cable{ + icon_state = "6-9" }, -/obj/structure/cable, -/obj/item/holosign_creator/janibarrier, -/obj/machinery/power/apc/auto_name/directional/south, -/turf/open/floor/plasteel, -/area/ship/crew/janitor) -"OA" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/structure/disposalpipe/segment, -/obj/structure/window/reinforced, -/obj/structure/table, -/obj/item/circuitboard/machine/pacman/super{ - pixel_x = 6; - pixel_y = 8 - }, -/obj/item/circuitboard/machine/pacman/super{ - pixel_y = -4 +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"Ha" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 }, -/obj/effect/turf_decal/corner/opaque/yellow{ - dir = 4 +/obj/machinery/light/small/directional/south, +/obj/structure/table/wood, +/obj/item/storage/lockbox/medal{ + pixel_y = 6 }, -/obj/effect/turf_decal/corner/opaque/yellow, -/obj/effect/turf_decal/corner/opaque/yellow{ +/turf/open/floor/carpet/royalblue, +/area/ship/crew/dorm/dormtwo) +"He" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 8 }, -/turf/open/floor/plasteel/patterned/grid, +/turf/open/floor/plasteel/patterned, /area/ship/engineering) -"OB" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 +"Hh" = ( +/obj/structure/cable{ + icon_state = "6-9" }, -/obj/structure/window/reinforced{ - dir = 4 +/obj/structure/cable{ + icon_state = "4-9" }, -/obj/machinery/conveyor{ - dir = 1; - id = "osprey_garbage" +/turf/open/floor/plasteel/mono, +/area/ship/hallway/port) +"Hj" = ( +/obj/structure/cable{ + icon_state = "2-4" }, -/obj/item/trash/popcorn, -/turf/open/floor/plating, -/area/ship/crew/janitor) -"OD" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "osprey_cargoload" +/obj/effect/turf_decal/industrial/warning{ + dir = 1 }, -/turf/open/floor/plating, -/area/ship/cargo) -"OG" = ( -/obj/machinery/conveyor_switch/oneway{ - id = "osprey_production" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 6 }, -/obj/effect/turf_decal/industrial/warning/cee{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 10 }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/cargo) -"OH" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 - }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"OS" = ( -/obj/effect/spawner/structure/window/shuttle, -/obj/machinery/door/poddoor/shutters{ - id = "ospreymed" + dir = 6 }, -/obj/machinery/door/firedoor/window, -/turf/open/floor/plating, -/area/ship/medical) -"OV" = ( /obj/structure/disposalpipe/segment{ - dir = 8 - }, -/obj/structure/sign/departments/custodian, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/crew/janitor) -"OW" = ( -/obj/effect/turf_decal/corner/transparent/neutral{ - dir = 8 + dir = 10 }, -/obj/effect/turf_decal/corner/opaque/green{ +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/engine) +"Hk" = ( +/obj/effect/turf_decal/trimline/transparent/white/filled/warning{ dir = 1 }, -/obj/structure/disposalpipe/sorting/mail/flip{ - sortTypes = list(7,8,15,29,30); - tag = "Command" +/obj/effect/turf_decal/trimline/transparent/white/filled/warning, +/obj/machinery/door/poddoor/shutters{ + id = "harriercargoaccess" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 }, -/obj/structure/extinguisher_cabinet/directional/west, /turf/open/floor/plasteel, -/area/ship/hallway/central) -"Pa" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 4 +/area/ship/storage/eva) +"Ho" = ( +/obj/structure/filingcabinet{ + density = 0; + pixel_x = 11 }, -/turf/open/floor/carpet/royalblue, -/area/ship/bridge) -"Pe" = ( +/obj/structure/reagent_dispensers/peppertank{ + pixel_y = 26 + }, +/obj/effect/turf_decal/trimline/opaque/vired/line{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"Hq" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 + dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 +/turf/open/floor/carpet/cyan, +/area/ship/crew) +"Hu" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 9 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/effect/turf_decal/trimline/opaque/ntblue/line{ + dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/mono, /area/ship/hallway/central) -"Pg" = ( -/obj/structure/table/reinforced, -/obj/machinery/recharger, -/obj/effect/turf_decal/corner/opaque/ntblue{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/ntblue, -/obj/effect/turf_decal/corner/opaque/ntblue{ +"Hw" = ( +/obj/structure/chair/comfy/blue/corpo/directional/west, +/obj/effect/turf_decal/trimline/opaque/ntblue/line{ dir = 4 }, /turf/open/floor/plasteel/dark, /area/ship/bridge) -"Pj" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 2 +"Hx" = ( +/obj/structure/cable{ + icon_state = "6-9" }, -/obj/effect/turf_decal/corner/opaque/purple{ - dir = 4 +/turf/open/floor/plasteel/mono, +/area/ship/hallway/port) +"HC" = ( +/obj/structure/chair/stool/bar{ + dir = 1 }, -/obj/effect/turf_decal/corner/opaque/blue{ - dir = 8 +/obj/effect/turf_decal/corner/opaque/white{ + dir = 4 }, -/obj/effect/turf_decal/industrial/warning/corner{ +/obj/effect/turf_decal/corner/opaque/white{ dir = 8 }, -/obj/effect/turf_decal/corner/opaque/purple{ - dir = 1 - }, -/obj/machinery/airalarm/directional/west, -/obj/machinery/light/directional/north, +/obj/effect/turf_decal/siding, /turf/open/floor/plasteel, -/area/ship/cargo) -"Pl" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/cargo/office) -"Po" = ( -/turf/open/floor/plasteel/dark, -/area/ship/science) -"Pq" = ( -/obj/effect/turf_decal/corner/transparent/neutral{ - dir = 4 +/area/ship/crew/canteen) +"HD" = ( +/obj/machinery/atmospherics/components/trinary/filter/atmos/o2{ + dir = 1; + piping_layer = 1 }, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/purple/visible, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"HG" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4; + name = "Helm" }, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"PE" = ( -/obj/machinery/recharge_station, -/obj/effect/turf_decal/corner/opaque/mauve{ +/obj/effect/landmark/start/head_of_personnel, +/obj/effect/turf_decal/siding/wideplating/dark{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/mauve{ - dir = 1 +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"HI" = ( +/obj/structure/bed, +/obj/item/bedsheet/captain, +/obj/structure/curtain/cloth/fancy, +/turf/open/floor/carpet/royalblue, +/area/ship/crew/dorm/dormtwo) +"HL" = ( +/obj/machinery/door/airlock/engineering{ + name = "Engine Room"; + req_access_txt = "10" }, -/obj/structure/sign/warning/nosmoking/circle{ - pixel_y = 25 +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/open/floor/plasteel/white, -/area/ship/science) -"PJ" = ( -/obj/effect/turf_decal/industrial/warning{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/green/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/purple/hidden, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/borderfloor{ dir = 1 }, -/obj/effect/turf_decal/siding/white{ +/turf/open/floor/plasteel/tech, +/area/ship/engineering/engine) +"HO" = ( +/obj/structure/toilet{ + dir = 8 + }, +/obj/structure/curtain, +/obj/machinery/airalarm/directional/east, +/turf/open/floor/plasteel/freezer, +/area/ship/crew/toilet) +"HW" = ( +/obj/machinery/atmospherics/components/unary/shuttle/heater{ dir = 4 }, +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"HY" = ( /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/crew/cryo) -"PP" = ( -/turf/closed/wall/mineral/titanium, -/area/ship/crew/cryo) -"PQ" = ( -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 4; - sortTypes = list(12,13,14,23,24,25,27,28); - tag = "Research" +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/structure/cable{ - icon_state = "4-8" +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ship/storage/eva) +"Ia" = ( +/obj/effect/turf_decal/corner/opaque/ntblue/full, +/turf/open/floor/plasteel, +/area/ship/hallway/central) +"Ig" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 1 }, +/obj/effect/turf_decal/trimline/opaque/vired/line, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"Ih" = ( +/obj/item/kirbyplants/random, +/obj/machinery/light/directional/south, /turf/open/floor/plasteel, -/area/ship/cargo) -"PS" = ( -/obj/structure/window/reinforced{ - dir = 4 +/area/ship/hallway/starboard) +"Ij" = ( +/obj/structure/cable/yellow{ + icon_state = "2-4" }, -/obj/machinery/atmospherics/components/binary/volume_pump, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"PU" = ( -/obj/structure/chair{ +/obj/machinery/atmospherics/pipe/simple/green/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/purple/hidden, +/obj/machinery/atmospherics/pipe/simple/orange/hidden/layer5{ dir = 8 }, -/obj/structure/railing{ - dir = 5; - layer = 4.1 - }, +/obj/structure/catwalk/over/plated_catwalk, +/turf/open/floor/plating, +/area/ship/engineering/engine) +"Im" = ( +/obj/item/radio/intercom/directional/south, +/turf/open/floor/carpet/cyan, +/area/ship/medical) +"In" = ( +/obj/structure/chair/sofa/blue/corpo/right/directional/north, /turf/open/floor/plasteel, -/area/ship/cargo) -"PV" = ( -/obj/structure/disposalpipe/sorting/mail/flip{ - dir = 4; - sortTypes = list(9,10,11); - tag = "Medbay" +/area/ship/hallway/central) +"Io" = ( +/obj/machinery/advanced_airlock_controller{ + pixel_x = -24 }, -/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-8" +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 }, +/turf/open/floor/engine, +/area/ship/engineering/engine) +"Is" = ( +/obj/machinery/light/small/directional/south, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/structure/reagent_dispensers/watertank/high, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/crew/janitor) +"Iu" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/turf_decal/corner/opaque/blue{ +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 1 }, -/obj/effect/turf_decal/corner/opaque/blue{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"PW" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/turf/open/floor/plasteel/freezer, -/area/ship/crew/toilet) -"Qb" = ( -/obj/machinery/light/directional/south, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"Qm" = ( -/obj/structure/disposalpipe/segment{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/structure/disposalpipe/junction/flip{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 +/turf/open/floor/carpet/cyan, +/area/ship/medical) +"IE" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/crew/dorm/dormtwo) +"IK" = ( +/obj/structure/table/glass, +/obj/item/storage/fancy/cigarettes/cigars/havana{ + pixel_x = -8; + pixel_y = 8 }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"IM" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, +/obj/effect/turf_decal/borderfloor, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/storage/eva) +"IS" = ( +/obj/structure/sign/warning/docking{ + pixel_y = -8 + }, +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/hallway/starboard) +"IT" = ( +/obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "0-2" }, -/obj/effect/turf_decal/trimline/opaque/blue/corner{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/brown/visible/layer1{ + dir = 10 }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"Qr" = ( -/obj/structure/disposalpipe/segment{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 9 }, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"IV" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/machinery/airalarm/directional/south, -/obj/machinery/camera/autoname{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"IX" = ( +/obj/structure/ore_box, +/obj/effect/turf_decal/box, +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable{ + icon_state = "0-4" }, /turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"Qt" = ( -/obj/effect/turf_decal/corner/transparent/neutral{ - dir = 4 +/area/ship/storage/eva) +"Jd" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable{ + icon_state = "0-2" }, -/obj/machinery/light/dim/directional/north, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"Qv" = ( -/obj/effect/turf_decal/corner/opaque/yellow{ +/turf/open/floor/plasteel/mono, +/area/ship/hallway/starboard) +"Je" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/yellow{ - dir = 1 +/turf/open/floor/plasteel/mono, +/area/ship/crew/canteen) +"Jk" = ( +/obj/effect/spawner/structure/window/shuttle, +/turf/open/floor/plating, +/area/ship/engineering/engine) +"Jl" = ( +/obj/effect/turf_decal/industrial/warning, +/obj/structure/cable{ + icon_state = "1-8" }, /obj/structure/cable{ - icon_state = "2-4" + icon_state = "4-8" }, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"Qy" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 }, -/obj/effect/turf_decal/corner/transparent/neutral, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"QD" = ( -/obj/machinery/atmospherics/components/binary/volume_pump, -/obj/effect/turf_decal/industrial/warning/corner{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 4 }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"QE" = ( /obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/turf/open/floor/plasteel/mono, +/area/ship/hallway/starboard) +"Jt" = ( +/obj/effect/spawner/structure/window/shuttle, +/obj/machinery/door/firedoor/window, +/turf/open/floor/plating, +/area/ship/storage/eva) +"Ju" = ( +/obj/machinery/vending/cigarette, +/obj/effect/turf_decal/siding/wood{ + dir = 9 }, +/turf/open/floor/wood, +/area/ship/crew) +"Jv" = ( +/turf/closed/wall/mineral/titanium/exterior, +/area/ship/cargo) +"Jw" = ( /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-8" }, -/obj/effect/turf_decal/trimline/opaque/blue/corner, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"QI" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/structure/disposalpipe/segment{ - dir = 8 + dir = 9 }, -/obj/effect/turf_decal/corner/transparent/neutral, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "1-2" +/obj/effect/turf_decal/trimline/opaque/ntblue/line{ + dir = 1 }, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"QJ" = ( -/obj/machinery/conveyor{ - dir = 8; - id = "osprey_cargoload" +/turf/open/floor/plasteel/mono, +/area/ship/hallway/port) +"Jx" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 }, -/obj/structure/sign/warning{ - pixel_y = -25 +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20 }, -/obj/machinery/light/directional/south, -/turf/open/floor/plating, -/area/ship/cargo) -"QK" = ( -/obj/structure/disposalpipe/segment{ +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"JB" = ( +/obj/effect/turf_decal/number/nine{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 +/obj/machinery/button/door{ + dir = 4; + id = "harrier_thrusters_starboard"; + name = "Blast Door Control"; + pixel_x = -25; + pixel_y = 6 }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"QW" = ( +/turf/open/floor/plasteel/patterned, +/area/ship/engineering) +"JC" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 8 }, -/obj/effect/turf_decal/industrial/warning, -/turf/open/floor/plasteel, -/area/ship/cargo/office) -"Re" = ( -/obj/structure/sign/number/one{ - color = "Black" +/turf/open/floor/plasteel/mono, +/area/ship/hallway/port) +"JH" = ( +/obj/effect/turf_decal/trimline/transparent/white/filled/warning{ + dir = 1 }, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/cargo/office) -"Ri" = ( -/obj/structure/cable{ - icon_state = "1-8" +/obj/effect/turf_decal/trimline/transparent/white/filled/warning, +/obj/machinery/door/firedoor/border_only{ + dir = 1 }, -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/door/firedoor/border_only, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/port) +"JK" = ( +/obj/machinery/atmospherics/pipe/manifold/purple/visible{ + dir = 1 }, -/obj/structure/cable{ - icon_state = "1-4" +/obj/effect/turf_decal/industrial/warning{ + dir = 8 }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"Ro" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/crew/toilet) -"Rq" = ( -/turf/closed/wall/mineral/titanium, -/area/ship/crew/dorm) -"Rr" = ( -/turf/open/floor/plasteel/stairs/left{ +/turf/open/floor/plating, +/area/ship/engineering) +"JL" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/area/ship/cargo) -"Ry" = ( -/obj/structure/table/reinforced, -/obj/item/areaeditor/shuttle{ - pixel_x = 5; - pixel_y = 1 - }, -/obj/item/megaphone/command{ - pixel_x = 1; - pixel_y = 1 - }, -/obj/machinery/airalarm/directional/south, -/obj/effect/turf_decal/corner/opaque/ntblue{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/effect/turf_decal/corner/opaque/ntblue, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) -"RB" = ( -/obj/machinery/atmospherics/components/binary/pump/layer4{ +/obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/effect/turf_decal/industrial/warning/corner{ +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/corner{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/green/visible/layer1{ - dir = 8 - }, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"RD" = ( -/obj/machinery/door/airlock/highsecurity{ - name = "AI Chamber"; - req_access_txt = "24" +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"JN" = ( +/obj/machinery/photocopier, +/obj/machinery/light_switch{ + pixel_x = -5; + pixel_y = 20 }, -/obj/structure/disposalpipe/segment{ - dir = 2 +/turf/open/floor/plasteel, +/area/ship/cargo) +"JP" = ( +/obj/effect/turf_decal/trimline/opaque/ntblue/line{ + dir = 5 }, -/obj/effect/turf_decal/borderfloor, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-2" +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"JQ" = ( +/obj/structure/sign/warning/vacuum/external, +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/hallway/starboard) +"JS" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/machinery/firealarm/directional/north, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/corner, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/line{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/dark/hidden/layer5, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/green/hidden/layer1, -/turf/open/floor/plasteel/tech/grid, -/area/ship/science/ai_chamber) -"RE" = ( -/obj/structure/closet/crate/engineering{ - name = "fuel crate" +/turf/open/floor/plasteel, +/area/ship/hallway/central) +"JT" = ( +/obj/structure/table/glass, +/obj/item/storage/box/matches{ + pixel_y = 9 }, -/obj/item/stack/sheet/mineral/plasma/twenty, -/obj/machinery/light/directional/north, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/engineering) -"RI" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 +/obj/effect/turf_decal/trimline/opaque/ntblue/line{ + dir = 8 }, -/obj/machinery/disposal/bin, -/obj/structure/sign/warning/nosmoking/circle{ - pixel_x = 25 +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 }, -/obj/structure/sign/poster/official/moth/smokey{ - pixel_y = -32 +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"JU" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/effect/turf_decal/corner/opaque/yellow, -/obj/effect/turf_decal/corner/opaque/bottlegreen{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/bottlegreen{ +/obj/machinery/atmospherics/pipe/simple/brown/visible/layer1, +/obj/structure/disposalpipe/segment{ dir = 8 }, -/turf/open/floor/plasteel/patterned/grid, +/turf/open/floor/plasteel/patterned, /area/ship/engineering/atmospherics) -"RO" = ( +"JX" = ( /obj/structure/disposalpipe/segment{ - dir = 2 + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-2" +/turf/open/floor/carpet/executive, +/area/ship/crew/law_office) +"JZ" = ( +/obj/structure/chair/sofa/blue/corpo/left, +/turf/open/floor/plasteel, +/area/ship/hallway/central) +"Kc" = ( +/obj/structure/closet/secure_closet/atmospherics{ + populate = 0 }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/machinery/atmospherics/pipe/simple/green/hidden/layer1{ +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/machinery/airalarm/directional/south, +/obj/item/clothing/shoes/workboots, +/obj/item/clothing/under/nanotrasen/engineering/atmos, +/obj/item/clothing/suit/nanotrasen/vest/blue, +/obj/item/storage/backpack/industrial, +/obj/item/clothing/head/hardhat/nanotrasen/blue, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/glasses/meson/engine, +/obj/item/analyzer, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering) +"Kd" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/ntblue/line{ dir = 10 }, -/obj/structure/catwalk/over, -/turf/open/floor/plating, -/area/ship/science/ai_chamber) -"RQ" = ( -/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, -/area/ship/cargo) -"RU" = ( -/obj/structure/table/wood, -/obj/item/toy/plush/carpplushie, -/obj/machinery/light/small/directional/west, +/area/ship/crew/canteen) +"Kg" = ( +/obj/machinery/vending/coffee, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, /turf/open/floor/wood, -/area/ship/crew/dorm) -"RW" = ( -/obj/structure/disposalpipe/segment{ - dir = 8 +/area/ship/crew) +"Ki" = ( +/obj/structure/cable{ + icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel, -/area/ship/hallway/central) -"RY" = ( -/obj/machinery/atmospherics/pipe/manifold/orange/visible, -/turf/open/floor/plasteel/patterned/grid, /area/ship/engineering) -"Sa" = ( -/obj/structure/table, -/obj/item/storage/box/lights/mixed{ - pixel_x = 4; - pixel_y = 9 +"Kj" = ( +/obj/structure/closet/secure_closet/engineering_personal{ + populate = 0 }, -/obj/machinery/airalarm/directional/south, -/obj/item/storage/box/mousetraps{ - pixel_x = -9 +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/machinery/firealarm/directional/south, +/obj/item/clothing/shoes/workboots, +/obj/item/clothing/under/nanotrasen/engineering, +/obj/item/clothing/suit/nanotrasen/vest, +/obj/item/storage/backpack/industrial, +/obj/item/clothing/head/hardhat/nanotrasen, +/obj/item/clothing/gloves/color/yellow, +/obj/item/clothing/glasses/meson/engine, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering) +"Kl" = ( +/obj/structure/cable{ + icon_state = "2-8" }, -/turf/open/floor/plasteel, -/area/ship/crew/janitor) -"Sd" = ( -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/corner/opaque/blue, -/obj/effect/turf_decal/corner/opaque/blue{ - dir = 8 +/obj/structure/cable{ + icon_state = "1-8" }, -/obj/machinery/firealarm/directional/south, -/obj/machinery/light/directional/east, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"Se" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 }, -/turf/open/floor/plasteel/white, -/area/ship/science) -"Si" = ( /obj/structure/disposalpipe/segment{ - dir = 2 + dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/trimline/opaque/nsorange/line, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"Kq" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/obj/machinery/light/small/directional/west, +/turf/open/floor/carpet/cyan, +/area/ship/crew) +"Kr" = ( /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"Sm" = ( -/obj/structure/disposalpipe/segment{ +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/opaque/vired/line{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/turf/open/floor/plasteel/dark, +/area/ship/security) +"Kt" = ( +/obj/structure/table/wood, +/obj/structure/bedsheetbin, +/obj/machinery/light/small/directional/east, +/obj/structure/sign/poster/official/random{ + pixel_y = 32 }, +/turf/open/floor/carpet/cyan, +/area/ship/crew) +"Kx" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/turf_decal/corner/opaque/blue{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/blue{ - dir = 1 - }, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"Su" = ( -/obj/effect/turf_decal/industrial/warning, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/crew/cryo) -"SB" = ( -/obj/effect/turf_decal/industrial/warning/fulltile, -/obj/machinery/door/poddoor{ - id = "osprey_disposals"; - name = "Disposals Blast Door"; +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/turf/open/floor/plating, -/area/ship/crew/janitor) -"SC" = ( -/obj/effect/turf_decal/corner/opaque/mauve{ +/obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/effect/turf_decal/corner/opaque/mauve, -/turf/open/floor/plasteel/white, -/area/ship/science) -"SD" = ( +/obj/structure/closet/emcloset/wall/directional/south, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"Ky" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"Kz" = ( +/obj/machinery/power/shuttle/engine/electric{ + dir = 4 + }, /obj/structure/cable{ - icon_state = "2-8" + icon_state = "0-4" }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"SG" = ( -/obj/structure/closet/secure_closet{ - icon_state = "qm"; - name = "\proper quartermaster's locker"; - req_access_txt = "41" +/obj/machinery/door/poddoor{ + dir = 4; + id = "harrier_thrusters_port"; + name = "Thruster Blast Door" + }, +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"KA" = ( +/obj/structure/crate_shelf, +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) +"KB" = ( +/obj/effect/turf_decal/trimline/transparent/white/filled/warning{ + dir = 4 }, -/obj/effect/turf_decal/corner/opaque/brown{ +/obj/effect/turf_decal/trimline/transparent/white/filled/warning{ dir = 8 }, -/obj/effect/turf_decal/corner/opaque/brown, -/obj/structure/disposalpipe/segment{ - dir = 5 +/obj/machinery/door/firedoor/border_only{ + dir = 8 }, -/obj/structure/cable, -/obj/item/storage/backpack, -/obj/item/storage/backpack/messenger, -/obj/item/storage/backpack/satchel/leather, -/obj/item/storage/backpack/duffelbag, -/obj/item/clothing/shoes/sneakers/brown, -/obj/item/clothing/under/rank/cargo/qm/skirt, -/obj/item/clothing/under/rank/cargo/qm, -/obj/item/clothing/head/beret/qm, -/obj/item/stamp/qm, -/obj/item/clothing/glasses/sunglasses, -/obj/item/clothing/gloves/fingerless, -/obj/item/megaphone/cargo, -/obj/item/clothing/head/safety_helmet, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/machinery/light_switch{ - dir = 1; - pixel_x = -8; - pixel_y = -16 +/obj/machinery/door/firedoor/border_only{ + dir = 4 }, -/turf/open/floor/plasteel, -/area/ship/cargo/office) -"SK" = ( -/obj/structure/table, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 }, -/obj/item/taperecorder, -/obj/machinery/camera/autoname{ - dir = 5 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/plasteel/dark, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"KC" = ( +/turf/closed/wall/mineral/titanium/interior, /area/ship/bridge) -"SO" = ( -/obj/effect/turf_decal/siding/wood{ +"KG" = ( +/obj/structure/table/wood/reinforced, +/obj/item/folder/blue, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/carpet/executive, +/area/ship/crew/law_office) +"KM" = ( +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/line, +/turf/open/floor/plasteel, +/area/ship/hallway/central) +"KN" = ( +/obj/effect/turf_decal/trimline/transparent/white/filled/warning{ dir = 1 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/obj/structure/cable{ - icon_state = "2-8" +/obj/effect/turf_decal/trimline/transparent/white/filled/warning, +/obj/machinery/door/poddoor/shutters{ + id = "harriercargoaccess" }, -/turf/open/floor/plasteel/grimy, -/area/ship/crew/dorm) -"SQ" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/northleft{ - dir = 2; - name = "Cargo Desk"; - req_access_txt = "31" +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 }, -/obj/structure/disposalpipe/segment{ - dir = 2 +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel, +/area/ship/storage/eva) +"KO" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable{ + icon_state = "0-4" }, -/obj/structure/noticeboard{ - dir = 4; - pixel_x = -32 +/obj/effect/turf_decal/siding/yellow{ + dir = 10 }, -/obj/item/table_bell, -/obj/machinery/door/poddoor/shutters{ - id = "ospreycargo" +/obj/machinery/firealarm/directional/south, +/obj/structure/chair/handrail{ + dir = 1 }, -/obj/machinery/door/firedoor, -/turf/open/floor/plating, -/area/ship/cargo/office) -"SR" = ( -/obj/effect/turf_decal/corner/opaque/brown{ +/turf/open/floor/plasteel, +/area/ship/engineering/engine) +"KQ" = ( +/obj/effect/turf_decal/corner/opaque/white{ dir = 8 }, -/obj/effect/turf_decal/corner/opaque/brown, -/obj/structure/disposalpipe/junction/flip{ +/obj/effect/turf_decal/corner/opaque/white{ dir = 4 }, -/obj/structure/closet/secure_closet{ - icon_state = "cargo"; - name = "\proper cargo technician's locker"; - req_access_txt = "31" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/siding{ + dir = 8 }, -/obj/item/storage/backpack, -/obj/item/storage/backpack/satchel, -/obj/item/storage/backpack/messenger, -/obj/item/storage/backpack/duffelbag, -/obj/item/clothing/shoes/sneakers/black, -/obj/item/clothing/under/rank/cargo/tech/skirt, -/obj/item/clothing/under/rank/cargo/tech, -/obj/item/clothing/head/safety_helmet, -/obj/machinery/airalarm/directional/south, /turf/open/floor/plasteel, -/area/ship/cargo/office) -"SU" = ( -/obj/machinery/cryopod{ - dir = 1 +/area/ship/crew/canteen) +"KS" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/crew/dorm) +"KT" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/structure/window/reinforced{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/structure/sign/poster/official/work_for_a_future{ - pixel_y = -32 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/crew/cryo) -"SW" = ( -/obj/machinery/button/door{ - dir = 8; - id = "ospreysci_window"; - name = "Shutter Control"; - pixel_x = 25 +/obj/structure/disposalpipe/segment{ + dir = 8 }, -/turf/open/floor/plasteel/dark, -/area/ship/science) -"SX" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/on{ - dir = 1 +/obj/effect/turf_decal/trimline/opaque/ntblue/line{ + dir = 8 }, -/obj/effect/turf_decal/industrial/outline/yellow, -/turf/open/floor/engine/air, -/area/ship/engineering/atmospherics) -"Tb" = ( -/obj/machinery/power/shieldwallgen/atmos/roundstart{ - dir = 4; - id = "osprey_atmosfield" +/turf/open/floor/plasteel, +/area/ship/hallway/starboard) +"KW" = ( +/obj/structure/chair/sofa/blue/corpo/right/directional/north, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/line, +/turf/open/floor/plasteel, +/area/ship/hallway/central) +"KY" = ( +/obj/structure/chair/comfy/blue/corpo/directional/south, +/obj/machinery/firealarm/directional/north, +/turf/open/floor/carpet/cyan, +/area/ship/medical) +"KZ" = ( +/obj/machinery/atmospherics/pipe/simple/brown/visible/layer1{ + dir = 8 }, -/obj/structure/cable{ - icon_state = "0-4" +/obj/machinery/atmospherics/components/trinary/mixer/airmix/inverse{ + dir = 1 }, -/obj/effect/turf_decal/industrial/warning, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"Lb" = ( /obj/effect/turf_decal/industrial/warning{ - dir = 1 + dir = 8 }, -/obj/machinery/door/poddoor{ - id = "osprey_tank_vent" +/obj/machinery/conveyor_switch/oneway{ + id = "harrier_garbage" }, -/turf/open/floor/engine, -/area/ship/engineering/atmospherics) -"Tg" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 1 +/obj/structure/window/reinforced{ + dir = 8 }, -/obj/effect/turf_decal/box, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"Ti" = ( -/obj/machinery/conveyor/inverted{ - dir = 5; - id = "osprey_production" +/obj/machinery/button/massdriver{ + id = "harrier_disposals"; + name = "disposals button"; + pixel_x = 5; + pixel_y = 20 + }, +/obj/machinery/button/shieldwallgen{ + id = "harrier_disposalfield"; + pixel_x = -5; + pixel_y = 20 }, /turf/open/floor/plating, -/area/ship/cargo) -"Tn" = ( +/area/ship/crew/janitor) +"Lc" = ( /obj/structure/cable{ - icon_state = "0-8" + icon_state = "4-8" }, -/obj/machinery/power/smes/shuttle/precharged{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/machinery/door/window/eastleft{ - name = "Engine Access" - }, -/obj/structure/window/plasma/reinforced/spawner/west, -/obj/structure/window/plasma/reinforced/spawner/north, -/obj/machinery/door/poddoor{ - id = "osprey_thruster_port"; - name = "Thruster Blast Door"; +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/turf/open/floor/plating, -/area/ship/engineering) -"Tq" = ( -/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/layer4, -/obj/machinery/light/small/directional/east, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/hallway/central) -"Tr" = ( -/obj/machinery/atmospherics/components/unary/shuttle/heater{ +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/carpet/cyan, +/area/ship/medical) +"Lf" = ( +/obj/structure/railing{ dir = 4 }, -/obj/machinery/door/window/eastright{ - name = "Engine Access" +/obj/structure/cable{ + icon_state = "2-8" }, -/obj/structure/window/plasma/reinforced/spawner/west, -/obj/structure/window/plasma/reinforced/spawner, -/obj/machinery/door/poddoor{ - id = "osprey_thruster_port"; - name = "Thruster Blast Door"; +/obj/effect/turf_decal/trimline/transparent/white/filled/warning, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/purple/visible{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/purple/hidden, +/obj/machinery/atmospherics/pipe/simple/orange/visible/layer5{ dir = 4 }, -/turf/open/floor/plating, -/area/ship/engineering) -"Tt" = ( -/obj/effect/turf_decal/industrial/warning, +/obj/effect/turf_decal/siding/yellow{ + dir = 5 + }, /obj/structure/disposalpipe/segment{ - dir = 2 + dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-2" +/turf/open/floor/plasteel, +/area/ship/engineering/engine) +"Lh" = ( +/obj/structure/railing{ + dir = 5; + layer = 4.1 }, -/obj/machinery/atmospherics/pipe/simple/dark/hidden/layer5, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, /obj/machinery/atmospherics/pipe/simple/green/hidden/layer1, -/turf/open/floor/plasteel/dark, -/area/ship/science/ai_chamber) -"Tw" = ( -/obj/machinery/suit_storage_unit/standard_unit, -/obj/effect/turf_decal/borderfloor{ - dir = 8 +/obj/effect/turf_decal/siding/yellow{ + dir = 5 }, +/turf/open/floor/plasteel, +/area/ship/engineering/engine) +"Li" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 5 }, -/obj/structure/sign/poster/official/safety_internals{ - pixel_x = -32 +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel, +/area/ship/crew) +"Lj" = ( +/obj/machinery/airalarm/directional/west, +/obj/effect/turf_decal/trimline/opaque/blue/line, +/turf/open/floor/plasteel/white, +/area/ship/medical) +"Lp" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/hallway/central) -"Tx" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 }, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) -"Tz" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ship/cargo) +"Lv" = ( /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/manifold/orange/visible{ - dir = 4 - }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"TG" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/obj/machinery/light/directional/west, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/corner{ + dir = 1 }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/starboard) +"Lw" = ( /obj/structure/cable{ - icon_state = "1-8" - }, -/turf/open/floor/plasteel/white, -/area/ship/science) -"TH" = ( -/obj/structure/disposalpipe/junction, -/obj/effect/turf_decal/corner/transparent/neutral{ - dir = 1 + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 @@ -7103,2815 +6823,4937 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/light_switch{ + dir = 1; + pixel_x = -5; + pixel_y = -20 }, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"TJ" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/disposalpipe/segment{ + dir = 8 }, -/obj/structure/disposalpipe/junction/flip{ - dir = 4 +/obj/machinery/camera{ + dir = 10 }, -/turf/open/floor/plasteel, -/area/ship/cargo) -"TP" = ( -/obj/structure/closet/secure_closet{ - icon_state = "mining"; - name = "miner's equipment locker"; - req_access_txt = "48" - }, -/obj/item/clothing/under/rank/cargo/miner, -/obj/item/mining_scanner, -/obj/item/mining_scanner, -/obj/item/storage/bag/ore, -/obj/item/storage/bag/ore, -/obj/item/pickaxe, -/obj/item/pickaxe, -/obj/machinery/light/small/directional/south, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/cargo) -"TR" = ( -/obj/structure/disposalpipe/segment{ +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"Lz" = ( +/obj/structure/chair/comfy/blue/corpo/directional/north, +/obj/effect/turf_decal/trimline/opaque/ntblue/line{ + dir = 10 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ dir = 8 }, -/obj/effect/turf_decal/corner/opaque/bar{ +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"LD" = ( +/obj/effect/spawner/structure/window/shuttle, +/obj/machinery/door/poddoor{ + dir = 4; + id = "harrierwindows"; + name = "Window Blast Door" + }, +/turf/open/floor/plating, +/area/ship/hallway/starboard) +"LJ" = ( +/obj/machinery/advanced_airlock_controller{ + pixel_x = -24 + }, +/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/layer2, +/obj/effect/turf_decal/borderfloor{ + dir = 4 + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/hallway/starboard) +"LK" = ( +/obj/machinery/door/airlock/external/glass, +/obj/effect/turf_decal/industrial/warning/fulltile, +/turf/open/floor/engine/vacuum, +/area/ship/engineering/engine) +"LP" = ( +/obj/machinery/vending/dinnerware, +/obj/effect/turf_decal/corner/opaque/white{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/bar, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 8 + }, +/obj/machinery/airalarm/directional/north, /turf/open/floor/plasteel, -/area/ship/hallway/central) -"TU" = ( -/obj/machinery/door/airlock/research{ - name = "Science Lab"; - req_access_txt = "47" +/area/ship/crew/canteen) +"LW" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/borderfloor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"LZ" = ( +/obj/machinery/atmospherics/pipe/simple/green/hidden/layer1{ + dir = 4 + }, +/obj/effect/spawner/structure/window/shuttle, +/obj/machinery/door/poddoor{ + dir = 4; + id = "harrierwindows"; + name = "Window Blast Door" + }, +/turf/open/floor/plating, +/area/ship/engineering) +"Me" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/carpet/blue, +/area/ship/bridge) +"Mf" = ( +/obj/structure/railing{ + dir = 8 + }, /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 8 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"Mn" = ( +/obj/machinery/firealarm/directional/east, +/obj/effect/turf_decal/siding/thinplating, +/turf/open/floor/plasteel/dark, +/area/ship/science/ai_chamber) +"Mo" = ( +/obj/effect/turf_decal/industrial/warning{ dir = 1 }, -/turf/open/floor/plasteel, -/area/ship/science) -"TW" = ( -/obj/effect/turf_decal/industrial/warning, -/obj/machinery/conveyor_switch/oneway{ - id = "osprey_cargoload" +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/green/hidden/layer1{ + dir = 9 }, +/obj/machinery/atmospherics/pipe/simple/purple/hidden, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/patterned, -/area/ship/cargo) -"TZ" = ( -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/machinery/rnd/production/circuit_imprinter/department/science, -/turf/open/floor/plasteel/dark, -/area/ship/science) -"Uc" = ( -/obj/structure/window/plasma/reinforced{ - dir = 8 +/area/ship/engineering) +"Ms" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/layer_manifold/visible, -/obj/machinery/button/door{ - dir = 1; - id = "osprey_tank_vent"; - pixel_x = -5; - pixel_y = -25 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/machinery/button/shieldwallgen{ - dir = 1; - id = "osprey_atmosfield"; - pixel_x = 5; - pixel_y = -24 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"Uj" = ( -/obj/effect/spawner/structure/window/shuttle, -/obj/machinery/door/poddoor/shutters{ - id = "ospreywindows" +/obj/machinery/light/small/directional/north, +/obj/effect/turf_decal/siding/yellow{ + dir = 1 }, -/obj/machinery/door/firedoor/heavy, -/turf/open/floor/plating, -/area/ship/medical) -"Uo" = ( /obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 8 }, +/obj/machinery/camera, +/turf/open/floor/plasteel, +/area/ship/engineering) +"Mu" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood, +/area/ship/crew) +"Mv" = ( +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"Mx" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/purple/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering) +"MB" = ( /obj/structure/cable{ - icon_state = "1-4" + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/dark/visible/layer5, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"UB" = ( -/obj/machinery/sleeper{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/lime{ - dir = 1 - }, -/obj/effect/turf_decal/corner/opaque/lime{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/lime{ +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/structure/sign/warning/nosmoking/circle{ - pixel_x = -25 +/obj/structure/sign/poster/official/random{ + pixel_y = 32 + }, +/turf/open/floor/wood, +/area/ship/crew) +"MK" = ( +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/corner{ + dir = 1 }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"UG" = ( -/obj/effect/turf_decal/industrial/warning{ +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/line{ dir = 4 }, /turf/open/floor/plasteel, -/area/ship/cargo/office) -"UL" = ( -/turf/open/floor/plasteel/dark, -/area/ship/bridge) -"UT" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 4; - name = "Helm" - }, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) -"UU" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/wood, -/area/ship/crew/canteen) -"UZ" = ( -/obj/effect/turf_decal/siding/white{ +/area/ship/hallway/port) +"MM" = ( +/obj/machinery/power/shuttle/engine/electric{ dir = 4 }, -/turf/open/floor/plasteel/tech/techmaint, -/area/ship/crew/cryo) -"Vf" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 6 +/obj/machinery/door/poddoor{ + dir = 4; + id = "harrier_thrusters_starboard"; + name = "Thruster Blast Door" }, /obj/structure/cable{ - icon_state = "2-4" + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/ship/engineering) +"MP" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/open/floor/plasteel/white, -/area/ship/science) -"Vh" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"Vl" = ( -/obj/structure/sign/warning/vacuum/external, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/cargo) -"Vq" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "osprey_packagesort" +/obj/machinery/light/small/directional/west, +/obj/effect/turf_decal/trimline/transparent/white/filled/corner{ + dir = 8 }, -/turf/open/floor/plating, -/area/ship/cargo/office) -"Vs" = ( -/obj/effect/turf_decal/corner/opaque/red, -/obj/structure/disposalpipe/segment{ - dir = 9 +/obj/effect/turf_decal/siding/thinplating{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ +/obj/structure/chair/handrail{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ +/turf/open/floor/plasteel/dark, +/area/ship/science/ai_chamber) +"MQ" = ( +/obj/effect/turf_decal/corner/opaque/ntblue/full, +/obj/effect/turf_decal/corner/opaque/white{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/bottlegreen{ - dir = 8 +/obj/effect/turf_decal/corner/opaque/white, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 }, -/obj/effect/turf_decal/corner/opaque/yellow{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/disposalpipe/junction/flip{ + dir = 4 }, /turf/open/floor/plasteel, /area/ship/hallway/central) -"Vx" = ( -/obj/machinery/door/window/eastleft, -/obj/machinery/shower{ - pixel_y = 10 - }, -/obj/structure/curtain, -/turf/open/floor/plasteel/freezer, -/area/ship/crew/toilet) -"VA" = ( +"MT" = ( +/obj/structure/bed, +/obj/structure/curtain/cloth/fancy, +/obj/item/bedsheet/head_of_personnel, +/turf/open/floor/carpet/blue, +/area/ship/crew/dorm) +"MV" = ( /obj/structure/cable{ - icon_state = "0-8" + icon_state = "1-2" }, -/obj/machinery/power/smes/shuttle/precharged{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 4 }, -/obj/machinery/door/window/eastright{ - name = "Engine Access" +/turf/open/floor/plasteel/mono, +/area/ship/storage/eva) +"MW" = ( +/obj/structure/chair/sofa/blue/corpo/right/directional/east, +/obj/effect/turf_decal/siding/wood, +/turf/open/floor/wood, +/area/ship/crew) +"MX" = ( +/obj/structure/cable/yellow{ + icon_state = "1-4" }, -/obj/structure/window/plasma/reinforced/spawner/west, -/obj/structure/window/plasma/reinforced/spawner, -/obj/machinery/door/poddoor{ - id = "osprey_thruster_port"; - name = "Thruster Blast Door"; +/obj/machinery/atmospherics/pipe/simple/green/hidden/layer1, +/obj/machinery/atmospherics/pipe/simple/purple/hidden, +/obj/structure/catwalk/over/plated_catwalk, +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ dir = 4 }, /turf/open/floor/plating, -/area/ship/engineering) -"VC" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/science) -"VF" = ( -/obj/structure/chair/comfy/orange/directional/east, -/obj/effect/landmark/start/captain, -/obj/machinery/airalarm/directional/west, -/obj/structure/sign/poster/retro/lasergun_new{ - pixel_y = 32 +/area/ship/engineering/engine) +"MZ" = ( +/turf/template_noop, +/area/template_noop) +"Nc" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/open/floor/carpet/royalblue, -/area/ship/bridge) -"VI" = ( -/obj/effect/landmark/start/scientist, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, /turf/open/floor/plasteel/dark, -/area/ship/science) -"VL" = ( -/obj/effect/turf_decal/corner/transparent/neutral, -/obj/effect/turf_decal/corner/transparent/neutral{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/area/ship/security) +"Ni" = ( /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"VN" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/wood, -/area/ship/crew/canteen) -"VR" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden/layer2, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/structure/cable{ - icon_state = "2-4" +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 }, -/obj/effect/turf_decal/industrial/shutoff, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering) +"Nk" = ( +/obj/item/kirbyplants/random, +/obj/machinery/light/directional/north, +/obj/machinery/camera, /turf/open/floor/plasteel, -/area/ship/hallway/central) -"VS" = ( +/area/ship/hallway/port) +"Nl" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 + dir = 4 }, -/obj/machinery/light/directional/south, -/turf/open/floor/plasteel/freezer, -/area/ship/crew/toilet) -"VV" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/science/ai_chamber) -"VW" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/industrial/warning/fulltile, -/obj/machinery/door/poddoor/shutters{ - id = "ospreysci_window" +/obj/effect/turf_decal/trimline/opaque/ntblue/line{ + dir = 8 }, -/turf/open/floor/plasteel/tech, -/area/ship/science) -"Wb" = ( -/obj/structure/table, /turf/open/floor/plasteel, -/area/ship/crew/cryo) -"Wc" = ( -/obj/effect/turf_decal/industrial/loading, -/obj/machinery/mineral/processing_unit_console{ - machinedir = 1; - pixel_x = -32; - pixel_y = -4 +/area/ship/storage/eva) +"Nm" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 }, -/turf/open/floor/plasteel/patterned/cargo_one, -/area/ship/cargo) -"Wf" = ( -/obj/effect/turf_decal/corner/opaque/blue{ - dir = 1 +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/mono, +/area/ship/crew/canteen) +"Nn" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/effect/turf_decal/industrial/warning/corner{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 9 + }, +/obj/effect/turf_decal/ntspaceworks_big/five{ + dir = 8 }, /obj/structure/disposalpipe/segment, -/obj/machinery/camera/autoname{ - dir = 5 +/turf/open/floor/plasteel/patterned, +/area/ship/engineering) +"No" = ( +/obj/structure/cable{ + icon_state = "1-4" }, -/obj/structure/closet/firecloset, -/turf/open/floor/plasteel, -/area/ship/cargo) -"Wj" = ( -/obj/machinery/mineral/processing_unit, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/purple/visible, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/catwalk/over/plated_catwalk, /turf/open/floor/plating, -/area/ship/cargo) -"Wk" = ( -/obj/structure/sign/number/four{ - color = "Black" +/area/ship/engineering/engine) +"Np" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4; + name = "Helm" }, -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/cargo/office) -"Wn" = ( -/obj/structure/table/wood, -/obj/machinery/light/small/directional/south, -/turf/open/floor/carpet/blue, -/area/ship/bridge) -"Wq" = ( -/obj/docking_port/stationary{ - dwidth = 15; - width = 30; - height = 15; - dir = 2 +/obj/effect/landmark/start/captain, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 4 }, -/turf/template_noop, -/area/template_noop) -"Ws" = ( -/obj/structure/chair/comfy/orange/directional/east, -/obj/effect/landmark/start/head_of_personnel, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/carpet/blue, +/turf/open/floor/plasteel/dark, /area/ship/bridge) -"WE" = ( -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-2" +"Nq" = ( +/obj/machinery/door_timer{ + id = "Cell 1"; + pixel_y = 4 }, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"WK" = ( -/obj/structure/window/reinforced{ +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/security) +"Nr" = ( +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ dir = 8 }, -/obj/structure/window/reinforced, -/obj/effect/turf_decal/corner/opaque/yellow{ +/obj/effect/turf_decal/number/four{ dir = 8 }, -/obj/effect/turf_decal/corner/opaque/yellow{ - dir = 1 +/obj/machinery/light/small/directional/north, +/obj/machinery/camera{ + dir = 6 }, -/obj/effect/turf_decal/corner/opaque/yellow, -/obj/structure/closet/secure_closet/engineering_electrical, -/turf/open/floor/plasteel/patterned/grid, +/turf/open/floor/plasteel/patterned, /area/ship/engineering) -"WN" = ( -/turf/open/floor/plasteel/white, -/area/ship/medical) -"WS" = ( -/obj/structure/chair{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 8 +"Nt" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/effect/landmark/start/assistant, -/obj/structure/railing, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"WU" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/engineering) -"WZ" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Canteen"; - dir = 4 +/obj/machinery/atmospherics/pipe/simple/green/visible/layer1{ + dir = 6 }, -/obj/structure/disposalpipe/segment{ - dir = 8 +/obj/machinery/light/small/directional/west, +/obj/machinery/atmospherics/pipe/simple/orange/visible/layer5{ + dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/components/trinary/mixer/flipped{ + dir = 1; + name = "Fuel Mixer" }, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"Nv" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/borderfloor{ - dir = 4 + dir = 6 }, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ship/cargo) +"Ny" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 +/obj/machinery/door/airlock/glass{ + dir = 4; + name = "Crew Quarters"; + req_ship_access = 0 }, -/obj/machinery/door/firedoor/border_only{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/turf/open/floor/plasteel, -/area/ship/crew/canteen) -"Xe" = ( -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/brown, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ +/obj/machinery/door/firedoor/border_only{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/brown{ +/obj/machinery/door/firedoor/border_only{ dir = 8 }, -/obj/machinery/light/directional/south, -/turf/open/floor/plasteel, -/area/ship/cargo) -"Xi" = ( /obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ +/obj/effect/turf_decal/borderfloor{ dir = 4 }, -/obj/structure/cable{ - icon_state = "4-8" +/turf/open/floor/plasteel, +/area/ship/crew/canteen) +"Nz" = ( +/obj/structure/cable/yellow{ + icon_state = "0-4" }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ +/obj/machinery/power/terminal{ dir = 1 }, -/obj/machinery/light/directional/north, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering/atmospherics) -"Xl" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = -12 - }, -/obj/effect/turf_decal/corner/opaque/pink{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/pink{ - dir = 1 +/obj/structure/sign/warning/electricshock{ + pixel_y = -20 }, -/obj/structure/sign/poster/official/cleanliness{ - pixel_x = -32 +/turf/open/floor/plating, +/area/ship/engineering/engine) +"ND" = ( +/obj/effect/turf_decal/industrial/warning/fulltile, +/obj/machinery/door/poddoor{ + dir = 1; + id = "harrierdoors"; + name = "Cargo Bay Blast Door" }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"Xo" = ( -/obj/docking_port/stationary{ - dwidth = 15; - width = 30; - height = 15 +/obj/machinery/power/shieldwallgen/atmos/roundstart{ + dir = 4; + id = "harrier_cargofield"; + locked = 1 }, -/turf/template_noop, -/area/template_noop) -"Xp" = ( -/obj/machinery/door/airlock/command{ - name = "Captain's Quarters"; - req_access_txt = "20"; - dir = 4 +/obj/structure/cable{ + icon_state = "0-1" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/turf/open/floor/plating, +/area/ship/storage/eva) +"NE" = ( +/obj/structure/filingcabinet/double{ + dir = 8; + pixel_x = 10 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 +/obj/structure/sign/poster/official/fruit_bowl{ + pixel_x = 32 }, -/obj/effect/turf_decal/borderfloor{ +/turf/open/floor/wood, +/area/ship/crew/law_office) +"NF" = ( +/obj/structure/toilet{ dir = 8 }, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) -"Xr" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk, -/obj/machinery/light_switch{ - dir = 8; - pixel_x = 24; - pixel_y = -5 +/obj/structure/window/reinforced{ + dir = 1 }, +/obj/structure/curtain, /turf/open/floor/plasteel/freezer, /area/ship/crew/toilet) -"Xv" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +"NP" = ( /obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/grimy, -/area/ship/crew/dorm) -"Xz" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk, -/obj/effect/turf_decal/corner/opaque/yellow{ - dir = 4 + icon_state = "4-8" }, -/obj/effect/turf_decal/corner/opaque/yellow, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"XE" = ( -/obj/structure/table/reinforced, -/obj/item/kitchen/knife, -/obj/item/kitchen/rollingpin, -/obj/item/reagent_containers/food/condiment/sugar, -/obj/item/reagent_containers/food/condiment/rice, -/obj/effect/turf_decal/corner/opaque/white{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/trimline/opaque/ntblue/line{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/white{ - dir = 8 +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"NQ" = ( +/obj/structure/rack, +/obj/item/circuitboard/aicore, +/obj/item/stack/sheet/rglass{ + amount = 5 }, -/turf/open/floor/plasteel, -/area/ship/crew/canteen) -"XK" = ( -/obj/machinery/atmospherics/components/binary/volume_pump{ +/obj/item/assembly/flash/handheld{ + pixel_x = 5 + }, +/obj/item/assembly/flash/handheld{ + pixel_x = -5 + }, +/obj/item/stock_parts/cell/high/plus, +/obj/item/borg/upgrade/ai, +/obj/item/aicard, +/obj/item/mmi/posibrain, +/obj/item/aiModule/reset/purge, +/turf/open/floor/circuit, +/area/ship/science/ai_chamber) +"NS" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/light/small/directional/north, +/obj/structure/closet/firecloset, +/obj/effect/turf_decal/industrial/outline/yellow, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"NT" = ( +/obj/machinery/power/smes/shuttle/precharged{ dir = 4 }, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "0-8" + }, +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"NX" = ( +/obj/effect/spawner/structure/window/shuttle, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"Ob" = ( +/obj/structure/railing, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 + dir = 4 }, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"XR" = ( -/obj/structure/disposalpipe/segment{ - dir = 2 +/obj/effect/turf_decal/siding/yellow, +/obj/effect/turf_decal/industrial/caution{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-2" +/turf/open/floor/plasteel, +/area/ship/engineering/engine) +"Oh" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/machinery/atmospherics/pipe/manifold/green/hidden/layer1{ +/obj/structure/disposalpipe/segment, +/turf/open/floor/carpet/executive, +/area/ship/crew/law_office) +"Om" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/crew) +"Os" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/dark/hidden/layer5, -/obj/structure/catwalk/over, -/turf/open/floor/plating, -/area/ship/science/ai_chamber) -"XU" = ( -/obj/structure/table/wood, -/obj/item/storage/fancy/cigarettes/cigars{ - pixel_y = 12 - }, -/obj/item/lighter{ - pixel_x = -6; - pixel_y = -3 +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 }, -/obj/machinery/light/small/directional/north, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/carpet/royalblue, -/area/ship/bridge) -"XX" = ( -/obj/effect/turf_decal/borderfloor{ +/obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/machinery/advanced_airlock_controller{ - pixel_x = -24 +/turf/open/floor/plasteel/mono, +/area/ship/hallway/port) +"Ot" = ( +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/layer2{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/hallway/central) -"Yc" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"Yh" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/structure/reagent_dispensers/watertank/high, -/turf/open/floor/plasteel, -/area/ship/crew/janitor) -"Yt" = ( /obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel, +/obj/structure/chair/handrail, +/turf/open/floor/plasteel/mono, /area/ship/hallway/central) -"Yw" = ( -/obj/structure/noticeboard{ - pixel_y = 32 +"Oy" = ( +/obj/effect/turf_decal/corner/opaque/white{ + dir = 4 }, -/obj/machinery/light_switch{ - dir = 8; - pixel_x = 24; - pixel_y = 9 +/obj/effect/turf_decal/corner/opaque/white{ + dir = 8 }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/plasteel, -/area/ship/crew/cryo) -"YD" = ( -/obj/structure/chair/office/light, -/obj/effect/landmark/start/medical_doctor, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"YF" = ( -/obj/structure/table, -/obj/item/paper_bin, -/obj/item/clipboard, -/obj/item/pen/red, -/obj/machinery/button/door{ - dir = 4; - id = "ospreycargo"; - name = "Shutter Control"; - pixel_x = -25; - pixel_y = 5 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 }, -/obj/machinery/light_switch{ - dir = 4; - pixel_x = -24; - pixel_y = -5 +/obj/structure/disposalpipe/segment{ + dir = 8 }, -/obj/effect/turf_decal/corner/opaque/brown{ +/turf/open/floor/plasteel, +/area/ship/crew/canteen) +"OA" = ( +/obj/structure/railing{ dir = 1 }, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 4 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 8 +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 }, -/obj/item/folder/yellow, -/obj/item/stamp/denied{ - pixel_x = 4 +/turf/open/floor/plasteel/stairs{ + dir = 8 }, -/obj/item/stamp{ - pixel_x = -5; - pixel_y = 9 +/area/ship/bridge) +"OB" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable{ + icon_state = "0-8" }, -/obj/item/pen/red, -/obj/item/holochip{ - credits = 4000 +/obj/structure/disposalpipe/segment{ + dir = 10 }, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/corner, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"OD" = ( +/obj/machinery/vending/snack/random, +/obj/machinery/light/directional/south, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/line, /turf/open/floor/plasteel, -/area/ship/cargo/office) -"YH" = ( -/obj/structure/table, -/obj/effect/turf_decal/siding/wood, -/obj/item/trash/plate, -/turf/open/floor/wood, -/area/ship/crew/canteen) -"YI" = ( -/obj/effect/spawner/structure/window/shuttle, -/obj/machinery/door/poddoor/shutters{ - id = "ospreywindows"; - dir = 4 +/area/ship/hallway/central) +"OK" = ( +/obj/structure/table/reinforced, +/obj/item/table_bell{ + pixel_x = -4; + pixel_y = 13 }, -/obj/machinery/door/firedoor/heavy, /turf/open/floor/plating, -/area/ship/crew/dorm) -"YJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-2" +/area/ship/crew/canteen) +"OO" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/effect/turf_decal/industrial/warning, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"YK" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 6 + dir = 10 }, -/obj/structure/cable{ - icon_state = "2-8" +/obj/structure/extinguisher_cabinet/directional/east, +/obj/structure/disposalpipe/segment{ + dir = 10 }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"YP" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 4 +/obj/item/radio/intercom/directional/north, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/port) +"OR" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 8 }, -/obj/effect/turf_decal/corner/opaque/mauve{ - dir = 1 +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"OW" = ( +/obj/effect/spawner/structure/window/shuttle, +/obj/machinery/atmospherics/pipe/simple/purple/visible{ + dir = 8 }, -/obj/effect/turf_decal/corner/opaque/mauve{ +/turf/open/floor/plating, +/area/ship/engineering/engine) +"OX" = ( +/obj/effect/landmark/start/security_officer, +/obj/structure/chair/office{ dir = 8 }, -/obj/structure/sign/poster/official/random{ - pixel_x = -32 +/turf/open/floor/plasteel/dark, +/area/ship/security) +"Pb" = ( +/obj/structure/dresser{ + dir = 4 }, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/plasteel/white, -/area/ship/science) -"YR" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 4; - name = "Operations" +/obj/machinery/light_switch{ + dir = 1; + pixel_x = -5; + pixel_y = -20 + }, +/obj/machinery/firealarm/directional/east, +/turf/open/floor/carpet/cyan, +/area/ship/crew) +"Pi" = ( +/obj/structure/sign/warning/vacuum/external, +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/hallway/port) +"Pj" = ( +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable{ + icon_state = "0-4" }, +/obj/machinery/firealarm/directional/west, /turf/open/floor/plasteel/dark, -/area/ship/bridge) -"Zj" = ( -/obj/structure/tank_dispenser/oxygen, -/obj/effect/turf_decal/borderfloor{ - dir = 8 +/area/ship/crew/cryo) +"Pk" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 - }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/hallway/central) -"Zo" = ( -/obj/effect/turf_decal/corner/opaque/yellow{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/yellow{ - dir = 1 - }, /obj/structure/cable{ - icon_state = "0-8" + icon_state = "4-8" }, -/obj/machinery/power/apc/auto_name/directional/north, -/turf/open/floor/plasteel/patterned/grid, -/area/ship/engineering) -"Zr" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/medical) -"Zs" = ( -/obj/effect/turf_decal/corner/opaque/brown{ - dir = 8 +/turf/open/floor/carpet/blue, +/area/ship/crew/dorm) +"Pm" = ( +/obj/effect/turf_decal/corner/opaque/white{ + dir = 4 }, -/obj/effect/turf_decal/corner/opaque/brown, -/obj/machinery/autolathe, -/obj/machinery/light/directional/south, -/turf/open/floor/plasteel, -/area/ship/cargo/office) -"Zu" = ( -/obj/effect/turf_decal/corner/opaque/brown, -/obj/effect/turf_decal/corner/opaque/brown{ +/obj/effect/turf_decal/corner/opaque/white{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/siding{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/ship/crew/canteen) +"Pn" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"Po" = ( +/obj/effect/turf_decal/ntspaceworks_big/three{ + dir = 8 + }, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering) +"Pq" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/machinery/suit_storage_unit/atmos, +/turf/open/floor/engine, +/area/ship/engineering/engine) +"Pr" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/light/small/directional/south, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering) +"Ps" = ( +/obj/structure/sink{ + dir = 1; + pixel_y = -10 + }, +/obj/structure/mirror{ + pixel_y = -25 + }, +/turf/open/floor/plasteel/freezer, +/area/ship/crew/toilet) +"Pu" = ( +/obj/machinery/disposal/deliveryChute{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/door/window/eastleft, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/plating, +/area/ship/cargo) +"Pv" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "harrier_packagesort" + }, +/obj/machinery/camera{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ship/cargo) +"Pw" = ( +/obj/structure/table, +/obj/effect/turf_decal/trimline/opaque/ntblue/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ship/crew/canteen) +"Py" = ( +/obj/structure/table/reinforced, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/recharger, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"Pz" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"PA" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ship/engineering) +"PC" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/machinery/light/small/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ship/crew) +"PF" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/hallway/port) +"PH" = ( +/obj/structure/table, +/obj/effect/turf_decal/trimline/opaque/ntblue/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ship/crew/canteen) +"PL" = ( +/obj/effect/turf_decal/industrial/warning, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/trimline/opaque/ntblue/arrow_cw{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned, +/area/ship/storage/eva) +"PQ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/nsorange/filled/corner, +/obj/structure/chair/handrail{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ship/storage/eva) +"PU" = ( +/obj/effect/turf_decal/corner/opaque/ntblue/full, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ship/hallway/central) +"PZ" = ( +/obj/effect/turf_decal/trimline/opaque/ntblue/arrow_cw{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned, +/area/ship/storage/eva) +"Qb" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/machinery/light/directional/east, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"Qf" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/corner{ + dir = 8 + }, +/obj/structure/chair/handrail{ + dir = 4 + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/port) +"Qm" = ( +/obj/machinery/atmospherics/components/binary/circulator{ + piping_layer = 5 + }, +/obj/structure/cable/yellow{ + icon_state = "5-8" + }, +/turf/open/floor/plating, +/area/ship/engineering/engine) +"Qn" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/ntblue/line, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"Qs" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/airlock/atmos{ + dir = 1; + name = "Atmospherics"; + req_access_txt = "10" + }, +/obj/machinery/atmospherics/pipe/simple/purple/visible, +/obj/machinery/atmospherics/pipe/simple/green/visible/layer1, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible/layer5, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/borderfloor{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/ship/engineering/engine) +"Qu" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/light/directional/west, +/turf/open/floor/plasteel/mono, +/area/ship/crew/canteen) +"Qx" = ( +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/line{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ship/hallway/port) +"Qz" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/starboard) +"QC" = ( +/obj/effect/turf_decal/trimline/opaque/nsorange/filled/arrow_ccw{ + dir = 4 + }, +/obj/structure/chair/handrail{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ship/storage/eva) +"QG" = ( +/obj/machinery/button/door{ + dir = 4; + id = "harrier_thrusters_port"; + name = "Blast Door Control"; + pixel_x = -25; + pixel_y = 6 + }, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"QH" = ( +/obj/effect/turf_decal/atmos/nitrogen, +/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/nitrogen_input{ + piping_layer = 1 + }, +/turf/open/floor/engine/n2, +/area/ship/engineering/atmospherics) +"QN" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/mono, +/area/ship/crew/canteen) +"QO" = ( +/turf/closed/wall/mineral/titanium/interior, +/area/ship/crew/law_office) +"QP" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/sink{ + pixel_y = 15 + }, +/obj/effect/turf_decal/trimline/opaque/vired/filled/line{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"QQ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/port) +"QR" = ( +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/computer/helm/viewscreen/directional/south, +/turf/open/floor/carpet/cyan, +/area/ship/medical) +"QV" = ( +/obj/structure/railing, +/obj/machinery/autolathe, +/turf/open/floor/plasteel, +/area/ship/cargo) +"QW" = ( +/obj/machinery/door/airlock/command{ + dir = 8; + name = "First Officer's Quarters"; + req_access_txt = "57" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/borderfloorblack{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/crew/dorm) +"QX" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 + }, +/turf/open/floor/plasteel/stairs{ + dir = 8 + }, +/area/ship/bridge) +"Ra" = ( +/obj/effect/turf_decal/trimline/transparent/white/filled/warning{ + dir = 8 + }, +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"Rb" = ( +/obj/structure/table/reinforced, +/obj/item/folder/blue, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/carpet/blue, +/area/ship/bridge) +"Rf" = ( +/obj/effect/spawner/structure/window/shuttle, +/obj/machinery/door/poddoor{ + dir = 1; + id = "harrierwindows"; + name = "Window Blast Door" + }, +/turf/open/floor/plating, +/area/ship/crew/law_office) +"Rg" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 1 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"Rn" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/crew/law_office) +"Ro" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/starboard) +"Rs" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/carpet/cyan, +/area/ship/medical) +"Rt" = ( +/obj/machinery/cryopod{ + dir = 8 + }, +/obj/machinery/airalarm/directional/south, +/turf/open/floor/circuit, +/area/ship/crew/cryo) +"Rv" = ( +/obj/effect/turf_decal/number/nine{ + dir = 8 + }, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering) +"Ry" = ( +/obj/structure/table/reinforced, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/item/radio/intercom/wideband/table{ + dir = 4; + pixel_x = 9; + pixel_y = 3 + }, +/obj/item/megaphone/command, +/turf/open/floor/plasteel/tech/grid, +/area/ship/bridge) +"RB" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/port) +"RJ" = ( +/turf/closed/wall/mineral/titanium/exterior, +/area/ship/crew/toilet) +"RR" = ( +/obj/effect/landmark/start/atmospheric_technician, +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ship/engineering) +"RT" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/machinery/light_switch{ + pixel_x = -5; + pixel_y = 20 + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/starboard) +"RU" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/machinery/firealarm/directional/south, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"RV" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"RX" = ( +/obj/machinery/atmospherics/components/trinary/filter/atmos/plasma{ + dir = 1; + piping_layer = 1 + }, +/obj/machinery/atmospherics/pipe/simple/orange/visible/layer5, +/obj/machinery/atmospherics/pipe/simple/purple/visible, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"Sb" = ( +/obj/structure/cable{ + icon_state = "5-10" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/machinery/firealarm/directional/north, +/obj/structure/chair/handrail, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/starboard) +"Sj" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/engine_waste{ + dir = 1; + piping_layer = 5 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"Sm" = ( +/obj/structure/cable{ + icon_state = "6-9" + }, +/obj/structure/cable{ + icon_state = "2-9" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 4; + sortType = 29; + tag = "Internal Affairs Office" + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/port) +"Sn" = ( +/obj/structure/sign/departments/engineering, +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/hallway/starboard) +"Sr" = ( +/obj/structure/railing{ + dir = 6; + layer = 3.1 + }, +/obj/machinery/atmospherics/components/binary/volume_pump{ + dir = 1; + name = "Environment to Recycling"; + piping_layer = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/siding/yellow{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/ship/engineering/engine) +"St" = ( +/obj/machinery/door/airlock/external, +/obj/machinery/atmospherics/pipe/layer_manifold, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/starboard) +"Sw" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/starboard) +"Sy" = ( +/obj/structure/railing/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/transparent/white/filled/warning{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"SB" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/ship/medical) +"SE" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ship/hallway/central) +"SF" = ( +/turf/open/floor/circuit, +/area/ship/science/ai_chamber) +"SM" = ( +/obj/effect/spawner/structure/window/shuttle, +/turf/open/floor/plating, +/area/ship/medical) +"SN" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 1 + }, +/obj/machinery/firealarm/directional/north, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ship/crew) +"SS" = ( +/obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/layer4{ + dir = 1 + }, +/obj/machinery/light/small/directional/east, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/hallway/starboard) +"SW" = ( +/obj/machinery/computer/atmos_alert{ + dir = 8; + icon_state = "computer-right" + }, +/obj/effect/turf_decal/siding/yellow, +/turf/open/floor/plasteel, +/area/ship/engineering) +"SZ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ship/crew/law_office) +"Ta" = ( +/obj/structure/bookcase, +/obj/machinery/light/small/directional/south, +/turf/open/floor/wood, +/area/ship/crew/law_office) +"Tf" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/machinery/airalarm/directional/south, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"Th" = ( +/obj/effect/turf_decal/trimline/transparent/white/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/transparent/white/filled/warning{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = "harriereva" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ship/storage/eva) +"Tj" = ( +/obj/machinery/firealarm/directional/east, +/turf/open/floor/plasteel/mono, +/area/ship/crew/canteen) +"Tm" = ( +/obj/structure/chair/comfy/blue/corpo/directional/east, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/structure/sign/poster/official/random{ + pixel_y = 32 + }, +/turf/open/floor/carpet/royalblue, +/area/ship/crew/dorm/dormtwo) +"Tr" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"Tu" = ( +/obj/structure/crate_shelf, +/obj/structure/closet/crate, +/obj/item/stack/sheet/metal/five{ + pixel_x = -3 + }, +/obj/item/stack/sheet/glass/five{ + pixel_x = 2; + pixel_y = 5 + }, +/turf/open/floor/plasteel/patterned, +/area/ship/cargo) +"Tv" = ( +/turf/open/floor/plasteel, +/area/ship/crew/canteen) +"Tx" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"Tz" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/machinery/light/small/directional/north, +/turf/open/floor/carpet/blue, +/area/ship/crew/dorm) +"TC" = ( +/obj/machinery/atmospherics/components/unary/passive_vent{ + dir = 4; + piping_layer = 1 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) +"TD" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/item/radio/intercom/directional/west, +/turf/open/floor/plasteel/dark, +/area/ship/bridge) +"TI" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/crew/janitor) +"TJ" = ( +/obj/structure/chair/sofa/blue/corpo/right, +/turf/open/floor/plasteel, +/area/ship/hallway/central) +"TM" = ( +/obj/machinery/shower{ + pixel_y = 18 + }, +/obj/effect/turf_decal/steeldecal/steel_decals10{ + dir = 1 + }, +/obj/structure/closet/emcloset/wall/directional/west, +/turf/open/floor/noslip, +/area/ship/storage/eva) +"TO" = ( +/obj/machinery/computer/helm{ + dir = 8; + icon_state = "computer-right" + }, +/obj/machinery/button/door{ + dir = 1; + id = "harrierwindows"; + name = "External Windows"; + pixel_x = -1; + pixel_y = -20 + }, +/obj/machinery/button/door{ + dir = 1; + id = "harrierbridge"; + name = "Bridge Lockdown"; + pixel_x = 10; + pixel_y = -20 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel/tech/grid, +/area/ship/bridge) +"TT" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/borderfloor{ + dir = 1 + }, +/obj/machinery/light/small/directional/west, +/obj/structure/chair/handrail{ + dir = 4 + }, +/turf/open/floor/plasteel/tech/techmaint, +/area/ship/storage/eva) +"TX" = ( +/obj/structure/filingcabinet/double{ + pixel_x = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/camera, +/turf/open/floor/carpet/blue, +/area/ship/bridge) +"TZ" = ( +/obj/effect/spawner/structure/window/shuttle, +/obj/machinery/door/firedoor/window, +/obj/machinery/door/poddoor{ + dir = 4; + id = "harrierbridge"; + name = "Window Blast Door" + }, +/turf/open/floor/plating, +/area/ship/bridge) +"Ub" = ( +/obj/effect/turf_decal/trimline/transparent/white/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/transparent/white/filled/warning, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/machinery/door/firedoor/border_only, +/obj/structure/cable{ + icon_state = "6-9" + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/port) +"Ud" = ( +/obj/effect/spawner/structure/window/shuttle, +/obj/machinery/atmospherics/pipe/simple/brown/visible/layer1, +/turf/open/floor/plating, +/area/ship/engineering/atmospherics) +"Uf" = ( +/obj/structure/window/reinforced, +/obj/machinery/shower{ + pixel_y = 18 + }, +/obj/structure/curtain, +/obj/effect/turf_decal/steeldecal/steel_decals10{ + dir = 9 + }, +/turf/open/floor/plasteel/freezer, +/area/ship/crew/toilet) +"Ug" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/turf/open/floor/plasteel/mono, +/area/ship/storage/eva) +"Uj" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/incinerator_input{ + dir = 4 + }, +/turf/open/floor/engine/vacuum, +/area/ship/engineering/engine) +"Um" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood, +/area/ship/crew) +"Up" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/airlock/glass{ + dir = 4; + name = "Crew Quarters"; + req_ship_access = 0 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/effect/turf_decal/borderfloor{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ship/crew/canteen) +"Uq" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/ntblue/arrow_cw{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/nsorange/line{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned, +/area/ship/storage/eva) +"Ur" = ( +/obj/structure/chair, +/obj/effect/landmark/start/assistant, +/obj/effect/turf_decal/trimline/opaque/ntblue/line{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/ship/crew/canteen) +"Us" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + icon_state = "4-9" + }, +/obj/effect/turf_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 1 + }, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/engine) +"Ut" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"Uw" = ( +/obj/structure/cable{ + icon_state = "6-9" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/obj/machinery/firealarm/directional/south, +/obj/structure/chair/handrail{ + dir = 1 + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/port) +"Ux" = ( +/obj/machinery/atmospherics/components/binary/circulator/cold{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "6-8" + }, +/turf/open/floor/plating, +/area/ship/engineering/engine) +"UD" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/effect/turf_decal/trimline/transparent/white/filled/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/purple/hidden{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 9 + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_x = -5; + pixel_y = -20 + }, +/obj/effect/turf_decal/siding/yellow{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/ship/engineering/engine) +"UF" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/structure/chair/handrail, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"UI" = ( +/obj/structure/table/wood/reinforced, +/obj/item/flashlight/lamp/green, +/turf/open/floor/carpet/executive, +/area/ship/crew/law_office) +"UJ" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/brown/visible/layer1{ + dir = 9 + }, +/obj/machinery/atmospherics/components/binary/volume_pump{ + dir = 8; + name = "Engine Waste to Environment"; + piping_layer = 5 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"UN" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/structure/disposalpipe/sorting/mail/flip{ + dir = 2; + sortType = 26; + tag = "Dormitories" + }, +/turf/open/floor/wood, +/area/ship/crew) +"US" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/engineering) +"UT" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"UV" = ( +/obj/structure/window/reinforced, +/obj/machinery/shower{ + pixel_y = 18 + }, +/obj/structure/curtain, +/obj/effect/turf_decal/steeldecal/steel_decals10{ + dir = 10 + }, +/turf/open/floor/plasteel/freezer, +/area/ship/crew/toilet) +"UW" = ( +/turf/closed/wall/mineral/titanium/exterior, +/area/ship/medical) +"UZ" = ( +/obj/machinery/atmospherics/pipe/simple/purple/visible{ + dir = 9 + }, +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ship/engineering) +"Vc" = ( +/obj/structure/tank_dispenser/oxygen, +/obj/effect/turf_decal/box, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/plasteel/patterned/grid, +/area/ship/storage/eva) +"Vi" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on/layer2, +/turf/open/floor/engine/air, +/area/ship/engineering/atmospherics) +"Vp" = ( +/obj/structure/table/wood, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/obj/structure/sign/poster/official/random{ + pixel_y = -32 + }, +/turf/open/floor/carpet/blue, +/area/ship/crew/dorm) +"Vr" = ( +/obj/effect/turf_decal/trimline/transparent/white/filled/warning{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/transparent/white/filled/warning{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = "harriereva" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ship/storage/eva) +"Vs" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "harrier_garbage" + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/plating, +/area/ship/crew/janitor) +"Vv" = ( +/turf/closed/wall/mineral/titanium/interior, +/area/ship/hallway/port) +"VA" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/carpet/blue, +/area/ship/bridge) +"VE" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/turf/open/floor/plasteel/stairs, +/area/ship/storage/eva) +"VJ" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/borderfloor, +/obj/machinery/door/airlock/public/glass{ + dir = 1; + name = "Canteen" + }, +/turf/open/floor/plasteel, +/area/ship/crew/canteen) +"VO" = ( +/obj/structure/closet/secure_closet{ + icon_state = "med"; + name = "medicine locker"; + req_access = list(5) + }, +/obj/item/storage/box/gloves, +/obj/item/storage/box/masks, +/obj/item/storage/box/syringes, +/obj/item/storage/firstaid/fire{ + pixel_x = -4; + pixel_y = 5 + }, +/obj/item/storage/firstaid/regular, +/obj/machinery/light/directional/east, +/turf/open/floor/plasteel/white, +/area/ship/medical) +"VS" = ( +/obj/machinery/shower{ + dir = 4; + pixel_y = 10 + }, +/obj/structure/curtain, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/effect/turf_decal/steeldecal/steel_decals10{ + dir = 6 + }, +/turf/open/floor/plasteel/freezer, +/area/ship/bridge) +"VY" = ( +/obj/structure/table/wood/reinforced, +/obj/item/paper_bin, +/obj/item/pen/fountain, +/obj/machinery/light_switch{ + dir = 1; + pixel_x = -5; + pixel_y = -20 + }, +/obj/machinery/camera{ + dir = 10 + }, +/obj/item/stamp/centcom, +/turf/open/floor/carpet/executive, +/area/ship/crew/law_office) +"VZ" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_x = -6 + }, +/obj/item/stamp/head_of_personnel{ + name = "first officer's rubber stamp"; + pixel_x = 6 + }, +/obj/item/pen/fourcolor{ + pixel_x = -6 + }, +/turf/open/floor/carpet/blue, +/area/ship/bridge) +"Wa" = ( +/obj/docking_port/stationary{ + dir = 2; + dwidth = 15; + height = 15; + width = 30 + }, +/turf/template_noop, +/area/template_noop) +"Wd" = ( +/obj/machinery/computer/operating, +/turf/open/floor/plasteel/showroomfloor, +/area/ship/medical) +"We" = ( +/obj/machinery/vending/cigarette, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/line{ + dir = 1 + }, +/obj/machinery/camera, +/turf/open/floor/plasteel, +/area/ship/hallway/central) +"Wj" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/starboard) +"Wk" = ( +/obj/machinery/door/window/brigdoor/security/cell/eastleft{ + id = "Cell 1" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/opaque/vired/filled/warning{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"Wm" = ( +/obj/machinery/vending/coffee, +/obj/machinery/light/directional/north, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/ship/hallway/central) +"Wp" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/disposalpipe/segment, +/turf/open/floor/carpet/executive, +/area/ship/crew/law_office) +"Wt" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/mono, +/area/ship/crew/canteen) +"Wv" = ( +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ship/hallway/central) +"Wx" = ( +/obj/machinery/atmospherics/components/unary/shuttle/heater{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/engineering) +"WH" = ( +/obj/structure/cable{ + icon_state = "6-9" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/port) +"WL" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/blue/filled/end{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/ship/medical) +"WN" = ( +/obj/machinery/atmospherics/pipe/simple/brown/visible/layer1{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"WP" = ( +/obj/effect/turf_decal/industrial/warning{ + dir = 8 + }, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ship/cargo) +"WR" = ( +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ship/storage/eva) +"WT" = ( +/obj/structure/table/wood, +/obj/item/toy/cards/deck/kotahi, +/turf/open/floor/wood, +/area/ship/crew) +"WV" = ( +/obj/effect/spawner/structure/window/shuttle, +/obj/machinery/atmospherics/pipe/simple/purple/visible, +/turf/open/floor/plating, +/area/ship/engineering/engine) +"Xf" = ( +/obj/structure/chair, +/obj/effect/turf_decal/trimline/opaque/ntblue/line{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/ship/crew/canteen) +"Xg" = ( +/obj/machinery/door/airlock/external/glass, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/borderfloor{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/hallway/starboard) +"Xj" = ( +/obj/structure/cable{ + icon_state = "5-10" + }, +/obj/structure/cable{ + icon_state = "4-10" + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/starboard) +"Xl" = ( +/obj/effect/turf_decal/atmos/plasma, +/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/toxin_input{ + dir = 8; + piping_layer = 1 + }, +/turf/open/floor/engine/plasma, +/area/ship/engineering/atmospherics) +"Xo" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/opaque/nsorange/line{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned/cargo_one, +/area/ship/cargo) +"Xw" = ( +/obj/effect/turf_decal/industrial/warning/fulltile, +/obj/machinery/door/poddoor{ + dir = 4; + id = "harrier_disposals"; + name = "Disposals Blast Door" + }, +/obj/machinery/power/shieldwallgen/atmos/roundstart{ + dir = 8; + id = "harrier_disposalfield"; + locked = 1 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating, +/area/ship/crew/janitor) +"Xz" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/firealarm/directional/west, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"XB" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/corner{ + dir = 1 + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/central) +"XF" = ( +/obj/effect/spawner/structure/window/shuttle, +/obj/machinery/door/firedoor/window, +/obj/machinery/door/poddoor{ + dir = 1; + id = "harrierbridge"; + name = "Window Blast Door" + }, +/obj/structure/cable{ + icon_state = "0-1" + }, +/turf/open/floor/plating, +/area/ship/bridge) +"XH" = ( +/obj/structure/chair/sofa/blue/corpo/right/directional/west, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/turf/open/floor/wood, +/area/ship/crew) +"XI" = ( +/obj/machinery/suit_storage_unit/standard_unit, +/obj/effect/turf_decal/siding/thinplating, +/turf/open/floor/plasteel/tech/grid, +/area/ship/storage/eva) +"XK" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/mono, +/area/ship/storage/eva) +"XL" = ( +/obj/effect/turf_decal/corner/opaque/white{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/ship/crew/canteen) +"XP" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/purple/visible, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/orange/visible/layer5{ + dir = 9 + }, +/obj/structure/catwalk/over/plated_catwalk, +/obj/machinery/light/directional/east, +/obj/structure/chair/handrail{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ship/engineering/engine) +"XQ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 4 + }, +/turf/open/floor/plasteel/mono, +/area/ship/crew/canteen) +"XW" = ( +/turf/open/floor/plasteel/stairs, +/area/ship/storage/eva) +"XY" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/brown/visible/layer1{ + dir = 6 + }, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"Yb" = ( +/obj/effect/spawner/structure/window/shuttle, +/obj/machinery/door/firedoor/window, +/obj/machinery/door/poddoor{ + dir = 4; + id = "harrierbridge"; + name = "Window Blast Door" + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating, +/area/ship/bridge) +"Yc" = ( +/obj/machinery/firealarm/directional/east, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ship/crew/law_office) +"Yi" = ( +/obj/item/radio/intercom/directional/east, +/obj/effect/turf_decal/trimline/opaque/ntblue/arrow_cw{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/nsorange/filled/corner, +/turf/open/floor/plasteel/patterned, +/area/ship/storage/eva) +"Yk" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/wood, +/area/ship/crew) +"Yp" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/engineering/atmospherics) +"Yr" = ( +/obj/effect/spawner/structure/window/shuttle, +/obj/machinery/door/poddoor{ + dir = 4; + id = "harrierwindows"; + name = "Window Blast Door" + }, +/turf/open/floor/plating, +/area/ship/hallway/port) +"Yw" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/opaque/vired/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/line{ + dir = 4 + }, +/obj/machinery/camera{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/ship/hallway/starboard) +"Yy" = ( +/obj/structure/chair/office, +/obj/effect/landmark/start/cargo_technician, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/ship/cargo) +"Yz" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/structure/closet/emcloset/wall/directional/north, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/starboard) +"YB" = ( +/obj/structure/closet/secure_closet/bar{ + name = "internal affairs agent's locker"; + populate = 0; + req_access = list(38) + }, +/obj/machinery/airalarm/directional/north, +/obj/item/clothing/shoes/laceup, +/obj/item/clothing/under/nanotrasen/affairs, +/obj/item/clothing/suit/nanotrasen/suitjacket, +/obj/item/clothing/neck/tie/black, +/obj/item/clothing/neck/tie/black, +/obj/item/clothing/neck/tie/black, +/obj/item/clothing/neck/tie/black, +/obj/item/clothing/neck/tie/black, +/obj/item/clothing/neck/tie/black, +/obj/item/clothing/neck/tie/black, +/obj/item/storage/backpack/satchel/leather, +/obj/item/clothing/glasses/sunglasses, +/turf/open/floor/wood, +/area/ship/crew/law_office) +"YC" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/trimline/opaque/blue/filled/end{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/ship/medical) +"YM" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/mono, +/area/ship/crew/canteen) +"YP" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/light_switch{ + pixel_x = -5; + pixel_y = 20 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/blue/line{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/ship/medical) +"YT" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/ship/engineering) +"YV" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_x = 8 + }, +/obj/item/folder/red{ + pixel_x = 8 + }, +/obj/machinery/recharger{ + pixel_x = -6 + }, +/obj/effect/turf_decal/trimline/opaque/vired/filled/line{ + dir = 8 + }, +/obj/machinery/door/window/westleft{ + req_access_txt = "2" + }, +/turf/open/floor/plasteel/dark, +/area/ship/security) +"YW" = ( +/obj/effect/turf_decal/corner/opaque/white{ dir = 4 }, +/obj/effect/turf_decal/corner/opaque/white{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, -/area/ship/cargo) -"ZC" = ( +/area/ship/crew/canteen) +"YX" = ( /obj/structure/cable{ - icon_state = "0-4" + icon_state = "1-8" }, -/obj/machinery/light/directional/south, -/obj/machinery/power/apc/auto_name/directional/west, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"ZJ" = ( -/turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/hallway/central) -"ZK" = ( -/obj/structure/window/reinforced{ - dir = 1 +/obj/item/radio/intercom/directional/south, +/turf/open/floor/plasteel/mono, +/area/ship/crew/canteen) +"YZ" = ( +/obj/effect/turf_decal/siding/wideplating/dark{ + dir = 4 }, -/obj/structure/table, -/obj/item/radio/intercom/directional/west, -/turf/open/floor/plasteel/patterned/grid, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) +"Za" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/open/floor/plasteel, /area/ship/cargo) -"ZO" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ +"Zb" = ( +/turf/open/floor/plasteel, +/area/ship/crew) +"Ze" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/oxygen_output{ dir = 8 }, -/turf/open/floor/circuit, -/area/ship/science/ai_chamber) -"ZR" = ( -/obj/machinery/porta_turret/ai, -/turf/open/floor/circuit, -/area/ship/science/ai_chamber) -"ZW" = ( -/obj/structure/disposalpipe/junction{ +/turf/open/floor/engine/o2, +/area/ship/engineering/atmospherics) +"Zf" = ( +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/security) +"Zg" = ( +/obj/structure/filingcabinet/double{ + dir = 1; + pixel_x = 4 + }, +/obj/structure/window/reinforced{ dir = 8 }, -/turf/open/floor/plasteel, -/area/ship/cargo/office) -"ZX" = ( -/obj/machinery/atmospherics/pipe/simple/dark/hidden/layer5{ +/obj/machinery/camera{ + dir = 1 + }, +/turf/open/floor/carpet/royalblue, +/area/ship/bridge) +"Zi" = ( +/obj/structure/railing{ dir = 4 }, -/obj/machinery/door/poddoor{ - id = "osprey_thruster_starboard"; - name = "Blast Door"; +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/purple/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 10 + }, +/obj/effect/turf_decal/siding/yellow{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/stairs, +/area/ship/engineering/engine) +"Zk" = ( +/obj/structure/closet/secure_closet{ + icon_state = "cargo"; + name = "\proper cargo technician's locker"; + req_access_txt = "31" + }, +/obj/effect/turf_decal/industrial/outline/yellow, +/obj/machinery/airalarm/directional/east, +/obj/machinery/firealarm/directional/south, +/obj/item/clothing/shoes/sneakers/black, +/obj/item/clothing/under/nanotrasen/supply, +/obj/item/clothing/head/nanotrasen/cap/supply, +/obj/item/clothing/gloves/fingerless, +/obj/item/storage/backpack/messenger, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) +"Zm" = ( +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/corner{ dir = 4 }, +/turf/open/floor/plasteel, +/area/ship/hallway/port) +"Zv" = ( /obj/effect/spawner/structure/window/shuttle, -/obj/machinery/door/firedoor/heavy, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, /turf/open/floor/plating, -/area/ship/science/ai_chamber) -"ZY" = ( -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/machinery/rnd/production/protolathe/department/science, +/area/ship/engineering/atmospherics) +"Zw" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/simple/purple/visible{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/catwalk/over/plated_catwalk, +/obj/machinery/camera{ + dir = 8 + }, +/obj/structure/chair/handrail{ + dir = 8 + }, +/turf/open/floor/plating, +/area/ship/engineering/engine) +"ZJ" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/item/radio/intercom/directional/north, +/obj/effect/turf_decal/trimline/opaque/blue/line{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/ship/medical) +"ZL" = ( +/obj/effect/turf_decal/trimline/opaque/blue/filled/end{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/ship/medical) +"ZN" = ( +/obj/structure/chair/comfy/blue/corpo/directional/south, +/obj/effect/turf_decal/trimline/opaque/ntblue/line{ + dir = 1 + }, /turf/open/floor/plasteel/dark, -/area/ship/science) -"ZZ" = ( -/obj/structure/sign/nanotrasen, +/area/ship/bridge) +"ZQ" = ( +/obj/structure/sign/number/random{ + color = "Black" + }, /turf/closed/wall/mineral/titanium/nodiagonal, -/area/ship/crew/cryo) +/area/ship/cargo) +"ZS" = ( +/obj/effect/spawner/structure/window/shuttle, +/obj/machinery/door/firedoor/window, +/turf/open/floor/plating, +/area/ship/crew/canteen) +"ZU" = ( +/obj/machinery/atmospherics/components/trinary/filter/atmos/n2{ + dir = 8; + piping_layer = 1 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/patterned, +/area/ship/engineering/atmospherics) +"ZX" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable{ + icon_state = "0-1" + }, +/obj/effect/turf_decal/trimline/opaque/ntblue/filled/corner{ + dir = 1 + }, +/turf/open/floor/plasteel/mono, +/area/ship/hallway/port) (1,1,1) = {" -li -WU -pD -pD -rG -rG -pD -pD -WU -li -li -li -li -li -li -li -li -li -li -li -li -li -li -li -yj -Hk -Hk -wT -wT -Hk -Hk -yj -li +MZ +MZ +MZ +MZ +MZ +Yp +CV +CV +Yp +MZ +MZ +MZ +MZ +ok +AE +AE +AE +AE +Ci +AE +AE +AE +AE +ok +MZ +MZ +MZ +MZ +US +GG +GG +US +MZ +MZ +MZ +MZ +MZ "} (2,1,1) = {" -li -WU -Tn -VA -qX -Tr -Tn -VA -WU -li -li -li -li -li -li -li -li -li -li -li -li -li -li -li -yj -wo -wQ -kB -hU -wo -wQ -yj -li +MZ +Yp +Kz +Yp +Kz +Yp +HW +HW +Yp +MZ +MZ +MZ +MZ +AE +Pq +Io +LK +EF +tQ +Uj +AE +AE +hE +AE +MZ +MZ +MZ +MZ +US +Wx +Wx +US +MM +US +MM +US +MZ "} (3,1,1) = {" -li -WU -eE -eE -EW -LB -eE -eE -WU -li -li -li -li -li -li -li -li -li -li -li -li -li -li -li -yj -kG -kG -cJ -cJ -kG -kG -yj -li +MZ +Yp +NT +rh +NT +Yp +rf +cy +Yp +Mv +zs +Sj +Mv +AE +AE +yS +AE +qq +Jk +OW +AE +AE +AE +AE +Mv +Mv +TC +Mv +US +JK +UZ +US +cg +Fp +cg +US +MZ "} (4,1,1) = {" -li -WU -pP -ap -KC -Gr -oi -mZ -WU -li -li -li -li -li -li -li -li -li -li -li -li -li -li -li -yj -Iv -Bl -Tz -ra -Ri -dS -yj -li +MZ +Yp +bi +OR +bi +QG +jf +uW +Yp +Yp +zc +Yp +Yp +AE +uv +Ob +mC +sF +Bm +uk +Dg +Eh +KO +AE +aE +US +LZ +US +US +Nr +Rv +JB +kR +PA +kR +US +MZ "} (5,1,1) = {" -li -WU -NT -Yc -RY -SD -BN -ci -WU -MM -li -li -li -li -li -li -li -li -li -li -li -li -li -IY -yj -pT -pH -kb -Jl -kD -SX -Tb -li +MZ +Yp +NS +nf +XY +cS +vM +Bs +gX +lQ +UJ +Xz +Nt +Qs +zI +Sr +ys +Ij +dO +MX +yz +Lh +yx +HL +uD +uT +Mo +fb +Mx +Nn +wq +pY +vY +Ni +es +US +MZ "} (6,1,1) = {" -li -WU -qc -PS -Fj -QD -vY -yg -Tg -WU -ao -kP -uz -VV -VV -VV -VV -VV -VV -VV -ao -kP -uz -yj -go -pz -Gp -wV -Gp -Ko -tF -JN -li +MZ +Yp +Yp +Yp +zm +WN +JU +fH +HD +zy +CP +RX +pr +WV +Lf +Zi +gf +Qm +my +Ux +Hj +yd +UD +AE +GH +US +DQ +bL +ym +bR +Ez +Po +sc +He +ea +US +MZ "} (7,1,1) = {" -li -WU -qa -gX -hr -vx -XK -jn -MT -VV -Aj -VV -HE -VV -kU -VV -yP -VV -kU -VV -pe -eZ -ZX -VV -RB -qp -HV -GX -xp -cT -Of -xP -li +MZ +Yp +bk +NX +KZ +kq +Ds +Yp +Gi +Zv +Yp +Gi +cF +AE +jM +bK +kH +XP +No +Zw +Us +qB +Nz +AE +Xw +TI +TI +TI +TI +TI +eG +hH +hH +hH +US +US +MZ "} (8,1,1) = {" -li -WU -RE -JO -uh -lb -vj -ip -YJ -Fe -RO -rf -Ma -Gz -wY -LW -Ap -BL -Tt -do -XR -ll -wF -RD -Nq -MJ -Uo -sq -sw -cp -Uc -yj -li -"} -(9,1,1) = {" -li -WU -Hf -gX -oQ -NW -rN -Ro -Ro -Ro -Ro -Ro -Ro -VV -bw -hd -ZR -ZO -dr -VV -SB -kQ -kQ -kQ -kQ -kQ -oO -HK -hm -HK -Qb -yj -li +MZ +Yp +Vi +dX +EQ +Ev +ex +Yp +Eq +Ze +Yp +Xl +tq +AE +aX +ru +fh +AE +jU +AE +mk +ru +EJ +AE +nz +mJ +mJ +Vs +iT +TI +FD +fd +ez +xa +Kc +US +MZ +"} +(9,1,1) = {" +MZ +Yp +Yp +Yp +oX +fu +Tr +cp +cp +cp +cp +cp +KS +KS +KS +hY +hY +hY +hY +hY +hY +hY +IE +IE +IE +TI +Lb +Ah +bd +TI +Ms +Ga +RR +vs +Kj +US +MZ "} (10,1,1) = {" -li -WU -Mu -Ix -WK -mY -Qr -Ro -BU -Ro -BU -Ro -Vx -VV -ui -cI -cI -yC -xE -VV -hj -vD -Jw -OB -LX -kQ -Ka -lV -Mo -eX -fU -yj -li +MZ +Yp +QH +Ud +ZU +fu +Kx +cp +Pj +CW +CW +cp +MT +hI +vd +hY +wM +hY +gn +hY +qJ +hY +ol +oU +HI +TI +hy +Dk +Is +TI +lA +YT +Ki +xv +Pr +US +MZ "} (11,1,1) = {" -li -WU -Qv -lz -Em -dm -BK -Ro -jc -zl -Hn -oK -Hn -VV -cD -VV -lr -VV -LE -VV -ki -Yh -je -ut -vi -kQ -uq -NP -yj -pJ -gC -yj -li +MZ +Yp +wY +NX +IT +kM +RU +cp +DD +ms +Dl +cp +Tz +ln +Vp +hY +eA +MP +Da +uo +SF +hY +Tm +sD +Ha +TI +vI +hL +ES +TI +gU +bg +hQ +SW +mO +US +MZ "} (12,1,1) = {" -li -WU -Zo -LF -LK -KI -mf -Ro -to -pq -PW -VS -gT -gT -gT -gT -gT -gT -gT -gT -gT -FF -uI -wb -Sa -kQ -Xi -lM -yj -oo -oo -yj -li +MZ +Yp +Yp +Yp +Yp +Yp +jl +cp +xl +ud +Rt +cp +fZ +Pk +gm +hY +FK +rk +jI +Mn +NQ +hY +Cn +sy +sl +TI +lX +Ax +mc +TI +jm +US +US +US +US +US +MZ "} (13,1,1) = {" -li -WU -bH -Xz -OA -Jc -eT -Ro -Xr -dx -Hn -nf -gT -eD -pU -Ws -gT -VF -Pa -dP -gT -fn -xj -uJ -Ou -kQ -mo -RI -yj -ik -lA -yj -li +MZ +aL +cN +de +dK +cf +rR +cp +kJ +cp +cp +cp +KS +QW +KS +hY +hY +hY +DC +hY +hY +hY +IE +EX +IE +TI +TI +TI +dI +TI +KT +Sn +iA +LJ +wS +IS +MZ "} (14,1,1) = {" -li -WU -WU -WU -WU -WU -Ag -MB -Ro -CL -FV -Ro -gT -HD -lv -Wn -gT -XU -pp -ht -gT -kQ -OV -kf -kQ -JX -Iz -yj -yj -yj -yj -yj -li +aA +cm +da +dA +dL +ha +bW +DH +mN +Gz +dr +lH +BF +Rg +Jx +bv +ow +jx +IV +TD +cE +cz +Jx +fO +Gz +lg +VS +Bx +FQ +Lv +Jl +Xg +fr +SS +uf +St +Wa "} (15,1,1) = {" -li -nK -GU -XX -Tw -Mc -Hi -si -gc -TH -kZ -ZC -gT -gT -zL -gT -gT -gT -Xp -gT -gT -la -eB -zF -OW -sZ -Vs -Mc -jC -gJ -Zj -FI -li +MZ +PF +PF +PF +PF +Pi +og +JC +rQ +Gz +ox +Dy +Dy +Sy +Aj +Pz +dB +UT +Fi +tG +Tx +aq +fw +mm +hV +ue +yY +Gz +RT +qp +uw +JQ +fI +fI +fI +fI +MZ "} (16,1,1) = {" -Xo -uQ -mB -Tq -rJ -bl -yQ -sJ -sJ -gy -yE -xK -tY -ow -hl -KL -SK -ac -ej -ce -wj -Ey -wC -VR -QI -Ii -yw -ti -hg -oN -ou -uQ -Wq +MZ +ig +gH +pI +co +ig +QO +Hh +iI +uZ +st +Gz +Gz +TX +Me +ss +FP +wL +JT +Lz +BS +Bb +sh +Zg +Gz +Gz +Gz +Gz +Yz +Xj +Cv +Zf +oi +ew +AS +Zf +MZ "} (17,1,1) = {" -li -BH -IW -IW -IW -IW -IW -IW -Qt -Pe -WS -xT -gT -Di -Fk -UL -uA -UL -Tx -nx -gT -aY -hy -Np -rS -gV -gV -gV -gV -gV -gV -ZZ -li +MZ +ig +YB +Rn +oT +Ta +ig +tZ +Sm +Qf +iD +ZX +gE +Rb +VA +bn +FP +ZN +IK +qf +eJ +FO +iG +zY +XF +Jd +nZ +zV +av +bH +lD +Nq +QP +Wk +dv +Zf +MZ "} (18,1,1) = {" -li -IW -iO -KD -fb -RU -iO -IW -tL -Pe -Ib -hL -gT -wn -UL -YR -UL -UT -UL -Ry -gT -zN -RW -Np -qv -gV -os -ea -yI -Su -dw -gV -li +MZ +Rf +tm +Oh +ko +Wp +jN +Jw +gN +uh +uC +QQ +gE +Fx +VZ +OA +cY +JP +Hw +iS +QX +ta +dz +EY +XF +cl +Sw +yc +hx +sE +jA +Kr +LW +Fo +Ig +tI +MZ "} (19,1,1) = {" -li -IW -fc -pv -iv -nl -oE -IW -xF -Pe -RW -mI -DU -tc -uC -tr -xq -ud -pm -Pg -DU -iA -Yt -qs -bA -gV -mj -PJ -UZ -uk -SU -gV -li +MZ +Rf +JX +Db +gD +Db +pH +MK +Qx +Zm +Hx +iI +KC +Gz +aO +xg +vL +qX +pp +Mf +wz +Ra +ky +Gz +KC +Ro +ju +wD +ls +Yw +Zf +zr +Ky +Nc +tT +tI +MZ "} (20,1,1) = {" -li -IW -rz -SO -Xv -Nm -GN -Nw -zi -ep -My -Ai -sG -tx -tx -tx -gT -tx -tx -tx -sG -CC -WE -rO -VL -uM -pk -tp -yl -gB -sI -gV -li +MZ +ig +uy +UI +KG +VY +ig +Yr +Yr +Vv +wN +WH +wN +gE +Py +uz +HG +YZ +FS +YZ +Np +Qb +AW +XF +ba +qh +ba +cB +LD +LD +Zf +ei +YV +ec +iQ +Zf +MZ "} (21,1,1) = {" -li -IW -Oh -hv -LV -mV -cg -IW -bh -Cn -mg -Cn -ak -ak -ak -ak -Ni -ak -ak -ak -ak -in -RW -Cn -rX -gV -Yw -FL -FL -FL -EO -gV -li +MZ +Rf +JX +eY +nQ +eg +ig +MZ +MZ +PF +Nk +Os +Uw +Gz +Yb +Gz +Ao +la +Ry +zX +TO +Gz +TZ +Gz +Sb +Wj +Ih +fI +MZ +MZ +Zf +Ho +OX +Nc +tT +tI +MZ "} (22,1,1) = {" -li -Rq -IW -FZ -xN -ET -IW -IW -ZJ -Es -cY -Nd -Nd -Si -Nd -La -ie -Nd -Lt -Ho -xY -eG -Qy -Ge -ZJ -gV -gV -bs -Fr -Wb -gV -PP -li +MZ +Rf +Yc +sU +SZ +fc +ig +MZ +MZ +rT +Vv +iI +wN +Ub +qx +KC +Yb +Yb +Yb +Yb +DM +KC +qx +yI +ba +Qz +cB +dV +MZ +MZ +Zf +pF +Pn +uc +CK +tI +MZ "} (23,1,1) = {" -li -li -Rq -YI -YI -YI -Rq -li -sG -su -ZJ -AB -zJ -JW -ND -Pq -bb -dJ -Cp -TR -zU -uN -ZJ -kV -sG -li -PP -EN -EN -EN -PP -li -li +MZ +ng +ig +NE +cb +ig +ng +MZ +MZ +MZ +PF +OO +RB +qF +GY +GE +DP +DP +Ad +Cm +CA +GE +Eb +CH +gM +sw +fI +MZ +MZ +MZ +gk +Zf +uX +km +Zf +gk +MZ "} -(24,1,1) = {" -li -li -li -li -li -li -li -li -li -li -sG -cq -cq -cq -cq -cq -cq -cq -WZ -zy -cq -cq -sG -li -li -li -li -li -li -li -li -li -li +(24,1,1) = {" +MZ +MZ +ng +ig +ig +ng +MZ +MZ +MZ +MZ +rT +PF +Vv +JH +Cm +kn +Cm +jT +zT +Cm +FX +Fl +Cm +td +cB +fI +dV +MZ +MZ +MZ +MZ +gk +Zf +Zf +gk +MZ +MZ "} (25,1,1) = {" -li -li -li -li -li -li -li -li -li -li -li -cq -GC -jU -JG -cq -Bu -cL -oU -lt -IV -cq -li -li -li -li -li -li -li -li -li -li -li +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +PF +PF +fz +We +qg +fl +lE +TJ +zU +BO +be +fI +fI +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ "} (26,1,1) = {" -li -li -li -li -li -li -li -li -li -li -li -gM -JL -rH -wP -IR -rZ -FC -jM -pC -YH -gM -li -li -li -li -li -li -li -li -li -li -li +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +Mv +MZ +rj +Wm +CI +In +lE +JZ +ch +OD +rj +MZ +Mv +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ "} (27,1,1) = {" -li -li -li -li -li -li -li -li -li -li -li -gM -iD -rH -rH -Lz -rP -xb -Ga -pK -UU -gM -li -li -li -li -li -li -li -li -li -li -li +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +Mv +MZ +wa +wO +RV +wr +MQ +vm +ch +KM +wa +MZ +Mv +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ "} (28,1,1) = {" -li -li -li -li -li -li -li -li -li -li -li -cq -lY -rH -gt -Lz -rP -xb -ga -pK -Bp -cq -li -li -li -li -li -li -li -li -li -li -li +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +Mv +MZ +wa +bU +CI +Ia +tJ +Ia +ch +rK +wa +MZ +Mv +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ "} (29,1,1) = {" -li -li -li -li -li -li -li -li -li -li -li -gM -CT -rH -rH -sl -sC -qw -ly -pK -lh -gM -li -li -li -li -li -li -li -li -li -li -li +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +Mv +MZ +wa +cx +CI +nx +PU +qO +ch +KW +wa +MZ +Mv +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ "} (30,1,1) = {" -li -li -li -li -li -li -li -li -li -li -li -gM -XE -rH -Fo -Dg -DH -VN -aj -cK -Jt -gM -li -li -li -li -li -li -li -li -li -li -li +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +Mv +MZ +rj +JS +NP +ED +Ut +Cm +rc +xD +rj +MZ +Mv +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ "} (31,1,1) = {" -li -li -li -li -li -li -li -li -li -li -li -cq -DK -tO -qN -cq -ir -DA -yq -tT -DY -cq -li -li -li -li -li -li -li -li -li -li -li +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +pP +BU +BU +BU +qI +qI +vT +zx +KB +hA +Er +CO +CO +CO +CO +CO +dG +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ "} (32,1,1) = {" -li -li -li -li -li -li -li -li -li -li -li -Zr -Zr -Zr -Zr -Zr -Zr -Zr -ke -xB -Zr -Zr -li -li -li -li -li -li -li -li -li -li -li +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +pP +qI +qI +Tv +kO +YM +Qu +mV +YX +qI +aR +qx +Lw +CO +XI +TT +Ey +fi +CO +CO +dG +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ "} (33,1,1) = {" -li -li -li -li -li -li -li -li -li -li -li -Zr -ux -Xl -KE -Ee -tm -Zr -eP -dN -Ih -Zr -li -li -li -li -li -li -li -li -li -li -li +MZ +MZ +MZ +MZ +MZ +MZ +pP +qI +qI +jD +aC +aH +Wt +Gd +aC +aH +gV +ZS +eQ +zO +Tf +CO +oe +qK +IM +sf +CO +CO +CO +CO +dG +MZ +MZ +MZ +MZ +MZ +MZ "} (34,1,1) = {" -li -li -li -li -li -li -li -li -li -li -li -Uj -Bc -WN -Vh -YK -aW -nL -PV -FP -HU -Uj -li -li -li -li -li -li -li -li -li -li -li +MZ +MZ +MZ +MZ +MZ +MZ +uG +pZ +dJ +ql +PH +Kd +Je +ql +PH +Kd +mB +ZS +UF +zF +xo +CO +Jt +Vr +Th +Jt +CO +TM +IX +Vc +hj +MZ +MZ +MZ +MZ +MZ +MZ "} (35,1,1) = {" -li -li -li -li -li -li -li -li -li -li -li -Uj -Dj -NH -WN -CQ -Lc -OS -QE -uE -HU -Uj -li -li -li -li -li -li -li -li -li -li -li +MZ +MZ +MZ +MZ +MZ +MZ +uG +Aw +mB +Xf +Pw +se +Je +Ur +Pw +se +mB +ZS +JL +zF +oV +Jt +Av +vl +Nl +bM +rm +PZ +ur +PL +ND +MZ +MZ +MZ +MZ +MZ +MZ "} (36,1,1) = {" -li -li -li -li -li -li -li -li -li -li -li -Zr -Zr -Zr -aI -un -YD -wq -zQ -vl -jk -Zr -li -li -li -li -li -li -li -li -li -li -li +MZ +MZ +MZ +MZ +MZ +MZ +uG +qw +mB +xn +xn +xn +BY +Nm +yB +yB +qE +hD +Hu +Wv +Qn +Hk +Ug +ct +MV +lj +VE +mW +hP +ih +rJ +MZ +MZ +MZ +MZ +MZ +MZ "} (37,1,1) = {" -li -li -li -li -li -li -li -li -li -li -li -Uj -UB -it -WN -CQ -Hx -oW -Qm -Ac -wr -Uj -li -li -li -li -li -li -li -li -li -li -li +MZ +MZ +MZ +MZ +MZ +MZ +uG +kr +pd +KQ +KQ +Pm +Bj +XQ +QN +QN +wU +VJ +iM +pR +oj +KN +XK +sv +wH +je +XW +WR +HY +ih +rJ +Wa +MZ +MZ +MZ +MZ +MZ "} (38,1,1) = {" -li -li -li -li -li -li -li -li -li -li -li -Uj -IU -WN -gH -OH -yc -Zr -Sm -il -wr -Uj -li -li -li -li -li -li -li -li -li -li -li +MZ +MZ +MZ +MZ +MZ +MZ +qI +qI +pQ +na +OK +HC +bu +ql +PH +Kd +bu +ZS +XB +zF +kV +Jt +PQ +Gq +QC +va +dN +Yi +Uq +go +wn +MZ +MZ +MZ +MZ +MZ +MZ "} (39,1,1) = {" -li -li -li -li -li -li -li -li -li -li -CF -Zr -wR -JD -gg -gg -Hb -Zr -CH -QK -Sd -Zr -CF -li -li -li -li -li -li -li -li -li -li +MZ +MZ +MZ +MZ +MZ +MZ +qI +mZ +ad +xK +vZ +HC +bu +Xf +Pw +se +bu +ZS +Ot +yL +Ei +GK +oG +eZ +gQ +oG +oG +oG +yr +oG +ZQ +MZ +MZ +MZ +MZ +MZ +MZ "} (40,1,1) = {" -li -li -li -li -li -li -li -li -hh -IL -IL -IL -IL -Zr -cd -cd -dE -Zr -xJ -oX -Pl -Pl -Pl -Pl -iI -li -li -li -li -li -li -li -li +MZ +MZ +MZ +MZ +MZ +MZ +qI +nv +Oy +ul +vZ +HC +rx +Gd +aC +aH +Ck +ZS +rc +SE +do +oG +xe +vN +Bd +tH +tk +hq +WP +KA +ZQ +MZ +MZ +MZ +MZ +MZ +MZ "} (41,1,1) = {" -li -li -li -li -li -li -li -hh -IL -YP -my -kL -IL -Pj -bN -bN -Wf -Bn -TJ -Xe -Pl -YF -Ie -nT -Pl -iI -li -li -li -li -li -li -li +MZ +MZ +MZ +MZ +MZ +MZ +qI +op +XL +YW +Em +jL +bJ +FN +kA +Tj +gC +qI +xf +BA +Kl +bc +EB +sN +EU +ka +mH +tN +GF +Tu +ZQ +MZ +MZ +MZ +MZ +MZ +MZ "} (42,1,1) = {" -li -li -li -li -li -li -li -IL -qb -Se -co -Oj -pL -Ol -RQ -RQ -RQ -RQ -PQ -EX -SQ -AS -mW -tH +MZ +MZ +MZ +MZ +MZ +MZ +qI +LP +ri +gq +bX +qI +Ny +qI +qI +qI +Up +qI +OB +iV +cW +oG +JN +Za +vj +nj +xj Nv -Pl -li -li -li -li -li -li -li +pX +tC +ZQ +MZ +MZ +MZ +MZ +MZ +MZ "} (43,1,1) = {" -li -li -li -li -li -li -li -IL -ct -hG -Iq -SC -An -mR -MR -bF -bF -bF -fg -Zu -eh -aL -mF -ZW -Zs -Pl -li -li -li -li -li -li -li +MZ +MZ +MZ +MZ +MZ +MZ +pP +qI +rr +uI +qI +Ju +Yk +iP +ai +ty +vW +jH +fv +hB +ir +oG +vS +Za +qo +QV +Gg +yl +dF +oG +Jv +MZ +MZ +MZ +MZ +MZ +MZ "} (44,1,1) = {" -li -li -li -li -li -li -li -IL -PE -Vf -iM -ez -TU -yU -fa -gi -lF -gi -gW -nZ -AR -kS -yn -mq -SG -Pl -li -li -li -li -li -li -li +MZ +MZ +MZ +MZ +MZ +MZ +MZ +qI +tO +iy +qI +Kg +up +Um +UN +Mu +er +jH +KY +Lc +QR +oG +Pu +lP +Yy +Al +tF +Lp +uu +oG +MZ +MZ +MZ +MZ +MZ +MZ +MZ "} (45,1,1) = {" -li -li -li -li -li -li -li -IL -fF -TG -ss -oB -IL -ko -DV -wW -zt -Rr -PU -iQ -Ll -Nr -tH -IT -SR -Pl -li -li -li -li -li -li -li +MZ +MZ +MZ +MZ +MZ +MZ +MZ +pP +qI +qI +qI +Om +Om +Om +SN +Co +MW +jH +sn +Iu +tV +oG +sG +yE +wd +xH +Xo +cH +oG +Jv +MZ +MZ +MZ +MZ +MZ +MZ +MZ "} (46,1,1) = {" -li -li -li -li -li -li -li -ja -ZY -VC -TZ -Po -VW -xH -yd -yd -ot -yd -TW -hD -lk -vp -Ht -lJ -zM -DF -li -li -li -li -li -li -li +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +Om +Om +EV +Kq +EV +Om +MB +WT +yG +jH +zd +Rs +Im +oG +za +CN +Pv +vr +Gr +Zk +oG +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ "} (47,1,1) = {" -li -li -li -li -li -li -li -DP -hw -VI -rd -Po -VW -xH -Cw -tG -AT -Ig -DO -OD -eh -Bq -hc -QW -wc -Wk -li -li -li -li -li -li -li +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +qQ +Om +xy +qr +Fy +Om +PC +XH +cc +jH +Az +xN +uH +oG +oG +oG +oG +oG +oG +oG +Jv +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ "} (48,1,1) = {" -li -li -li -li -li -li -li -DP -yX -zb -yS -Po -VW -xH -yd -oF -sE -oF -gw -OD -eh -jG -UG -Ek -bG -Wk -li -li -li -li -li -li -li +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +Om +EV +qr +EV +Om +gg +Li +xS +jH +BI +Br +BG +jH +di +rL +di +Lj +um +jH +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ "} (49,1,1) = {" -li -li -li -li -li -li -li -hs -lL -sO -tb -SW -IL -Hy -yd -IX -CA -Gk -gw -QJ -Pl -GG -Bv -Vq -Gu -Re -li -li -li -li -li -li -li +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +qQ +wX +Hq +pW +uS +gA +Bq +kE +jH +YP +Cz +fT +fR +ZL +fT +fT +zv +jH +UW +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ "} (50,1,1) = {" -li -li -li -li -li -li -li -sd -IL -IL -IL -IL -IL -sy -yd -nE -CA -IA -gw -xG -Pl -Pl -Pl -Pl -Pl -aE -li -li -li -li -li -li -li +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +Om +Kt +Pb +Om +CJ +Zb +wp +jH +ZJ +wA +iz +YC +if +Dr +CR +bp +jH +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ "} (51,1,1) = {" -li -li -li -li -li -li -li -iw -Cv -bT -Ti -Wj -Wc -yd -yd -mH -dK -Dx -gE -DE -ZK -iZ -wd -ry -Cv -iw -li -li -li -li -li -li -li +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +qQ +Om +Om +Om +vC +dt +Om +jH +yR +gO +VO +SB +WL +fn +tS +Gy +UW +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ "} (52,1,1) = {" -li -li -li -li -li -li -li -li -Cv -fh -mu -OG -yd -yd -Bs -Cu -ar -bg -fj -ch -Fs -NA -Cj -TP -Cv -li -li -li -li -li -li -li -li +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +tY +tY +Uf +xQ +dd +tY +jH +jH +jH +jH +SM +eX +jH +jH +jH +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ "} (53,1,1) = {" -li -li -li -li -li -li -li -li -iw -Cv -Gw -cN -jo -KA -qL -EA -EA -EA -qL -yT -na -ML -Oq -Cv -iw -li -li -li -li -li -li -li -li +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +RJ +tY +mK +gF +Ps +tY +MZ +MZ +MZ +jH +Wd +ej +FY +jH +UW +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ "} (54,1,1) = {" -li -li -li -li -li -li -li -li -li -iw -Cv -Cv -Cv -Cv -wx -Gt -Gt -Gt -Os -Vl -Cv -Cv -Cv -iw -li -li -li -li -li -li -li -li -li +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +tY +UV +xM +Ak +tY +MZ +MZ +MZ +jH +dj +rZ +mG +jH +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ "} (55,1,1) = {" -li -li -li -li -li -li -li -li -li -li -li -iw -Cv -Dq -fJ -fJ -hQ -fJ -fJ -qM -Cv -iw -li -li -li -li -li -li -li -li -li -li -li +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +RJ +tY +HO +NF +tY +MZ +MZ +MZ +jH +fX +rS +jH +UW +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ "} (56,1,1) = {" -li -li -li -li -li -li -li -li -li -li -li -li -Cv -li -li -li -li -li -li -li -Cv -li -li -li -li -li -li -li -li -li -li -li -li +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +RJ +tY +uB +tY +MZ +MZ +MZ +jH +jH +jH +UW +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ +MZ "} diff --git a/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm b/_maps/shuttles/nanotrasen/nanotrasen_heron.dmm index 0a0c9dead99f..a5673c22d7bc 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" = ( @@ -2003,7 +2004,7 @@ dir = 1 }, /obj/machinery/door/airlock/research{ - name = "Mech Bay" + name = "Exosuit Bay" }, /turf/open/floor/plasteel/patterned/grid, /area/ship/science/robotics) @@ -3481,7 +3482,7 @@ dir = 1 }, /obj/machinery/door/airlock/research{ - name = "Mech Bay" + name = "Exosuit Bay" }, /turf/open/floor/plasteel/patterned/grid, /area/ship/science/robotics) @@ -4135,7 +4136,6 @@ "pk" = ( /obj/structure/closet/secure_closet/freezer/wall/directional/east, /obj/item/clothing/under/shorts/cookjorts, -/obj/item/clothing/shoes/cookflops, /obj/item/clothing/suit/toggle/chef, /obj/item/clothing/under/rank/civilian/chef, /obj/item/clothing/under/rank/civilian/chef/skirt, @@ -4557,7 +4557,7 @@ }, /obj/machinery/door/poddoor{ id = "heron_mechbayshut"; - name = "Mechbay Shutters" + name = "Exosuit Bay Shutters" }, /turf/open/floor/plasteel/patterned/ridged, /area/ship/science/robotics) @@ -4852,11 +4852,11 @@ pixel_x = 2; pixel_y = 3 }, -/obj/item/kitchen/knife/plastic{ +/obj/item/melee/knife/plastic{ pixel_x = 2 }, -/obj/item/kitchen/knife/plastic, -/obj/item/kitchen/knife/plastic{ +/obj/item/melee/knife/plastic, +/obj/item/melee/knife/plastic{ pixel_x = 5; pixel_y = 2 }, @@ -6112,7 +6112,7 @@ /obj/item/storage/pill_bottle/aranesp, /obj/item/taperecorder, /obj/item/t_scanner, -/obj/item/kitchen/knife/switchblade, +/obj/item/melee/knife/switchblade, /obj/item/trash/candy, /obj/structure/filingcabinet/double, /obj/item/radio/intercom/directional/south, @@ -7053,11 +7053,11 @@ /area/ship/hallway/fore) "zN" = ( /obj/structure/closet/secure_closet/freezer/fridge, -/obj/item/reagent_containers/food/condiment/soysauce{ +/obj/item/reagent_containers/condiment/soysauce{ pixel_x = 3; pixel_y = 3 }, -/obj/item/reagent_containers/food/condiment/mayonnaise, +/obj/item/reagent_containers/condiment/mayonnaise, /obj/effect/turf_decal/box/corners{ dir = 4 }, @@ -7282,7 +7282,7 @@ "AC" = ( /obj/machinery/door/poddoor{ id = "heron_mechbayshut"; - name = "Mechbay Shutters" + name = "Exosuit Bay Shutters" }, /turf/open/floor/plasteel/patterned/ridged, /area/ship/science/robotics) @@ -9208,12 +9208,12 @@ "HT" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ desc = "Often used to flavor food or make people sneeze. Fashionably moved to the left side of the table."; pixel_x = -8; pixel_y = 2 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ desc = "Salt. From space oceans, presumably. A staple of modern medicine."; pixel_x = -8; pixel_y = 12 @@ -9318,11 +9318,11 @@ "Ip" = ( /obj/structure/table, /obj/item/reagent_containers/food/snacks/mint, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ pixel_x = -2; pixel_y = 6 }, -/obj/item/reagent_containers/food/condiment/sugar{ +/obj/item/reagent_containers/condiment/sugar{ pixel_x = 5; pixel_y = 5 }, @@ -10650,6 +10650,7 @@ pixel_y = -10; pixel_x = 5 }, +/obj/item/gun/energy/plasmacutter, /turf/open/floor/plasteel/dark, /area/ship/engineering) "NC" = ( @@ -11850,7 +11851,7 @@ }, /obj/machinery/door/poddoor{ id = "heron_mechbayshut"; - name = "Mechbay Shutters" + name = "Exosuit Bay Shutters" }, /turf/open/floor/plasteel/patterned/ridged, /area/ship/science/robotics) @@ -12146,12 +12147,12 @@ pixel_x = 6; pixel_y = 6 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ desc = "Often used to flavor food or make people sneeze. Fashionably moved to the left side of the table."; pixel_x = -8; pixel_y = 2 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ desc = "Salt. From space oceans, presumably. A staple of modern medicine."; pixel_x = -8; pixel_y = 12 @@ -13016,10 +13017,10 @@ /obj/item/reagent_containers/food/snacks/dough, /obj/item/reagent_containers/food/snacks/dough, /obj/item/kitchen/rollingpin, -/obj/item/kitchen/knife/butcher{ +/obj/item/melee/knife/butcher{ pixel_x = 13 }, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /obj/effect/turf_decal/industrial/warning{ dir = 1 }, @@ -13619,7 +13620,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 6 }, -/obj/structure/fireaxecabinet{ +/obj/structure/cabinet/fireaxe{ pixel_y = 27 }, /obj/structure/closet/secure_closet/engineering_electrical, diff --git a/_maps/shuttles/nanotrasen/nanotrasen_meta.dmm b/_maps/shuttles/nanotrasen/nanotrasen_meta.dmm index 663a567b8bbc..95b61c204b54 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_meta.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_meta.dmm @@ -543,11 +543,11 @@ pixel_y = 3 }, /obj/effect/turf_decal/corner/transparent/bar/diagonal, -/obj/item/reagent_containers/food/condiment/ketchup{ +/obj/item/reagent_containers/condiment/ketchup{ pixel_y = 14; pixel_x = 9 }, -/obj/item/reagent_containers/food/condiment/mayonnaise{ +/obj/item/reagent_containers/condiment/mayonnaise{ pixel_y = 14 }, /obj/item/reagent_containers/food/drinks/soda_cans/cola{ @@ -1679,6 +1679,14 @@ /obj/machinery/door/firedoor, /turf/open/floor/plating, /area/ship/cargo) +"jo" = ( +/obj/machinery/porta_turret/ship/nt/light{ + id = "meta_grid"; + pixel_y = 0; + dir = 4 + }, +/turf/closed/wall/mineral/titanium, +/area/ship/crew) "jw" = ( /obj/effect/turf_decal/corner/transparent/bar/diagonal, /obj/effect/decal/cleanable/dirt/dust, @@ -1801,10 +1809,10 @@ /area/ship/engineering) "lH" = ( /obj/item/storage/fancy/egg_box, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/rice, -/obj/item/reagent_containers/food/condiment/sugar, -/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/rice, +/obj/item/reagent_containers/condiment/sugar, +/obj/item/reagent_containers/condiment/enzyme, /obj/item/reagent_containers/food/snacks/meat/slab/synthmeat{ pixel_x = -3; pixel_y = 3 @@ -1820,10 +1828,10 @@ name = "fridge"; anchored = 1 }, -/obj/item/reagent_containers/food/condiment/soymilk, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/soymilk, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/soymilk, /turf/open/floor/plasteel, /area/ship/crew/canteen/kitchen) "lK" = ( @@ -2198,6 +2206,14 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel/dark, /area/ship/cargo) +"uT" = ( +/obj/machinery/porta_turret/ship/nt/light{ + id = "meta_grid"; + pixel_y = 0; + dir = 4 + }, +/turf/closed/wall/mineral/titanium, +/area/ship/crew/canteen/kitchen) "ve" = ( /obj/effect/turf_decal/box/corners, /obj/machinery/light/broken/directional/south, @@ -2379,11 +2395,19 @@ /obj/structure/table, /obj/item/cutting_board, /obj/item/kitchen/rollingpin, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /obj/effect/turf_decal/corner/opaque/white/diagonal, /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel, /area/ship/crew/canteen/kitchen) +"yF" = ( +/obj/machinery/porta_turret/ship/nt/light{ + id = "meta_grid"; + pixel_y = 0; + dir = 5 + }, +/turf/closed/wall/mineral/titanium, +/area/ship/engineering) "yS" = ( /obj/structure/table, /obj/item/storage/box/lights/mixed{ @@ -2737,11 +2761,11 @@ /area/ship/cargo) "EX" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -8; pixel_y = 10 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -8; pixel_y = 4 }, @@ -2848,11 +2872,11 @@ pixel_y = 6 }, /obj/effect/turf_decal/corner/opaque/white/diagonal, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -8; pixel_y = 10 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -8; pixel_y = 4 }, @@ -2910,10 +2934,9 @@ /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/cleanable/dirt/dust, /obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/turretid{ +/obj/machinery/turretid/ship{ pixel_y = -24; - req_access = null; - locked = 0 + id = "meta_grid" }, /turf/open/floor/plasteel/dark, /area/ship/bridge) @@ -3059,11 +3082,13 @@ /turf/open/floor/plating, /area/ship/engineering) "Lo" = ( -/obj/machinery/porta_turret/ship/weak{ - dir = 1 +/obj/machinery/porta_turret/ship/nt/light{ + id = "meta_grid"; + pixel_y = 0; + dir = 6 }, /turf/closed/wall/mineral/titanium, -/area/ship/bridge) +/area/ship/engineering) "Lq" = ( /obj/structure/cable{ icon_state = "4-8" @@ -3458,6 +3483,22 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel/dark, /area/ship/cargo) +"TR" = ( +/obj/machinery/porta_turret/ship/nt/light{ + id = "meta_grid"; + pixel_y = 0; + dir = 10 + }, +/turf/closed/wall/mineral/titanium, +/area/ship/crew/canteen) +"TV" = ( +/obj/machinery/porta_turret/ship/nt/light{ + id = "meta_grid"; + pixel_y = 0; + dir = 9 + }, +/turf/closed/wall/mineral/titanium, +/area/ship/crew) "Uk" = ( /obj/structure/cable{ icon_state = "4-8" @@ -3861,7 +3902,7 @@ aa "} (6,1,1) = {" aa -Lo +yF ac ri Pr @@ -4186,7 +4227,7 @@ aa "} (19,1,1) = {" aa -Lo +TV ai ai MU @@ -4206,7 +4247,7 @@ sA Uk an bD -Lo +TR aa "} (20,1,1) = {" @@ -4412,12 +4453,12 @@ aa (28,1,1) = {" aa aa -Lo +jo ai ai ai ai -Lo +jo aa aa aa @@ -4425,12 +4466,12 @@ aa aa aa aa -Lo +uT cO cO cO cO -Lo +uT aa aa "} diff --git a/_maps/shuttles/nanotrasen/nanotrasen_mimir.dmm b/_maps/shuttles/nanotrasen/nanotrasen_mimir.dmm index 928fc6bd90ee..7791494023f4 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_mimir.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_mimir.dmm @@ -2005,7 +2005,7 @@ /obj/machinery/door/window{ dir = 4 }, -/obj/item/kitchen/knife/shiv, +/obj/item/melee/knife/shiv, /turf/open/floor/plating, /area/ship/crew/canteen) "lc" = ( @@ -2314,20 +2314,6 @@ /obj/item/reagent_containers/food/snacks/urinalcake, /turf/open/floor/plasteel/white, /area/ship/crew/toilet) -"nb" = ( -/obj/structure/table/wood, -/obj/structure/window/reinforced/tinted/frosted{ - dir = 8 - }, -/obj/structure/window/reinforced/tinted/frosted{ - dir = 4 - }, -/obj/item/flashlight/lamp{ - pixel_y = 13 - }, -/obj/item/book/codex_gigas, -/turf/open/floor/wood, -/area/ship/crew/dorm) "nh" = ( /turf/closed/wall/r_wall, /area/ship/crew/dorm/dormtwo) @@ -2804,32 +2790,6 @@ /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood, /area/ship/crew/hydroponics) -"qe" = ( -/obj/structure/closet/secure_closet/freezer{ - name = "Refrigerator"; - desc = "A refrigerated cabinet for food." - }, -/obj/effect/turf_decal/siding/wideplating/light/end{ - dir = 4 - }, -/obj/item/storage/fancy/egg_box, -/obj/item/storage/fancy/egg_box, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/soymilk, -/obj/item/reagent_containers/food/condiment/soymilk, -/obj/item/reagent_containers/food/condiment/soymilk, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/sugar, -/obj/item/reagent_containers/food/condiment/sugar, -/obj/item/reagent_containers/food/condiment/rice, -/obj/item/reagent_containers/food/snacks/tofu, -/obj/item/reagent_containers/food/snacks/tofu, -/turf/open/floor/plasteel/mono/white, -/area/ship/crew/canteen/kitchen) "qh" = ( /obj/machinery/hydroponics/constructable{ pixel_y = 8 @@ -3876,27 +3836,6 @@ /obj/structure/table, /turf/open/floor/plasteel, /area/ship/crew/canteen/kitchen) -"xb" = ( -/obj/structure/table, -/obj/item/reagent_containers/food/condiment/sugar{ - pixel_y = 4 - }, -/obj/item/reagent_containers/food/condiment/rice{ - pixel_y = 10; - pixel_x = 3 - }, -/obj/item/reagent_containers/food/condiment/enzyme{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 - }, -/turf/open/floor/plasteel/mono/white, -/area/ship/crew/canteen/kitchen) "xc" = ( /obj/effect/turf_decal/siding/wood/end{ dir = 8 @@ -4049,11 +3988,11 @@ /area/ship/crew/dorm) "ye" = ( /obj/structure/closet/crate, -/obj/item/kitchen/knife/plastic, -/obj/item/kitchen/knife/plastic, -/obj/item/kitchen/knife/plastic, -/obj/item/kitchen/knife/plastic, -/obj/item/kitchen/knife/plastic, +/obj/item/melee/knife/plastic, +/obj/item/melee/knife/plastic, +/obj/item/melee/knife/plastic, +/obj/item/melee/knife/plastic, +/obj/item/melee/knife/plastic, /obj/item/kitchen/spoon/plastic, /obj/item/kitchen/spoon/plastic, /obj/item/kitchen/spoon/plastic, @@ -4100,11 +4039,6 @@ "ys" = ( /turf/closed/wall/r_wall, /area/ship/crew/dorm) -"yu" = ( -/obj/item/clothing/mask/gas/monkeymask, -/obj/item/clothing/suit/monkeysuit, -/turf/open/floor/plating, -/area/ship/maintenance/fore) "yw" = ( /obj/effect/decal/cleanable/food/tomato_smudge, /obj/effect/turf_decal/siding/wood{ @@ -4461,21 +4395,6 @@ }, /turf/open/floor/plasteel/tech/grid, /area/ship/maintenance/starboard) -"AH" = ( -/obj/structure/table, -/obj/item/toy/figure/chef, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/item/reagent_containers/food/condiment/saltshaker{ - pixel_y = 10; - pixel_x = -7 - }, -/obj/item/reagent_containers/food/condiment/peppermill{ - pixel_x = 8; - pixel_y = 9 - }, -/turf/open/floor/plasteel/mono/white, -/area/ship/crew/canteen/kitchen) "AI" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer4{ dir = 6 @@ -4568,6 +4487,19 @@ }, /turf/open/floor/plasteel, /area/ship/security/prison) +"Bf" = ( +/obj/structure/table/wood, +/obj/structure/window/reinforced/tinted/frosted{ + dir = 8 + }, +/obj/structure/window/reinforced/tinted/frosted{ + dir = 4 + }, +/obj/item/flashlight/lamp{ + pixel_y = 13 + }, +/turf/open/floor/wood, +/area/ship/crew/dorm) "Bi" = ( /obj/structure/cable{ icon_state = "1-2" @@ -4922,6 +4854,27 @@ /obj/effect/spawner/lootdrop/ration, /turf/open/floor/plasteel, /area/ship/security/prison) +"Dj" = ( +/obj/structure/table, +/obj/item/reagent_containers/condiment/sugar{ + pixel_y = 4 + }, +/obj/item/reagent_containers/condiment/rice{ + pixel_y = 10; + pixel_x = 3 + }, +/obj/item/reagent_containers/condiment/enzyme{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 5 + }, +/turf/open/floor/plasteel/mono/white, +/area/ship/crew/canteen/kitchen) "Dm" = ( /obj/structure/window/reinforced/spawner{ dir = 1 @@ -5864,6 +5817,21 @@ /obj/effect/turf_decal/siding/yellow, /turf/open/floor/plasteel, /area/ship/security/prison) +"Ie" = ( +/obj/structure/table, +/obj/item/toy/figure/chef, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/item/reagent_containers/condiment/saltshaker{ + pixel_y = 10; + pixel_x = -7 + }, +/obj/item/reagent_containers/condiment/peppermill{ + pixel_x = 8; + pixel_y = 9 + }, +/turf/open/floor/plasteel/mono/white, +/area/ship/crew/canteen/kitchen) "Ig" = ( /obj/machinery/door/poddoor/shutters/preopen{ id = "quickpoint_shut"; @@ -6211,6 +6179,10 @@ }, /turf/open/floor/plasteel, /area/ship/security) +"Kc" = ( +/obj/item/clothing/mask/gas/monkeymask, +/turf/open/floor/plating, +/area/ship/maintenance/fore) "Kg" = ( /obj/effect/turf_decal/siding/red{ dir = 8 @@ -8460,6 +8432,32 @@ }, /turf/open/floor/wood, /area/ship/crew/dorm/dormfour) +"Xf" = ( +/obj/structure/closet/secure_closet/freezer{ + name = "Refrigerator"; + desc = "A refrigerated cabinet for food." + }, +/obj/effect/turf_decal/siding/wideplating/light/end{ + dir = 4 + }, +/obj/item/storage/fancy/egg_box, +/obj/item/storage/fancy/egg_box, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/sugar, +/obj/item/reagent_containers/condiment/sugar, +/obj/item/reagent_containers/condiment/rice, +/obj/item/reagent_containers/food/snacks/tofu, +/obj/item/reagent_containers/food/snacks/tofu, +/turf/open/floor/plasteel/mono/white, +/area/ship/crew/canteen/kitchen) "Xg" = ( /obj/machinery/door/window{ dir = 4 @@ -9145,7 +9143,7 @@ Mv Lu rq Hm -nb +Bf dJ VG oM @@ -9551,8 +9549,8 @@ PP td VK Fg -AH -xb +Ie +Dj nR zq mU @@ -9675,7 +9673,7 @@ pe Rr KQ wa -qe +Xf Ad gZ eF @@ -10357,7 +10355,7 @@ oI VU Dy nh -yu +Kc nK jY jY diff --git a/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm b/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm index 342ffb8fa928..07b8722e5e7b 100644 --- a/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm +++ b/_maps/shuttles/nanotrasen/nanotrasen_ranger.dmm @@ -6,12 +6,16 @@ pixel_y = 11; layer = 4.2 }, -/obj/structure/railing{ +/obj/item/toy/plush/moth/redish{ + pixel_x = -4 + }, +/obj/structure/window/reinforced/tinted{ dir = 4 }, -/obj/item/toy/plush/moth/redish{ +/obj/item/folder/red{ pixel_x = -4; - layer = 4.3 + layer = 3.01; + pixel_y = -8 }, /turf/open/floor/wood, /area/ship/security) @@ -29,7 +33,8 @@ pixel_x = 8; pixel_y = 22 }, -/turf/open/floor/plating, +/obj/effect/decal/cleanable/plasma, +/turf/open/floor/plasteel/tech, /area/ship/maintenance/port) "am" = ( /obj/structure/urinal{ @@ -39,7 +44,7 @@ /obj/structure/cable{ icon_state = "0-4" }, -/turf/open/floor/plastic, +/turf/open/floor/plasteel/showroomfloor, /area/ship/crew/toilet) "an" = ( /obj/structure/railing/corner, @@ -56,34 +61,47 @@ icon_state = "1-2" }, /obj/machinery/light/floor, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/corner/opaque/vired/half{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, /area/ship/hallway/central) "aD" = ( /obj/machinery/light/dim/directional/north, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/obj/effect/turf_decal/corner/opaque/ntblue/three_quarters{ +/obj/effect/turf_decal/corner/opaque/vired/three_quarters{ dir = 4 }, -/turf/open/floor/plasteel/white, +/obj/structure/closet/crate/bin, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "aG" = ( -/obj/structure/railing{ - dir = 4 +/obj/structure/closet/cabinet, +/obj/item/clothing/suit/hooded/wintercoat/engineering, +/obj/item/clothing/head/beret/eng/hazard, +/obj/item/storage/backpack/satchel/eng, +/obj/item/storage/backpack/messenger/engi, +/obj/item/storage/backpack/industrial, +/obj/item/storage/backpack/duffelbag/engineering, +/obj/item/clothing/under/rank/engineering/engineer/nt/lp, +/obj/item/clothing/under/rank/engineering/engineer/nt/skirt/lp, +/obj/item/storage/backpack/ert/engineer, +/obj/item/clothing/suit/nanotrasen/vest, +/obj/structure/window/reinforced/tinted{ + dir = 1 }, -/obj/structure/table/reinforced, -/obj/item/storage/box/stockparts/basic, -/obj/machinery/light/dim/directional/south, -/obj/effect/turf_decal/techfloor{ - dir = 4 +/obj/structure/window/reinforced/tinted{ + dir = 8 }, -/obj/machinery/cell_charger, -/turf/open/floor/plasteel/mono/dark, +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/wood, /area/ship/engineering) "aI" = ( -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "Ranger_FireFighting_Shut" - }, /obj/structure/cable{ icon_state = "4-8" }, @@ -99,15 +117,33 @@ /obj/machinery/door/firedoor/border_only{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/brown/mono, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = "Ranger_FireFighting_Shut"; + name = "Ready Room" + }, +/obj/effect/turf_decal/siding/thinplating/dark/corner, /turf/open/floor/plasteel/dark, -/area/ship/storage) +/area/ship/storage/equip) "aK" = ( /obj/machinery/light/dim/directional/north, -/obj/item/radio/intercom/directional/east, -/obj/structure/reagent_dispensers/foamtank, -/turf/open/floor/plasteel/tech, -/area/ship/storage) +/obj/effect/turf_decal/industrial/fire/corner{ + dir = 1 + }, +/obj/machinery/suit_storage_unit/inherit/industrial, +/obj/item/clothing/suit/space/hardsuit/ancient/lp, +/obj/item/clothing/mask/breath, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 6 + }, +/turf/open/floor/plasteel/lightgrey, +/area/ship/storage/equip) "aO" = ( /obj/structure/closet/secure_closet/lp/medical, /obj/item/storage/box/gloves, @@ -119,6 +155,25 @@ /obj/item/pinpointer/crew, /obj/item/storage/box/bodybags, /obj/item/storage/firstaid/regular, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/item/defibrillator/loaded, +/obj/item/roller{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/roller{ + pixel_x = 5; + pixel_y = 12 + }, +/obj/item/clothing/neck/stethoscope, +/obj/item/gps, +/obj/item/clothing/glasses/hud/health, +/obj/item/clothing/glasses/hud/health/prescription, /turf/open/floor/wood, /area/ship/medical) "aP" = ( @@ -129,6 +184,7 @@ dir = 1 }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/effect/decal/cleanable/plasma, /turf/open/floor/plating, /area/ship/maintenance/port) "bf" = ( @@ -141,7 +197,7 @@ /obj/effect/turf_decal/trimline/opaque/blue/filled/corner{ dir = 1 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "bn" = ( /obj/machinery/light/dim/directional/south, @@ -150,10 +206,10 @@ pixel_x = -21; pixel_y = 7 }, -/obj/effect/turf_decal/corner/opaque/ntblue/three_quarters{ +/obj/effect/turf_decal/corner/opaque/vired/three_quarters{ dir = 1 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "br" = ( /obj/machinery/atmospherics/components/unary/shuttle/heater{ @@ -164,19 +220,20 @@ }, /obj/machinery/door/poddoor/shutters{ dir = 4; - id = "Ranger_SB_maint_shut" + id = "Ranger_SB_maint_shut"; + name = "Engine Shutters" }, /turf/open/floor/plating, /area/ship/maintenance/starboard) "bu" = ( -/turf/open/floor/plasteel/dark, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/plasteel/lightgrey, /area/ship/hallway/central) "bw" = ( /obj/structure/closet/secure_closet/lp/security, -/obj/item/clothing/glasses/sunglasses/gar, /obj/item/melee/classic_baton/telescopic, /obj/item/flashlight/seclite, -/obj/item/kitchen/knife/combat/survival, +/obj/item/melee/knife/survival, /obj/item/holosign_creator/security, /obj/item/storage/box/handcuffs, /obj/item/restraints/legcuffs/bola/energy, @@ -184,31 +241,47 @@ /obj/item/clothing/suit/armor/vest/security, /obj/item/clothing/mask/gas/sechailer, /obj/item/gps, -/obj/structure/railing{ - dir = 4 - }, -/obj/item/ammo_box/c9mm, -/obj/item/ammo_box/c9mm, /obj/item/ammo_box/magazine/co9mm, /obj/item/storage/belt/security/webbing, /obj/item/storage/pistolcase/commander, +/obj/item/clothing/glasses/hud/security/sunglasses, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, /turf/open/floor/wood, /area/ship/security) "bD" = ( -/obj/structure/chair/wood{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/ntblue/half{ +/obj/effect/turf_decal/corner/opaque/vired/half{ dir = 1 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) -"bN" = ( -/obj/structure/window/reinforced{ +"bK" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/vired/half{ dir = 8 }, -/obj/structure/weightmachine/weightlifter, /turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"bN" = ( +/obj/item/flashlight/lamp{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/paper_bin{ + pixel_x = 8; + pixel_y = 2 + }, +/obj/item/pen/red{ + pixel_x = 6 + }, +/obj/structure/table/reinforced{ + color = "#8A9397" + }, +/turf/open/floor/mineral/plastitanium/red/brig, /area/ship/security) "bX" = ( /obj/machinery/telecomms/bus/preset_four{ @@ -217,25 +290,41 @@ id = "Nanotrasen Communications Bus"; freq_listening = list(1353,1447,1459) }, -/turf/open/floor/circuit/telecomms{ - initial_gas_mix = "TEMP=2.7" +/obj/effect/turf_decal/techfloor{ + dir = 4 }, +/turf/open/floor/circuit, /area/ship/engineering/communications) -"cj" = ( -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/structure/closet/crate/secure/loot, +"ci" = ( +/obj/effect/turf_decal/industrial/outline/orange, +/obj/machinery/portable_atmospherics/pump, /turf/open/floor/plasteel/tech, -/area/ship/cargo) +/area/ship/maintenance/port) +"cj" = ( +/obj/structure/closet/cabinet, +/obj/item/clothing/under/rank/medical/paramedic/skirt/lp, +/obj/item/clothing/under/rank/medical/paramedic/lp, +/obj/item/clothing/suit/hooded/wintercoat/medical, +/obj/item/clothing/head/beret/med, +/obj/item/storage/backpack/satchel/med, +/obj/item/storage/backpack/messenger/med, +/obj/item/storage/backpack/medic, +/obj/item/storage/backpack/duffelbag/med, +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/item/storage/backpack/ert/medical, +/turf/open/floor/wood, +/area/ship/medical) "cv" = ( /obj/structure/chair/comfy/shuttle{ dir = 4; - name = "Operations" + name = "Navigator's Chair" }, -/obj/effect/turf_decal/steeldecal/steel_decals9, -/obj/effect/turf_decal/steeldecal/steel_decals9{ - dir = 4 +/obj/structure/cable{ + icon_state = "1-8" }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) "cx" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -247,7 +336,6 @@ /obj/machinery/camera/autoname{ dir = 10 }, -/obj/effect/turf_decal/corner/opaque/ntblue/half, /obj/machinery/firealarm/directional/south, /obj/structure/cable{ icon_state = "4-8" @@ -255,7 +343,8 @@ /obj/structure/cable{ icon_state = "4-9" }, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/corner/opaque/vired/half, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "cE" = ( /obj/structure/railing{ @@ -263,20 +352,28 @@ }, /obj/effect/decal/cleanable/glass, /obj/machinery/light/dim/directional/south, +/obj/structure/janitorialcart{ + dir = 4 + }, +/obj/item/mop, +/obj/item/reagent_containers/food/drinks/sillycup{ + pixel_x = -8; + pixel_y = 10 + }, /turf/open/floor/plating, /area/ship/maintenance/starboard) "cI" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 10 +/obj/structure/chair/handrail{ + dir = 8; + pixel_x = 2 }, -/obj/structure/window/reinforced/fulltile, -/obj/structure/grille, -/obj/machinery/door/firedoor/window, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "Ranger_Cycler_Shutters" +/obj/machinery/light/dim/directional/north, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/turf/open/floor/plasteel/tech/techmaint{ + color = "#a8b2b6" }, -/turf/open/floor/plating, /area/ship/hallway/central) "cN" = ( /obj/structure/cable{ @@ -288,13 +385,13 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 10 }, -/obj/effect/turf_decal/corner/opaque/ntblue/half{ - dir = 1 - }, /obj/effect/turf_decal/industrial/warning{ dir = 8 }, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/corner/opaque/vired/half{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "cR" = ( /obj/structure/cable{ @@ -305,9 +402,15 @@ /obj/effect/turf_decal/trimline/opaque/blue/filled/line{ dir = 1 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "cW" = ( +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/lightgrey{ + dir = 10 + }, /turf/open/floor/plasteel/dark, /area/ship/crew/cryo) "dd" = ( @@ -315,22 +418,71 @@ /obj/effect/turf_decal/trimline/opaque/ntblue/filled/corner{ dir = 4 }, -/turf/open/floor/plasteel/white, +/obj/structure/closet/crate/bin, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) -"dl" = ( -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "Ranger_FireFighting_Shut" +"df" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/machinery/firealarm/directional/south, +/obj/structure/table/wood, +/obj/item/toy/plush/moth/deadhead{ + pixel_x = -7; + layer = 4.3 + }, +/obj/item/flashlight/lamp/green{ + pixel_x = 5; + pixel_y = 13; + layer = 4.2 }, +/obj/item/folder/yellow{ + pixel_y = -4; + pixel_x = 4 + }, +/obj/item/pen/survival{ + pixel_x = 5; + pixel_y = -5 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, +/turf/open/floor/wood, +/area/ship/engineering) +"dl" = ( /obj/machinery/door/firedoor/border_only{ dir = 8 }, /obj/machinery/door/firedoor/border_only{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/brown/mono, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = "Ranger_FireFighting_Shut"; + name = "Ready Room" + }, +/turf/open/floor/plasteel/dark, +/area/ship/storage/equip) +"dm" = ( +/obj/machinery/camera/autoname{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/turf_decal/trimline/transparent/white/filled/warning{ + dir = 10 + }, /turf/open/floor/plasteel/dark, -/area/ship/storage) +/area/ship/hallway/starboard) "dn" = ( /obj/structure/cable{ icon_state = "4-8" @@ -341,15 +493,15 @@ /obj/effect/turf_decal/steeldecal/steel_decals7{ dir = 4 }, -/turf/open/floor/plasteel/tech/airless, +/turf/open/floor/plasteel/tech, /area/ship/engineering/communications) "dq" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/corner/opaque/ntblue{ +/obj/effect/turf_decal/corner/opaque/vired{ dir = 8 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "dr" = ( /obj/machinery/power/smes{ @@ -358,25 +510,33 @@ /obj/structure/cable{ icon_state = "0-2" }, +/obj/structure/catwalk/over/plated_catwalk/dark, /turf/open/floor/plating, /area/ship/engineering) +"dx" = ( +/obj/structure/chair/handrail{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/light/floor, +/turf/open/floor/engine/hull, +/area/ship/external/dark) "dC" = ( /obj/effect/turf_decal/ntspaceworks_small/right, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 9 }, -/obj/machinery/light/dim/directional/south, +/obj/effect/turf_decal/spline/fancy/opaque/blue, /turf/open/floor/plasteel/dark, /area/ship/bridge) "dG" = ( /obj/machinery/airalarm/directional/south, -/obj/machinery/atmospherics/components/binary/valve/layer4{ - dir = 8; - name = "Disposals Outlet Valve" - }, /obj/machinery/door/firedoor/border_only{ dir = 4 }, +/obj/machinery/atmospherics/components/unary/portables_connector{ + dir = 4 + }, /turf/open/floor/plating, /area/ship/hallway/central) "dK" = ( @@ -387,10 +547,10 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/ntblue/half{ +/obj/effect/turf_decal/corner/opaque/vired/half{ dir = 1 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "dM" = ( /obj/structure/cable/cyan{ @@ -399,34 +559,38 @@ /obj/effect/decal/cleanable/glass, /turf/open/floor/plating, /area/ship/maintenance/port) +"dN" = ( +/obj/effect/turf_decal/trimline/transparent/white/filled/warning{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/port) "dP" = ( /obj/structure/grille, -/obj/structure/window/reinforced/fulltile, /obj/machinery/door/poddoor/shutters{ - id = "Engineering_Specialist_Shutters" + id = "Engineering_Specialist_Shutters"; + name = "Communications Shutters" }, /obj/machinery/door/firedoor/window, +/obj/structure/window/reinforced/fulltile/shuttle, /turf/open/floor/plating, /area/ship/engineering) "ec" = ( /obj/effect/turf_decal/ntspaceworks_small/left, -/obj/structure/cable{ - icon_state = "1-8" - }, /obj/structure/cable{ icon_state = "5-8" }, -/obj/machinery/light_switch{ - dir = 1; - pixel_x = -7; - pixel_y = -19 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, +/obj/effect/turf_decal/spline/fancy/opaque/blue, +/obj/structure/cable{ + icon_state = "2-8" + }, /turf/open/floor/plasteel/dark, /area/ship/bridge) "ef" = ( @@ -438,15 +602,19 @@ /turf/template_noop, /area/template_noop) "eo" = ( -/obj/effect/turf_decal/techfloor{ - dir = 4 +/obj/machinery/camera/autoname{ + dir = 5 }, -/obj/structure/cable{ - icon_state = "0-2" +/obj/structure/railing{ + dir = 4; + layer = 4.1 }, -/obj/machinery/power/ship_gravity, -/turf/open/floor/plasteel/mono/dark, -/area/ship/engineering) +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/structure/closet/emcloset/wall/directional/west, +/turf/open/floor/plasteel/lightgrey, +/area/ship/hallway/central) "er" = ( /obj/structure/cable{ icon_state = "4-8" @@ -460,13 +628,16 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/ntblue, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/corner/opaque/vired, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "eE" = ( /obj/machinery/computer/cargo{ dir = 1 }, +/obj/structure/railing{ + dir = 8 + }, /turf/open/floor/plasteel/tech, /area/ship/cargo) "eN" = ( @@ -481,7 +652,8 @@ dir = 1; pixel_y = -21; id = "Rangar_Starboard_Blasts"; - name = "Blast Doors" + name = "Blast Doors"; + req_ship_access = 1 }, /obj/machinery/button/shieldwallgen{ dir = 1; @@ -495,23 +667,50 @@ /obj/structure/cable{ icon_state = "4-9" }, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/trimline/transparent/white/filled/corner, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "eU" = ( -/obj/structure/closet/crate, -/obj/effect/decal/cleanable/sprayweb, -/turf/open/floor/plasteel/tech, +/obj/effect/turf_decal/trimline/opaque/nsorange/line{ + dir = 5 + }, +/obj/item/stack/tape{ + pixel_y = 10; + pixel_x = 6 + }, +/obj/item/stack/tape{ + pixel_y = 24; + pixel_x = 6; + layer = 3.02 + }, +/obj/item/stack/tape{ + pixel_y = 17; + pixel_x = 7; + layer = 3.01 + }, +/obj/item/hand_labeler{ + pixel_x = -7; + pixel_y = 8 + }, +/obj/item/folder/yellow{ + pixel_x = 6 + }, +/obj/structure/table/reinforced{ + color = "#c1b6a5" + }, +/obj/machinery/computer/helm/viewscreen/directional/east, +/turf/open/floor/plasteel/lightgrey, /area/ship/cargo) "eY" = ( -/obj/effect/turf_decal/trimline/opaque/yellow/filled/line{ +/obj/effect/turf_decal/trimline/transparent/white/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/opaque/vired/filled/shrink_ccw{ dir = 4 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "fd" = ( -/obj/effect/turf_decal/corner/opaque/ntblue/border{ - dir = 8 - }, /obj/structure/cable{ icon_state = "6-8" }, @@ -524,85 +723,139 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 4 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/central) "ff" = ( /obj/structure/railing{ dir = 1 }, /obj/effect/turf_decal/techfloor/hole/right, -/obj/machinery/telecomms/message_server/preset{ - autolinkers = list("messaging","hub"); - network = "nt_commnet"; - layer = 3.1 +/obj/effect/turf_decal/spline/fancy/opaque/blue/corner{ + dir = 8 }, +/obj/structure/closet/crate/bin, /turf/open/floor/plasteel/dark, /area/ship/bridge) "fo" = ( -/obj/structure/window/reinforced/tinted/frosted, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/plastic, -/area/ship/crew/toilet) +/obj/structure/girder/reinforced, +/obj/machinery/camera/autoname{ + dir = 10 + }, +/turf/open/floor/engine/hull, +/area/ship/external/dark) "fy" = ( -/obj/structure/table/wood, /obj/item/newspaper, -/turf/open/floor/plasteel/dark, +/obj/structure/table/reinforced{ + color = "#8A9397" + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/turf/open/floor/plasteel/lightgrey, /area/ship/hallway/central) "fz" = ( -/obj/machinery/door/poddoor/shutters{ - dir = 8; - name = "Cargo Bay"; - id = "Ranger_Cargo_Door" - }, /obj/machinery/door/firedoor/border_only{ dir = 8 }, /obj/machinery/door/firedoor/border_only{ dir = 4 }, -/turf/open/floor/plasteel/tech, +/obj/effect/turf_decal/trimline/opaque/nsorange/line{ + dir = 10 + }, +/obj/machinery/door/poddoor/shutters{ + dir = 8; + name = "Cargo Bay"; + id = "Ranger_Cargo_Door" + }, +/turf/open/floor/plasteel/lightgrey, /area/ship/cargo) "fU" = ( /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plasteel/tech/airless, +/obj/effect/turf_decal/techfloor/hole/right, +/turf/open/floor/plasteel/tech, /area/ship/engineering/communications) "fV" = ( -/turf/closed/wall/r_wall, +/turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/security) +"gd" = ( +/obj/structure/sign/nanotrasen/vigilitas, +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/hallway/port) "gg" = ( -/turf/closed/wall/r_wall, +/turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/crew/toilet) "gh" = ( -/obj/structure/chair/comfy/blue/directional/east, -/obj/item/toy/plush/moth/lovers, /obj/item/radio/intercom/directional/north, -/turf/open/floor/circuit/green/airless, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/structure/table/reinforced{ + color = "#8A9397" + }, +/obj/item/wrench, +/obj/item/screwdriver, +/obj/item/stack/cable_coil/cyan, +/obj/item/stack/sheet/rglass{ + amount = 25 + }, +/obj/item/aicard, +/turf/open/floor/circuit, /area/ship/engineering/communications) "gi" = ( -/obj/machinery/light_switch{ - pixel_x = 8; - pixel_y = 22 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 6 }, /obj/effect/turf_decal/siding/red{ dir = 1 }, -/obj/machinery/camera/autoname, -/turf/open/floor/mineral/plastitanium/red/brig, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/plasteel/tech, /area/ship/security) "gk" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/fulltile, -/obj/machinery/door/firedoor/window, /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plating, +/obj/machinery/door/poddoor/preopen{ + dir = 4; + name = "Intelligence Core"; + id = "AiCore" + }, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/machinery/door/airlock/engineering/glass{ + dir = 4; + name = "Intelligence Core"; + req_access_txt = "10" + }, +/turf/open/floor/plasteel/tech, /area/ship/engineering/communications) +"gr" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "RangerCryoShutters"; + name = "Cryogenic Storage" + }, +/obj/machinery/button/door{ + pixel_x = -21; + dir = 4; + pixel_y = 3; + name = "Cryogenics Access"; + id = "RangerCryoShutters" + }, +/turf/open/floor/plasteel/stairs{ + color = "#8A9397" + }, +/area/ship/crew/cryo) "gz" = ( /obj/machinery/camera/autoname{ dir = 9 @@ -610,7 +863,7 @@ /obj/effect/turf_decal/industrial/outline/blue, /obj/structure/closet/crate/trashcart, /obj/item/storage/bag/trash, -/turf/open/floor/plating, +/turf/open/floor/plasteel/tech, /area/ship/maintenance/starboard) "gD" = ( /obj/structure/cable/cyan{ @@ -619,12 +872,17 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 6 }, -/obj/effect/decal/cleanable/vomit/old, +/obj/effect/decal/cleanable/vomit/old{ + color = "#30b7e5"; + name = "blueish dried vomit" + }, +/obj/item/broken_bottle{ + pixel_x = -10 + }, /turf/open/floor/plating, /area/ship/maintenance/starboard) "gG" = ( /obj/effect/turf_decal/corner/opaque/blue/diagonal, -/obj/machinery/door/airlock/medical/glass, /obj/structure/cable{ icon_state = "1-2" }, @@ -634,13 +892,13 @@ dir = 1 }, /obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/medical{ + name = "Medical Bay" + }, /turf/open/floor/plasteel/white, /area/ship/medical) "gL" = ( -/obj/structure/railing/corner{ - dir = 4 - }, -/obj/effect/turf_decal/industrial/outline/yellow, +/obj/structure/crate_shelf, /turf/open/floor/plasteel/tech, /area/ship/cargo) "gN" = ( @@ -655,16 +913,18 @@ /turf/open/floor/plating, /area/ship/engineering) "gT" = ( -/obj/structure/cable{ - icon_state = "2-5" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 10 }, -/obj/effect/turf_decal/siding/blue, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/siding/blue{ + dir = 6 + }, /turf/open/floor/plasteel/white, /area/ship/medical) "gW" = ( @@ -676,14 +936,21 @@ dir = 8 }, /obj/item/radio/intercom/directional/west, -/obj/effect/turf_decal/corner/opaque/ntblue/half{ +/obj/effect/turf_decal/corner/opaque/vired/half{ dir = 8 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/central) "hf" = ( -/obj/structure/table/reinforced, -/turf/open/floor/plasteel/dark, +/obj/structure/grille, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "CellHallShutters"; + name = "Holding Cell Hall Shutters" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/window/reinforced/fulltile/shuttle, +/turf/open/floor/plating, /area/ship/security) "hk" = ( /obj/structure/cable{ @@ -699,7 +966,7 @@ /obj/structure/cable{ icon_state = "1-10" }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "hl" = ( /obj/structure/cable/cyan{ @@ -708,35 +975,42 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 5 }, +/obj/effect/decal/cleanable/plasma, /turf/open/floor/plating, /area/ship/maintenance/port) "hn" = ( -/obj/effect/turf_decal/corner/opaque/orange/full, -/obj/structure/railing/corner, /obj/structure/cable{ icon_state = "1-8" }, -/obj/effect/turf_decal/siding/yellow, +/obj/effect/decal/cleanable/oil, +/obj/effect/turf_decal/spline/fancy/opaque/orange, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, /turf/open/floor/plasteel/tech, /area/ship/engineering) "hp" = ( -/obj/structure/railing{ - dir = 4 - }, -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/effect/turf_decal/industrial/warning{ - dir = 1 - }, +/obj/effect/turf_decal/industrial/outline/orange, +/obj/effect/decal/cleanable/plasma, +/obj/machinery/portable_atmospherics/pump, /turf/open/floor/plasteel/tech, -/area/ship/cargo) +/area/ship/maintenance/port) "hx" = ( +/obj/structure/closet/cabinet, +/obj/item/clothing/under/rank/security/head_of_security/alt/skirt/lp, +/obj/item/clothing/under/rank/security/head_of_security/alt/lp, +/obj/item/clothing/shoes/jackboots, +/obj/item/clothing/suit/jacket/miljacket, +/obj/item/storage/backpack/messenger/com, +/obj/item/storage/backpack/satchel/cap, +/obj/item/storage/backpack/captain, +/obj/item/storage/backpack/duffelbag/captain, +/obj/item/storage/backpack/ert, /obj/machinery/airalarm/directional/south, -/obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 4 - }, +/obj/item/clothing/head/nanotrasen/beret/security/command, +/obj/item/clothing/suit/armor/nanotrasen/sec_director, /turf/open/floor/wood, -/area/ship/crew/dorm) +/area/ship/crew/dorm/captain) "hz" = ( /obj/docking_port/mobile{ dir = 2; @@ -746,12 +1020,8 @@ /obj/machinery/camera/autoname, /obj/machinery/light/floor, /turf/open/floor/engine/hull, -/area/ship/external) +/area/ship/external/dark) "hF" = ( -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable{ - icon_state = "0-2" - }, /turf/open/floor/plasteel/dark, /area/ship/bridge) "hJ" = ( @@ -761,22 +1031,23 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/ntblue{ - dir = 8 - }, /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/corner/opaque/vired{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "hK" = ( /obj/structure/grille, -/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/firedoor/window, /obj/machinery/door/poddoor/shutters{ id = "Engineering_Specialist_Shutters"; - dir = 4 + dir = 4; + name = "Communications Shutters" }, -/obj/machinery/door/firedoor/window, +/obj/structure/window/reinforced/fulltile/shuttle, /turf/open/floor/plating, /area/ship/engineering) "hN" = ( @@ -785,33 +1056,34 @@ }, /obj/machinery/light/floor, /turf/open/floor/engine/hull, -/area/ship/external) +/area/ship/external/dark) "hQ" = ( +/obj/machinery/door/window/survival_pod{ + dir = 4; + opacity = 1; + req_access_txt = "1"; + name = "Security Specialist Quarters"; + req_ship_access = 1 + }, /turf/open/floor/plasteel/stairs/wood{ dir = 8 }, /area/ship/security) "hZ" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green{ - pixel_x = 5; - pixel_y = 13; - layer = 4.2 - }, -/obj/effect/turf_decal/siding/wood/end{ - dir = 1 +/obj/machinery/camera/autoname{ + dir = 4 }, -/obj/item/toy/plush/moth/deadhead{ - pixel_x = -7; - layer = 4.3 +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 6 }, -/turf/open/floor/wood, -/area/ship/engineering) +/turf/open/floor/plasteel/lightgrey, +/area/ship/hallway/central) "ib" = ( /obj/structure/cable/cyan{ icon_state = "5-10" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/decal/cleanable/oil, /turf/open/floor/plating, /area/ship/maintenance/starboard) "id" = ( @@ -833,6 +1105,12 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, /turf/open/floor/plating, /area/ship/maintenance/starboard) "ih" = ( @@ -851,7 +1129,7 @@ pixel_x = 7; pixel_y = -20 }, -/turf/open/floor/plating, +/turf/open/floor/plasteel/tech, /area/ship/maintenance/starboard) "iq" = ( /obj/effect/turf_decal/industrial/warning{ @@ -859,25 +1137,35 @@ }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, /obj/machinery/firealarm/directional/east, +/obj/effect/spawner/lootdrop/waste/trash, +/obj/effect/decal/cleanable/plasma, /turf/open/floor/plating, /area/ship/maintenance/port) +"iv" = ( +/turf/open/floor/plasteel/lightgrey, +/area/ship/hallway/central) "ix" = ( -/obj/structure/table/greyscale, +/obj/machinery/camera/autoname, /obj/effect/turf_decal/siding/blue{ - dir = 1 + dir = 5 }, -/obj/item/storage/firstaid/medical{ - pixel_y = 7; - pixel_x = -2 +/obj/item/storage/firstaid/toxin{ + pixel_x = 4; + pixel_y = -3 }, /obj/item/storage/firstaid/o2{ pixel_x = 1; pixel_y = 2 }, -/obj/item/storage/firstaid/toxin{ - pixel_x = 4; - pixel_y = -3 +/obj/item/storage/firstaid/medical{ + pixel_y = 7; + pixel_x = -2 }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/table/reinforced, /turf/open/floor/plasteel/white, /area/ship/medical) "iC" = ( @@ -885,22 +1173,23 @@ dir = 4 }, /obj/effect/decal/cleanable/robot_debris/old, +/obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/ship/maintenance/starboard) "iD" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 1 }, -/obj/machinery/camera/autoname{ - dir = 10 +/obj/effect/turf_decal/trimline/transparent/white/filled/corner{ + dir = 8 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "iF" = ( /obj/structure/railing{ @@ -914,23 +1203,35 @@ /obj/structure/table/reinforced{ color = "#c1b6a5" }, -/obj/effect/spawner/lootdrop/lpaid{ - pixel_x = -4; +/obj/item/stamp/captain{ + pixel_x = 7 + }, +/obj/item/folder/blue{ + pixel_x = 8; pixel_y = 10 }, -/obj/effect/spawner/lootdrop/lpcombat{ - pixel_y = 6 +/obj/effect/turf_decal/techfloor{ + dir = 10 }, -/obj/effect/spawner/lootdrop/lpretrieval{ - pixel_x = 3; - pixel_y = 1 +/obj/item/clipboard{ + pixel_y = -2; + pixel_x = -7 }, -/turf/open/floor/plasteel/dark, +/obj/item/pen{ + pixel_x = -7; + pixel_y = -1 + }, +/turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) "iH" = ( -/obj/structure/bed, -/obj/item/bedsheet/grey, -/turf/open/floor/plasteel/dark, +/obj/structure/grille, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + id = "SecCellWindowShutters"; + name = "Brig Cell Window Shutters" + }, +/obj/structure/window/reinforced/fulltile/shuttle, +/turf/open/floor/plating, /area/ship/security) "iI" = ( /obj/structure/closet/emcloset/wall/directional/north, @@ -940,27 +1241,37 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 1 }, -/obj/effect/turf_decal/corner/opaque/ntblue/half{ +/obj/effect/turf_decal/corner/opaque/vired/half{ dir = 1 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) +"iS" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 9 + }, +/turf/open/floor/plasteel/lightgrey, +/area/ship/hallway/central) "iX" = ( /obj/effect/turf_decal/siding/yellow{ dir = 10 }, /obj/structure/ore_box, -/turf/open/floor/plasteel/dark, +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/computer/helm/viewscreen/directional/east, +/turf/open/floor/plasteel/tech, /area/ship/hallway/port) "iZ" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/ntblue{ +/obj/effect/turf_decal/corner/opaque/vired{ dir = 4 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "jb" = ( /obj/machinery/power/shuttle/engine/fueled/plasma{ @@ -968,30 +1279,61 @@ }, /turf/open/floor/plating, /area/ship/maintenance/port) +"jd" = ( +/obj/structure/grille, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "CellHallShutters"; + name = "Holding Cell Hall Shutters" + }, +/obj/structure/window/reinforced/fulltile/shuttle, +/turf/open/floor/plating, +/area/ship/security) "ji" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/structure/mopbucket, -/obj/item/mop, -/turf/open/floor/plasteel/white, +/obj/machinery/light/dim/directional/south, +/obj/effect/turf_decal/trimline/transparent/white/filled/corner{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "jj" = ( /obj/machinery/holopad/emergency, -/turf/open/floor/plasteel/dark, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) "jk" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/effect/turf_decal/siding/blue/corner{ + dir = 4 + }, +/obj/effect/turf_decal/siding/blue/corner{ + dir = 8 + }, /turf/open/floor/plasteel/white, /area/ship/medical) "jr" = ( -/obj/machinery/suit_storage_unit/inherit, -/obj/item/clothing/suit/space/hardsuit/ert/lp/engi, -/obj/item/clothing/mask/breath, -/obj/item/tank/internals/emergency_oxygen, /obj/effect/turf_decal/techfloor{ dir = 8 }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/structure/rack, +/obj/item/storage/toolbox/mechanical, +/obj/item/storage/toolbox/electrical{ + pixel_x = 3; + pixel_y = 7 + }, /turf/open/floor/plasteel/mono/dark, /area/ship/engineering) "js" = ( @@ -999,12 +1341,22 @@ /turf/open/floor/plasteel/telecomms_floor, /area/ship/crew/cryo) "jt" = ( -/obj/machinery/autolathe, /obj/effect/turf_decal/techfloor{ dir = 1 }, +/obj/machinery/airalarm/directional/west, +/obj/machinery/computer/atmos_control/external{ + dir = 4; + icon_state = "computer-right" + }, +/obj/machinery/light_switch{ + pixel_y = 23; + name = "External Lighting Switch"; + color = "#efbc43"; + pixel_x = 6 + }, /turf/open/floor/plasteel/mono/dark, -/area/ship/engineering) +/area/ship/external/dark) "jv" = ( /obj/structure/closet/cabinet, /obj/item/clothing/shoes/jackboots, @@ -1016,29 +1368,43 @@ /obj/item/clothing/suit/armor/vest/security/officer, /obj/item/clothing/under/rank/security/head_of_security/alt/lp, /obj/machinery/light/dim/directional/west, +/obj/item/storage/backpack/ert/security, /turf/open/floor/wood, /area/ship/security) "jA" = ( -/turf/closed/wall/r_wall, +/turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/hallway/port) "jC" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer4{ - dir = 8 +/obj/structure/bed, +/obj/item/bedsheet/nanotrasen, +/obj/item/toy/plush/moth/royal{ + pixel_x = 5; + pixel_y = 1 }, -/turf/open/floor/engine/hull, -/area/ship/external) +/obj/effect/turf_decal/siding/wood{ + dir = 9 + }, +/turf/open/floor/wood, +/area/ship/crew/dorm/captain) "jF" = ( -/obj/effect/turf_decal/corner/opaque/orange/full, /obj/structure/cable{ icon_state = "1-4" }, /obj/structure/cable{ icon_state = "1-10" }, -/obj/effect/turf_decal/siding/yellow{ - dir = 10 +/obj/structure/table/reinforced, +/obj/item/weldingtool{ + pixel_x = -6 }, -/turf/open/floor/plasteel/tech, +/obj/item/multitool, +/obj/item/t_scanner{ + pixel_x = 7; + pixel_y = 4 + }, +/obj/item/stack/cable_coil/random, +/obj/item/storage/belt/utility, +/turf/open/floor/plasteel/mono/dark, /area/ship/engineering) "jH" = ( /obj/machinery/power/apc/auto_name/directional/north, @@ -1051,8 +1417,12 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 1 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) +"jQ" = ( +/obj/structure/sign/nanotrasen/vigilitas, +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/hallway/starboard) "jZ" = ( /obj/structure/cable{ icon_state = "6-8" @@ -1063,38 +1433,87 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 9 }, -/obj/effect/turf_decal/corner/opaque/brown/mono, -/obj/effect/turf_decal/industrial/warning, -/turf/open/floor/plasteel/dark, -/area/ship/storage) +/obj/effect/turf_decal/corner/opaque/vired/three_quarters{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/plasteel/tech, +/area/ship/storage/equip) "kh" = ( /obj/machinery/light_switch{ dir = 1; pixel_x = 7; pixel_y = -20 }, -/obj/item/radio/intercom/directional/west, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/machinery/firealarm/directional/south{ + pixel_x = -4 + }, +/obj/effect/turf_decal/corner/opaque/lightgrey{ + dir = 10 + }, +/obj/machinery/computer/cryopod/directional/west, /turf/open/floor/plasteel/dark, /area/ship/crew/cryo) "ks" = ( /obj/effect/decal/cleanable/cobweb, +/obj/machinery/portable_atmospherics/scrubber, +/obj/machinery/camera/autoname, /turf/open/floor/plating, /area/ship/maintenance/port) "kt" = ( -/obj/effect/turf_decal/borderfloorblack, -/turf/open/floor/plasteel/tech/airless, -/area/ship/engineering/communications) +/obj/machinery/light/dim/directional/south, +/obj/machinery/airalarm/directional/east, +/obj/structure/filingcabinet/double{ + dir = 1 + }, +/obj/item/folder/blue{ + pixel_x = 8; + pixel_y = 10 + }, +/obj/item/folder/red{ + pixel_x = -4; + layer = 3.01; + pixel_y = -8 + }, +/obj/item/folder, +/obj/item/pen, +/obj/item/pen{ + pixel_x = 7; + pixel_y = 10 + }, +/obj/item/pen{ + pixel_x = -4; + pixel_y = -6 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/bridge) "kw" = ( +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, /obj/structure/grille, -/obj/structure/window/reinforced/fulltile, -/obj/machinery/door/firedoor/window, +/obj/machinery/door/poddoor/preopen{ + dir = 4; + name = "Intelligence Core"; + id = "AiCore" + }, +/obj/structure/window/reinforced/fulltile/shuttle, /turf/open/floor/plating, /area/ship/engineering/communications) "kK" = ( -/obj/structure/table/wood, -/obj/item/storage/box/cups, /obj/machinery/light/dim/directional/south, -/turf/open/floor/plasteel/dark, +/obj/structure/table/reinforced{ + color = "#8A9397" + }, +/obj/item/cutting_board, +/obj/item/reagent_containers/food/snacks/donkpocket/warm, +/turf/open/floor/plasteel/lightgrey, /area/ship/hallway/central) "kO" = ( /obj/structure/cable{ @@ -1103,8 +1522,9 @@ /obj/structure/cable{ icon_state = "2-5" }, -/obj/effect/turf_decal/corner/opaque/ntblue, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/corner/opaque/vired, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "kQ" = ( /obj/structure/grille, @@ -1118,8 +1538,8 @@ /area/ship/engineering/communications) "kS" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/obj/effect/turf_decal/siding/blue/corner{ - dir = 4 +/obj/effect/turf_decal/siding/blue{ + dir = 1 }, /turf/open/floor/plasteel/white, /area/ship/medical) @@ -1132,14 +1552,11 @@ dir = 4; railing_color = "#0C119E" }, -/obj/machinery/computer/cryopod/directional/south, +/obj/machinery/recharge_station, /turf/open/floor/plasteel/dark, /area/ship/crew/cryo) "lj" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 8 - }, /obj/machinery/button/door{ dir = 4; pixel_x = -22; @@ -1147,10 +1564,14 @@ id = "Ranger_Cycler_Shutters"; name = "Air Cycler Shutters" }, -/obj/effect/turf_decal/corner/opaque/ntblue/half{ +/obj/structure/chair/handrail{ + dir = 4 + }, +/obj/effect/turf_decal/corner/opaque/vired/half{ dir = 8 }, -/turf/open/floor/plasteel/white, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/dark, /area/ship/hallway/central) "lp" = ( /obj/machinery/button/door{ @@ -1158,7 +1579,10 @@ pixel_y = 6; pixel_x = 22; id = "Ranger_FireFighting_Shut"; - name = "Shutters" + name = "Ready Room"; + req_ship_access = 1; + req_one_access_txt = "50,10,5,1,20"; + req_one_access = list(50, 10, 5, 1, 20) }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 1 @@ -1166,89 +1590,98 @@ /obj/machinery/camera/autoname{ dir = 1 }, -/obj/effect/turf_decal/corner/opaque/ntblue/half, -/obj/effect/turf_decal/trimline/opaque/yellow/filled/corner{ +/obj/item/radio/intercom/directional/south, +/obj/effect/turf_decal/trimline/opaque/vired/filled/corner{ dir = 4 }, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/corner/opaque/vired/half, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "lv" = ( -/obj/effect/decal/cleanable/insectguts, -/turf/open/floor/plasteel/tech, +/obj/effect/turf_decal/trimline/opaque/nsorange/warning{ + dir = 1 + }, +/obj/effect/turf_decal/siding{ + color = "#474747"; + dir = 1 + }, +/turf/open/floor/plasteel/lightgrey, /area/ship/cargo) "lw" = ( -/obj/machinery/airalarm/directional/north, -/obj/structure/closet/crate/large, -/turf/open/floor/plasteel/tech, +/obj/effect/turf_decal/trimline/opaque/nsorange/line{ + dir = 9 + }, +/obj/structure/fluff/hedge/opaque, +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/turf/open/floor/plasteel/lightgrey, /area/ship/cargo) "lB" = ( /obj/structure/cable{ icon_state = "1-2" }, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/trimline/transparent/white/filled/warning{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "lD" = ( /obj/structure/cable{ icon_state = "1-4" }, -/obj/machinery/camera/autoname{ - dir = 5 - }, /turf/open/floor/plasteel/stairs{ - dir = 1 + dir = 1; + color = "#a8b2b6" }, /area/ship/bridge) "lL" = ( +/obj/structure/cable{ + icon_state = "2-9" + }, /obj/effect/turf_decal/siding/blue{ - dir = 1 + dir = 5 }, /turf/open/floor/plasteel/white, /area/ship/medical) "lU" = ( -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/effect/turf_decal/industrial/warning{ - dir = 1 - }, /obj/machinery/light_switch{ dir = 4; pixel_x = -21; pixel_y = 7 }, +/obj/structure/crate_shelf, /turf/open/floor/plasteel/tech, /area/ship/cargo) "lW" = ( -/obj/effect/turf_decal/steeldecal/steel_decals9, -/obj/effect/turf_decal/steeldecal/steel_decals9{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, +/obj/item/radio/intercom/wideband/directional/south, +/obj/effect/turf_decal/techfloor, +/turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) "lX" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 1 }, -/obj/effect/turf_decal/corner/opaque/orange/full, -/obj/effect/turf_decal/siding/yellow, -/obj/structure/railing{ - dir = 2; - layer = 4.1 +/obj/effect/turf_decal/steeldecal/steel_decals10{ + dir = 6 + }, +/obj/effect/turf_decal/steeldecal/steel_decals10{ + dir = 5 }, -/obj/effect/turf_decal/siding/yellow, /turf/open/floor/plasteel/tech, /area/ship/engineering) "mh" = ( /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, /obj/machinery/light/floor, -/obj/effect/turf_decal/corner/opaque/ntblue/half{ +/obj/effect/turf_decal/corner/opaque/vired/half{ dir = 4 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/central) "ml" = ( /obj/structure/cable{ @@ -1259,46 +1692,46 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/effect/turf_decal/corner/opaque/ntblue/half, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/corner/opaque/vired/half, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "mn" = ( -/obj/structure/table/reinforced{ - color = "#c1b6a5" - }, -/obj/item/modular_computer/laptop/preset/civilian, /obj/machinery/light/dim/directional/north, -/turf/open/floor/plasteel/dark, +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/item/computer_hardware/card_slot, +/obj/machinery/modular_computer/console/preset/research{ + name = "modular console" + }, +/turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) "mv" = ( -/obj/item/radio/intercom/directional/north, /obj/effect/turf_decal/siding/wood{ - dir = 1 + dir = 8 }, -/mob/living/simple_animal/pet/dog/corgi/Lisa, -/obj/structure/bed/dogbed, /turf/open/floor/wood, -/area/ship/crew/dorm) +/area/ship/crew/dorm/captain) "mw" = ( -/obj/effect/turf_decal/corner/opaque/ntblue/half{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/light/dim/directional/west, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/corner/opaque/vired/half{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, /area/ship/hallway/central) "my" = ( -/obj/structure/urinal{ - pixel_y = 29 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plastic, -/area/ship/crew/toilet) +/obj/machinery/light/dim/directional/east, +/obj/effect/turf_decal/borderfloorblack, +/obj/structure/bed, +/obj/item/bedsheet, +/turf/open/floor/plasteel/tech, +/area/ship/security) "mJ" = ( -/obj/machinery/portable_atmospherics/pump, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /obj/machinery/light_switch{ dir = 4; @@ -1308,13 +1741,37 @@ /obj/machinery/camera/autoname{ dir = 4 }, -/turf/open/floor/plasteel/tech, -/area/ship/storage) +/obj/effect/turf_decal/industrial/fire{ + dir = 1 + }, +/obj/structure/closet/crate/secure/gear{ + name = "Ammunition Crate" + }, +/obj/structure/chair/handrail{ + dir = 4 + }, +/obj/item/ammo_box/c9mm, +/obj/item/ammo_box/c9mm, +/obj/item/ammo_box/c9mm/rubbershot, +/obj/item/ammo_box/c9mm, +/obj/item/ammo_box/c9mm, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 10 + }, +/obj/effect/decal/cleanable/wrapping, +/turf/open/floor/plasteel/lightgrey, +/area/ship/storage/equip) "mQ" = ( /obj/structure/cable{ icon_state = "2-4" }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/lightgrey{ + dir = 10 + }, /turf/open/floor/plasteel/dark, /area/ship/crew/cryo) "nh" = ( @@ -1322,38 +1779,43 @@ dir = 1 }, /obj/effect/turf_decal/siding/red, -/obj/machinery/door/window/brigdoor{ - req_ship_access = 1; - req_access_txt = "1"; - id = "ranger_brig"; - name = "Holding Cell Door" +/obj/effect/turf_decal/siding/red{ + dir = 6 }, -/turf/open/floor/mineral/plastitanium/red/brig, +/turf/open/floor/plasteel/tech, /area/ship/security) "no" = ( /obj/structure/cable{ icon_state = "6-8" }, -/obj/structure/chair/wood{ - dir = 4 - }, -/obj/effect/turf_decal/corner/opaque/ntblue/half{ +/obj/effect/turf_decal/corner/opaque/vired/half{ dir = 1 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) +"nq" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor/window, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "SecShutters"; + name = "Security Specialist's Office" + }, +/obj/structure/window/reinforced/fulltile/shuttle, +/turf/open/floor/plating, +/area/ship/security) "nA" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "nE" = ( /obj/machinery/button/door{ dir = 2; pixel_x = -2; - name = "Blast Doors"; + name = "Access Blast Doors"; id = "Ranger_AI_Core_Blasts"; - pixel_y = 22 + pixel_y = 22; + req_access_txt = "10" }, /obj/machinery/button/shieldwallgen{ dir = 2; @@ -1361,7 +1823,14 @@ pixel_y = 20; id = "AI_Core_Field_Engi" }, -/turf/open/floor/plasteel/tech/airless, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/machinery/recharge_station, +/turf/open/floor/plasteel/tech, /area/ship/engineering/communications) "nJ" = ( /obj/structure/cable/cyan{ @@ -1383,12 +1852,11 @@ /turf/open/floor/plating, /area/ship/maintenance/port) "of" = ( -/obj/machinery/light/dim/directional/south, /obj/structure/cable{ icon_state = "1-4" }, -/obj/structure/reagent_dispensers/watertank, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/trimline/transparent/white/filled/warning, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "og" = ( /obj/structure/railing{ @@ -1398,12 +1866,22 @@ dir = 8; icon_state = "computer-right" }, -/turf/open/floor/plasteel/dark, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) "oi" = ( -/obj/structure/railing/corner{ +/obj/effect/turf_decal/siding/blue{ dir = 8 }, +/obj/structure/chair/office{ + dir = 4; + name = "tactical swivel chair" + }, /turf/open/floor/plasteel/white, /area/ship/medical) "ok" = ( @@ -1413,13 +1891,23 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/machinery/door/firedoor/border_only{ +/obj/machinery/door/poddoor{ + dir = 4; + id = "Ranger_Cycler_Shutters"; + name = "Air Cycler Lockdown" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/machinery/door/firedoor/border_only{ +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ dir = 8 }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/tech/techmaint{ + color = "#a8b2b6" + }, /area/ship/hallway/central) "oq" = ( /obj/structure/cable/cyan{ @@ -1428,16 +1916,38 @@ /turf/open/floor/plating, /area/ship/maintenance/starboard) "or" = ( +/obj/item/bodypart/leg/right/robot, +/obj/item/bodypart/r_arm/robot, +/obj/item/bodypart/leg/left/robot, +/obj/item/bodypart/l_arm/robot, +/obj/item/bodypart/chest/robot, +/obj/item/bodypart/head/robot, +/obj/item/borg/upgrade/ai, +/obj/item/robot_suit, +/obj/structure/closet/crate/engineering{ + name = "Robotics Crate" + }, +/obj/item/stock_parts/cell/high, +/obj/item/assembly/flash/handheld, +/obj/item/assembly/flash/handheld, +/obj/item/borg/upgrade/restart, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /turf/open/floor/plating, /area/ship/engineering) "ox" = ( /obj/structure/chair/sofa/brown/corner/directional/south, /obj/machinery/light/dim/directional/east, -/turf/open/floor/plasteel/dark, +/obj/item/ammo_casing/spent{ + pixel_x = 13; + desc = "A spent bullet-casing that someone hid behind the couch, likely to avoid the Lieutenant's ire." + }, +/turf/open/floor/plasteel/lightgrey, /area/ship/hallway/central) "oz" = ( -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/trimline/transparent/white/filled/warning{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "oI" = ( /obj/machinery/power/smes/shuttle/precharged{ @@ -1446,37 +1956,33 @@ /obj/machinery/door/window/northleft{ dir = 4 }, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "Ranger_Port_maint_shut" - }, /obj/structure/cable/yellow{ icon_state = "0-8" }, +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = "Ranger_Port_maint_shut"; + name = "Engine Shutters" + }, /turf/open/floor/plating, /area/ship/maintenance/port) -"oM" = ( -/obj/machinery/door/window/eastleft{ - dir = 2 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 - }, -/turf/open/floor/plastic, -/area/ship/crew/toilet) "oQ" = ( /obj/item/radio/intercom/directional/west, +/obj/machinery/camera/autoname{ + dir = 4 + }, /turf/open/floor/wood, /area/ship/medical) "pa" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/machinery/holopad, -/turf/open/floor/plasteel/white, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "pf" = ( /obj/structure/closet/emcloset/wall/directional/south, @@ -1484,39 +1990,72 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/ntblue/half, /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/corner/opaque/vired/half, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "pi" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/obj/effect/turf_decal/corner/opaque/ntblue/three_quarters{ +/obj/effect/turf_decal/corner/opaque/vired/three_quarters{ dir = 8 }, -/turf/open/floor/plasteel/white, +/obj/structure/table/rolling, +/obj/item/chair/plastic, +/obj/item/chair/plastic{ + pixel_y = 4 + }, +/obj/item/chair/plastic{ + pixel_y = 6 + }, +/obj/item/chair/plastic{ + pixel_y = 10 + }, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "pn" = ( /obj/structure/chair/wood, /obj/item/toy/figure/assistant{ layer = 3.1 }, -/turf/open/floor/plasteel/dark, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/effect/decal/cleanable/molten_object{ + pixel_x = 10 + }, +/turf/open/floor/plasteel/lightgrey, /area/ship/hallway/central) "pp" = ( -/obj/structure/sink{ - dir = 8; - pixel_x = 13; - pixel_y = 2 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 }, -/obj/structure/mirror{ - pixel_x = 24 +/obj/structure/window/reinforced/tinted, +/obj/structure/dresser{ + dir = 1 + }, +/obj/structure/bedsheetbin/empty{ + pixel_y = 7 + }, +/obj/item/towel{ + pixel_y = 10 + }, +/obj/item/towel{ + pixel_y = 10 }, -/turf/open/floor/plastic, +/obj/item/towel{ + pixel_y = 10 + }, +/obj/item/towel{ + pixel_y = 10 + }, +/obj/item/towel{ + pixel_y = 10 + }, +/turf/open/floor/plasteel/showroomfloor, /area/ship/crew/toilet) "ps" = ( -/obj/structure/closet/secure_closet/lp/engineer, /obj/machinery/light/dim/directional/north, /obj/item/clothing/gloves/color/yellow{ pixel_y = -9 @@ -1544,15 +2083,25 @@ pixel_y = 9; pixel_x = -12 }, -/obj/item/kitchen/knife/combat/survival{ +/obj/item/melee/knife/survival{ pixel_y = 6; pixel_x = 5 }, /obj/item/clothing/head/welding{ pixel_y = -9 }, -/obj/item/clothing/glasses/meson/gar{ - pixel_y = 8 +/obj/item/clothing/glasses/meson/engine, +/obj/item/clothing/glasses/hud/diagnostic, +/obj/item/pipe_dispenser, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/structure/closet/secure_closet/lp/engineer, +/obj/item/gun/energy/plasmacutter, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 19; + pixel_y = -10 }, /turf/open/floor/plasteel/mono/dark, /area/ship/engineering) @@ -1561,56 +2110,68 @@ icon_state = "1-2" }, /turf/open/floor/plasteel/stairs{ - dir = 1 + dir = 1; + color = "#a8b2b6" }, /area/ship/bridge) "pD" = ( +/obj/structure/closet/crate/secure/loot, /turf/open/floor/plasteel/tech, /area/ship/cargo) "pL" = ( /obj/structure/chair/comfy/blue/directional/east, -/obj/item/toy/plush/moth/royal, +/obj/item/toy/plush/moth/royal{ + layer = 3.05; + pixel_x = -6; + pixel_y = 11 + }, /obj/item/radio/intercom/wideband/directional/south, -/turf/open/floor/circuit/green/airless, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/item/toy/plush/moth/lovers{ + layer = 3.05; + pixel_x = 4 + }, +/turf/open/floor/circuit, /area/ship/engineering/communications) "pU" = ( /obj/machinery/camera/autoname{ dir = 1 }, -/obj/effect/turf_decal/corner/opaque/ntblue/half, /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/corner/opaque/vired/half, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "qb" = ( /obj/item/radio/intercom/directional/south, /obj/effect/turf_decal/industrial/outline/blue, -/obj/structure/janitorialcart{ - dir = 4 - }, -/obj/item/mop, -/turf/open/floor/plating, +/obj/structure/reagent_dispensers/foamtank, +/obj/item/extinguisher/advanced, +/turf/open/floor/plasteel/tech, /area/ship/maintenance/port) "qe" = ( -/obj/structure/urinal{ - pixel_y = 29 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ +/obj/structure/girder/reinforced, +/obj/machinery/camera/autoname{ dir = 6 }, -/turf/open/floor/plastic, -/area/ship/crew/toilet) -"qs" = ( -/obj/machinery/power/shuttle/engine/electric{ - dir = 4 +/turf/open/floor/engine/hull, +/area/ship/external/dark) +"qn" = ( +/obj/effect/turf_decal/siding/wood{ + dir = 5 }, +/obj/structure/bed/dogbed, +/mob/living/simple_animal/pet/dog/corgi/Lisa, +/turf/open/floor/wood, +/area/ship/crew/dorm/captain) +"qs" = ( /obj/structure/cable/yellow{ icon_state = "0-4" }, +/obj/machinery/power/shuttle/engine/electric/premium, /turf/open/floor/plating, /area/ship/maintenance/starboard) "qQ" = ( @@ -1620,10 +2181,6 @@ /turf/open/floor/plating, /area/ship/maintenance/starboard) "qR" = ( -/obj/machinery/door/airlock/security/glass, -/obj/structure/cable{ - icon_state = "1-2" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/door/firedoor/border_only{ @@ -1631,6 +2188,13 @@ }, /obj/machinery/door/firedoor/border_only, /obj/effect/turf_decal/corner/opaque/red/full, +/obj/machinery/door/airlock/security{ + name = "Security Specialist's Office"; + req_access_txt = "1" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plasteel/dark, /area/ship/security) "qS" = ( @@ -1639,38 +2203,55 @@ }, /obj/effect/decal/cleanable/oil/streak, /obj/machinery/light/dim/directional/north, +/obj/machinery/portable_atmospherics/scrubber, /turf/open/floor/plating, /area/ship/maintenance/port) "qZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/effect/turf_decal/corner/opaque/brown/mono, -/obj/effect/turf_decal/industrial/warning{ +/obj/effect/turf_decal/corner/opaque/vired/half{ dir = 1 }, -/turf/open/floor/plasteel/dark, -/area/ship/storage) +/obj/machinery/holopad, +/turf/open/floor/plasteel/tech, +/area/ship/storage/equip) "rg" = ( -/obj/machinery/portable_atmospherics/scrubber, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/turf/open/floor/plasteel/tech, -/area/ship/storage) +/obj/effect/turf_decal/industrial/fire{ + dir = 1 + }, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/plasteel/lightgrey, +/area/ship/storage/equip) "rq" = ( /obj/structure/cable{ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/turf/open/floor/plasteel/stairs, +/turf/open/floor/plasteel/stairs{ + color = "#8A9397" + }, /area/ship/crew/cryo) +"rw" = ( +/obj/machinery/camera/autoname{ + dir = 5 + }, +/obj/machinery/light/floor, +/turf/open/floor/engine/hull, +/area/ship/external/dark) "rA" = ( -/obj/effect/turf_decal/corner/opaque/orange/full, /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/turf_decal/siding/yellow, -/obj/machinery/holopad, -/turf/open/floor/plasteel/tech, -/area/ship/engineering) -"rC" = ( +/obj/structure/chair/office{ + dir = 8; + name = "tactical swivel chair" + }, +/obj/effect/turf_decal/spline/fancy/opaque/orange{ + dir = 10 + }, +/turf/open/floor/plasteel/tech, +/area/ship/engineering) +"rC" = ( /obj/structure/cable{ icon_state = "1-2" }, @@ -1692,31 +2273,31 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 1 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "rM" = ( /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/turf_decal/corner/opaque/orange/border{ - dir = 8 - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/turf_decal/trimline/opaque/orange/arrow_cw{ +/obj/effect/turf_decal/trimline/opaque/vired/arrow_cw{ dir = 4 }, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/trimline/opaque/vired/filled/line{ + dir = 8 + }, +/turf/open/floor/plasteel/tech/techmaint, /area/ship/hallway/starboard) "rT" = ( -/obj/structure/reagent_dispensers/water_cooler, /obj/machinery/light_switch{ dir = 1; pixel_x = -7; pixel_y = -19 }, -/turf/open/floor/plasteel/dark, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/obj/structure/closet/secure_closet/freezer/fridge, +/turf/open/floor/plasteel/lightgrey, /area/ship/hallway/central) "rW" = ( /obj/machinery/power/smes/shuttle/precharged{ @@ -1727,7 +2308,8 @@ }, /obj/machinery/door/poddoor/shutters{ dir = 4; - id = "Ranger_SB_maint_shut" + id = "Ranger_SB_maint_shut"; + name = "Engine Shutters" }, /obj/structure/cable/yellow{ icon_state = "0-8" @@ -1735,21 +2317,20 @@ /turf/open/floor/plating, /area/ship/maintenance/starboard) "rX" = ( -/obj/effect/turf_decal/corner/opaque/ntblue/half{ - dir = 8 +/obj/structure/railing{ + dir = 5; + layer = 4.1 }, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable{ - icon_state = "0-2" +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 5 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/white, +/obj/structure/closet/firecloset/wall/directional/west, +/turf/open/floor/plasteel/lightgrey, /area/ship/hallway/central) "rZ" = ( /obj/effect/turf_decal/atmos/air, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 8 }, /turf/open/floor/engine/air, /area/ship/hallway/central) @@ -1762,13 +2343,28 @@ color = "#c1b6a5" }, /obj/machinery/fax/nanotrasen, -/turf/open/floor/plasteel/dark, +/obj/machinery/camera/autoname{ + dir = 6 + }, +/obj/effect/turf_decal/techfloor{ + dir = 9 + }, +/obj/machinery/button/door{ + pixel_y = 21; + id = "BridgeAtrium"; + name = "Atrium Shutters"; + pixel_x = 9 + }, +/turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) "sl" = ( -/obj/effect/turf_decal/borderfloorblack{ - dir = 8 +/obj/effect/turf_decal/trimline/opaque/yellow/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 9 }, -/turf/open/floor/plasteel/tech/airless, +/turf/open/floor/plasteel/telecomms_floor, /area/ship/engineering/communications) "sm" = ( /obj/structure/cable{ @@ -1781,8 +2377,14 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/turf/open/floor/plating, +/obj/effect/decal/cleanable/plasma, +/turf/open/floor/plasteel/tech, /area/ship/maintenance/port) +"sp" = ( +/obj/machinery/camera/autoname, +/obj/machinery/light/floor, +/turf/open/floor/engine/hull, +/area/ship/external/dark) "sw" = ( /obj/structure/cable{ icon_state = "6-8" @@ -1793,10 +2395,9 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 1 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "sF" = ( -/obj/structure/table/greyscale, /obj/item/storage/box/syringes{ pixel_y = 10; pixel_x = -5 @@ -1812,28 +2413,51 @@ pixel_x = 5 }, /obj/machinery/light/dim/directional/north, +/obj/structure/table/reinforced, +/obj/machinery/airalarm/directional/west, /turf/open/floor/plasteel/white, /area/ship/medical) "sJ" = ( -/turf/closed/wall/r_wall, +/turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/hallway/central) "sR" = ( -/obj/structure/table/wood, /obj/machinery/light/dim/directional/south, /obj/effect/turf_decal/siding/red/end, -/obj/item/toy/plush/spider, -/turf/open/floor/mineral/plastitanium/red/brig, +/obj/machinery/computer/security/telescreen{ + dir = 1; + pixel_y = -32; + network = list("ss13") + }, +/obj/machinery/airalarm/directional/west, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/plasteel/tech, /area/ship/security) "sU" = ( -/obj/structure/table/greyscale, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable{ - icon_state = "0-10" +/obj/effect/turf_decal/industrial/warning{ + dir = 9 }, -/obj/effect/turf_decal/siding/blue{ - dir = 5 +/obj/effect/turf_decal/siding/thinplating/light{ + dir = 9 + }, +/obj/effect/turf_decal/borderfloorwhite/corner, +/obj/structure/sink{ + dir = 8; + pixel_x = 12; + pixel_y = 4 + }, +/obj/machinery/button/door{ + pixel_x = 26; + dir = 8; + name = "Medical Shutters"; + id = "MedShutters"; + req_ship_access = 1; + req_access_txt = "5" + }, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 25; + pixel_y = -9 }, -/obj/item/defibrillator/loaded, /turf/open/floor/plasteel/white, /area/ship/medical) "tb" = ( @@ -1864,20 +2488,20 @@ /obj/structure/cable{ icon_state = "4-10" }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/central) "tg" = ( -/obj/machinery/power/shuttle/engine/electric{ - dir = 4 - }, /obj/structure/cable/yellow{ icon_state = "0-4" }, +/obj/machinery/power/shuttle/engine/electric/premium, /turf/open/floor/plating, /area/ship/maintenance/port) "tj" = ( /obj/machinery/door/airlock/command{ - dir = 4 + dir = 4; + name = "Bridge"; + req_one_access_txt = list(50, 10, 5, 1, 20) }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -1897,8 +2521,10 @@ /turf/open/floor/plasteel/dark, /area/ship/bridge) "tk" = ( -/obj/effect/turf_decal/corner/opaque/orange/full, -/obj/effect/turf_decal/siding/yellow, +/obj/machinery/light/dim/directional/east, +/obj/effect/turf_decal/spline/fancy/opaque/orange{ + dir = 6 + }, /turf/open/floor/plasteel/tech, /area/ship/engineering) "tq" = ( @@ -1920,7 +2546,10 @@ dir = 8; icon_state = "computer-left" }, -/turf/open/floor/plasteel/dark, +/obj/effect/turf_decal/techfloor{ + dir = 5 + }, +/turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) "tQ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -1930,49 +2559,63 @@ /obj/effect/turf_decal/siding/red{ dir = 1 }, -/obj/structure/cable{ - icon_state = "1-6" +/obj/structure/cable, +/obj/machinery/power/apc/auto_name/directional/east, +/obj/effect/turf_decal/siding/red{ + dir = 5 }, -/turf/open/floor/mineral/plastitanium/red/brig, +/obj/machinery/light_switch{ + pixel_x = 20; + pixel_y = 11; + dir = 8 + }, +/turf/open/floor/plasteel/tech, /area/ship/security) "tR" = ( /obj/structure/cable{ icon_state = "4-9" }, /obj/machinery/light/dim/directional/south, -/obj/effect/turf_decal/corner/opaque/ntblue/half, /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/corner/opaque/vired/half, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "tT" = ( -/turf/open/floor/plasteel/tech/airless, +/obj/effect/turf_decal/trimline/opaque/yellow/filled/warning, +/obj/effect/turf_decal/spline/fancy/opaque/black, +/turf/open/floor/plasteel/telecomms_floor, /area/ship/engineering/communications) "tZ" = ( /obj/machinery/button/door{ dir = 4; pixel_x = -21; name = "Shutters"; - id = "Ranger_SB_maint_shut" + id = "Ranger_SB_maint_shut"; + req_ship_access = 1; + pixel_y = 5 }, /turf/open/floor/plating, /area/ship/maintenance/starboard) "uk" = ( -/obj/item/clothing/suit/space/eva, -/obj/item/clothing/head/helmet/space/eva, /obj/item/clothing/mask/breath, -/obj/structure/closet/emcloset/empty{ - name = "emergency EVA gear" - }, /obj/item/tank/internals/emergency_oxygen, /obj/effect/turf_decal/siding/yellow{ dir = 5 }, -/turf/open/floor/plasteel/dark, +/obj/structure/railing{ + dir = 4; + layer = 4.1 + }, +/obj/machinery/suit_storage_unit/inherit{ + name = "Emergency EVA Suit" + }, +/obj/item/clothing/suit/space/fragile, +/obj/item/clothing/head/helmet/space/fragile, +/turf/open/floor/plasteel/tech, /area/ship/hallway/starboard) "up" = ( -/obj/effect/turf_decal/corner/opaque/orange/full, /obj/machinery/airalarm/directional/north, /obj/structure/cable{ icon_state = "2-4" @@ -1980,10 +2623,11 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 +/obj/machinery/holopad, +/obj/effect/turf_decal/spline/fancy/opaque/orange{ + dir = 1 }, -/obj/effect/turf_decal/siding/yellow{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 1 }, /turf/open/floor/plasteel/tech, @@ -1992,7 +2636,20 @@ /obj/machinery/atmospherics/components/binary/dp_vent_pump/high_volume/layer2{ dir = 4 }, -/turf/open/floor/plasteel/dark, +/obj/machinery/camera/autoname{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/effect/turf_decal/siding/thinplating{ + dir = 1; + color = "#a8b2b6" + }, +/obj/effect/turf_decal/trimline/opaque/vired/arrow_ccw, +/turf/open/floor/plasteel/tech/techmaint{ + color = "#a8b2b6" + }, /area/ship/hallway/central) "ux" = ( /obj/machinery/light/dim/directional/south, @@ -2002,9 +2659,13 @@ name = "Nanotrasen relay"; network = "nt_commnet" }, -/turf/open/floor/circuit/telecomms{ - initial_gas_mix = "TEMP=2.7" +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/machinery/camera/autoname{ + dir = 10 }, +/turf/open/floor/circuit, /area/ship/engineering/communications) "uE" = ( /obj/structure/cable{ @@ -2013,22 +2674,25 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 1 }, -/obj/effect/turf_decal/corner/opaque/ntblue/half, /obj/item/radio/intercom/directional/south, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/corner/opaque/vired/half, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "uH" = ( -/obj/machinery/door/airlock/public/glass, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/door/firedoor/border_only, /obj/machinery/door/firedoor/border_only{ dir = 1 }, -/obj/effect/turf_decal/corner/opaque/ntblue/half{ +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Corridor Lockdown Port"; + id = "RangerPortShutters" + }, +/obj/effect/turf_decal/corner/opaque/vired/half{ dir = 8 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "uW" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -2038,27 +2702,30 @@ dir = 4 }, /obj/effect/turf_decal/siding/blue, -/obj/machinery/iv_drip, +/obj/machinery/holopad, /turf/open/floor/plasteel/white, /area/ship/medical) "vh" = ( /obj/effect/turf_decal/corner/opaque/blue/diagonal, -/obj/machinery/door/window, +/obj/machinery/door/window{ + req_ship_access = 1; + name = "Surgical Compartment" + }, +/obj/effect/turf_decal/borderfloorwhite{ + dir = 1 + }, /turf/open/floor/plasteel/white, /area/ship/medical) "vj" = ( -/obj/effect/turf_decal/corner/opaque/ntblue/half{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/camera/autoname{ - dir = 4 +/obj/structure/cable{ + icon_state = "2-9" }, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/corner/opaque/vired/half{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, /area/ship/hallway/central) "vk" = ( /obj/structure/sink{ @@ -2073,11 +2740,36 @@ pixel_x = -7; pixel_y = 21 }, -/turf/open/floor/plastic, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 10 + }, +/obj/item/towel{ + pixel_x = 10; + pixel_y = 14 + }, +/obj/item/towel{ + pixel_x = -7; + pixel_y = 14 + }, +/obj/structure/railing{ + dir = 1; + name = "towel holder" + }, +/turf/open/floor/plasteel/showroomfloor, /area/ship/crew/toilet) "vm" = ( -/turf/closed/wall/r_wall, +/turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/medical) +"vo" = ( +/obj/structure/crate_shelf, +/obj/structure/sign/nanotrasen/ns{ + pixel_x = 32 + }, +/obj/machinery/camera/autoname{ + dir = 10 + }, +/turf/open/floor/plasteel/tech, +/area/ship/cargo) "vp" = ( /obj/effect/turf_decal/steeldecal/steel_decals10{ dir = 5 @@ -2085,47 +2777,76 @@ /obj/effect/turf_decal/steeldecal/steel_decals10{ dir = 6 }, -/turf/open/floor/plasteel/dark, +/obj/structure/cable{ + icon_state = "4-10" + }, +/turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) "vr" = ( /obj/structure/window/reinforced{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/manifold/cyan/visible, /turf/open/floor/engine/air, /area/ship/hallway/central) "vv" = ( /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/reagent_dispensers/fueltank, +/obj/structure/railing{ + dir = 1 + }, +/obj/effect/decal/cleanable/oil, /turf/open/floor/plating, /area/ship/maintenance/starboard) "vz" = ( -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/machinery/light/dim/directional/south, +/obj/structure/closet/crate/hydroponics{ + name = "Sustenance Crate" + }, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/reagent_containers/food/drinks/waterbottle/large, +/obj/item/storage/ration/assorted_salted_offal, +/obj/item/storage/ration/battered_fish_sticks, +/obj/item/storage/ration/beef_goulash, +/obj/item/storage/ration/beef_strips, +/obj/item/storage/ration/fried_fish, +/obj/machinery/airalarm/directional/south, /turf/open/floor/plasteel/tech, /area/ship/cargo) "vB" = ( -/obj/machinery/cryopod, /obj/machinery/camera/autoname, +/obj/machinery/cryopod, /turf/open/floor/plasteel/telecomms_floor, /area/ship/crew/cryo) "vF" = ( -/obj/effect/turf_decal/siding/blue, -/obj/structure/closet/crate/freezer/blood, -/obj/structure/railing{ - dir = 8; - layer = 4.1 +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/machinery/door/window/survival_pod{ + dir = 4; + opacity = 1; + name = "Medical Specialist's Quarters"; + req_access_txt = "5"; + req_ship_access = 1 + }, +/turf/open/floor/plasteel/stairs/wood{ + dir = 8 }, -/turf/open/floor/plasteel/white, /area/ship/medical) "vO" = ( -/turf/open/floor/circuit/green/airless, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/yellow/filled/warning{ + dir = 4 + }, +/turf/open/floor/plasteel/telecomms_floor, /area/ship/engineering/communications) "vR" = ( -/obj/machinery/light/dim/directional/south, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 5 }, @@ -2135,15 +2856,16 @@ /obj/effect/turf_decal/industrial/warning/corner{ dir = 1 }, -/turf/open/floor/plasteel/white, +/obj/machinery/light/dim/directional/west, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "vS" = ( -/obj/structure/table/optable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 5 }, -/obj/effect/turf_decal/siding/blue, -/obj/item/storage/backpack/duffelbag/med/surgery, +/obj/effect/turf_decal/siding/blue{ + dir = 10 + }, /turf/open/floor/plasteel/white, /area/ship/medical) "vT" = ( @@ -2165,20 +2887,23 @@ /obj/machinery/door/firedoor/border_only{ dir = 4 }, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, /turf/open/floor/plating, /area/ship/maintenance/port) "vV" = ( +/obj/effect/turf_decal/corner/opaque/blue/diagonal, /obj/structure/window/reinforced/spawner{ - dir = 4 + dir = 8 }, -/obj/machinery/suit_storage_unit/inherit, -/obj/item/clothing/suit/space/hardsuit/ert/lp/med, -/obj/item/clothing/mask/breath, -/obj/machinery/camera/autoname, -/obj/effect/turf_decal/siding/blue{ - dir = 5 +/obj/effect/turf_decal/borderfloorwhite{ + dir = 4 }, -/obj/item/tank/internals/emergency_oxygen, +/obj/machinery/computer/operating, /turf/open/floor/plasteel/white, /area/ship/medical) "wc" = ( @@ -2188,25 +2913,27 @@ /obj/machinery/door/window/northright{ dir = 4 }, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "Ranger_Port_maint_shut" - }, /obj/structure/cable/yellow{ icon_state = "0-8" }, -/turf/open/floor/plating, +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = "Ranger_Port_maint_shut"; + name = "Engine Shutters" + }, +/turf/open/floor/plating, /area/ship/maintenance/port) "wf" = ( -/obj/machinery/telecomms/receiver/preset_right{ - autolinkers = list("receiverB","hub"); - freq_listening = list(1353,1447,1459); - network = "nt_commnet" - }, -/turf/open/floor/circuit/telecomms{ - initial_gas_mix = "TEMP=2.7" +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -20; + pixel_y = 12 }, -/area/ship/engineering/communications) +/obj/machinery/photocopier, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/bridge) "wh" = ( /obj/machinery/power/shieldwallgen/atmos/roundstart{ dir = 4; @@ -2223,57 +2950,66 @@ /turf/open/floor/plasteel, /area/ship/hallway/starboard) "wp" = ( -/obj/item/clothing/suit/space/eva, -/obj/item/clothing/head/helmet/space/eva, /obj/item/clothing/mask/breath, /obj/item/tank/internals/emergency_oxygen, -/obj/structure/closet/emcloset/empty{ - name = "emergency EVA gear" - }, /obj/effect/turf_decal/siding/yellow{ dir = 6 }, -/turf/open/floor/plasteel/dark, +/obj/structure/railing{ + dir = 4; + layer = 4.1 + }, +/obj/machinery/suit_storage_unit/inherit{ + name = "Emergency EVA Suit" + }, +/obj/item/clothing/suit/space/fragile, +/obj/item/clothing/head/helmet/space/fragile, +/turf/open/floor/plasteel/tech, /area/ship/hallway/port) "wq" = ( /turf/open/floor/engine/hull, -/area/ship/external) +/area/ship/external/dark) "wu" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 9 }, -/obj/effect/turf_decal/corner/opaque/brown/mono, -/obj/effect/turf_decal/industrial/warning, -/turf/open/floor/plasteel/dark, -/area/ship/storage) -"ww" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/turf_decal/industrial/stand_clear{ - dir = 1 - }, +/obj/effect/turf_decal/corner/opaque/vired/half, +/obj/effect/turf_decal/siding/thinplating/dark, /turf/open/floor/plasteel/tech, -/area/ship/cargo) +/area/ship/storage/equip) +"ww" = ( +/obj/machinery/light/dim/directional/west, +/obj/structure/chair/handrail, +/turf/open/floor/engine/hull, +/area/ship/external/dark) "wC" = ( /obj/effect/turf_decal/steeldecal/steel_decals6, -/obj/effect/turf_decal/borderfloorblack{ - dir = 6 +/obj/machinery/telecomms/receiver/preset_right{ + autolinkers = list("receiverB","hub"); + freq_listening = list(1353,1447,1459); + network = "nt_commnet" + }, +/obj/effect/turf_decal/techfloor{ + dir = 8 }, -/turf/open/floor/plasteel/tech/airless, +/turf/open/floor/circuit, /area/ship/engineering/communications) "wE" = ( /obj/machinery/button/door{ pixel_y = 21; name = "Blast Doors"; - id = "Ranger_Port_Blasts" + id = "Ranger_Port_Blasts"; + req_ship_access = 1 }, /obj/machinery/button/shieldwallgen{ pixel_y = 20; pixel_x = 8; id = "Ranger_Port_holofields" }, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/trimline/transparent/white/filled/corner{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "wT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -2283,26 +3019,10 @@ dir = 4 }, /obj/effect/turf_decal/trimline/opaque/red/filled/corner, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "wU" = ( -/obj/machinery/light_switch{ - dir = 8; - pixel_x = 19; - pixel_y = 8 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/corner/opaque/orange/full, -/obj/effect/turf_decal/siding/yellow{ - dir = 6 - }, -/obj/structure/railing{ - dir = 2; - layer = 4.1 - }, -/turf/open/floor/plasteel/tech, +/turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/engineering) "xj" = ( /obj/structure/cable{ @@ -2314,27 +3034,48 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/effect/turf_decal/trimline/opaque/ntblue/filled/line, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "xp" = ( -/obj/machinery/airalarm/directional/west, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/wood, -/area/ship/medical) +/obj/structure/table/reinforced{ + color = "#c1b6a5" + }, +/obj/item/lighter/greyscale{ + pixel_x = 8; + pixel_y = -8 + }, +/obj/machinery/computer/helm/viewscreen/directional/south, +/obj/item/paper_bin{ + pixel_x = -4; + pixel_y = 2 + }, +/obj/item/pen/fourcolor{ + pixel_x = -6; + pixel_y = 3 + }, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/bridge) "xq" = ( /obj/effect/turf_decal/industrial/warning, /turf/open/floor/plating, /area/ship/engineering) "xv" = ( -/obj/machinery/recharge_station, -/obj/machinery/light/dim/directional/east, -/turf/open/floor/plasteel/white, -/area/ship/crew/toilet) +/obj/structure/curtain/bounty, +/obj/machinery/shower{ + dir = 1 + }, +/turf/open/floor/plating/catwalk_floor, +/area/ship/security) "xw" = ( -/obj/structure/table/wood, /obj/machinery/microwave, /obj/machinery/light/dim/directional/east, -/turf/open/floor/plasteel/dark, +/obj/structure/table/reinforced{ + color = "#8A9397" + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/turf/open/floor/plasteel/lightgrey, /area/ship/hallway/central) "xA" = ( /obj/structure/tank_dispenser/oxygen, @@ -2342,7 +3083,11 @@ /obj/effect/turf_decal/siding/yellow{ dir = 4 }, -/turf/open/floor/plasteel/dark, +/obj/structure/railing{ + dir = 4; + layer = 4.1 + }, +/turf/open/floor/plasteel/tech, /area/ship/hallway/starboard) "xB" = ( /obj/structure/cable{ @@ -2360,38 +3105,40 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/turf/open/floor/plating, +/obj/effect/turf_decal/steeldecal/steel_decals10{ + dir = 8 + }, +/obj/effect/turf_decal/steeldecal/steel_decals10{ + dir = 1 + }, +/obj/effect/decal/cleanable/plasma, +/turf/open/floor/plasteel/tech, /area/ship/maintenance/port) "xK" = ( /obj/structure/table/reinforced{ color = "#c1b6a5" }, -/obj/item/folder/blue{ - pixel_x = -6 - }, -/obj/item/folder/red{ - pixel_y = 2 - }, -/obj/item/folder{ - pixel_y = 5; - pixel_x = 7 +/obj/effect/turf_decal/techfloor{ + dir = 4 }, -/turf/open/floor/plasteel/dark, +/obj/item/binoculars, +/turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) "yi" = ( /obj/effect/turf_decal/industrial/warning, /obj/machinery/button/shieldwallgen{ dir = 8; pixel_x = 20; - pixel_y = -7; + pixel_y = 9; id = "AI_Core_Field_Engi" }, /obj/machinery/button/door{ dir = 8; pixel_x = 22; - name = "Blast Doors"; + name = "Access Blast Doors"; id = "Ranger_AI_Core_Blasts"; - pixel_y = 1 + pixel_y = 1; + req_access_txt = "10" }, /obj/structure/cable{ icon_state = "1-2" @@ -2401,17 +3148,34 @@ }, /turf/open/floor/plating, /area/ship/engineering) +"yk" = ( +/obj/machinery/computer/helm/viewscreen/directional/south, +/obj/machinery/computer/secure_data{ + dir = 8 + }, +/turf/open/floor/mineral/plastitanium/red/brig, +/area/ship/security) "ym" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/effect/turf_decal/corner/opaque/lightgrey{ + dir = 10 + }, /turf/open/floor/plasteel/dark, /area/ship/crew/cryo) "yo" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/obj/effect/turf_decal/corner/opaque/ntblue/half{ +/obj/item/radio/intercom/directional/north, +/obj/effect/turf_decal/corner/opaque/vired/half{ dir = 1 }, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/plasteel/white, +/obj/structure/chair/plastic{ + dir = 4 + }, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "yA" = ( /obj/machinery/telecomms/hub{ @@ -2419,50 +3183,64 @@ id = "Nanotrasen Communications Hub"; autolinkers = list("hub","bus","relay","messaging","nanotrasen","broadcasterB","receiverB") }, -/turf/open/floor/circuit/telecomms{ - initial_gas_mix = "TEMP=2.7" +/obj/effect/turf_decal/techfloor{ + dir = 1 }, +/turf/open/floor/circuit, /area/ship/engineering/communications) "yC" = ( -/obj/structure/toilet{ - dir = 1 +/obj/effect/turf_decal/siding/thinplating{ + dir = 1; + color = "#a8b2b6" }, -/turf/open/floor/plastic, +/obj/item/bikehorn/rubberducky, +/turf/open/floor/noslip, /area/ship/crew/toilet) -"yK" = ( -/obj/item/soap/nanotrasen, -/obj/structure/window/reinforced/tinted/frosted{ +"yG" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/structure/chair/handrail{ dir = 4 }, -/turf/open/floor/plasteel/white, -/area/ship/crew/toilet) +/obj/effect/turf_decal/corner/opaque/vired/half{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) +"yK" = ( +/obj/machinery/camera/autoname{ + dir = 9 + }, +/obj/machinery/light/floor, +/turf/open/floor/engine/hull, +/area/ship/external/dark) "yU" = ( /obj/structure/table/reinforced, -/obj/item/storage/belt/utility, -/obj/item/t_scanner{ - pixel_x = 7; - pixel_y = 4 - }, -/obj/item/weldingtool{ - pixel_x = -6 +/obj/machinery/computer/helm/viewscreen/directional/south, +/obj/machinery/cell_charger, +/obj/effect/turf_decal/techfloor{ + dir = 4 }, -/obj/item/stack/cable_coil/random, -/obj/item/multitool, /turf/open/floor/plasteel/mono/dark, /area/ship/engineering) "yZ" = ( -/obj/structure/reagent_dispensers/watertank, /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable{ icon_state = "0-9" }, -/turf/open/floor/plasteel/tech, -/area/ship/storage) +/obj/machinery/suit_storage_unit/inherit{ + name = "Medical Specialist's Storage Unit" + }, +/obj/item/clothing/suit/space/hardsuit/ert/lp/med, +/obj/item/clothing/mask/breath, +/obj/item/tank/internals/oxygen, +/obj/effect/turf_decal/industrial/outline/blue, +/turf/open/floor/plasteel/lightgrey, +/area/ship/storage/equip) "zc" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/turf_decal/corner/opaque/ntblue/half, /obj/effect/turf_decal/industrial/warning{ dir = 8 }, @@ -2472,7 +3250,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/corner/opaque/vired/half, +/obj/effect/decal/cleanable/plasma, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "zi" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, @@ -2482,23 +3262,24 @@ dir = 1 }, /obj/machinery/door/airlock/public/glass, -/obj/effect/turf_decal/corner/opaque/ntblue/half{ +/obj/effect/turf_decal/corner/opaque/vired/half{ dir = 8 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/central) "zB" = ( -/obj/machinery/camera/autoname{ - dir = 1 +/obj/effect/turf_decal/trimline/opaque/nsorange/line, +/obj/structure/railing/corner{ + dir = 8 }, -/obj/machinery/door/window{ - dir = 4 +/obj/effect/turf_decal/siding/thinplating/dark/corner{ + dir = 8 }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 +/obj/structure/chair/office{ + dir = 8 }, -/turf/open/floor/circuit/green/airless, -/area/ship/engineering/communications) +/turf/open/floor/plasteel/lightgrey, +/area/ship/cargo) "zC" = ( /obj/structure/cable{ icon_state = "4-8" @@ -2509,60 +3290,111 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/machinery/door/poddoor/shutters{ - dir = 8; - name = "Cargo Bay"; - id = "Ranger_Cargo_Door" - }, /obj/machinery/door/firedoor/border_only{ dir = 8 }, /obj/machinery/door/firedoor/border_only{ dir = 4 }, -/turf/open/floor/plasteel/tech, +/obj/effect/turf_decal/trimline/opaque/nsorange/line{ + dir = 9 + }, +/obj/machinery/door/poddoor/shutters{ + dir = 8; + name = "Cargo Bay"; + id = "Ranger_Cargo_Door" + }, +/obj/machinery/button/door{ + name = "Cargo Bay Shutters"; + id = "Ranger_Cargo_Door"; + pixel_y = 23; + req_ship_access = 1 + }, +/turf/open/floor/plasteel/lightgrey, /area/ship/cargo) "zF" = ( /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "zW" = ( /turf/template_noop, /area/template_noop) +"Ab" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/tech, +/area/ship/security) "Ao" = ( /obj/structure/cable{ icon_state = "2-4" }, +/obj/effect/turf_decal/siding/wood{ + dir = 10 + }, /turf/open/floor/wood, -/area/ship/crew/dorm) +/area/ship/crew/dorm/captain) "Av" = ( -/obj/structure/table/wood, /obj/item/toy/cards/deck{ pixel_x = -1; pixel_y = 10 }, -/turf/open/floor/plasteel/dark, +/obj/structure/table/reinforced{ + color = "#8A9397" + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 10 + }, +/turf/open/floor/plasteel/lightgrey, /area/ship/hallway/central) "Aw" = ( /turf/open/floor/wood, /area/ship/medical) "AF" = ( /obj/structure/chair/comfy/shuttle{ - dir = 4 + dir = 4; + name = "Operations Monitoring" }, /obj/machinery/light/dim/directional/north, -/turf/open/floor/plasteel/dark, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/machinery/button/door{ + pixel_y = 20; + pixel_x = -5; + name = "Starboard Corridor Shutters"; + id = "RangerStarboardShutters" + }, +/obj/machinery/button/door{ + pixel_y = 20; + pixel_x = 5; + name = "Port Corridor Shutters"; + id = "RangerPortShutters" + }, +/turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) "AH" = ( -/obj/effect/turf_decal/borderfloorblack/corner{ - dir = 8 - }, /obj/effect/turf_decal/steeldecal/steel_decals7{ dir = 1 }, -/turf/open/floor/plasteel/tech/airless, +/obj/effect/turf_decal/techfloor, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/machinery/camera/autoname{ + dir = 5 + }, +/obj/machinery/button/door{ + dir = 4; + pixel_x = -26; + id = "AiCore"; + name = "Core Access"; + req_access_txt = "20" + }, +/turf/open/floor/plasteel/tech, /area/ship/engineering/communications) "AP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -2574,29 +3406,44 @@ /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/central) "AT" = ( /obj/effect/turf_decal/industrial/outline/blue, /obj/structure/reagent_dispensers/fueltank, -/turf/open/floor/plating, +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/camera/autoname{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, /area/ship/maintenance/port) "AZ" = ( /obj/machinery/airalarm/directional/west, /turf/open/floor/wood, /area/ship/security) "Be" = ( -/obj/structure/reagent_dispensers/fueltank, /obj/machinery/light/dim/directional/south, /obj/machinery/button/door{ dir = 4; id = "Ranger_FireFighting_Shut"; - name = "Shutters"; + name = "Ready Room"; pixel_x = -22; - pixel_y = 6 + pixel_y = 6; + req_one_access_txt = "50,10,5,1,20"; + req_ship_access = 1; + req_one_access = list(50, 10, 5, 1, 20) }, -/turf/open/floor/plasteel/tech, -/area/ship/storage) +/obj/item/clothing/suit/space/hardsuit/ert/lp/sec, +/obj/machinery/suit_storage_unit/inherit{ + name = "Security Specialist's Storage Unit" + }, +/obj/item/clothing/mask/breath, +/obj/item/tank/internals/oxygen/red, +/obj/effect/turf_decal/industrial/outline/red, +/turf/open/floor/plasteel/lightgrey, +/area/ship/storage/equip) "Bg" = ( /obj/machinery/power/shieldwallgen/atmos/roundstart{ dir = 8; @@ -2615,22 +3462,28 @@ /turf/open/floor/plasteel, /area/ship/hallway/starboard) "Bh" = ( -/turf/open/floor/plasteel/stairs/wood, +/obj/effect/turf_decal/siding/wood{ + dir = 5 + }, +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/turf/open/floor/wood, /area/ship/engineering) "Bl" = ( -/obj/effect/turf_decal/corner/opaque/orange/border{ - dir = 4 +/obj/structure/chair/handrail{ + dir = 8 }, -/obj/effect/turf_decal/trimline/opaque/orange/arrow_ccw{ +/obj/effect/turf_decal/trimline/opaque/vired/arrow_ccw{ dir = 8 }, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/trimline/opaque/vired/filled/line{ + dir = 4 + }, +/turf/open/floor/plasteel/tech/techmaint, /area/ship/hallway/starboard) "Bo" = ( /obj/effect/turf_decal/steeldecal/steel_decals4, -/obj/effect/turf_decal/borderfloorblack{ - dir = 4 - }, /obj/effect/turf_decal/steeldecal/steel_decals7{ dir = 1 }, @@ -2640,19 +3493,30 @@ /obj/effect/turf_decal/steeldecal/steel_decals6{ dir = 8 }, -/turf/open/floor/plasteel/tech/airless, +/obj/effect/turf_decal/trimline/opaque/yellow/filled/warning, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 6 + }, +/turf/open/floor/plasteel/telecomms_floor, /area/ship/engineering/communications) "BA" = ( -/obj/machinery/shower{ +/obj/machinery/light/small/directional/east, +/obj/structure/toilet{ dir = 1 }, -/obj/structure/curtain, -/obj/item/bikehorn/rubberducky, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/siding/thinplating{ + dir = 1; + color = "#a8b2b6" + }, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plasteel/showroomfloor, /area/ship/crew/toilet) "BI" = ( -/obj/machinery/door/airlock/wood, -/turf/open/floor/plasteel/white, +/obj/machinery/door/airlock/wood{ + name = "Toilets"; + req_ship_access = 0 + }, +/turf/open/floor/plasteel/showroomfloor, /area/ship/crew/toilet) "BO" = ( /obj/machinery/power/smes/shuttle/precharged{ @@ -2661,38 +3525,37 @@ /obj/machinery/door/window/northleft{ dir = 4 }, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "Ranger_SB_maint_shut" - }, /obj/structure/cable/yellow{ icon_state = "0-8" }, +/obj/machinery/door/poddoor/shutters{ + dir = 4; + id = "Ranger_SB_maint_shut"; + name = "Engine Shutters" + }, /turf/open/floor/plating, /area/ship/maintenance/starboard) "BX" = ( -/obj/effect/turf_decal/corner/opaque/ntblue/half{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/closet/firecloset/wall/directional/west, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/corner/opaque/vired/half{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, /area/ship/hallway/central) "BY" = ( -/obj/effect/turf_decal/corner/opaque/ntblue/half{ - dir = 4 - }, /obj/structure/cable{ icon_state = "2-9" }, /obj/structure/cable{ icon_state = "1-2" }, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/corner/opaque/vired/half{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, /area/ship/hallway/central) "Ca" = ( -/obj/effect/turf_decal/corner/opaque/orange/full, /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable{ icon_state = "0-8" @@ -2703,7 +3566,10 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/effect/turf_decal/siding/yellow{ +/obj/effect/turf_decal/spline/fancy/opaque/orange/corner{ + dir = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/orange{ dir = 1 }, /turf/open/floor/plasteel/tech, @@ -2716,7 +3582,9 @@ dir = 6 }, /obj/machinery/light/dim/directional/west, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/industrial/hatch/blue, +/obj/structure/bed/roller, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "Cg" = ( /obj/structure/cable{ @@ -2726,47 +3594,50 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "Cq" = ( /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable, -/turf/open/floor/circuit/green/airless, +/obj/machinery/blackbox_recorder, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/turf/open/floor/circuit, /area/ship/engineering/communications) "Ct" = ( -/obj/structure/table/greyscale, /obj/machinery/light/dim/directional/east, -/obj/effect/turf_decal/siding/blue{ - dir = 6 +/obj/effect/turf_decal/industrial/warning{ + dir = 10 }, -/obj/item/roller{ - pixel_x = 5; - pixel_y = 12 +/obj/effect/turf_decal/siding/thinplating/light{ + dir = 10 }, -/obj/item/roller{ - pixel_x = -3; - pixel_y = 7 +/obj/effect/turf_decal/borderfloorwhite/corner{ + dir = 4 + }, +/obj/machinery/shower{ + dir = 8; + pixel_y = 2 }, /turf/open/floor/plasteel/white, /area/ship/medical) "CB" = ( -/obj/effect/turf_decal/borderfloorblack{ - dir = 8 +/obj/effect/turf_decal/trimline/opaque/yellow/filled/warning, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 10 }, -/obj/effect/turf_decal/techfloor/hole/right, -/turf/open/floor/plasteel/tech/airless, +/turf/open/floor/plasteel/telecomms_floor, /area/ship/engineering/communications) "CD" = ( -/obj/effect/turf_decal/corner/opaque/orange/border{ - dir = 4 - }, -/obj/effect/turf_decal/trimline/opaque/orange/arrow_ccw{ +/obj/machinery/computer/helm/viewscreen/directional/east, +/obj/effect/turf_decal/trimline/opaque/vired/arrow_ccw{ dir = 8 }, -/obj/effect/turf_decal/industrial/warning{ - dir = 1 +/obj/effect/turf_decal/trimline/opaque/vired/filled/line{ + dir = 4 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/tech/techmaint, /area/ship/hallway/starboard) "CG" = ( /obj/machinery/door/airlock/public/glass, @@ -2776,23 +3647,25 @@ /obj/machinery/door/firedoor/border_only{ dir = 1 }, -/obj/effect/turf_decal/corner/opaque/ntblue/half{ +/obj/effect/turf_decal/corner/opaque/vired/half{ dir = 8 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/central) "CI" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, /turf/open/floor/plasteel/dark, /area/ship/bridge) "CJ" = ( -/obj/machinery/atmospherics/components/binary/pump/layer2{ - dir = 8; - name = "Air Supply Pump" - }, /obj/machinery/door/firedoor/border_only{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump/on/layer2{ + dir = 8 + }, /turf/open/floor/plating, /area/ship/hallway/central) "CN" = ( @@ -2804,65 +3677,192 @@ /obj/structure/window/reinforced{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 10 + }, /turf/open/floor/engine/air, /area/ship/hallway/central) "CP" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 4 + }, +/obj/machinery/door/poddoor{ + dir = 4; + id = "Ranger_Cycler_Shutters"; + name = "Air Cycler Lockdown" + }, +/obj/machinery/door/airlock/external{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/turf/open/floor/plasteel/tech/techmaint{ + color = "#a8b2b6" + }, +/area/ship/hallway/central) +"CW" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/machinery/button/door{ + pixel_x = 21; + dir = 8; + pixel_y = 3; + name = "Cryogenics Access"; + id = "RangerCryoShutters" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "RangerCryoShutters"; + name = "Cryogenic Storage" + }, +/turf/open/floor/plasteel/stairs{ + color = "#8A9397" + }, +/area/ship/crew/cryo) +"Dd" = ( +/obj/effect/turf_decal/industrial/outline/orange, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/turf/open/floor/plasteel/tech, +/area/ship/maintenance/starboard) +"Dr" = ( +/obj/machinery/power/shieldwallgen/atmos/roundstart{ + id = "AI_Core_Field_Engi"; + dir = 8 + }, +/obj/machinery/door/poddoor{ + dir = 2; + id = "Ranger_AI_Core_Blasts"; + name = "Communications Access" + }, +/obj/structure/cable, +/obj/machinery/door/firedoor/border_only, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/turf/open/floor/noslip, +/area/ship/engineering) +"Ds" = ( /obj/machinery/camera/autoname{ - dir = 10 + dir = 6 + }, +/obj/effect/turf_decal/steeldecal/steel_decals7{ + dir = 1 + }, +/obj/effect/turf_decal/steeldecal/steel_decals7{ + dir = 4 + }, +/obj/effect/turf_decal/steeldecal/steel_decals6{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/yellow/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 5 + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/engineering/communications) +"Dx" = ( +/obj/machinery/recharger{ + pixel_x = 6; + pixel_y = -3 + }, +/obj/machinery/button/door{ + id = "SecureCell"; + normaldoorcontrol = 1; + pixel_x = 7; + pixel_y = 10; + specialfunctions = 4; + req_access_txt = "1"; + req_ship_access = 1; + name = "Cell Bolt Controls" + }, +/obj/structure/table/reinforced{ + color = "#8A9397" + }, +/obj/machinery/button/door{ + id = "SecShutters"; + name = "Privacy Shutters"; + layer = 2.92; + req_ship_access = 1; + req_access_txt = "1"; + pixel_x = -5; + pixel_y = 10 + }, +/obj/machinery/button/door{ + id = "CellHallShutters"; + name = "Cell Hall Shutters"; + req_access_txt = "1"; + req_ship_access = 1; + pixel_x = -5; + pixel_y = 2; + layer = 2.91 + }, +/obj/machinery/button/door{ + pixel_y = -6; + pixel_x = -5; + id = "SecCellWindowShutters"; + name = "Cell Window Shutters"; + req_access_txt = "1"; + req_ship_access = 1 + }, +/turf/open/floor/mineral/plastitanium/red/brig, +/area/ship/security) +"DE" = ( +/obj/machinery/firealarm/directional/east, +/obj/machinery/recharger{ + dir = 4; + pixel_x = -8 + }, +/obj/machinery/cell_charger{ + dir = 4; + pixel_x = 5 }, -/turf/open/floor/engine/hull, -/area/ship/external) -"Dd" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/turf_decal/industrial/outline/orange, -/turf/open/floor/plasteel/tech, -/area/ship/maintenance/starboard) -"Dr" = ( -/obj/machinery/power/shieldwallgen/atmos/roundstart{ - id = "AI_Core_Field_Engi"; - dir = 8 +/obj/structure/table/reinforced, +/obj/item/stack/marker_beacon/thirty{ + icon_state = "markerrandom"; + pixel_x = -9; + pixel_y = 13; + amount = 100 }, -/obj/machinery/door/poddoor{ - dir = 2; - id = "Ranger_AI_Core_Blasts" +/obj/item/stack/marker_beacon/thirty{ + icon_state = "markerrandom"; + pixel_x = 11; + pixel_y = 13; + amount = 100 }, -/obj/structure/cable, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 +/obj/item/stack/marker_beacon/thirty{ + icon_state = "markerrandom"; + pixel_x = 5; + pixel_y = 13; + amount = 100 }, -/turf/open/floor/plating, -/area/ship/engineering) -"Ds" = ( -/obj/machinery/camera/autoname{ - dir = 6 +/obj/item/stack/marker_beacon/thirty{ + icon_state = "markerrandom"; + pixel_x = -2; + pixel_y = 13; + amount = 100 }, -/obj/effect/turf_decal/borderfloorblack/corner, -/obj/effect/turf_decal/steeldecal/steel_decals7{ - dir = 1 +/obj/effect/turf_decal/corner/opaque/vired/three_quarters{ + dir = 8 }, -/obj/effect/turf_decal/steeldecal/steel_decals7{ - dir = 4 +/obj/item/stock_parts/cell/gun, +/turf/open/floor/plasteel/tech, +/area/ship/storage/equip) +"DQ" = ( +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/effect/turf_decal/steeldecal/steel_decals6{ +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 8 }, -/turf/open/floor/plasteel/tech/airless, -/area/ship/engineering/communications) -"Dx" = ( -/turf/open/floor/plasteel/dark, -/area/ship/security) -"DE" = ( -/obj/item/storage/box/metalfoam, -/obj/item/watertank/atmos, -/obj/structure/rack, -/obj/effect/turf_decal/corner/opaque/brown/mono, -/obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/industrial/warning{ - dir = 1 +/obj/effect/turf_decal/corner/opaque/vired/half{ + dir = 4 }, /turf/open/floor/plasteel/dark, -/area/ship/storage) +/area/ship/hallway/central) "DW" = ( /obj/structure/cable/cyan{ icon_state = "0-4" @@ -2875,23 +3875,41 @@ /area/ship/maintenance/starboard) "DZ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/obj/machinery/button/door{ - dir = 4; - pixel_x = -20; - name = "Cargo Bay Shutters"; - id = "Ranger_Cargo_Door"; - pixel_y = 1 - }, +/obj/structure/filingcabinet/double, /turf/open/floor/plasteel/tech, /area/ship/cargo) "Ek" = ( /obj/machinery/computer/telecomms/server, -/turf/open/floor/plasteel/dark, +/obj/structure/window/reinforced/survival_pod{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor{ + dir = 9 + }, +/turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) +"Ep" = ( +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/opaque/yellow/filled/warning{ + dir = 8 + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/engineering/communications) "Eq" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 1 }, +/obj/effect/turf_decal/trimline/opaque/nsorange/warning, +/obj/effect/turf_decal/siding{ + color = "#474747" + }, +/turf/open/floor/plasteel/lightgrey, +/area/ship/cargo) +"EA" = ( +/obj/structure/crate_shelf, +/obj/machinery/light/dim/directional/west, /turf/open/floor/plasteel/tech, /area/ship/cargo) "EL" = ( @@ -2902,45 +3920,52 @@ /obj/effect/turf_decal/trimline/opaque/ntblue/filled/line{ dir = 1 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "EP" = ( /obj/machinery/vending/snack/random, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/lightgrey, /area/ship/hallway/central) "Ff" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/turf_decal/corner/opaque/ntblue/half{ +/obj/effect/turf_decal/corner/opaque/vired/half{ dir = 1 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "Fg" = ( -/obj/machinery/suit_storage_unit/inherit, -/obj/item/clothing/suit/space/hardsuit/ert/lp, -/obj/item/clothing/mask/breath, -/obj/item/tank/internals/emergency_oxygen, -/obj/effect/turf_decal/siding/wood/end{ +/obj/effect/turf_decal/trimline/opaque/nsorange/corner{ dir = 4 }, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"Fh" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer2{ - dir = 9 +/obj/item/paper/crumpled, +/obj/item/paper/crumpled{ + pixel_x = 6; + pixel_y = -1 }, -/obj/machinery/door/airlock/external{ - dir = 4 +/obj/item/paper/crumpled{ + pixel_x = -10; + pixel_y = 6 }, -/obj/machinery/door/firedoor/border_only{ +/obj/item/paper/crumpled{ + pixel_y = -6; + pixel_x = -4 + }, +/turf/open/floor/plasteel/lightgrey, +/area/ship/cargo) +"Fh" = ( +/obj/machinery/atmospherics/pipe/layer_manifold/visible{ dir = 4 }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 +/obj/effect/turf_decal/siding/thinplating{ + dir = 1; + color = "#a8b2b6" + }, +/obj/effect/turf_decal/trimline/opaque/vired/arrow_ccw, +/turf/open/floor/plasteel/tech/techmaint{ + color = "#a8b2b6" }, -/turf/open/floor/plasteel/dark, /area/ship/hallway/central) "Fw" = ( /obj/structure/cable{ @@ -2952,11 +3977,13 @@ /obj/machinery/door/firedoor/border_only{ dir = 1 }, -/obj/machinery/door/airlock/wood, +/obj/machinery/door/airlock/wood{ + name = "Restroom"; + req_ship_access = 0 + }, /turf/open/floor/plasteel/white, /area/ship/crew/toilet) "Fx" = ( -/obj/structure/table/wood, /obj/item/storage/box/matches{ pixel_y = 4 }, @@ -2968,7 +3995,13 @@ pixel_y = 2; pixel_x = -5 }, -/turf/open/floor/plasteel/dark, +/obj/structure/table/reinforced{ + color = "#8A9397" + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/turf/open/floor/plasteel/lightgrey, /area/ship/hallway/central) "FB" = ( /obj/structure/cable{ @@ -2977,15 +4010,24 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/orange/full, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ + dir = 4 }, -/obj/effect/turf_decal/siding/yellow{ - dir = 5 +/obj/machinery/door/firedoor/border_only{ + dir = 8 }, -/obj/structure/cable{ - icon_state = "1-4" +/obj/machinery/door/airlock/engineering{ + dir = 4; + name = "Engineering Sector" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 8 }, /turf/open/floor/plasteel/tech, /area/ship/engineering) @@ -3000,32 +4042,33 @@ dir = 4 }, /obj/machinery/airalarm/directional/south, -/turf/open/floor/plating, +/obj/effect/decal/cleanable/oil/streak, +/turf/open/floor/plasteel/tech, /area/ship/maintenance/starboard) "Gc" = ( -/obj/structure/closet/cabinet, -/obj/item/clothing/under/rank/security/head_of_security/alt/skirt/lp, -/obj/item/clothing/under/rank/security/head_of_security/alt/lp, -/obj/item/clothing/shoes/jackboots, -/obj/item/clothing/suit/jacket/miljacket, -/obj/item/clothing/suit/jacket/leather/duster/command, -/obj/item/storage/backpack/messenger/com, -/obj/item/storage/backpack/satchel/cap, -/obj/item/storage/backpack/captain, -/obj/item/storage/backpack/duffelbag/captain, -/obj/effect/turf_decal/siding/wood{ - dir = 9 - }, /obj/machinery/light/dim/directional/north, -/turf/open/floor/wood, -/area/ship/crew/dorm) +/obj/machinery/camera/autoname{ + dir = 5 + }, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/machinery/suit_storage_unit/inherit, +/obj/item/clothing/suit/space/hardsuit/ert/lp, +/obj/item/clothing/mask/breath, +/obj/item/tank/internals/emergency_oxygen/double, +/turf/open/floor/plasteel/tech, +/area/ship/crew/dorm/captain) "Ge" = ( /obj/structure/cable{ icon_state = "0-8" }, /obj/machinery/power/port_gen/pacman, -/obj/item/stack/sheet/mineral/plasma/twenty, /obj/effect/turf_decal/industrial/outline/orange, +/obj/item/stack/sheet/mineral/plasma/twenty, /turf/open/floor/plating, /area/ship/engineering) "Gh" = ( @@ -3035,24 +4078,20 @@ /obj/effect/turf_decal/industrial/warning{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, /obj/machinery/light/floor, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/central) "Gk" = ( -/obj/effect/turf_decal/corner/opaque/ntblue/half{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 8 }, -/obj/structure/closet/emcloset/wall/directional/west, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/corner/opaque/vired/half{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, /area/ship/hallway/central) "Gn" = ( /obj/structure/table/wood, @@ -3063,8 +4102,22 @@ /obj/item/toy/plush/moth/snow{ pixel_x = -3 }, +/obj/item/folder/blue{ + pixel_x = -3; + pixel_y = -10 + }, +/obj/item/flashlight/pen{ + pixel_x = -5; + pixel_y = -9 + }, /turf/open/floor/wood, /area/ship/medical) +"Gs" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 10 + }, +/turf/open/floor/engine/hull, +/area/ship/external/dark) "Gz" = ( /obj/effect/turf_decal/steeldecal/steel_decals7{ dir = 1 @@ -3075,22 +4128,29 @@ /obj/effect/turf_decal/steeldecal/steel_decals7{ dir = 4 }, -/turf/open/floor/plasteel/tech/airless, +/turf/open/floor/plasteel/tech, /area/ship/engineering/communications) "GC" = ( +/obj/effect/turf_decal/corner/opaque/blue/diagonal, +/obj/structure/window/reinforced/spawner, /obj/structure/window/reinforced/spawner{ - dir = 4 + dir = 8 }, -/obj/effect/turf_decal/siding/blue{ +/obj/structure/cable{ + icon_state = "6-8" + }, +/obj/effect/turf_decal/borderfloorwhite/corner{ dir = 4 }, /turf/open/floor/plasteel/white, /area/ship/medical) "GE" = ( -/obj/effect/turf_decal/corner/opaque/blue/diagonal, -/obj/structure/bed, -/obj/item/bedsheet/medical, -/turf/open/floor/plasteel/white, +/obj/structure/table/optable, +/obj/effect/turf_decal/borderfloorwhite/full, +/obj/machinery/defibrillator_mount/loaded{ + pixel_y = 24 + }, +/turf/open/floor/noslip, /area/ship/medical) "GG" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -3102,50 +4162,54 @@ /obj/structure/cable{ icon_state = "1-2" }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/central) "GY" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, /obj/effect/turf_decal/siding/wood, /obj/item/radio/intercom/directional/south, +/obj/item/bedsheet/orange, +/obj/structure/bed, +/obj/machinery/camera/autoname{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 6 + }, /turf/open/floor/wood, /area/ship/engineering) "Ha" = ( -/obj/structure/closet/secure_closet/lp/lieutenant, -/obj/item/stock_parts/cell/gun, /obj/item/melee/classic_baton/telescopic, -/obj/item/kitchen/knife/combat/survival, +/obj/item/melee/knife/survival, /obj/item/gps, /obj/item/screwdriver, -/obj/effect/turf_decal/siding/wood{ - dir = 10 - }, /obj/machinery/light_switch{ dir = 1; pixel_x = 7; pixel_y = -20 }, -/obj/item/ammo_box/c9mm, -/obj/item/ammo_box/c9mm, -/obj/item/ammo_box/c9mm/rubbershot, -/obj/item/ammo_box/magazine/co9mm, -/obj/item/storage/pistolcase/commander, /obj/item/storage/pistolcase/egun, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"Hd" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/fulltile, -/obj/machinery/door/poddoor/shutters{ - id = "Engineering_Specialist_Shutters"; +/obj/item/megaphone/command, +/obj/structure/closet/secure_closet/lp/lieutenant, +/obj/effect/turf_decal/techfloor{ dir = 4 }, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, +/area/ship/crew/dorm/captain) +"Hd" = ( +/obj/structure/grille, /obj/structure/cable{ icon_state = "5-8" }, /obj/machinery/door/firedoor/window, +/obj/machinery/door/poddoor/shutters{ + id = "Engineering_Specialist_Shutters"; + dir = 4; + name = "Communications Shutters" + }, +/obj/structure/window/reinforced/fulltile/shuttle, /turf/open/floor/plating, /area/ship/engineering) "Hs" = ( @@ -3155,27 +4219,25 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/orange/full, +/obj/effect/turf_decal/spline/fancy/opaque/orange{ + dir = 5 + }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/effect/turf_decal/siding/yellow{ - dir = 1 - }, /turf/open/floor/plasteel/tech, /area/ship/engineering) "Hy" = ( /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/turf_decal/trimline/opaque/orange/arrow_cw{ +/obj/effect/turf_decal/trimline/opaque/vired/arrow_cw{ dir = 8 }, -/obj/effect/turf_decal/trimline/opaque/orange/filled/line{ +/obj/effect/turf_decal/trimline/opaque/vired/filled/line{ dir = 4 }, -/obj/effect/turf_decal/industrial/warning, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/tech/techmaint, /area/ship/hallway/port) "HA" = ( /obj/machinery/power/shieldwallgen/atmos/roundstart{ @@ -3192,6 +4254,7 @@ /obj/machinery/door/firedoor/border_only{ dir = 1 }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/open/floor/plasteel, /area/ship/hallway/port) "HZ" = ( @@ -3206,10 +4269,30 @@ dir = 4; pixel_x = -21; name = "Shutters"; - id = "Ranger_Port_maint_shut" + id = "Ranger_Port_maint_shut"; + req_ship_access = 1 }, +/obj/effect/spawner/lootdrop/waste/trash, /turf/open/floor/plating, /area/ship/maintenance/port) +"Ih" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/drip, +/obj/effect/decal/cleanable/blood/drip{ + pixel_x = 14; + pixel_y = 4 + }, +/obj/item/stack/medical/suture{ + amount = 1; + name = "bloody suture" + }, +/obj/item/melee/knife/kitchen{ + pixel_y = -12 + }, +/turf/open/floor/plasteel/lightgrey, +/area/ship/hallway/central) "Iy" = ( /obj/structure/table/wood, /obj/machinery/light/dim/directional/north, @@ -3228,6 +4311,10 @@ /obj/item/radio{ pixel_x = -2 }, +/obj/item/reagent_containers/food/drinks/soda_cans/sol_dry{ + pixel_x = 8; + pixel_y = 9 + }, /turf/open/floor/plasteel/dark, /area/ship/crew/cryo) "Iz" = ( @@ -3235,11 +4322,45 @@ /obj/structure/cable{ icon_state = "0-10" }, +/obj/structure/closet/secure_closet{ + icon_state = "qm"; + name = "Logistics Specialist's Locker"; + req_ship_access = 1; + req_one_access = list(50) + }, +/obj/item/clothing/suit/hooded/wintercoat/cargo{ + pixel_x = 14 + }, +/obj/item/clothing/shoes/sneakers/brown{ + pixel_x = -10; + pixel_y = -12 + }, +/obj/item/storage/backpack/satchel/leather{ + pixel_y = -6 + }, +/obj/item/clothing/under/nanotrasen/supply/qm, +/obj/item/gps{ + pixel_x = 11; + pixel_y = 9 + }, +/obj/item/stack/packageWrap{ + pixel_x = -10; + pixel_y = 12 + }, +/obj/item/stack/packageWrap{ + pixel_x = -10 + }, +/obj/item/stack/packageWrap{ + pixel_x = -10; + pixel_y = 6 + }, /turf/open/floor/plasteel/tech, /area/ship/cargo) "IC" = ( /obj/effect/turf_decal/corner/opaque/orange/full, -/obj/machinery/door/airlock/engineering/glass, +/obj/machinery/door/airlock/engineering/glass{ + name = "Electrical Bay" + }, /obj/structure/cable{ icon_state = "1-2" }, @@ -3249,18 +4370,28 @@ /obj/machinery/door/firedoor/border_only{ dir = 1 }, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/effect/turf_decal/techfloor, /turf/open/floor/plasteel/tech, /area/ship/engineering) "IE" = ( /obj/machinery/light/floor, -/turf/open/floor/circuit/green/airless, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/yellow/filled/warning{ + dir = 8 + }, +/turf/open/floor/plasteel/telecomms_floor, /area/ship/engineering/communications) "IM" = ( /obj/structure/chair/sofa/brown/directional/west, /obj/item/toy/plush/blahaj{ layer = 3.1 }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/lightgrey, /area/ship/hallway/central) "IQ" = ( /obj/machinery/cryopod, @@ -3272,19 +4403,19 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 1 }, -/obj/effect/turf_decal/corner/opaque/ntblue/half, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/corner/opaque/vired/half, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "Ji" = ( -/obj/machinery/suit_storage_unit/inherit, -/obj/item/clothing/suit/space/hardsuit/ert/lp/sec, -/obj/item/clothing/mask/breath, -/obj/machinery/light/dim/directional/east, -/obj/effect/turf_decal/siding/red{ - dir = 5 +/obj/effect/turf_decal/borderfloorblack, +/obj/structure/chair/handrail{ + dir = 4 }, -/obj/item/tank/internals/emergency_oxygen, -/turf/open/floor/mineral/plastitanium/red/brig, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ + dir = 1 + }, +/obj/effect/decal/cleanable/confetti, +/turf/open/floor/plasteel/tech, /area/ship/security) "Js" = ( /obj/machinery/holopad, @@ -3292,7 +4423,7 @@ dir = 8 }, /obj/effect/turf_decal/siding/red/corner, -/turf/open/floor/mineral/plastitanium/red/brig, +/turf/open/floor/plasteel/tech, /area/ship/security) "Jw" = ( /obj/structure/cable/cyan{ @@ -3304,20 +4435,14 @@ /turf/open/floor/plating, /area/ship/maintenance/port) "JK" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 10 - }, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 4 - }, -/obj/structure/mirror{ - pixel_x = -25 - }, -/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/siding/wood, /turf/open/floor/wood, /area/ship/engineering) "JO" = ( -/obj/machinery/door/airlock/command, +/obj/machinery/door/airlock/command{ + req_access_txt = "20"; + name = "Lieutenant's Quarters" + }, /obj/structure/cable{ icon_state = "1-2" }, @@ -3326,7 +4451,7 @@ }, /obj/machinery/door/firedoor/border_only, /turf/open/floor/wood, -/area/ship/crew/dorm) +/area/ship/crew/dorm/captain) "JP" = ( /obj/structure/cable{ icon_state = "4-8" @@ -3340,38 +4465,40 @@ /turf/open/floor/plating, /area/ship/engineering) "JR" = ( -/turf/closed/wall/r_wall, +/turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/crew/cryo) "Kf" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 1 }, -/obj/effect/turf_decal/corner/opaque/ntblue/three_quarters, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/corner/opaque/vired/three_quarters, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "Kg" = ( -/turf/closed/wall/r_wall, +/turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/engineering/communications) "Kj" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible/layer3{ dir = 8 }, /obj/effect/decal/cleanable/plasma, +/obj/effect/decal/cleanable/plasma, /turf/open/floor/plating, /area/ship/maintenance/port) "Kl" = ( -/obj/effect/turf_decal/corner/opaque/ntblue/half{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/camera/autoname{ - dir = 5 +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 }, -/turf/open/floor/plasteel/white, +/obj/machinery/computer/helm/viewscreen/directional/west, +/turf/open/floor/plasteel/lightgrey, /area/ship/hallway/central) "Kt" = ( -/obj/machinery/holopad, +/obj/effect/turf_decal/siding/blue{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, /turf/open/floor/plasteel/white, /area/ship/medical) "Kw" = ( @@ -3380,18 +4507,17 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 9 + dir = 5 }, -/turf/open/floor/plastic, +/turf/open/floor/plasteel/showroomfloor, /area/ship/crew/toilet) "KC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/corner/opaque/brown/mono, -/obj/effect/turf_decal/industrial/warning{ - dir = 1 +/obj/effect/turf_decal/corner/opaque/vired/three_quarters{ + dir = 4 }, -/turf/open/floor/plasteel/dark, -/area/ship/storage) +/turf/open/floor/plasteel/tech, +/area/ship/storage/equip) "KQ" = ( /obj/structure/closet, /obj/item/pickaxe, @@ -3404,7 +4530,11 @@ /obj/effect/turf_decal/siding/yellow{ dir = 4 }, -/turf/open/floor/plasteel/dark, +/obj/structure/railing{ + dir = 4; + layer = 4.1 + }, +/turf/open/floor/plasteel/tech, /area/ship/hallway/port) "KX" = ( /obj/structure/cable{ @@ -3423,24 +4553,29 @@ /obj/effect/turf_decal/trimline/opaque/red/filled/corner{ dir = 8 }, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/trimline/transparent/white/filled/corner, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "Lg" = ( -/obj/structure/window/reinforced, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ dir = 1 }, /obj/effect/turf_decal/siding/red, -/turf/open/floor/mineral/plastitanium/red/brig, +/turf/open/floor/plasteel/tech, /area/ship/security) "Lk" = ( -/turf/closed/wall/r_wall, +/turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/bridge) "Lt" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 1 }, -/turf/open/floor/plastic, +/obj/machinery/airalarm/directional/west, +/obj/machinery/door/window{ + opacity = 1; + name = "Toilet" + }, +/turf/open/floor/plasteel/showroomfloor, /area/ship/crew/toilet) "Lu" = ( /obj/structure/cable{ @@ -3452,31 +4587,27 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/effect/turf_decal/trimline/opaque/yellow/filled/line{ +/obj/effect/turf_decal/trimline/opaque/vired/filled/line{ dir = 4 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "Lw" = ( -/obj/structure/bed, -/obj/item/bedsheet/orange, -/obj/effect/turf_decal/siding/wood{ - dir = 6 - }, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 1 - }, -/turf/open/floor/wood, -/area/ship/engineering) +/obj/effect/turf_decal/industrial/outline/orange, +/obj/effect/decal/cleanable/plasma, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/plasteel/tech, +/area/ship/maintenance/starboard) "LM" = ( /obj/machinery/telecomms/processor/preset_four{ autolinkers = list("processor4","bus"); network = "nt_commnet"; id = "Nanotrasen Communications Processor" }, -/turf/open/floor/circuit/telecomms{ - initial_gas_mix = "TEMP=2.7" +/obj/effect/turf_decal/techfloor{ + dir = 4 }, +/turf/open/floor/circuit, /area/ship/engineering/communications) "LQ" = ( /obj/structure/cable{ @@ -3485,6 +4616,7 @@ /obj/effect/turf_decal/industrial/outline/orange, /obj/machinery/power/port_gen/pacman/super, /obj/item/stack/sheet/mineral/uranium/five, +/obj/effect/decal/cleanable/greenglow, /turf/open/floor/plating, /area/ship/engineering) "LU" = ( @@ -3493,39 +4625,46 @@ id = "Ranger_Bridge_Shutters" }, /obj/structure/grille, -/obj/structure/window/reinforced/fulltile, /obj/machinery/door/firedoor/window, +/obj/structure/window/reinforced/fulltile/shuttle, /turf/open/floor/plating, /area/ship/bridge) "LV" = ( -/turf/closed/wall/r_wall, +/turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/maintenance/port) "Ma" = ( -/obj/structure/chair/wood, /obj/effect/turf_decal/siding/red{ dir = 4 }, /obj/effect/turf_decal/siding/red{ dir = 8 }, -/turf/open/floor/mineral/plastitanium/red/brig, +/turf/open/floor/plasteel/tech, /area/ship/security) "Mc" = ( -/obj/structure/toilet{ +/obj/machinery/light/dim/directional/east, +/obj/effect/turf_decal/siding/thinplating{ + dir = 1; + color = "#a8b2b6" + }, +/obj/machinery/shower{ dir = 1 }, -/obj/machinery/light/dim/directional/east, -/turf/open/floor/plastic, +/obj/item/soap/nanotrasen, +/turf/open/floor/noslip, /area/ship/crew/toilet) "Md" = ( /obj/structure/AIcore, /obj/item/mmi/posibrain, /obj/item/circuitboard/aicore, -/turf/open/floor/circuit/green/airless, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/turf/open/floor/circuit, /area/ship/engineering/communications) "Mf" = ( -/turf/closed/wall/r_wall, -/area/ship/crew/dorm) +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/crew/dorm/captain) "Mg" = ( /obj/structure/cable{ icon_state = "1-2" @@ -3533,17 +4672,21 @@ /obj/structure/cable{ icon_state = "1-6" }, -/obj/effect/turf_decal/corner/opaque/orange/border{ +/obj/effect/turf_decal/trimline/opaque/vired/arrow_cw{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/vired/filled/line{ dir = 8 }, -/obj/effect/turf_decal/trimline/opaque/orange/arrow_cw{ +/obj/structure/chair/handrail{ dir = 4 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/tech/techmaint, /area/ship/hallway/starboard) "Mh" = ( /obj/machinery/computer/apc_control{ - dir = 4 + dir = 4; + icon_state = "computer-left" }, /obj/effect/turf_decal/techfloor, /turf/open/floor/plasteel/mono/dark, @@ -3552,12 +4695,16 @@ /obj/structure/cable{ icon_state = "5-8" }, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/trimline/transparent/white/filled/warning, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "Mn" = ( -/obj/machinery/holopad, +/obj/machinery/holopad{ + pixel_x = 1; + pixel_y = 1 + }, /obj/effect/turf_decal/trimline/opaque/ntblue, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/lightgrey, /area/ship/hallway/central) "Ms" = ( /obj/machinery/button/door{ @@ -3567,24 +4714,31 @@ dir = 1; pixel_x = 6 }, +/obj/effect/turf_decal/steeldecal/steel_decals4, /obj/effect/turf_decal/techfloor{ - dir = 8 + dir = 10 }, -/obj/effect/turf_decal/steeldecal/steel_decals4, -/turf/open/floor/plasteel/dark, +/obj/machinery/door/window/survival_pod{ + dir = 8; + name = "Captain's Nest"; + req_one_access_txt = list(50, 10, 5, 1, 20) + }, +/turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) "Mt" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/turf_decal/corner/opaque/orange/full, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, -/obj/effect/turf_decal/siding/yellow{ +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/effect/turf_decal/spline/fancy/opaque/orange{ dir = 1 }, /turf/open/floor/plasteel/tech, @@ -3607,32 +4761,32 @@ dir = 5 }, /turf/open/floor/wood, -/area/ship/crew/dorm) +/area/ship/crew/dorm/captain) "Mx" = ( /obj/machinery/light_switch{ dir = 8; pixel_x = 19; pixel_y = 8 }, -/turf/open/floor/plasteel/tech/airless, +/obj/effect/turf_decal/techfloor, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, /area/ship/engineering/communications) "Mz" = ( -/obj/effect/turf_decal/corner/opaque/orange/full, /obj/structure/cable{ icon_state = "1-2" }, /obj/structure/cable{ icon_state = "1-4" }, -/obj/effect/turf_decal/siding/yellow{ - dir = 9 - }, /obj/machinery/button/door{ dir = 4; pixel_y = 6; pixel_x = -22; id = "Engineering_Specialist_Shutters"; - name = "Privacy Shutters" + name = "Comms Shutters" }, /obj/machinery/camera/autoname{ dir = 5 @@ -3643,12 +4797,24 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 5 }, +/obj/effect/decal/cleanable/oil, +/obj/effect/turf_decal/spline/fancy/opaque/orange{ + dir = 10 + }, +/obj/effect/turf_decal/spline/fancy/opaque/orange{ + dir = 9 + }, /turf/open/floor/plasteel/tech, /area/ship/engineering) "MD" = ( -/obj/item/disk/design_disk/ammo_c9mm, -/turf/open/floor/plating, -/area/ship/engineering) +/obj/effect/turf_decal/trimline/opaque/yellow/filled/warning{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 1 + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/engineering/communications) "MI" = ( /obj/machinery/airalarm/directional/north, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -3657,33 +4823,55 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/ntblue/half{ +/obj/effect/turf_decal/corner/opaque/vired/half{ dir = 1 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "MK" = ( -/obj/structure/table/reinforced, -/obj/item/aicard, -/obj/item/stack/sheet/rglass{ - amount = 25 +/obj/structure/sign/nanotrasen{ + pixel_x = 32 }, -/obj/item/wrench, -/obj/item/stack/cable_coil/cyan, -/turf/open/floor/circuit/green/airless, +/obj/effect/turf_decal/techfloor, +/obj/structure/table/reinforced{ + color = "#8A9397" + }, +/turf/open/floor/circuit, /area/ship/engineering/communications) "ML" = ( /obj/machinery/light/dim/directional/north, /obj/effect/turf_decal/industrial/outline/blue, /obj/structure/closet/crate/trashcart/laundry, -/turf/open/floor/plating, +/obj/item/clothing/under/nanotrasen, +/obj/item/clothing/under/nanotrasen, +/obj/item/clothing/shoes/sneakers/black{ + pixel_y = -10 + }, +/obj/item/clothing/shoes/sneakers/black{ + pixel_y = -10 + }, +/obj/item/clothing/suit/hooded/wintercoat, +/turf/open/floor/plasteel/tech, /area/ship/maintenance/starboard) +"MR" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/vired/half{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/central) "MW" = ( /obj/item/radio/intercom/directional/south, /obj/machinery/computer/helm{ dir = 8 }, -/turf/open/floor/plasteel/dark, +/obj/effect/turf_decal/techfloor{ + dir = 6 + }, +/turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) "MY" = ( /obj/effect/turf_decal/corner/opaque/ntblue/border{ @@ -3698,7 +4886,7 @@ /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/central) "Nd" = ( /obj/structure/cable{ @@ -3708,6 +4896,9 @@ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/structure/cable{ + icon_state = "2-4" + }, /turf/open/floor/plating, /area/ship/engineering) "Nf" = ( @@ -3718,74 +4909,81 @@ id = "Ranger_AI_Core_Ext_Blasts" }, /obj/machinery/light/dim/directional/south, -/turf/open/floor/circuit/green/airless, +/obj/machinery/telecomms/message_server/preset{ + autolinkers = list("messaging","hub"); + network = "nt_commnet"; + layer = 3.1 + }, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/turf/open/floor/circuit, /area/ship/engineering/communications) "Nn" = ( /obj/structure/cable{ icon_state = "2-4" }, -/turf/open/floor/circuit/green/airless, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/opaque/yellow/filled/warning{ + dir = 4 + }, +/turf/open/floor/plasteel/telecomms_floor, /area/ship/engineering/communications) "Nu" = ( /obj/machinery/vending/cigarette, -/turf/open/floor/plasteel/dark, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/plasteel/lightgrey, /area/ship/hallway/central) "Ny" = ( -/obj/structure/closet/cabinet, -/obj/item/clothing/suit/hooded/wintercoat/engineering, -/obj/item/clothing/head/beret/eng/hazard, -/obj/item/storage/backpack/satchel/eng, -/obj/item/storage/backpack/messenger/engi, -/obj/item/storage/backpack/industrial, -/obj/item/storage/backpack/duffelbag/engineering, -/obj/effect/turf_decal/siding/wood/end{ +/obj/effect/turf_decal/siding/wood{ dir = 1 }, -/obj/item/clothing/under/rank/engineering/engineer/nt/lp, -/obj/item/clothing/under/rank/engineering/engineer/nt/skirt/lp, +/obj/machinery/door/window/survival_pod{ + dir = 1; + opacity = 1; + req_one_access_txt = "10"; + name = "Engineering Specialist's Quarters" + }, /turf/open/floor/wood, /area/ship/engineering) "NC" = ( /obj/machinery/camera/autoname{ dir = 6 }, -/obj/machinery/light/floor, +/obj/machinery/light/floor{ + pixel_y = -9 + }, /turf/open/floor/engine/hull, -/area/ship/external) +/area/ship/external/dark) "NM" = ( /turf/open/floor/plasteel/stairs{ - dir = 4 + dir = 4; + color = "#a8b2b6" }, /area/ship/bridge) "NR" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/turf_decal/corner/opaque/ntblue/half, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 9 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 9 }, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/corner/opaque/vired/half, +/obj/effect/decal/cleanable/plasma, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "NS" = ( -/obj/structure/railing{ - dir = 8; - layer = 4.1 - }, -/obj/structure/closet/crate/medical{ - name = "anesthetics crate" - }, -/obj/item/tank/internals/anesthetic, -/obj/item/tank/internals/anesthetic{ - pixel_x = 3 - }, -/obj/item/clothing/mask/breath/medical, -/obj/item/clothing/mask/breath/medical{ - pixel_x = 3 +/obj/structure/crate_shelf, +/obj/structure/closet/crate/freezer/blood, +/obj/effect/turf_decal/siding/blue{ + dir = 10 }, +/obj/machinery/iv_drip, /turf/open/floor/plasteel/white, /area/ship/medical) "NZ" = ( @@ -3795,24 +4993,61 @@ /obj/machinery/power/apc/auto_name/directional/south, /obj/effect/turf_decal/siding/wood, /turf/open/floor/wood, -/area/ship/crew/dorm) +/area/ship/crew/dorm/captain) +"Og" = ( +/obj/machinery/camera/autoname{ + dir = 1 + }, +/obj/machinery/air_sensor/external, +/obj/machinery/light/dim/directional/south, +/turf/open/floor/engine/hull, +/area/ship/external/dark) "Om" = ( -/obj/structure/closet/cabinet, -/obj/item/clothing/under/rank/medical/paramedic/skirt/lp, -/obj/item/clothing/under/rank/medical/paramedic/lp, -/obj/item/clothing/suit/hooded/wintercoat/medical, -/obj/item/clothing/head/beret/med, -/obj/item/storage/backpack/satchel/med, -/obj/item/storage/backpack/messenger/med, -/obj/item/storage/backpack/medic, -/obj/item/storage/backpack/duffelbag/med, -/turf/open/floor/wood, -/area/ship/medical) +/obj/effect/turf_decal/trimline/opaque/nsorange/corner{ + dir = 1 + }, +/obj/effect/turf_decal/siding/white/corner{ + dir = 1; + color = "#474747" + }, +/turf/open/floor/plasteel/lightgrey, +/area/ship/cargo) "On" = ( -/obj/structure/closet/crate, -/obj/effect/decal/cleanable/sprayweb, /obj/machinery/light/dim/directional/east, -/turf/open/floor/plasteel/tech, +/obj/effect/turf_decal/trimline/opaque/nsorange/line{ + dir = 6 + }, +/obj/item/reagent_containers/food/drinks/coffee{ + pixel_y = 16 + }, +/obj/item/paper_bin{ + pixel_x = 7; + pixel_y = -4 + }, +/obj/item/pen/fountain{ + pixel_x = 6; + pixel_y = -5 + }, +/obj/structure/table/reinforced{ + color = "#c1b6a5" + }, +/obj/item/toy/plush/moth/atlas{ + pixel_x = 9; + pixel_y = 16 + }, +/obj/machinery/camera/autoname{ + dir = 1 + }, +/obj/item/paper/crumpled{ + pixel_y = -6; + pixel_x = -4 + }, +/obj/item/paper/crumpled/muddy{ + name = "coffee-stained paper scrap"; + pixel_x = -9; + pixel_y = 6 + }, +/turf/open/floor/plasteel/lightgrey, /area/ship/cargo) "Ou" = ( /obj/structure/cable{ @@ -3822,10 +5057,10 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/effect/turf_decal/trimline/opaque/yellow/filled/line{ +/obj/effect/turf_decal/trimline/opaque/nsorange/filled/line{ dir = 4 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "Ov" = ( /obj/machinery/light/dim/directional/east, @@ -3833,19 +5068,25 @@ autolinkers = list("broadcasterB","hub"); network = "nt_commnet" }, -/turf/open/floor/circuit/telecomms{ - initial_gas_mix = "TEMP=2.7" +/obj/effect/turf_decal/techfloor{ + dir = 8 }, +/turf/open/floor/circuit, /area/ship/engineering/communications) "Ox" = ( -/obj/effect/turf_decal/corner/opaque/ntblue/half{ +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/opaque/yellow/filled/warning{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/plasteel/white, -/area/ship/hallway/central) +/obj/item/gps/computer{ + pixel_x = 32; + pixel_y = 0; + density = 0 + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/engineering/communications) "OC" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -3854,44 +5095,39 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/ntblue/half{ - dir = 1 - }, /obj/structure/cable{ icon_state = "0-6" }, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/corner/opaque/vired/half{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "OK" = ( -/obj/machinery/light_switch{ - pixel_x = -7; - pixel_y = 21 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/obj/effect/turf_decal/corner/opaque/ntblue/half{ - dir = 1 +/obj/effect/turf_decal/trimline/opaque/yellow/filled/corner, +/obj/machinery/autolathe, +/obj/item/disk/design_disk/ammo_c9mm, +/obj/item/stack/sheet/metal/ten, +/obj/item/stack/sheet/glass{ + amount = 10 }, -/obj/machinery/button/door{ - dir = 8; - pixel_x = 20; - name = "Cargo Bay Shutters"; - id = "Ranger_Cargo_Door"; - pixel_y = 1 +/obj/effect/turf_decal/corner/opaque/vired/half{ + dir = 1 }, -/obj/effect/turf_decal/trimline/opaque/yellow/filled/corner, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/trimline/opaque/nsorange/filled/corner, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "OP" = ( -/obj/effect/turf_decal/corner/opaque/ntblue/half{ - dir = 4 - }, /obj/structure/cable{ icon_state = "1-2" }, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/corner/opaque/vired/half{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, /area/ship/hallway/central) "Pd" = ( -/obj/structure/table/reinforced, /obj/item/aiModule/core/freeformcore{ pixel_x = -2; pixel_y = 1 @@ -3904,12 +5140,12 @@ pixel_x = 4; pixel_y = -2 }, -/obj/item/aiModule/zeroth{ - pixel_x = -5; - pixel_y = -6 - }, /obj/machinery/light/dim/directional/north, -/turf/open/floor/circuit/green/airless, +/obj/effect/turf_decal/techfloor, +/obj/structure/table/reinforced{ + color = "#8A9397" + }, +/turf/open/floor/circuit, /area/ship/engineering/communications) "Ph" = ( /obj/effect/turf_decal/industrial/warning, @@ -3924,18 +5160,31 @@ /obj/effect/turf_decal/siding/yellow{ dir = 8 }, -/turf/open/floor/plasteel/dark, +/obj/structure/railing{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, /area/ship/hallway/port) "Pr" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/effect/turf_decal/corner/opaque/ntblue{ +/obj/effect/turf_decal/corner/opaque/vired{ dir = 1 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) +"Pu" = ( +/obj/effect/decal/cleanable/robot_debris, +/turf/open/floor/plating, +/area/ship/engineering) +"PB" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/turf/open/floor/plasteel/lightgrey, +/area/ship/hallway/central) "PG" = ( /obj/structure/cable{ icon_state = "1-2" @@ -3947,72 +5196,93 @@ dir = 4 }, /obj/machinery/light/floor, -/turf/open/floor/plasteel/white, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel/dark, /area/ship/hallway/central) "PR" = ( -/obj/effect/turf_decal/corner/opaque/ntblue/half, /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/corner/opaque/vired/half, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "PV" = ( /obj/structure/table/reinforced, -/obj/item/storage/toolbox/mechanical, -/obj/item/storage/toolbox/electrical{ - pixel_x = 3; - pixel_y = 7 - }, /obj/effect/turf_decal/techfloor{ dir = 8 }, +/obj/item/stock_parts/micro_laser/high, +/obj/item/stock_parts/micro_laser/high{ + pixel_y = 4; + pixel_x = -2 + }, +/obj/item/stack/cable_coil/cut/red, /turf/open/floor/plasteel/mono/dark, /area/ship/engineering) "Qf" = ( -/obj/effect/turf_decal/corner/opaque/brown/mono, -/obj/effect/turf_decal/industrial/warning, -/turf/open/floor/plasteel/dark, -/area/ship/storage) +/obj/effect/turf_decal/corner/opaque/vired/half, +/obj/effect/turf_decal/siding/thinplating/dark, +/turf/open/floor/plasteel/tech, +/area/ship/storage/equip) "Qt" = ( -/obj/item/bodypart/leg/right/robot, -/obj/item/bodypart/r_arm/robot, -/obj/item/bodypart/leg/left/robot, -/obj/item/bodypart/l_arm/robot, -/obj/item/bodypart/chest/robot, -/obj/item/bodypart/head/robot, -/obj/item/borg/upgrade/ai, -/obj/item/robot_suit, -/obj/structure/closet/crate/engineering, /obj/effect/turf_decal/industrial/hatch/orange, -/obj/item/stock_parts/cell/high, -/obj/item/assembly/flash/handheld, -/obj/item/assembly/flash/handheld, +/obj/machinery/power/ship_gravity, +/obj/structure/cable{ + icon_state = "0-8" + }, /turf/open/floor/plating, /area/ship/engineering) "Qu" = ( /obj/machinery/door/firedoor/window, /obj/structure/grille, -/obj/structure/window/reinforced/fulltile, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "MedShutters"; + name = "Medical Privacy Shutters" + }, +/obj/structure/window/reinforced/fulltile/shuttle, /turf/open/floor/plating, /area/ship/medical) "QT" = ( -/turf/closed/wall/r_wall, +/turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/maintenance/starboard) "QV" = ( /obj/machinery/light/dim/directional/west, +/obj/structure/chair/handrail{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 4 + }, /turf/open/floor/engine/hull, -/area/ship/external) +/area/ship/external/dark) "Rn" = ( -/obj/machinery/portable_atmospherics/pump, /obj/machinery/light/dim/directional/north, -/turf/open/floor/plasteel/tech, -/area/ship/storage) +/obj/structure/crate_shelf, +/obj/machinery/door/window/brigdoor/eastleft{ + dir = 2; + req_access_txt = "1"; + name = "Armory"; + req_ship_access = 1 + }, +/obj/effect/turf_decal/steeldecal/steel_decals10{ + dir = 5 + }, +/obj/effect/turf_decal/steeldecal/steel_decals10{ + dir = 6 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 9 + }, +/turf/open/floor/plasteel/lightgrey, +/area/ship/storage/equip) "Ro" = ( /obj/effect/turf_decal/trimline/opaque/ntblue/filled/line{ dir = 1 }, /obj/item/radio/intercom/directional/north, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "RA" = ( /obj/structure/closet/firecloset/wall/directional/south, @@ -4022,25 +5292,25 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/effect/turf_decal/corner/opaque/ntblue/half, /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/corner/opaque/vired/half, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "RB" = ( -/obj/effect/turf_decal/trimline/opaque/orange/arrow_ccw{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ + dir = 9 }, -/obj/effect/turf_decal/trimline/opaque/orange/filled/line{ - dir = 8 +/obj/machinery/camera/autoname{ + dir = 10 }, -/obj/effect/turf_decal/industrial/warning, -/turf/open/floor/plasteel/white, -/area/ship/hallway/port) +/turf/open/floor/engine/hull, +/area/ship/external/dark) "RM" = ( /obj/structure/chair/sofa/brown/left/directional/west, -/turf/open/floor/plasteel/dark, +/obj/machinery/light/dim/directional/east, +/turf/open/floor/plasteel/lightgrey, /area/ship/hallway/central) "RS" = ( /obj/machinery/portable_atmospherics/canister/toxins, @@ -4056,13 +5326,14 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 9 }, -/obj/machinery/airalarm/directional/south, +/obj/effect/turf_decal/spline/fancy/opaque/blue, /turf/open/floor/plasteel/dark, /area/ship/bridge) "Sl" = ( -/obj/machinery/light/dim/directional/east, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/obj/structure/rack, +/obj/structure/closet/crate/secure/plasma{ + name = "Relay Parts Crate" + }, +/obj/item/storage/box/stockparts/basic, /obj/item/circuitboard/machine/telecomms/relay{ pixel_x = -5; pixel_y = 9 @@ -4075,6 +5346,15 @@ pixel_x = -5; pixel_y = 9 }, +/obj/item/encryptionkey/nanotrasen{ + pixel_x = -1 + }, +/obj/item/encryptionkey/nanotrasen{ + pixel_x = 3 + }, +/obj/item/encryptionkey/nanotrasen{ + pixel_x = 7 + }, /obj/item/stack/cable_coil/cyan{ pixel_x = 6 }, @@ -4120,6 +5400,9 @@ pixel_x = 7; pixel_y = 7 }, +/obj/structure/crate_shelf, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, +/obj/machinery/light/dim/directional/east, /turf/open/floor/plating, /area/ship/engineering) "So" = ( @@ -4132,10 +5415,24 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 9 }, -/turf/open/floor/plasteel/tech, +/obj/effect/turf_decal/trimline/opaque/nsorange/warning{ + dir = 1 + }, +/obj/effect/turf_decal/siding{ + color = "#474747"; + dir = 1 + }, +/obj/effect/decal/cleanable/wrapping, +/turf/open/floor/plasteel/lightgrey, /area/ship/cargo) +"Sv" = ( +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 4 + }, +/obj/machinery/airalarm/directional/west, +/turf/open/floor/plasteel/lightgrey, +/area/ship/hallway/central) "SC" = ( -/obj/structure/table/wood, /obj/item/storage/box/donkpockets{ pixel_x = -3 }, @@ -4147,32 +5444,36 @@ pixel_y = 9; pixel_x = 7 }, -/turf/open/floor/plasteel/dark, +/obj/structure/table/reinforced{ + color = "#8A9397" + }, +/turf/open/floor/plasteel/lightgrey, /area/ship/hallway/central) "SE" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, /obj/effect/turf_decal/industrial/outline/orange, +/obj/machinery/portable_atmospherics/canister/toxins, /turf/open/floor/plasteel/tech, /area/ship/maintenance/starboard) +"SG" = ( +/obj/structure/toilet{ + dir = 1 + }, +/turf/open/floor/plating/catwalk_floor, +/area/ship/security) "SN" = ( -/obj/effect/turf_decal/trimline/opaque/yellow/filled/line{ +/obj/effect/turf_decal/trimline/opaque/nsorange/filled/line{ dir = 4 }, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/trimline/transparent/white/filled/warning, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) -"SU" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/closed/wall/r_wall, -/area/ship/hallway/central) "Tb" = ( -/turf/closed/wall/r_wall, -/area/ship/storage) +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/storage/equip) "Te" = ( /obj/machinery/light/floor, /turf/open/floor/engine/hull, -/area/ship/external) +/area/ship/external/dark) "Tg" = ( /obj/structure/railing/corner{ dir = 4 @@ -4183,60 +5484,89 @@ /turf/open/floor/plating, /area/ship/maintenance/port) "Tl" = ( -/obj/machinery/light/dim/directional/north, -/obj/machinery/light/floor, -/turf/open/floor/engine/hull, -/area/ship/external) +/obj/structure/sign/nanotrasen/vigilitas, +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/hallway/central) "Tz" = ( -/turf/closed/wall/r_wall, -/area/ship/engineering) +/obj/effect/turf_decal/corner/opaque/vired/three_quarters, +/turf/closed/wall/mineral/titanium/nodiagonal, +/area/ship/hallway/port) +"TG" = ( +/obj/item/toy/plush/spider, +/obj/machinery/camera/autoname{ + dir = 9 + }, +/obj/structure/table/reinforced{ + color = "#8A9397" + }, +/turf/open/floor/plasteel/tech, +/area/ship/security) "TL" = ( -/obj/structure/closet/crate, /obj/machinery/light/dim/directional/north, -/turf/open/floor/plasteel/tech, +/obj/effect/turf_decal/trimline/opaque/nsorange/line{ + dir = 5 + }, +/obj/item/bedsheet/qm, +/obj/structure/bed, +/obj/structure/curtain/bounty, +/turf/open/floor/plasteel/lightgrey, /area/ship/cargo) "TR" = ( -/obj/structure/table/wood, /obj/machinery/light/dim/directional/north, -/obj/effect/turf_decal/corner/opaque/ntblue/half{ +/obj/effect/turf_decal/corner/opaque/vired/half{ dir = 1 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "TZ" = ( -/obj/effect/turf_decal/trimline/opaque/orange/arrow_ccw{ +/obj/structure/chair/handrail{ dir = 4 }, -/obj/effect/turf_decal/trimline/opaque/orange/filled/line{ +/obj/effect/turf_decal/trimline/opaque/vired/arrow_ccw{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/vired/filled/line{ dir = 8 }, -/turf/open/floor/plasteel/white, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/turf/open/floor/plasteel/tech/techmaint, /area/ship/hallway/port) "Ua" = ( /obj/machinery/camera/autoname{ dir = 9 }, -/turf/open/floor/circuit/green/airless, +/obj/machinery/button/door{ + dir = 8; + pixel_x = 26; + id = "AiCore"; + name = "Core Access"; + req_access_txt = "20"; + pixel_y = 8 + }, +/obj/effect/turf_decal/spline/fancy/opaque/black{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/opaque/yellow/filled/warning{ + dir = 4 + }, +/turf/open/floor/plasteel/telecomms_floor, /area/ship/engineering/communications) "Uj" = ( /obj/structure/table/reinforced{ color = "#c1b6a5" }, -/obj/item/paper_bin{ - pixel_y = 8; - pixel_x = 5 - }, -/obj/item/pen/fountain{ - pixel_x = -4; - pixel_y = 7 - }, -/obj/machinery/recharger{ - pixel_x = -4 +/obj/effect/turf_decal/techfloor{ + dir = 5 }, -/obj/item/stamp/captain{ - pixel_x = 7 +/obj/effect/spawner/lootdrop/lpaid{ + pixel_x = 2; + pixel_y = -2 }, -/turf/open/floor/plasteel/dark, +/obj/effect/spawner/lootdrop/lpretrieval{ + pixel_x = -10; + pixel_y = 10 + }, +/turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) "Ur" = ( /obj/structure/cable{ @@ -4245,36 +5575,38 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/turf_decal/trimline/opaque/orange/arrow_cw{ +/obj/structure/chair/handrail{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/opaque/vired/arrow_cw{ dir = 8 }, -/obj/effect/turf_decal/trimline/opaque/orange/filled/line{ +/obj/effect/turf_decal/trimline/opaque/vired/filled/line{ dir = 4 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/tech/techmaint, /area/ship/hallway/port) "Us" = ( /obj/effect/turf_decal/siding/red{ dir = 9 }, -/obj/machinery/door_timer{ - pixel_y = 28; - id = "ranger_brig" +/obj/structure/closet/crate/bin, +/obj/machinery/camera/autoname{ + dir = 4 }, -/turf/open/floor/mineral/plastitanium/red/brig, +/turf/open/floor/plasteel/tech, /area/ship/security) "Ut" = ( /obj/structure/urinal{ pixel_y = 29 }, /obj/machinery/light/dim/directional/west, -/turf/open/floor/plastic, +/turf/open/floor/plasteel/showroomfloor, /area/ship/crew/toilet) "UQ" = ( /turf/open/floor/engine/air, /area/ship/hallway/central) "UU" = ( -/obj/machinery/door/airlock/public/glass, /obj/structure/cable{ icon_state = "1-2" }, @@ -4282,31 +5614,31 @@ /obj/machinery/door/firedoor/border_only{ dir = 1 }, -/obj/effect/turf_decal/corner/opaque/ntblue/half{ +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Corridor Lockdown Port"; + id = "RangerPortShutters" + }, +/obj/effect/turf_decal/corner/opaque/vired/half{ dir = 4 }, -/turf/open/floor/plasteel/white, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "UW" = ( /obj/structure/cable/cyan{ icon_state = "6-9" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/obj/effect/decal/cleanable/plasma, /turf/open/floor/plating, /area/ship/maintenance/port) "Vg" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/fulltile, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/door/firedoor/window, -/obj/machinery/door/poddoor/shutters{ - dir = 4; - id = "Ranger_Cycler_Shutters" +/obj/machinery/camera/autoname{ + dir = 10 }, -/turf/open/floor/plating, -/area/ship/hallway/central) +/obj/machinery/light/floor, +/turf/open/floor/engine/hull, +/area/ship/external/dark) "Vh" = ( /obj/structure/cable{ icon_state = "2-4" @@ -4318,21 +5650,14 @@ dir = 1 }, /obj/effect/turf_decal/trimline/opaque/red/filled/line, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "Vk" = ( -/obj/structure/bed, -/obj/item/bedsheet/nanotrasen, -/obj/machinery/firealarm/directional/north, -/obj/item/toy/plush/moth/royal{ - pixel_x = 5; - pixel_y = 1 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 }, /turf/open/floor/wood, -/area/ship/crew/dorm) +/area/ship/crew/dorm/captain) "Vm" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8 @@ -4340,12 +5665,13 @@ /turf/open/floor/plating, /area/ship/maintenance/starboard) "Vp" = ( -/turf/closed/wall/r_wall, +/turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/hallway/starboard) "Vq" = ( -/obj/machinery/portable_atmospherics/canister/toxins, /obj/effect/turf_decal/industrial/outline/orange, /obj/effect/decal/cleanable/plasma, +/obj/machinery/portable_atmospherics/canister/toxins, +/obj/effect/decal/cleanable/plasma, /turf/open/floor/plasteel/tech, /area/ship/maintenance/port) "Vt" = ( @@ -4354,16 +5680,27 @@ icon_state = "0-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, +/obj/machinery/space_heater, +/obj/structure/railing, /turf/open/floor/plating, /area/ship/maintenance/port) "VC" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/stairs, +/turf/open/floor/plasteel/stairs{ + color = "#8A9397" + }, /area/ship/crew/cryo) -"VJ" = ( -/obj/machinery/door/airlock/engineering{ - dir = 4 +"VE" = ( +/obj/structure/grille, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 4; + name = "Bridge-Atrium Shutters"; + id = "BridgeAtrium" }, +/obj/structure/window/reinforced/fulltile/shuttle, +/turf/open/floor/plating, +/area/ship/bridge) +"VJ" = ( /obj/structure/cable{ icon_state = "4-8" }, @@ -4373,39 +5710,52 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ +/obj/effect/turf_decal/corner/opaque/solgovgold/border{ dir = 8 }, /turf/open/floor/plasteel/dark, /area/ship/hallway/central) "VM" = ( /obj/effect/turf_decal/industrial/outline/blue, -/obj/item/storage/box/lights/mixed{ - pixel_x = -4; - pixel_y = 6 +/obj/machinery/washing_machine, +/obj/structure/railing{ + dir = 8 }, -/obj/item/storage/box/mousetraps{ - pixel_y = -1; - pixel_x = 3 +/obj/item/toy/plush/tali{ + pixel_y = 14 }, -/turf/open/floor/plating, +/turf/open/floor/plasteel/tech, /area/ship/maintenance/starboard) "VP" = ( -/obj/structure/window/reinforced{ - dir = 8 +/obj/machinery/newscaster/security_unit/directional/south, +/obj/structure/chair/office{ + dir = 4; + name = "tactical swivel chair" }, -/obj/structure/closet, -/turf/open/floor/plasteel/dark, +/obj/item/radio/intercom/directional/south, +/turf/open/floor/mineral/plastitanium/red/brig, /area/ship/security) "VQ" = ( /obj/machinery/camera/autoname{ dir = 5 }, /turf/open/floor/engine/hull, -/area/ship/external) +/area/ship/external/dark) +"We" = ( +/obj/machinery/power/apc/auto_name/directional/west, +/obj/structure/cable{ + icon_state = "0-6" + }, +/obj/structure/railing{ + dir = 4; + layer = 4.1 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 5 + }, +/obj/structure/closet/crate/bin, +/turf/open/floor/plasteel/lightgrey, +/area/ship/hallway/central) "Wj" = ( /obj/structure/bed, /obj/item/radio/intercom/directional/south, @@ -4415,7 +5765,8 @@ "Wp" = ( /obj/machinery/door/poddoor{ dir = 2; - id = "Ranger_AI_Core_Blasts" + id = "Ranger_AI_Core_Blasts"; + name = "Communications Access" }, /obj/machinery/power/shieldwallgen/atmos/roundstart{ id = "AI_Core_Field_Engi"; @@ -4428,7 +5779,7 @@ /obj/machinery/door/firedoor/border_only{ dir = 1 }, -/turf/open/floor/plating, +/turf/open/floor/noslip, /area/ship/engineering) "Wr" = ( /obj/structure/cable{ @@ -4437,10 +5788,10 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/turf_decal/corner/opaque/ntblue{ +/obj/effect/turf_decal/corner/opaque/vired{ dir = 4 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "Wv" = ( /obj/structure/chair/sofa/brown/right/directional/south, @@ -4451,12 +5802,28 @@ pixel_x = -7; pixel_y = 21 }, -/turf/open/floor/plasteel/dark, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 8 + }, +/turf/open/floor/plasteel/lightgrey, /area/ship/hallway/central) +"Wz" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer4, +/turf/open/floor/engine/hull, +/area/ship/external/dark) "WF" = ( -/obj/item/radio/intercom/wideband, -/turf/closed/wall/r_wall, -/area/ship/bridge) +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor{ + dir = 4 + }, +/obj/machinery/light/dim/directional/south, +/turf/open/floor/plasteel/tech, +/area/ship/engineering/communications) "WG" = ( /obj/machinery/telecomms/server/presets/nanotrasen{ autolinkers = list("nanotrasen","hub"); @@ -4464,20 +5831,23 @@ freq_listening = list(1353,1447,1459) }, /obj/item/disk/holodisk/lp/stations, -/turf/open/floor/circuit/telecomms{ - initial_gas_mix = "TEMP=2.7" +/obj/effect/turf_decal/techfloor{ + dir = 1 }, +/turf/open/floor/circuit, /area/ship/engineering/communications) "WR" = ( -/obj/effect/turf_decal/corner/opaque/brown/mono, -/obj/effect/turf_decal/industrial/warning{ +/obj/effect/turf_decal/corner/opaque/vired/half{ dir = 1 }, -/turf/open/floor/plasteel/dark, -/area/ship/storage) +/obj/effect/decal/cleanable/shreds, +/obj/effect/decal/cleanable/wrapping, +/turf/open/floor/plasteel/tech, +/area/ship/storage/equip) "WZ" = ( /obj/machinery/computer/telecomms/server{ - dir = 4 + dir = 4; + icon_state = "computer-middle" }, /obj/machinery/light/dim/directional/west, /turf/open/floor/plasteel/mono/dark, @@ -4485,44 +5855,84 @@ "Xb" = ( /obj/effect/turf_decal/corner/opaque/blue/diagonal, /obj/structure/window/reinforced/spawner, -/obj/structure/closet, +/obj/structure/closet/wall/med/directional/east{ + name = "Anesthetics Closet" + }, +/obj/item/tank/internals/anesthetic{ + pixel_x = -2 + }, +/obj/item/tank/internals/anesthetic{ + pixel_x = 3 + }, +/obj/item/clothing/mask/breath/medical{ + pixel_x = 3 + }, +/obj/item/clothing/mask/breath/medical{ + pixel_x = 6; + pixel_y = -3 + }, +/obj/effect/turf_decal/borderfloorwhite/corner{ + dir = 1 + }, +/obj/structure/table/chem, +/obj/structure/sink/chem{ + pixel_x = 2; + pixel_y = 3 + }, /turf/open/floor/plasteel/white, /area/ship/medical) "Xt" = ( -/obj/machinery/space_heater, /obj/machinery/light/dim/directional/south, /obj/machinery/airalarm/directional/east, -/turf/open/floor/plasteel/tech, -/area/ship/storage) +/obj/machinery/suit_storage_unit/inherit{ + name = "Engineering Specialist's Storage Unit" + }, +/obj/item/clothing/mask/breath, +/obj/item/clothing/suit/space/hardsuit/ert/lp/engi, +/obj/item/tank/internals/oxygen/yellow, +/obj/effect/turf_decal/industrial/outline/yellow, +/turf/open/floor/plasteel/lightgrey, +/area/ship/storage/equip) "XA" = ( /obj/structure/cable{ icon_state = "1-10" }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, +/obj/structure/cable{ + icon_state = "5-10" + }, /turf/open/floor/plasteel/dark, /area/ship/bridge) "XE" = ( -/obj/effect/turf_decal/corner/opaque/ntblue/half{ - dir = 4 - }, /obj/structure/cable{ icon_state = "2-5" }, /obj/structure/cable{ icon_state = "1-2" }, -/turf/open/floor/plasteel/white, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ + dir = 8 + }, +/obj/effect/turf_decal/corner/opaque/vired/half{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, /area/ship/hallway/central) "XH" = ( /obj/machinery/power/apc/auto_name/directional/east, /obj/structure/cable{ icon_state = "0-8" }, -/obj/machinery/firealarm/directional/south, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/structure/closet/wall/directional/south, +/obj/effect/turf_decal/corner/opaque/lightgrey{ + dir = 10 + }, /turf/open/floor/plasteel/dark, /area/ship/crew/cryo) "XL" = ( -/obj/machinery/door/airlock/public/glass, /obj/structure/cable{ icon_state = "1-2" }, @@ -4530,10 +5940,18 @@ /obj/machinery/door/firedoor/border_only{ dir = 1 }, -/obj/effect/turf_decal/corner/opaque/ntblue/half{ +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Corridor Lockdown Starboard"; + id = "RangerStarboardShutters" + }, +/obj/effect/turf_decal/corner/opaque/vired/half{ dir = 4 }, -/turf/open/floor/plasteel/white, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 24 + }, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "XQ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ @@ -4545,7 +5963,7 @@ /obj/effect/turf_decal/trimline/opaque/blue/filled/corner{ dir = 4 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "XR" = ( /obj/machinery/door/airlock/public/glass, @@ -4556,20 +5974,27 @@ /obj/machinery/door/firedoor/border_only{ dir = 1 }, -/obj/effect/turf_decal/corner/opaque/ntblue/half{ +/obj/effect/turf_decal/corner/opaque/vired/half{ dir = 4 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/central) "XS" = ( /obj/effect/turf_decal/corner/opaque/blue/diagonal, -/obj/structure/table/greyscale, /obj/machinery/light/dim/directional/east, -/obj/item/toy/plush/moth/ragged, +/obj/item/storage/backpack/duffelbag/med/surgery, +/obj/item/toy/plush/moth/ragged{ + pixel_y = 11 + }, +/obj/effect/turf_decal/borderfloorwhite{ + dir = 8 + }, +/obj/structure/table/chem, +/obj/structure/extinguisher_cabinet/directional/north, /turf/open/floor/plasteel/white, /area/ship/medical) "XT" = ( -/turf/closed/wall/r_wall, +/turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/cargo) "XV" = ( /obj/machinery/camera/autoname{ @@ -4581,24 +6006,30 @@ /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "Yk" = ( -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plasteel/tech, +/obj/effect/turf_decal/trimline/opaque/nsorange/warning, +/obj/effect/turf_decal/siding{ + color = "#474747" + }, +/turf/open/floor/plasteel/lightgrey, /area/ship/cargo) "Yw" = ( -/obj/machinery/door/airlock/public/glass, /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/door/firedoor/border_only, /obj/machinery/door/firedoor/border_only{ dir = 1 }, -/obj/effect/turf_decal/corner/opaque/ntblue/half{ +/obj/machinery/door/poddoor/shutters/preopen{ + name = "Corridor Lockdown Starboard"; + id = "RangerStarboardShutters" + }, +/obj/effect/turf_decal/corner/opaque/vired/half{ dir = 8 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "Yy" = ( /obj/machinery/power/shieldwallgen/atmos/roundstart{ @@ -4618,33 +6049,47 @@ /turf/open/floor/plasteel, /area/ship/hallway/port) "Yz" = ( -/obj/structure/window/reinforced, -/obj/effect/turf_decal/siding/red{ - dir = 6 +/obj/effect/turf_decal/techfloor{ + dir = 4 }, -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable{ - icon_state = "0-9" +/obj/effect/turf_decal/techfloor{ + dir = 8 }, -/turf/open/floor/mineral/plastitanium/red/brig, +/obj/machinery/door/airlock/security/brig{ + dir = 8; + id_tag = "SecureCell"; + name = "Holding Cell"; + req_access_txt = "1" + }, +/turf/open/floor/plating, /area/ship/security) "YJ" = ( -/obj/machinery/suit_storage_unit/inherit, -/obj/item/clothing/suit/space/hardsuit/ancient/lp, -/obj/item/clothing/mask/breath, -/obj/effect/turf_decal/corner/opaque/brown/mono, -/obj/item/tank/internals/emergency_oxygen, -/obj/effect/turf_decal/industrial/warning, -/turf/open/floor/plasteel/dark, -/area/ship/storage) -"YK" = ( -/obj/machinery/light_switch{ +/obj/effect/turf_decal/corner/opaque/vired/three_quarters, +/obj/structure/table/reinforced, +/obj/item/screwdriver{ + pixel_x = -7; + pixel_y = 7 + }, +/obj/item/screwdriver{ + pixel_x = -7 + }, +/obj/item/hand_labeler{ pixel_x = 8; - pixel_y = 22 + pixel_y = 13 }, -/turf/open/floor/plasteel/stairs/wood{ +/obj/effect/turf_decal/siding/thinplating/dark/corner{ dir = 8 }, +/obj/item/radio/intercom/directional/east, +/turf/open/floor/plasteel/tech, +/area/ship/storage/equip) +"YK" = ( +/obj/machinery/firealarm/directional/north{ + pixel_x = -4 + }, +/obj/structure/table/reinforced, +/obj/machinery/computer/helm/viewscreen/directional/west, +/turf/open/floor/plasteel/white, /area/ship/medical) "YP" = ( /obj/structure/cable{ @@ -4662,21 +6107,29 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 6 }, -/turf/open/floor/plating, +/obj/effect/turf_decal/steeldecal/steel_decals10{ + dir = 1 + }, +/obj/effect/turf_decal/steeldecal/steel_decals10{ + dir = 8 + }, +/turf/open/floor/plasteel/tech, /area/ship/maintenance/starboard) "YW" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /obj/machinery/camera/autoname{ dir = 4 }, /obj/item/radio/intercom/directional/west, -/obj/effect/turf_decal/corner/opaque/ntblue/half{ +/obj/effect/turf_decal/corner/opaque/vired/half{ dir = 8 }, -/turf/open/floor/plasteel/white, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, /area/ship/hallway/central) "Zj" = ( /obj/machinery/atmospherics/components/unary/shuttle/heater{ @@ -4687,22 +6140,33 @@ }, /obj/machinery/door/poddoor/shutters{ dir = 4; - id = "Ranger_Port_maint_shut" + id = "Ranger_Port_maint_shut"; + name = "Engine Shutters" }, /turf/open/floor/plating, /area/ship/maintenance/port) "Zk" = ( -/obj/machinery/atmospherics/pipe/layer_manifold/visible{ - dir = 4 - }, /obj/machinery/advanced_airlock_controller{ pixel_y = 24 }, -/turf/open/floor/plasteel/dark, +/obj/effect/turf_decal/techfloor{ + dir = 8 + }, +/obj/item/tank/internals/emergency_oxygen, +/obj/item/clothing/mask/breath, +/obj/machinery/suit_storage_unit/inherit{ + name = "Emergency EVA Suit" + }, +/obj/item/clothing/head/helmet/space/fragile, +/obj/item/clothing/suit/space/fragile, +/turf/open/floor/plasteel/tech/techmaint{ + color = "#a8b2b6" + }, /area/ship/hallway/central) "Zl" = ( -/obj/machinery/portable_atmospherics/canister, /obj/effect/turf_decal/industrial/outline/orange, +/obj/machinery/portable_atmospherics/canister/toxins, +/obj/effect/decal/cleanable/plasma, /turf/open/floor/plasteel/tech, /area/ship/maintenance/port) "Zs" = ( @@ -4716,70 +6180,113 @@ /obj/structure/cable{ icon_state = "1-6" }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, +/area/ship/hallway/port) +"Zu" = ( +/obj/effect/turf_decal/trimline/opaque/vired/arrow_ccw{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/opaque/vired/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/turf/open/floor/plasteel/tech/techmaint, /area/ship/hallway/port) "Zv" = ( /obj/machinery/firealarm/directional/west, +/obj/machinery/camera/autoname{ + dir = 4 + }, /turf/open/floor/wood, /area/ship/security) "Zw" = ( /obj/structure/cable{ icon_state = "1-2" }, -/turf/open/floor/plasteel/white, +/obj/effect/turf_decal/trimline/transparent/white/filled/warning, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "Zx" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/corner/opaque/ntblue{ +/obj/effect/turf_decal/corner/opaque/vired{ dir = 1 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "ZF" = ( /obj/machinery/light/dim/directional/south, /obj/effect/turf_decal/industrial/outline/blue, /obj/structure/reagent_dispensers/watertank, -/turf/open/floor/plating, +/turf/open/floor/plasteel/tech, /area/ship/maintenance/port) "ZI" = ( /obj/structure/cable{ icon_state = "4-8" }, /obj/effect/turf_decal/trimline/opaque/ntblue/filled/corner, -/turf/open/floor/plasteel/white, +/obj/structure/chair/handrail{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, /area/ship/hallway/starboard) "ZJ" = ( /obj/effect/turf_decal/industrial/warning{ dir = 1 }, -/turf/open/floor/plasteel/tech/airless, +/turf/open/floor/plasteel/tech, /area/ship/engineering/communications) "ZL" = ( /obj/machinery/vending/coffee, -/obj/machinery/light/dim/directional/east, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel/lightgrey, /area/ship/hallway/central) "ZS" = ( -/obj/machinery/portable_atmospherics/scrubber, -/turf/open/floor/plasteel/tech, -/area/ship/storage) +/obj/structure/closet/syndicate{ + desc = "It's the armory closet. A closet with shelving, in an armory!" + }, +/obj/machinery/door/window/brigdoor/eastright{ + dir = 2; + req_access_txt = "1"; + name = "Armory"; + req_ship_access = 1 + }, +/obj/item/storage/pistolcase/commander, +/obj/item/ammo_box/magazine/co9mm, +/obj/item/clothing/suit/armor/nanotrasen/slim, +/obj/item/clothing/suit/armor/nanotrasen/slim, +/obj/item/ammo_box/magazine/smgm9mm, +/obj/item/ammo_box/magazine/smgm9mm, +/obj/item/ammo_box/magazine/smgm9mm, +/obj/item/storage/pistolcase, +/obj/effect/turf_decal/steeldecal/steel_decals10{ + dir = 5 + }, +/obj/effect/turf_decal/steeldecal/steel_decals10{ + dir = 6 + }, +/obj/effect/turf_decal/siding/thinplating/dark{ + dir = 5 + }, +/obj/item/gun/ballistic/automatic/smg/skm_carbine/inteq/proto, +/turf/open/floor/plasteel/lightgrey, +/area/ship/storage/equip) "ZW" = ( /obj/machinery/light/dim/directional/north, /obj/effect/turf_decal/trimline/opaque/ntblue/filled/corner{ dir = 1 }, -/turf/open/floor/plasteel/white, +/turf/open/floor/plasteel/dark, /area/ship/hallway/port) "ZY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 8 +/obj/structure/chair/handrail{ + dir = 4 }, -/obj/effect/turf_decal/corner/opaque/ntblue/half{ +/obj/effect/turf_decal/corner/opaque/vired/half{ dir = 8 }, -/turf/open/floor/plasteel/white, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, +/turf/open/floor/plasteel/dark, /area/ship/hallway/central) (1,1,1) = {" @@ -4794,6 +6301,7 @@ tg tg LV zW +yK zW zW zW @@ -4807,8 +6315,7 @@ zW zW zW zW -zW -zW +yK zW QT qs @@ -4936,8 +6443,8 @@ zW zW zW LV -Zl -Vq +ci +hp aW UW hl @@ -4961,7 +6468,7 @@ qQ gD ib eN -RS +Lw Dd QT zW @@ -5044,10 +6551,10 @@ zW (8,1,1) = {" zW zW -zW +hN vm -xp -Aw +vm +cj oQ tq LV @@ -5059,9 +6566,9 @@ zW zW Kg Pd -vO +Ox IE -vO +Ep Nf Kg zW @@ -5076,7 +6583,7 @@ Zv AZ Wj fV -zW +sp "} (9,1,1) = {" zW @@ -5085,7 +6592,7 @@ vm vm YK aO -Om +Aw Gn LV vT @@ -5093,7 +6600,7 @@ LV LV zW zW -wq +yK Kg MK Ua @@ -5101,7 +6608,7 @@ vO Nn Cq Kg -wq +yK zW zW QT @@ -5129,14 +6636,14 @@ zc jA zW zW -Tz -Tz +wU +wU Kg Kg Kg kw gk -zB +Kg Kg Kg Kg @@ -5145,7 +6652,7 @@ zW Vp cN vR -fV +nq Us Js Ma @@ -5164,25 +6671,25 @@ Qu Cb NR jA -zW -Tz -Tz +qe +wU +wU jt WZ Mh -Tz +wU nE -fU -kt +WF +Kg LM bX Kg Kg -zW +fo Vp Ff wT -fV +nq gi Lg bN @@ -5202,10 +6709,10 @@ XQ PR jA zW -Tz +wU LQ -MD aP +Pu xq Wp Gz @@ -5223,7 +6730,7 @@ qR tQ nh Dx -Dx +yk fV "} (13,1,1) = {" @@ -5239,7 +6746,7 @@ cR pU jA zW -Tz +wU gN dr rC @@ -5248,7 +6755,7 @@ Dr ZJ fU Mx -tT +MD tT ux Kg @@ -5257,9 +6764,9 @@ Vp TR KX fV -Ji +fV Yz -hf +iH iH fV "} @@ -5276,15 +6783,15 @@ bf tR jA zW -Tz +wU Ge or JP -Tz -Tz +wU +wU hK Hd -Tz +wU Ds Bo WG @@ -5293,11 +6800,11 @@ zW Vp bD iD -fV -fV -fV -fV -fV +dm +hf +Ab +Ji +SG fV "} (15,1,1) = {" @@ -5313,8 +6820,8 @@ jH uE jA zW -Tz -Tz +wU +wU Sl Nd IC @@ -5331,11 +6838,11 @@ Vp yo Cg of -gg -Ut -BI +jd +TG +my xv -gg +fV "} (16,1,1) = {" zW @@ -5351,15 +6858,15 @@ Kf jA zW zW -Tz -Tz +wU +wU Qt -Tz +wU Ca rA yU -dP -wf +wU +Kg Kg Kg zW @@ -5369,7 +6876,7 @@ pi iZ ji gg -am +gg gg gg gg @@ -5381,24 +6888,24 @@ JR Iy ym VC -VC +CW EL ml -jA +Tz jA zW zW -zW -Tz -Tz -Tz +Vg +wU +wU +wU up hn aG -Tz +df Kg Kg -zW +sp zW zW Vp @@ -5406,8 +6913,8 @@ Vp MI zF gg -my -fo +Ut +BI BA gg "} @@ -5427,13 +6934,13 @@ zW zW zW zW -Tz +wU jr Mt lX Ny JK -Tz +wU zW zW zW @@ -5443,9 +6950,9 @@ Vp dK ZI gg -qe -oM -yK +am +gg +gg gg "} (19,1,1) = {" @@ -5455,7 +6962,7 @@ JR tb mQ rq -rq +gr Zs pf jA @@ -5464,13 +6971,13 @@ zW zW zW zW -Tz +wU ps Hs tk Bh GY -Tz +wU zW zW zW @@ -5500,15 +7007,15 @@ jA zW zW zW -Tz -Tz -eo +wU +wU +wU FB wU -hZ -Lw -Tz -Tz +wU +wU +wU +wU zW zW zW @@ -5538,13 +7045,13 @@ sJ sJ sJ sJ -sJ -sJ +We +hZ VJ -sJ -sJ -sJ -sJ +rX +Sv +Kl +eo sJ sJ sJ @@ -5564,7 +7071,7 @@ zW zW zW QV -jA +gd KQ wp oz @@ -5575,13 +7082,13 @@ gW ZY CG mw -rX +MR vj fd -Ox +yG BX Gk -Kl +bK mw zi lj @@ -5592,19 +7099,19 @@ nA Mm uk xA -Vp -QV +jQ +ww zW "} (23,1,1) = {" zW zW zW -wq +Gs HA TZ -RB -oz +Zu +dN pa kO UU @@ -5612,7 +7119,7 @@ PG Gh XR OP -OP +DQ OP OP BY @@ -5651,14 +7158,14 @@ sJ Wv Fx fy -bu +PB pn Av tf -bu +iS rT sJ -Vg +sJ ok sJ OK @@ -5673,8 +7180,8 @@ zW (25,1,1) = {" zW zW -zW -hN +ef +Og jA Po iX @@ -5689,10 +7196,10 @@ ox IM RM Mn -bu +iv bu AP -bu +Ih kK sJ Zk @@ -5708,7 +7215,7 @@ hz zW "} (26,1,1) = {" -ef +zW zW zW zW @@ -5739,7 +7246,7 @@ DZ So Eq lU -cj +EA XT zW zW @@ -5757,14 +7264,14 @@ jZ Be Tb sJ -SU +sJ Mf Gc Ha Lk -Lk -Lk -Lk +VE +VE +VE tj Lk sJ @@ -5774,8 +7281,8 @@ CP XT Iz lv +Yk pD -ww vz XT zW @@ -5794,8 +7301,8 @@ wu yZ Tb NC -jC Mf +jC mv Ao JO @@ -5803,17 +7310,17 @@ pA lD hF ec +wf Lk -Te -wq -zW -zW +Wz +dx +RB XT lw -pD +Om Yk -hp gL +vo XT zW zW @@ -5831,8 +7338,8 @@ Qf Xt Tb zW -zW Mf +Mu Vk NZ Lk @@ -5840,15 +7347,15 @@ sf iF XA Sa +xp Lk wq zW zW -zW XT TL -pD -pD +Fg +zB eE XT XT @@ -5868,18 +7375,18 @@ YJ Tb Tb zW -zW Mf -Mu +Mf +qn hx Lk AF vp CI dC +kt Lk -zW -zW +wq zW zW XT @@ -5908,14 +7415,14 @@ zW zW Mf Mf -Fg +Mf Lk tK og NM ff Lk -zW +Lk zW zW zW @@ -5981,14 +7488,14 @@ zW zW zW zW -wq +VQ wq Lk mn cv lW -WF -VQ +Lk +rw zW zW zW diff --git a/_maps/shuttles/nanotrasen/nanotrasen_skipper.dmm b/_maps/shuttles/nanotrasen/nanotrasen_skipper.dmm deleted file mode 100644 index f9aeea662f05..000000000000 --- a/_maps/shuttles/nanotrasen/nanotrasen_skipper.dmm +++ /dev/null @@ -1,7393 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"ai" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 9 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/ship/engineering/atmospherics) -"al" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 8 - }, -/turf/open/floor/wood, -/area/ship/hallway/central) -"ao" = ( -/obj/machinery/airalarm/directional/south, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/carpet/royalblue, -/area/ship/crew/crewtwo) -"aA" = ( -/obj/structure/railing/corner{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 1 - }, -/turf/open/floor/carpet/nanoweave/beige, -/area/ship/bridge) -"aF" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/structure/sign/poster/official/random{ - pixel_y = -32 - }, -/obj/structure/chair{ - dir = 8 - }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/hallway/central) -"aL" = ( -/obj/machinery/atmospherics/pipe/manifold/yellow/visible{ - dir = 4 - }, -/obj/item/radio/intercom/directional/east, -/turf/open/floor/engine, -/area/ship/engineering/engine) -"aN" = ( -/obj/structure/catwalk/over, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/rust, -/area/ship/crew/toilet) -"aQ" = ( -/obj/machinery/atmospherics/pipe/simple/brown/hidden/layer4, -/turf/open/floor/plasteel, -/area/ship/cargo) -"aR" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/layer_manifold, -/obj/structure/catwalk/over/plated_catwalk/dark, -/turf/open/floor/plating, -/area/ship/engineering/engine) -"aZ" = ( -/turf/open/floor/carpet/blue, -/area/ship/crew/dorm) -"bd" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/carpet/nanoweave/blue, -/area/ship/medical) -"bf" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 10 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"bh" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/brown/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"bk" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/incinerator_input{ - dir = 4 - }, -/turf/open/floor/engine/airless, -/area/ship/engineering/engine) -"bo" = ( -/obj/structure/dresser, -/obj/item/flashlight/lamp{ - pixel_x = -5; - pixel_y = 9 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"bq" = ( -/obj/structure/dresser, -/obj/item/storage/lockbox/medal{ - pixel_y = 13 - }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/wood, -/area/ship/crew/crewtwo) -"bs" = ( -/obj/structure/holosign/barrier/engineering/infinite{ - name = "maintenance barrier" - }, -/obj/structure/catwalk/over, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating/rust, -/area/ship/crew/toilet) -"bw" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/obj/structure/sign/poster/retro/nanotrasen_logo_80s{ - pixel_y = 32 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"bz" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/brown/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"bA" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 6 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/engine, -/area/ship/engineering/atmospherics) -"bG" = ( -/obj/structure/window/reinforced/spawner/west, -/obj/machinery/door/poddoor{ - dir = 4; - id = "enginelockdown" - }, -/obj/machinery/door/window/eastleft{ - name = "Engine Access" - }, -/obj/machinery/atmospherics/components/unary/shuttle/fire_heater{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"bI" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/obj/machinery/atmospherics/pipe/simple/cyan/visible/layer4, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"bO" = ( -/obj/structure/table/reinforced, -/obj/item/flashlight/lamp{ - pixel_x = -9; - pixel_y = 13 - }, -/obj/machinery/recharger, -/turf/open/floor/carpet/nanoweave/red, -/area/ship/crew/crewthree) -"bR" = ( -/obj/structure/catwalk/over, -/obj/machinery/firealarm/directional/west, -/obj/effect/decal/cleanable/cobweb, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/garbage, -/turf/open/floor/plating, -/area/ship/crew/toilet) -"bW" = ( -/obj/structure/displaycase/captain{ - req_access = null; - req_access_txt = "20" - }, -/turf/open/floor/wood, -/area/ship/crew/crewtwo) -"bY" = ( -/obj/machinery/vending/cola/space_up, -/turf/open/floor/wood, -/area/ship/hallway/central) -"bZ" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/ship/cargo) -"cd" = ( -/obj/machinery/light/dim/directional/south, -/obj/structure/chair{ - dir = 1 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"cp" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 1 - }, -/turf/open/floor/wood, -/area/ship/hallway/central) -"cq" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 4 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"cF" = ( -/obj/structure/chair/comfy/grey/directional/east, -/turf/open/floor/wood, -/area/ship/hallway/central) -"cJ" = ( -/obj/structure/sign/nanotrasen{ - pixel_y = -30 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"cL" = ( -/obj/machinery/atmospherics/pipe/layer_manifold{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/structure/catwalk/over/plated_catwalk/dark, -/obj/effect/turf_decal/techfloor/corner, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"cQ" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer2{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/atmospherics) -"cS" = ( -/obj/structure/chair{ - dir = 1 - }, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"de" = ( -/obj/machinery/light/dim/directional/north, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"dj" = ( -/obj/structure/grille, -/obj/structure/window/plasma/reinforced/fulltile, -/turf/open/floor/plating, -/area/ship/engineering/engine) -"dl" = ( -/obj/structure/sign/poster/official/obey{ - pixel_x = -30 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/table/reinforced, -/obj/item/paper_bin{ - pixel_x = 6; - pixel_y = 2 - }, -/obj/item/pen{ - pixel_y = 4; - pixel_x = 5 - }, -/obj/item/folder/blue{ - pixel_x = -8; - pixel_y = 7 - }, -/obj/item/stamp/head_of_personnel{ - pixel_x = -7; - pixel_y = -3 - }, -/obj/item/folder/red{ - pixel_x = -8; - pixel_y = 11 - }, -/turf/open/floor/wood, -/area/ship/crew/crewthree) -"dp" = ( -/obj/structure/table, -/obj/machinery/chem_dispenser/drinks/beer, -/obj/machinery/light/directional/west, -/obj/effect/turf_decal/corner/opaque/green/mono, -/turf/open/floor/plasteel, -/area/ship/crew/canteen/kitchen) -"dq" = ( -/obj/structure/table/wood, -/obj/item/paper_bin, -/obj/item/pen, -/obj/structure/sign/poster/official/random{ - pixel_y = 32 - }, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"du" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/obj/machinery/holopad/emergency/command, -/turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) -"dy" = ( -/turf/open/floor/carpet/nanoweave/blue, -/area/ship/medical) -"dB" = ( -/obj/machinery/airalarm/directional/west, -/obj/effect/turf_decal/corner/opaque/ntblue/diagonal, -/obj/effect/turf_decal/corner/opaque/neutral/diagonal{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"dG" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 - }, -/obj/machinery/light/small/directional/east, -/obj/machinery/firealarm/directional/south, -/obj/item/gun/energy/laser{ - pixel_y = -6 - }, -/obj/item/gun/energy/e_gun/mini{ - pixel_y = -2; - pixel_x = 6 - }, -/obj/item/gun/energy/e_gun/mini{ - pixel_x = -8; - pixel_y = -2 - }, -/obj/structure/closet/secure_closet{ - anchored = 1; - can_be_unanchored = 1; - icon_state = "sec"; - name = "firearm locker"; - req_access_txt = "1" - }, -/obj/item/gun/ballistic/automatic/pistol/commander, -/obj/item/gun/ballistic/automatic/pistol/commander, -/turf/open/floor/wood, -/area/ship/crew/crewthree) -"dJ" = ( -/obj/machinery/button/door{ - dir = 4; - pixel_x = -24; - id = "enginelockdown"; - name = "Lockdown Engines" - }, -/obj/machinery/atmospherics/components/binary/volume_pump{ - dir = 8; - name = "Activate Exhaust" - }, -/obj/machinery/atmospherics/pipe/simple/green/visible, -/obj/structure/catwalk/over/plated_catwalk/dark, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"dM" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"dO" = ( -/obj/machinery/atmospherics/components/trinary/mixer/flipped/layer4, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"dS" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 5 - }, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"dW" = ( -/obj/structure/filingcabinet/employment, -/turf/open/floor/carpet/nanoweave/blue, -/area/ship/crew/office) -"dX" = ( -/obj/structure/table/chem, -/obj/item/clothing/glasses/hud/health, -/obj/machinery/light/directional/east, -/obj/effect/turf_decal/corner/opaque/blue/mono, -/obj/item/reagent_containers/glass/beaker{ - pixel_y = 12; - pixel_x = -9 - }, -/obj/structure/sink/chem{ - pixel_x = 2; - pixel_y = 3 - }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"dZ" = ( -/obj/structure/fireaxecabinet{ - pixel_y = -29 - }, -/obj/structure/catwalk/over/plated_catwalk/dark, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"ed" = ( -/obj/structure/table, -/obj/machinery/fax/nanotrasen, -/obj/structure/sign/poster/official/random{ - pixel_y = 32 - }, -/turf/open/floor/carpet/nanoweave/blue, -/area/ship/crew/office) -"eg" = ( -/obj/machinery/vending/cigarette, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"ek" = ( -/obj/effect/turf_decal/techfloor{ - dir = 8 - }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/machinery/light_switch{ - pixel_x = -14; - pixel_y = 24 - }, -/turf/open/floor/plasteel/dark, -/area/ship/crew/cryo) -"er" = ( -/obj/machinery/door/airlock/engineering{ - dir = 4; - name = "Engineering" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/engineering/atmospherics) -"eu" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 6 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"eB" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 - }, -/obj/machinery/light_switch{ - dir = 1; - pixel_x = 6; - pixel_y = -24 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"eC" = ( -/obj/structure/window/reinforced/fulltile, -/obj/structure/grille, -/turf/open/floor/plating, -/area/ship/crew/crewthree) -"eD" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 8 - }, -/obj/structure/extinguisher_cabinet/directional/south, -/obj/structure/sign/poster/contraband/syndicate_recruitment{ - pixel_x = 30 - }, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plating/rust, -/area/ship/crew/toilet) -"eL" = ( -/obj/machinery/door/airlock/command{ - name = "Internal Affairs Office" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/carpet/nanoweave/blue, -/area/ship/crew/office) -"eP" = ( -/obj/structure/chair/comfy/grey/directional/east, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"eQ" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"eY" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/obj/structure/extinguisher_cabinet/directional/south, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"fa" = ( -/obj/structure/table, -/obj/item/storage/pill_bottle/dice{ - pixel_x = 5; - pixel_y = 6 - }, -/obj/item/spacecash/bundle/c5, -/turf/open/floor/carpet/red, -/area/ship/hallway/central) -"fc" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 1 - }, -/turf/open/floor/engine, -/area/ship/engineering/atmospherics) -"fg" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 10 - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/door/poddoor/preopen{ - dir = 4; - id = "coolingshutdown" - }, -/turf/open/floor/engine/airless, -/area/ship/external) -"fi" = ( -/obj/machinery/door/airlock/command{ - dir = 4; - name = "Personal Quarters"; - req_one_access_txt = "57" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/turf/open/floor/carpet/blue, -/area/ship/crew/crewthree) -"fl" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 9 - }, -/obj/machinery/firealarm/directional/east, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"fn" = ( -/obj/machinery/door/firedoor/border_only, -/turf/open/floor/wood, -/area/ship/hallway/central) -"fo" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"fs" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/button/door{ - dir = 8; - id = "amogusdoors"; - name = "Cargo Blast Door Control"; - pixel_x = 25; - pixel_y = -4 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/button/shieldwallgen{ - dir = 8; - id = "skippyshieldywalle"; - pixel_x = 24; - pixel_y = 5 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"ft" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "TEG to Exhaust" - }, -/turf/open/floor/engine, -/area/ship/engineering/engine) -"fu" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 8 - }, -/obj/structure/sign/poster/official/random{ - pixel_x = 30 - }, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"fw" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 1 - }, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/item/paper{ - default_raw_text = "The igniter in the chamber does not work very well. I suggest throwing lit welders down the disposal chute over there to ignite the chamber." - }, -/obj/item/weldingtool, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/effect/turf_decal/techfloor{ - dir = 1 - }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/atmospherics) -"fx" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 1 - }, -/turf/closed/wall, -/area/ship/hallway/central) -"fz" = ( -/obj/machinery/shower{ - pixel_y = 18 - }, -/obj/machinery/firealarm/directional/west, -/obj/effect/turf_decal/corner_techfloor_grid{ - dir = 1 - }, -/turf/open/floor/noslip, -/area/ship/engineering/atmospherics) -"fD" = ( -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, -/turf/open/floor/engine, -/area/ship/engineering/engine) -"fG" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 1 - }, -/turf/open/floor/plasteel/showroomfloor, -/area/ship/crew/toilet) -"fI" = ( -/obj/structure/chair/sofa/brown/left/directional/west, -/obj/machinery/newscaster/directional/east, -/turf/open/floor/carpet/red, -/area/ship/hallway/central) -"fQ" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 1 - }, -/obj/machinery/atmospherics/components/binary/pump/layer4{ - dir = 1; - name = "Fuel Pump" - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"fT" = ( -/obj/machinery/atmospherics/pipe/simple/dark/visible{ - dir = 9 - }, -/turf/open/floor/engine, -/area/ship/engineering/engine) -"fU" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/plasteel/telecomms_floor, -/area/ship/crew/cryo) -"fW" = ( -/turf/template_noop, -/area/template_noop) -"fY" = ( -/obj/structure/table, -/obj/item/trash/raisins, -/obj/item/radio/intercom/directional/east, -/turf/open/floor/wood, -/area/ship/hallway/central) -"ga" = ( -/obj/structure/grille, -/obj/structure/window/fulltile, -/turf/open/floor/plating, -/area/ship/medical) -"gc" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"gh" = ( -/obj/machinery/power/smes/shuttle/precharged{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/structure/window/reinforced/spawner/west, -/obj/machinery/door/poddoor{ - dir = 4; - id = "enginelockdown" - }, -/obj/machinery/door/window/eastleft{ - name = "Engine Access" - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"gi" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 - }, -/obj/effect/turf_decal/corner/opaque/ntblue/diagonal, -/obj/effect/turf_decal/corner/opaque/neutral/diagonal{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"gk" = ( -/obj/structure/sign/poster/official/safety_internals{ - pixel_x = -32 - }, -/obj/structure/tank_dispenser, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"gm" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/structure/railing/corner{ - dir = 4 - }, -/obj/effect/turf_decal/arrows{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/cargo/office) -"gr" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 6 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"gu" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"gx" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/layer4, -/turf/open/floor/plating, -/area/ship/hallway/central) -"gB" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "Cooling to TEG" - }, -/turf/open/floor/engine, -/area/ship/engineering/engine) -"gM" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"gN" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/green/visible, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"gO" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "thruster fuel pump" - }, -/obj/machinery/atmospherics/pipe/simple/green/visible, -/obj/structure/catwalk/over/plated_catwalk/dark, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"gP" = ( -/obj/effect/landmark/observer_start, -/obj/machinery/holopad, -/turf/open/floor/wood, -/area/ship/hallway/central) -"gQ" = ( -/obj/effect/turf_decal/siding/wood, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 1 - }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/hallway/central) -"hb" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 1 - }, -/turf/open/floor/wood, -/area/ship/hallway/central) -"hc" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 1 - }, -/obj/effect/turf_decal/techfloor{ - dir = 5 - }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/atmospherics) -"hi" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 9 - }, -/turf/open/floor/carpet/royalblue, -/area/ship/crew/crewtwo) -"hr" = ( -/turf/closed/wall/r_wall, -/area/ship/hallway/central) -"hz" = ( -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plasteel, -/area/ship/cargo) -"hA" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"hC" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 9 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"hG" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ship/cargo/office) -"hJ" = ( -/obj/structure/grille, -/obj/machinery/door/poddoor{ - id = "windowlockdown" - }, -/obj/structure/window/reinforced/fulltile, -/obj/machinery/door/firedoor/window, -/turf/open/floor/plating, -/area/ship/medical) -"hM" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"hP" = ( -/obj/machinery/computer/helm{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/ntblue/half{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) -"hT" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"hZ" = ( -/obj/item/extinguisher/advanced, -/obj/item/clothing/glasses/meson/engine, -/obj/item/clothing/suit/hooded/wintercoat/engineering, -/obj/item/clothing/under/rank/engineering/engineer/hazard, -/obj/item/clothing/under/rank/engineering/engineer/nt, -/obj/item/clothing/under/rank/engineering/engineer/nt/skirt, -/obj/item/clothing/under/rank/engineering/atmospheric_technician, -/obj/item/clothing/under/rank/engineering/atmospheric_technician/skirt, -/obj/item/clothing/head/beret/atmos, -/obj/item/clothing/head/beret/eng, -/obj/item/analyzer, -/obj/item/storage/belt/utility, -/obj/item/storage/belt/utility, -/obj/structure/closet/secure_closet{ - icon_state = "eng_secure"; - name = "engineer's locker"; - req_access = list(11); - anchored = 1 - }, -/obj/item/pipe_dispenser, -/obj/item/clothing/suit/hooded/wintercoat/engineering/atmos, -/turf/open/floor/engine, -/area/ship/engineering/engine) -"ib" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/obj/item/kirbyplants/random, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"ic" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/dark, -/area/ship/cargo/office) -"id" = ( -/obj/machinery/shower{ - dir = 4; - pixel_y = 8 - }, -/obj/structure/curtain, -/obj/item/bikehorn/rubberducky/plasticducky, -/obj/effect/turf_decal/techfloor/hole{ - dir = 8 - }, -/turf/open/floor/plasteel/showroomfloor, -/area/ship/crew/crewtwo) -"ie" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/wood, -/area/ship/hallway/central) -"if" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"ih" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/junction{ - dir = 4 - }, -/obj/machinery/door/poddoor/preopen{ - dir = 4; - id = "bridgelockdown" - }, -/obj/structure/grille, -/obj/structure/window/reinforced/fulltile, -/obj/machinery/door/firedoor/window, -/turf/open/floor/plating, -/area/ship/bridge) -"ik" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 9 - }, -/obj/machinery/light/broken/directional/south, -/turf/open/floor/engine, -/area/ship/engineering/engine) -"il" = ( -/obj/structure/closet/crate/bin, -/obj/machinery/newscaster/directional/north, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"im" = ( -/obj/structure/lattice, -/turf/template_noop, -/area/ship/external) -"ir" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"is" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/door/airlock/mining/glass, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/ship/cargo) -"iv" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/plasteel/stairs{ - dir = 1 - }, -/area/ship/bridge) -"ix" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/turf/open/floor/carpet/nanoweave/blue, -/area/ship/medical) -"iB" = ( -/obj/machinery/door/airlock/command{ - dir = 4; - name = "Personal Quarters"; - req_one_access_txt = "20" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/turf/open/floor/carpet/royalblue, -/area/ship/crew/crewtwo) -"iI" = ( -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/machinery/autolathe, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo/office) -"iP" = ( -/obj/structure/chair/comfy/grey/directional/north, -/obj/structure/cable{ - icon_state = "2-4" - }, -/turf/open/floor/wood, -/area/ship/crew/crewtwo) -"iY" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/carpet/nanoweave/blue, -/area/ship/medical) -"ja" = ( -/obj/machinery/shower{ - dir = 4 - }, -/obj/item/soap/nanotrasen, -/obj/machinery/light/small/directional/south, -/turf/open/floor/plasteel/showroomfloor, -/area/ship/crew/toilet) -"jf" = ( -/obj/machinery/airalarm/directional/north, -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/effect/decal/cleanable/wrapping, -/obj/item/storage/fancy/donut_box, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo/office) -"ji" = ( -/turf/closed/wall/r_wall, -/area/ship/crew/crewthree) -"jq" = ( -/obj/structure/grille, -/obj/machinery/door/poddoor{ - id = "windowlockdown" - }, -/obj/structure/window/reinforced/fulltile, -/obj/machinery/door/firedoor/window, -/turf/open/floor/plating, -/area/ship/crew/dorm) -"jr" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 10 - }, -/obj/machinery/light_switch{ - dir = 8; - pixel_x = 24; - pixel_y = -5 - }, -/obj/effect/turf_decal/corner/opaque/green/mono, -/turf/open/floor/plasteel, -/area/ship/crew/canteen/kitchen) -"js" = ( -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/structure/closet/cardboard{ - name = "janitorial supplies" - }, -/obj/item/mop, -/obj/item/reagent_containers/glass/bucket, -/obj/item/soap, -/obj/item/storage/bag/trash, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo/office) -"jv" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 1 - }, -/obj/effect/turf_decal/industrial/stand_clear{ - dir = 1 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"jK" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"jM" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 4; - name = "Helm" - }, -/obj/effect/turf_decal/techfloor{ - dir = 4 - }, -/turf/open/floor/carpet/nanoweave/beige, -/area/ship/bridge) -"jS" = ( -/turf/closed/wall, -/area/ship/crew/dorm) -"jX" = ( -/obj/machinery/power/shieldwallgen/atmos/roundstart{ - dir = 8; - id = "skippyshieldywalle"; - locked = 1 - }, -/obj/structure/cable, -/obj/effect/turf_decal/industrial/warning, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor{ - id = "amogusdoors"; - name = "Cargo Bay Blast Door" - }, -/turf/open/floor/plating, -/area/ship/cargo) -"jZ" = ( -/obj/structure/closet/radiation, -/obj/machinery/light_switch{ - dir = 8; - pixel_x = 24; - pixel_y = 5 - }, -/obj/structure/sign/warning/incident{ - pixel_y = 32 - }, -/turf/open/floor/noslip, -/area/ship/engineering/atmospherics) -"kn" = ( -/obj/machinery/button/door/incinerator_vent_atmos_aux{ - dir = 4; - pixel_x = -23; - pixel_y = 8 - }, -/obj/machinery/button/ignition/incinerator/atmos{ - dir = 4; - pixel_x = -23; - pixel_y = -3 - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 5 - }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/engine) -"kp" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/wood, -/area/ship/crew/crewthree) -"ky" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/layer2, -/turf/open/floor/plating, -/area/ship/hallway/central) -"kz" = ( -/turf/closed/wall/r_wall, -/area/ship/engineering/atmospherics) -"kB" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 10 - }, -/obj/machinery/light/directional/east, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"kE" = ( -/obj/machinery/newscaster/directional/west, -/turf/open/floor/carpet/nanoweave/blue, -/area/ship/medical) -"kL" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/corner/opaque/green/mono, -/obj/machinery/reagentgrinder{ - pixel_y = 11 - }, -/turf/open/floor/plasteel, -/area/ship/crew/canteen/kitchen) -"kM" = ( -/obj/structure/table, -/obj/item/storage/pill_bottle/charcoal/less{ - pixel_x = -9 - }, -/obj/item/reagent_containers/glass/bottle{ - list_reagents = list(/datum/reagent/medicine/thializid=30); - name = "thializid bottle" - }, -/obj/item/reagent_containers/glass/bottle/formaldehyde{ - pixel_x = 6; - pixel_y = 8 - }, -/obj/item/reagent_containers/syringe{ - pixel_x = 7 - }, -/obj/effect/turf_decal/borderfloorwhite{ - dir = 4 - }, -/turf/open/floor/carpet/nanoweave/blue, -/area/ship/medical) -"kO" = ( -/obj/item/radio/intercom/directional/north, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"kU" = ( -/turf/closed/wall, -/area/ship/crew/toilet) -"kW" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 - }, -/turf/open/floor/carpet/blue, -/area/ship/crew/dorm) -"lf" = ( -/obj/structure/closet/secure_closet{ - icon_state = "hop"; - name = "\proper first officer's locker"; - req_access_txt = "57" - }, -/obj/item/storage/backpack/satchel/leather, -/obj/item/clothing/shoes/laceup, -/obj/item/clothing/suit/armor/vest/hop, -/obj/item/clothing/head/hopcap/nt, -/obj/item/storage/box/ids, -/obj/item/storage/box/PDAs, -/obj/item/assembly/flash/handheld, -/obj/item/clothing/head/beret/command, -/obj/item/door_remote/captain, -/obj/structure/sign/poster/official/ian{ - pixel_y = 32 - }, -/obj/effect/turf_decal/siding/wood, -/obj/item/clothing/under/nanotrasen/officer, -/obj/item/clothing/under/nanotrasen/officer/skirt, -/turf/open/floor/wood, -/area/ship/crew/crewthree) -"lg" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/effect/turf_decal/techfloor{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/obj/machinery/atmospherics/pipe/simple/cyan/visible/layer4, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/atmospherics) -"lh" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 1 - }, -/turf/open/floor/wood, -/area/ship/hallway/central) -"lk" = ( -/obj/structure/table/wood/reinforced, -/obj/item/flashlight/lamp/green{ - pixel_y = 10; - pixel_x = -6 - }, -/obj/item/pen/fountain/captain{ - pixel_x = -10 - }, -/obj/item/paper{ - pixel_x = 10; - pixel_y = -2 - }, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/wood, -/area/ship/crew/crewtwo) -"ls" = ( -/turf/closed/wall/r_wall, -/area/ship/medical) -"lw" = ( -/turf/closed/wall/r_wall, -/area/ship/crew/canteen/kitchen) -"lA" = ( -/obj/structure/closet/crate/bin, -/obj/machinery/light/broken/directional/east, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"lE" = ( -/obj/machinery/suit_storage_unit/industrial/atmos_firesuit, -/obj/structure/sign/warning/hottemp{ - pixel_x = -29 - }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/engine) -"lR" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"lU" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/turf/open/floor/plasteel/dark, -/area/ship/cargo/office) -"lV" = ( -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/obj/structure/grille, -/obj/structure/window/plasma/reinforced/fulltile, -/turf/open/floor/plating, -/area/ship/engineering/engine) -"lW" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"lY" = ( -/obj/machinery/atmospherics/pipe/simple/dark/visible{ - dir = 4 - }, -/obj/structure/grille, -/obj/structure/window/plasma/reinforced/fulltile, -/turf/open/floor/plating, -/area/ship/engineering/engine) -"mc" = ( -/obj/machinery/atmospherics/pipe/manifold/yellow/visible, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/engine, -/area/ship/engineering/engine) -"mf" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/closed/wall, -/area/ship/hallway/central) -"mg" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 6 - }, -/turf/open/floor/engine/airless, -/area/ship/external) -"mi" = ( -/obj/structure/window/reinforced/tinted, -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 - }, -/obj/effect/turf_decal/steeldecal/steel_decals_central7{ - dir = 1 - }, -/turf/open/floor/plasteel/showroomfloor, -/area/ship/crew/toilet) -"mw" = ( -/obj/machinery/door/window/southright, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/showroomfloor, -/area/ship/crew/toilet) -"mF" = ( -/obj/machinery/power/shuttle/engine/fire{ - dir = 4 - }, -/turf/open/floor/plating/airless, -/area/ship/external) -"mI" = ( -/obj/structure/bed, -/obj/item/bedsheet/random, -/obj/structure/curtain/cloth/grey, -/obj/structure/sign/poster/official/random{ - pixel_x = -30 - }, -/turf/open/floor/carpet/blue, -/area/ship/crew/dorm) -"mL" = ( -/obj/structure/table, -/obj/item/storage/toolbox/electrical{ - pixel_y = 8 - }, -/obj/item/storage/toolbox/mechanical, -/obj/structure/sign/warning/nosmoking/burnt{ - pixel_y = -30 - }, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"mM" = ( -/turf/open/floor/wood, -/area/ship/crew/office) -"mN" = ( -/obj/structure/catwalk/over, -/obj/machinery/light/small/directional/west, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/plating/rust, -/area/ship/crew/toilet) -"mQ" = ( -/obj/machinery/firealarm/directional/north, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"mS" = ( -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer2{ - dir = 8 - }, -/obj/structure/catwalk/over/plated_catwalk/dark, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"mT" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = 4; - pixel_y = 5 - }, -/obj/item/pen{ - pixel_x = 4; - pixel_y = 5 - }, -/obj/item/pen/fourcolor{ - pixel_x = 7; - pixel_y = 5 - }, -/obj/item/pen/fountain{ - pixel_x = 1; - pixel_y = 5 - }, -/obj/item/kitchen/knife/letter_opener{ - desc = "A military combat utility survival knife, imported from Earth. An expensive paperweight indeed."; - pixel_x = 4; - pixel_y = 5 - }, -/obj/item/stamp/centcom{ - pixel_x = -10; - pixel_y = 13 - }, -/obj/item/stamp/law{ - pixel_x = -10; - pixel_y = 7 - }, -/obj/machinery/newscaster/directional/west, -/turf/open/floor/wood, -/area/ship/crew/office) -"mU" = ( -/obj/structure/urinal{ - pixel_y = 28 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/obj/machinery/light/small/directional/east, -/obj/machinery/light_switch{ - dir = 8; - pixel_x = 24; - pixel_y = -11 - }, -/obj/effect/decal/cleanable/chem_pile, -/turf/open/floor/plasteel/showroomfloor, -/area/ship/crew/toilet) -"mX" = ( -/obj/machinery/door/poddoor/incinerator_atmos_aux{ - dir = 4 - }, -/obj/structure/sign/warning{ - pixel_y = 28 - }, -/turf/open/floor/engine/airless, -/area/ship/engineering/engine) -"nd" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/light_switch{ - pixel_x = -5; - pixel_y = 24 - }, -/obj/structure/railing{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/cargo/office) -"ne" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 9 - }, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"ng" = ( -/obj/structure/table/reinforced, -/obj/item/radio/intercom/wideband/table{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/layer_manifold{ - dir = 4 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) -"nj" = ( -/obj/machinery/atmospherics/pipe/layer_manifold{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/catwalk/over/plated_catwalk/dark, -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/obj/machinery/atmospherics/pipe/simple/cyan/visible/layer4, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"np" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 10 - }, -/turf/open/floor/engine/airless, -/area/ship/external) -"nq" = ( -/turf/closed/wall/r_wall, -/area/ship/crew/office) -"nu" = ( -/obj/machinery/computer/atmos_control/incinerator{ - dir = 4; - sensors = list("nemo_incinerator_sensor"="Incinerator Chamber") - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/engine, -/area/ship/engineering/engine) -"nv" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/structure/railing{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/cargo/office) -"nB" = ( -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/structure/bed/roller, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo/office) -"nF" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{ - dir = 4 - }, -/turf/open/floor/engine/airless, -/area/ship/engineering/engine) -"nX" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/obj/effect/turf_decal/techfloor{ - dir = 4 - }, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/plasteel/tech/grid, -/area/ship/hallway/central) -"og" = ( -/obj/machinery/door/airlock/engineering{ - dir = 4; - name = "Engineering" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/brown/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/engineering/atmospherics) -"ok" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 - }, -/turf/open/floor/wood, -/area/ship/crew/crewtwo) -"om" = ( -/obj/item/kirbyplants/random, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"oq" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 - }, -/turf/open/floor/carpet/nanoweave/blue, -/area/ship/medical) -"oD" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/blue/mono, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"oE" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 9 - }, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"oN" = ( -/obj/structure/bed/dogbed/ian, -/mob/living/simple_animal/pet/dog/corgi/Lisa, -/obj/machinery/light_switch{ - dir = 4; - pixel_x = -24; - pixel_y = 8 - }, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/carpet/blue, -/area/ship/crew/crewthree) -"oT" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"oU" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ship/crew/office) -"pf" = ( -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/machinery/portable_atmospherics/scrubber, -/obj/machinery/light/directional/east, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo/office) -"ph" = ( -/obj/effect/turf_decal/techfloor{ - dir = 4 - }, -/obj/machinery/button/door{ - id = "bridgelockdown"; - name = "Bridge Lockdown"; - pixel_x = 8; - pixel_y = 25 - }, -/obj/machinery/button/door{ - id = "coolingshutdown"; - name = "Shutdown Cooling"; - pixel_x = -5; - pixel_y = 25 - }, -/obj/machinery/button/door{ - pixel_y = 25; - pixel_x = 21; - id = "windowlockdown"; - name = "Window Lockdown" - }, -/obj/item/cigbutt/cigarbutt, -/turf/open/floor/carpet/nanoweave/beige, -/area/ship/bridge) -"pn" = ( -/obj/structure/sign/nanotrasen{ - pixel_y = 30 - }, -/obj/item/kirbyplants/random, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"pq" = ( -/turf/open/floor/plasteel/dark, -/area/ship/cargo/office) -"pr" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"ps" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 6 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/wood, -/area/ship/crew/crewthree) -"pt" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/westleft, -/obj/machinery/door/window/eastright, -/obj/item/paper_bin, -/obj/item/pen, -/turf/open/floor/plasteel/dark, -/area/ship/cargo/office) -"pz" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"pB" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 1 - }, -/obj/machinery/portable_atmospherics/canister/toxins, -/turf/open/floor/engine, -/area/ship/engineering/engine) -"pD" = ( -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"pI" = ( -/obj/structure/table, -/obj/item/trash/candle{ - pixel_y = 12 - }, -/obj/machinery/light/directional/south, -/obj/item/trash/plate, -/turf/open/floor/plasteel/tech/grid, -/area/ship/hallway/central) -"pM" = ( -/obj/machinery/door/airlock/engineering{ - dir = 4; - name = "Engineering" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/brown/visible/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/engineering/atmospherics) -"pT" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/oxygen_output, -/turf/open/floor/engine/o2, -/area/ship/engineering/atmospherics) -"pZ" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible, -/obj/structure/grille, -/obj/structure/window/plasma/reinforced/fulltile, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"qa" = ( -/turf/closed/wall/r_wall, -/area/ship/crew/crewtwo) -"qb" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 5 - }, -/turf/open/floor/engine/airless, -/area/ship/external) -"qg" = ( -/obj/structure/toilet{ - pixel_y = 10 - }, -/obj/machinery/airalarm/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/showroomfloor, -/area/ship/crew/toilet) -"qp" = ( -/obj/effect/turf_decal/techfloor/corner{ - dir = 8 - }, -/obj/effect/decal/cleanable/vomit/old, -/obj/effect/turf_decal/techfloor/corner{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/turf/open/floor/wood, -/area/ship/crew/cryo) -"qq" = ( -/obj/structure/table, -/obj/item/newspaper, -/turf/open/floor/wood, -/area/ship/hallway/central) -"qr" = ( -/obj/structure/sign/poster/official/random{ - pixel_y = 32 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"qy" = ( -/obj/machinery/light/directional/west, -/obj/machinery/mineral/ore_redemption, -/turf/open/floor/plasteel, -/area/ship/cargo) -"qF" = ( -/obj/machinery/power/shuttle/engine/fire{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ship/external) -"qK" = ( -/obj/machinery/atmospherics/pipe/layer_manifold, -/obj/structure/catwalk/over/plated_catwalk/dark, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"qR" = ( -/obj/machinery/door/airlock/mining{ - name = "Cargo Office" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ship/cargo/office) -"qS" = ( -/obj/structure/closet/secure_closet/wall/directional/west{ - name = "The Captain's Personal Medicine Cabinet And Soap Holder"; - req_access_txt = "20" - }, -/obj/item/soap/nanotrasen, -/obj/item/razor, -/obj/item/storage/pill_bottle/psicodine, -/obj/item/storage/pill_bottle/charcoal/less, -/obj/item/lipstick/random, -/obj/item/stack/medical/bruise_pack{ - amount = 3 - }, -/obj/item/stack/medical/ointment{ - amount = 5; - desc = "Used to treat...... well, it's topical, and it's clearly been used....." - }, -/turf/open/floor/plasteel/showroomfloor, -/area/ship/crew/crewtwo) -"qY" = ( -/obj/effect/turf_decal/siding/wood/corner, -/turf/open/floor/plasteel/tech/grid, -/area/ship/hallway/central) -"ra" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - name = "Air to Distro"; - target_pressure = 1000; - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/effect/turf_decal/techfloor, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/atmospherics) -"rc" = ( -/obj/machinery/firealarm/directional/south, -/obj/machinery/vending/cigarette, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"re" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ship/hallway/central) -"rq" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/turf/open/floor/carpet/blue, -/area/ship/crew/dorm) -"rw" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 - }, -/turf/open/floor/carpet/blue, -/area/ship/crew/crewthree) -"rx" = ( -/obj/structure/catwalk/over/plated_catwalk/dark, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/dark/visible{ - dir = 10 - }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/machinery/light_switch{ - pixel_x = 13; - pixel_y = 24 - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/turf/open/floor/plating, -/area/ship/engineering/engine) -"rz" = ( -/obj/structure/catwalk/over/plated_catwalk/dark, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable/yellow{ - icon_state = "0-8" - }, -/obj/structure/sign/warning/electricshock{ - pixel_x = 24 - }, -/turf/open/floor/plating, -/area/ship/engineering/engine) -"rF" = ( -/obj/effect/turf_decal/corner/opaque/white/mono, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/plasteel, -/area/ship/crew/canteen/kitchen) -"rK" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/corner/opaque/ntblue/diagonal, -/obj/effect/turf_decal/corner/opaque/neutral/diagonal{ - dir = 4 - }, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"rM" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/nitrogen_output, -/turf/open/floor/engine/n2, -/area/ship/engineering/atmospherics) -"rW" = ( -/obj/structure/table, -/obj/item/cigbutt, -/obj/item/cigbutt{ - pixel_x = -10; - pixel_y = 12 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"sc" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 4; - name = "Operations" - }, -/obj/effect/turf_decal/techfloor{ - dir = 4 - }, -/turf/open/floor/carpet/nanoweave/beige, -/area/ship/bridge) -"sd" = ( -/obj/effect/turf_decal/siding/wood/corner, -/obj/machinery/door/firedoor/border_only, -/turf/open/floor/wood, -/area/ship/hallway/central) -"sh" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 6 - }, -/obj/effect/decal/cleanable/ash, -/turf/open/floor/plasteel, -/area/ship/cargo) -"si" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/obj/structure/extinguisher_cabinet/directional/south, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"sk" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/air_input{ - dir = 1 - }, -/turf/open/floor/engine/air, -/area/ship/engineering/atmospherics) -"sn" = ( -/obj/structure/curtain, -/turf/open/floor/plasteel/showroomfloor, -/area/ship/crew/toilet) -"sz" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer2{ - dir = 6 - }, -/obj/structure/catwalk/over/plated_catwalk/dark, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"sA" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"sC" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/obj/structure/extinguisher_cabinet/directional/south, -/obj/machinery/atmospherics/pipe/simple/brown/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/ship/engineering/atmospherics) -"sD" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 - }, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"sJ" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 10 - }, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"sK" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/obj/machinery/power/ship_gravity, -/obj/structure/cable{ - icon_state = "0-1" - }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/engine) -"sU" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"sY" = ( -/obj/structure/grille, -/obj/machinery/door/poddoor{ - id = "windowlockdown" - }, -/obj/structure/window/reinforced/fulltile, -/obj/machinery/door/firedoor/window, -/turf/open/floor/plating, -/area/ship/crew/office) -"ta" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"tf" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 - }, -/turf/closed/wall/r_wall, -/area/ship/engineering/atmospherics) -"tk" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ - target_temperature = 73 - }, -/turf/open/floor/engine, -/area/ship/engineering/engine) -"tm" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/ntblue/diagonal, -/obj/effect/turf_decal/corner/opaque/neutral/diagonal{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"tp" = ( -/obj/machinery/atmospherics/components/binary/circulator/cold{ - dir = 1 - }, -/turf/open/floor/engine, -/area/ship/engineering/engine) -"tr" = ( -/obj/machinery/door/window/westright, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/obj/effect/turf_decal/corner/opaque/blue/mono, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"ts" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 1 - }, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"tx" = ( -/turf/closed/wall/r_wall, -/area/ship/cargo) -"tz" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/effect/turf_decal/industrial/loading{ - dir = 1 - }, -/obj/structure/ore_box, -/obj/structure/sign/warning/fire{ - pixel_x = -23 - }, -/turf/open/floor/plasteel, -/area/ship/cargo) -"tB" = ( -/turf/closed/wall, -/area/ship/crew/office) -"tF" = ( -/obj/machinery/atmospherics/components/binary/pump/layer4{ - dir = 1; - name = "Emergency Recycling Override" - }, -/obj/structure/catwalk/over/plated_catwalk/dark, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"tI" = ( -/obj/structure/table, -/obj/machinery/light/dim/directional/north, -/obj/item/reagent_containers/food/drinks/mug/tea, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"tR" = ( -/obj/machinery/door/airlock/external, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plating, -/area/ship/hallway/central) -"tX" = ( -/obj/machinery/door/airlock{ - name = "Kitchen" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/corner/opaque/white/mono, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/ship/crew/canteen/kitchen) -"tZ" = ( -/obj/effect/turf_decal/borderfloorwhite/full, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"ub" = ( -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/obj/effect/turf_decal/techfloor/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/obj/machinery/atmospherics/pipe/simple/cyan/visible/layer4, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/atmospherics) -"ug" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/brown/hidden/layer4{ - dir = 9 - }, -/turf/open/floor/plasteel, -/area/ship/cargo) -"uh" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/chair/comfy/grey/directional/north, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"ul" = ( -/turf/closed/wall/r_wall, -/area/ship/engineering/engine) -"um" = ( -/obj/effect/turf_decal/corner/opaque/ntblue/diagonal, -/obj/effect/turf_decal/corner/opaque/neutral/diagonal{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"uq" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"us" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 6 - }, -/obj/effect/turf_decal/siding/wood{ - dir = 9 - }, -/turf/open/floor/wood, -/area/ship/crew/crewthree) -"ut" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/obj/effect/decal/cleanable/dirt/dust, -/turf/open/floor/plating, -/area/ship/crew/toilet) -"uv" = ( -/obj/structure/fluff/hedge, -/obj/machinery/light/small/directional/east, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ship/crew/office) -"uw" = ( -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 10 - }, -/obj/structure/table/reinforced, -/obj/item/kitchen/knife, -/obj/item/cutting_board, -/obj/effect/turf_decal/corner/opaque/green/mono, -/turf/open/floor/plasteel, -/area/ship/crew/canteen/kitchen) -"uD" = ( -/obj/machinery/airalarm/directional/east, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/effect/turf_decal/corner/opaque/white/mono, -/obj/structure/table/reinforced, -/obj/item/kitchen/rollingpin, -/obj/item/reagent_containers/food/condiment/peppermill{ - pixel_x = -2; - pixel_y = 11 - }, -/obj/item/reagent_containers/food/condiment/saltshaker{ - pixel_y = 6; - pixel_x = -8 - }, -/turf/open/floor/plasteel, -/area/ship/crew/canteen/kitchen) -"uG" = ( -/obj/machinery/power/shieldwallgen/atmos/roundstart{ - dir = 4; - id = "skippyshieldywalle"; - locked = 1 - }, -/obj/structure/cable, -/obj/effect/turf_decal/industrial/warning, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor{ - id = "amogusdoors"; - name = "Cargo Bay Blast Door" - }, -/turf/open/floor/plating, -/area/ship/cargo) -"uL" = ( -/obj/structure/table/wood, -/obj/machinery/newscaster/directional/north, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"uM" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/engine) -"uQ" = ( -/obj/machinery/door/poddoor/shutters{ - id = "hallwindows"; - name = "Cargo Shutters"; - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/ship/cargo/office) -"uS" = ( -/obj/structure/table/wood, -/obj/machinery/light/small/directional/west, -/obj/item/reagent_containers/food/snacks/grown/harebell, -/turf/open/floor/carpet/blue, -/area/ship/crew/dorm) -"uT" = ( -/obj/machinery/light/directional/west, -/obj/structure/reagent_dispensers/watertank, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/atmospherics) -"uX" = ( -/obj/item/reagent_containers/food/snacks/chips{ - pixel_x = 10; - pixel_y = 15 - }, -/obj/machinery/light/directional/south, -/obj/structure/chair/plastic{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ship/hallway/central) -"uY" = ( -/obj/structure/frame/computer{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/ntblue/half{ - dir = 4 - }, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) -"va" = ( -/obj/structure/grille, -/obj/structure/window/plasma/reinforced/fulltile, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"vc" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ship/crew/cryo) -"ve" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Infirmary" - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/carpet/nanoweave/blue, -/area/ship/medical) -"vf" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/obj/structure/extinguisher_cabinet/directional/north, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"vo" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin, -/obj/item/pen, -/obj/item/megaphone/command, -/obj/machinery/atmospherics/pipe/layer_manifold{ - dir = 4 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) -"vp" = ( -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable, -/obj/effect/turf_decal/siding/wood{ - dir = 9 - }, -/turf/open/floor/carpet/royalblue, -/area/ship/crew/crewtwo) -"vB" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 6 - }, -/turf/open/floor/engine, -/area/ship/engineering/engine) -"vI" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/corner/opaque/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/ntblue, -/obj/item/trash/plate, -/obj/effect/turf_decal/corner/opaque/green/half{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/ship/crew/canteen/kitchen) -"vO" = ( -/obj/effect/turf_decal/corner/opaque/ntblue/diagonal, -/obj/effect/turf_decal/corner/opaque/neutral/diagonal{ - dir = 4 - }, -/obj/structure/sign/poster/official/random{ - pixel_x = -30 - }, -/obj/structure/table, -/obj/item/trash/cheesie, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"vP" = ( -/obj/item/kirbyplants/random, -/obj/effect/turf_decal/borderfloorwhite{ - dir = 4 - }, -/turf/open/floor/carpet/nanoweave/blue, -/area/ship/medical) -"vR" = ( -/obj/structure/chair/office, -/turf/open/floor/wood, -/area/ship/crew/office) -"vW" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"vY" = ( -/obj/effect/turf_decal/corner/opaque/white/mono, -/obj/structure/table, -/obj/machinery/chem_dispenser/drinks, -/turf/open/floor/plasteel, -/area/ship/crew/canteen/kitchen) -"vZ" = ( -/obj/structure/bed, -/obj/item/bedsheet/captain, -/obj/machinery/light/small/directional/east, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 1 - }, -/turf/open/floor/carpet/royalblue, -/area/ship/crew/crewtwo) -"wb" = ( -/obj/effect/turf_decal/techfloor{ - dir = 4 - }, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/carpet/nanoweave/beige, -/area/ship/bridge) -"wd" = ( -/obj/structure/table, -/obj/item/stack/medical/gauze, -/obj/item/storage/firstaid/regular, -/turf/open/floor/carpet/nanoweave/blue, -/area/ship/medical) -"we" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/oil/slippery, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"wg" = ( -/obj/machinery/door/airlock/external, -/obj/docking_port/mobile{ - dir = 2; - launch_status = 0; - port_direction = 8; - preferred_direction = 4 - }, -/turf/open/floor/plating, -/area/ship/hallway/central) -"wp" = ( -/obj/structure/table/wood/reinforced, -/obj/item/hand_tele{ - pixel_x = 4; - pixel_y = 8 - }, -/obj/item/coin/hellstone{ - pixel_x = -12; - pixel_y = -3 - }, -/obj/item/stamp/captain{ - pixel_y = 13; - pixel_x = -8 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/turf/open/floor/wood, -/area/ship/crew/crewtwo) -"wt" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible, -/obj/structure/catwalk/over/plated_catwalk/dark, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "thruster fuel pump" - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"ww" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 5 - }, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"wA" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 8 - }, -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/structure/closet/crate/engineering, -/obj/item/stack/sheet/metal/twenty, -/obj/item/stack/sheet/glass/twenty, -/obj/item/tank/internals/oxygen, -/obj/item/tank/internals/oxygen, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo/office) -"wB" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 5 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/ship/engineering/atmospherics) -"wC" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/toxin_input{ - dir = 1 - }, -/turf/open/floor/engine/airless, -/area/ship/engineering/atmospherics) -"wG" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/dark, -/area/ship/cargo/office) -"wH" = ( -/turf/closed/wall/r_wall, -/area/ship/crew/toilet) -"wO" = ( -/obj/structure/table/wood, -/obj/item/instrument/piano_synth, -/obj/machinery/light/small/directional/north, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"wT" = ( -/obj/effect/turf_decal/corner/opaque/white/mono, -/obj/structure/closet/secure_closet/freezer{ - anchored = 1 - }, -/obj/item/reagent_containers/food/snacks/meat/slab, -/obj/item/reagent_containers/food/snacks/meat/slab, -/obj/item/reagent_containers/food/snacks/meat/slab, -/obj/item/storage/box/ingredients/vegetarian, -/obj/item/storage/fancy/egg_box, -/turf/open/floor/plasteel, -/area/ship/crew/canteen/kitchen) -"wX" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/corner/opaque/green/mono, -/turf/open/floor/plasteel, -/area/ship/crew/canteen/kitchen) -"wZ" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"xb" = ( -/obj/structure/chair{ - dir = 1 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"xf" = ( -/turf/closed/wall, -/area/ship/crew/canteen/kitchen) -"xi" = ( -/obj/structure/bed, -/obj/item/bedsheet/head_of_personnel, -/obj/machinery/light/small/directional/east, -/turf/open/floor/carpet/blue, -/area/ship/crew/crewthree) -"xo" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"xs" = ( -/obj/structure/chair/sofa/brown/directional/south, -/obj/machinery/light/directional/north, -/turf/open/floor/carpet/red, -/area/ship/hallway/central) -"xu" = ( -/obj/structure/grille, -/obj/machinery/door/poddoor{ - id = "windowlockdown" - }, -/obj/structure/window/reinforced/fulltile, -/obj/machinery/door/firedoor/window, -/turf/open/floor/plating, -/area/ship/crew/toilet) -"xA" = ( -/obj/machinery/computer/secure_data{ - dir = 4 - }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/carpet/nanoweave/red, -/area/ship/crew/crewthree) -"xE" = ( -/obj/machinery/photocopier, -/obj/machinery/light_switch{ - pixel_x = 11; - pixel_y = 23 - }, -/turf/open/floor/carpet/nanoweave/blue, -/area/ship/crew/office) -"xK" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/wood, -/area/ship/crew/cryo) -"xO" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/layer_manifold, -/obj/structure/catwalk/over/plated_catwalk/dark, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"xW" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/chair/comfy/grey/directional/east, -/turf/open/floor/wood, -/area/ship/crew/cryo) -"yf" = ( -/obj/effect/turf_decal/corner/opaque/white/mono, -/obj/structure/table/reinforced, -/obj/machinery/microwave{ - pixel_x = -1; - pixel_y = 8 - }, -/turf/open/floor/plasteel, -/area/ship/crew/canteen/kitchen) -"yh" = ( -/obj/item/radio/intercom/directional/east, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/ship/cargo) -"yj" = ( -/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/o2{ - dir = 8 - }, -/obj/structure/catwalk/over/plated_catwalk/dark, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"yo" = ( -/obj/machinery/atmospherics/components/unary/passive_vent{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ship/external) -"ys" = ( -/turf/closed/wall, -/area/ship/cargo/office) -"yB" = ( -/obj/structure/closet/cabinet, -/obj/item/clothing/suit/hooded/wintercoat, -/obj/item/clothing/under/suit/dresssuit/skirt, -/obj/item/clothing/under/color/grey, -/obj/item/clothing/under/suit/charcoal, -/obj/item/clothing/shoes/laceup, -/obj/item/clothing/shoes/sneakers/black, -/obj/item/clothing/shoes/workboots/mining, -/obj/item/clothing/suit/hooded/hoodie/black, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"yF" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible/layer4, -/obj/machinery/atmospherics/pipe/manifold/orange/visible{ - dir = 8 - }, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"yG" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/atmospherics) -"yM" = ( -/obj/structure/table/wood/reinforced, -/obj/item/storage/fancy/cigarettes/cigars{ - pixel_y = 12 - }, -/obj/item/lighter{ - pixel_x = -6; - pixel_y = -3 - }, -/obj/item/coin/titanium{ - pixel_x = 7; - pixel_y = -3 - }, -/obj/machinery/airalarm/directional/north, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, -/obj/effect/turf_decal/siding/wood/corner, -/turf/open/floor/wood, -/area/ship/crew/crewthree) -"yU" = ( -/obj/machinery/door/airlock{ - name = "Crew Quarters" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ship/crew/dorm) -"ze" = ( -/obj/structure/sink{ - pixel_y = 22 - }, -/obj/structure/mirror{ - pixel_y = 32 - }, -/obj/structure/toilet{ - dir = 8; - name = "The Throne"; - desc = "Man, its good to be king." - }, -/obj/machinery/light/small/directional/east, -/turf/open/floor/plasteel/showroomfloor, -/area/ship/crew/crewtwo) -"zi" = ( -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/machinery/light_switch{ - dir = 4; - pixel_x = -24; - pixel_y = -14 - }, -/obj/effect/turf_decal/steeldecal/steel_decals_central6{ - dir = 4 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) -"zu" = ( -/obj/effect/turf_decal/industrial/loading{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/ship/cargo) -"zy" = ( -/obj/structure/catwalk/over/plated_catwalk/dark, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "thruster fuel pump" - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"zC" = ( -/obj/machinery/suit_storage_unit/cmo, -/obj/effect/turf_decal/borderfloorwhite/full, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"zG" = ( -/obj/structure/bookcase/manuals/engineering, -/turf/open/floor/wood, -/area/ship/hallway/central) -"zJ" = ( -/obj/structure/sink{ - dir = 8; - pixel_x = 12 - }, -/obj/structure/mirror{ - pixel_x = 25 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 8 - }, -/turf/open/floor/plasteel/showroomfloor, -/area/ship/crew/toilet) -"zK" = ( -/obj/machinery/light/directional/east, -/obj/machinery/atmospherics/pipe/simple/brown/visible/layer4, -/obj/machinery/atmospherics/components/unary/portables_connector, -/obj/effect/turf_decal/industrial/outline/orange, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"zM" = ( -/obj/structure/chair{ - dir = 1 - }, -/turf/open/floor/wood, -/area/ship/crew/office) -"zO" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"zP" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 9 - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/door/poddoor/preopen{ - dir = 4; - id = "coolingshutdown" - }, -/turf/open/floor/engine/airless, -/area/ship/external) -"zS" = ( -/obj/structure/table/optable, -/obj/effect/turf_decal/corner/opaque/blue/mono, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"Aa" = ( -/obj/structure/chair/comfy/orange/directional/east, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/machinery/light/small/directional/west, -/turf/open/floor/wood, -/area/ship/crew/crewthree) -"Ao" = ( -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"As" = ( -/obj/structure/closet/cabinet, -/obj/item/clothing/suit/toggle/lawyer/burgundy, -/obj/item/clothing/suit/toggle/lawyer/charcoal, -/obj/item/clothing/suit/toggle/lawyer/navy, -/obj/item/clothing/under/rank/security/detective, -/obj/item/clothing/under/rank/security/detective/skirt, -/obj/item/clothing/under/suit/black, -/obj/item/clothing/under/suit/black/skirt, -/obj/item/clothing/under/suit/black_really, -/obj/item/clothing/under/suit/black_really/skirt, -/obj/item/clothing/glasses/sunglasses, -/obj/item/clothing/neck/tie, -/obj/item/clothing/glasses/regular, -/obj/machinery/light/small/directional/west, -/turf/open/floor/wood, -/area/ship/crew/office) -"At" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible, -/obj/structure/grille, -/obj/structure/window/plasma/reinforced/fulltile, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"Au" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/dark, -/area/ship/cargo/office) -"Az" = ( -/obj/structure/railing/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 1 - }, -/turf/open/floor/carpet/nanoweave/beige, -/area/ship/bridge) -"AB" = ( -/obj/effect/decal/cleanable/wrapping, -/turf/open/floor/plasteel/dark, -/area/ship/cargo/office) -"AE" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 9 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) -"AG" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/item/paper/crumpled{ - default_raw_text = "66% Oxy (Node 1) to 34% Plasma (Node 2) works great at 500 kPa." - }, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "engine fuel pump" - }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/engine) -"AP" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/machinery/computer/helm/viewscreen/directional/south, -/obj/effect/turf_decal/number/right_eight, -/obj/effect/turf_decal/number/left_nine, -/turf/open/floor/plasteel/dark, -/area/ship/cargo/office) -"AT" = ( -/turf/closed/wall, -/area/ship/medical) -"Bc" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/turf/open/floor/plasteel/telecomms_floor, -/area/ship/crew/cryo) -"Bd" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"Bg" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"Bh" = ( -/obj/structure/table, -/obj/item/flashlight/lamp/green{ - pixel_x = -6; - pixel_y = 13 - }, -/obj/structure/sign/poster/official/nanotrasen_logo{ - pixel_x = -30 - }, -/obj/item/spacecash/bundle/c50, -/turf/open/floor/wood, -/area/ship/crew/office) -"Bq" = ( -/obj/machinery/airalarm/directional/north, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"Br" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/corner/opaque/white/mono, -/turf/open/floor/plasteel, -/area/ship/crew/canteen/kitchen) -"Bw" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/corner/opaque/ntblue/diagonal, -/obj/effect/turf_decal/corner/opaque/neutral/diagonal{ - dir = 4 - }, -/obj/effect/decal/cleanable/food/tomato_smudge, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"BE" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"BH" = ( -/obj/structure/table/wood, -/obj/machinery/light/small/directional/east, -/obj/machinery/light_switch{ - pixel_x = -5; - pixel_y = 24 - }, -/obj/item/paicard, -/turf/open/floor/carpet/blue, -/area/ship/crew/dorm) -"BI" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 9 - }, -/obj/structure/sign/poster/official/random{ - pixel_y = -32 - }, -/obj/effect/turf_decal/ntspaceworks_small, -/turf/open/floor/plasteel/dark, -/area/ship/cargo/office) -"BJ" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/plasteel/stairs, -/area/ship/bridge) -"BK" = ( -/obj/structure/catwalk/over, -/obj/effect/decal/cleanable/glass, -/obj/effect/decal/cleanable/dirt/dust, -/obj/effect/decal/cleanable/robot_debris/gib, -/turf/open/floor/plating, -/area/ship/crew/toilet) -"BS" = ( -/obj/effect/turf_decal/techfloor{ - dir = 8 - }, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/plasteel/dark, -/area/ship/crew/cryo) -"BW" = ( -/obj/machinery/airalarm/directional/west, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"Ca" = ( -/obj/machinery/suit_storage_unit/mining/eva, -/turf/open/floor/plasteel, -/area/ship/cargo) -"Cl" = ( -/obj/machinery/door/airlock{ - dir = 4; - name = "Bathroom" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/ship/crew/toilet) -"Co" = ( -/obj/structure/spirit_board, -/obj/structure/catwalk/over, -/obj/item/toy/plush/moth/firewatch{ - pixel_y = 14; - name = "soot-covered moth plushie" - }, -/obj/structure/sign/poster/contraband/stechkin{ - pixel_x = 32 - }, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/plating/rust, -/area/ship/crew/toilet) -"Cr" = ( -/obj/structure/chair/office/light{ - dir = 4 - }, -/obj/effect/turf_decal/corner/opaque/blue/mono, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"Cs" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/effect/turf_decal/techfloor{ - dir = 4 - }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/hallway/central) -"Cu" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 6 - }, -/obj/structure/grille, -/obj/structure/window/plasma/reinforced/fulltile, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"Cy" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/carpet/nanoweave/blue, -/area/ship/crew/office) -"Cz" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"CA" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/obj/machinery/light/directional/south, -/obj/machinery/atmospherics/pipe/simple/brown/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/ship/engineering/atmospherics) -"CB" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 8 - }, -/turf/open/floor/carpet/nanoweave/blue, -/area/ship/medical) -"CE" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 8 - }, -/turf/open/floor/engine, -/area/ship/engineering/atmospherics) -"CH" = ( -/obj/structure/chair/sofa/brown/right/directional/east, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/carpet/nanoweave/blue, -/area/ship/medical) -"CM" = ( -/obj/effect/turf_decal/techfloor{ - dir = 8 - }, -/obj/effect/turf_decal/techfloor/corner{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/crew/cryo) -"CR" = ( -/obj/machinery/atmospherics/pipe/manifold/orange/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/visible/layer4, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"CV" = ( -/obj/effect/turf_decal/ntspaceworks_small/right, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/plasteel/dark, -/area/ship/cargo/office) -"Da" = ( -/obj/effect/turf_decal/techfloor, -/obj/machinery/computer/cryopod/directional/west, -/obj/effect/turf_decal/techfloor{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ship/crew/cryo) -"Dc" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/techfloor{ - dir = 4 - }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/hallway/central) -"Dd" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - name = "Nitrogen to Air"; - dir = 8; - target_pressure = 1000 - }, -/obj/machinery/atmospherics/pipe/simple/green/visible, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"Dp" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/structure/closet/emcloset/wall/directional/south, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"Dy" = ( -/obj/structure/closet/cardboard{ - name = "pranking materials" - }, -/obj/item/toy/katana, -/obj/item/bikehorn, -/obj/item/grown/bananapeel, -/obj/item/gun/ballistic/automatic/toy/pistol, -/obj/item/restraints/legcuffs/beartrap, -/obj/item/poster/random_contraband, -/obj/item/poster/random_contraband, -/obj/item/poster/random_contraband, -/turf/open/floor/plating/rust, -/area/ship/crew/toilet) -"Dz" = ( -/obj/machinery/modular_computer/console/preset/command{ - dir = 8 - }, -/obj/machinery/light_switch{ - dir = 8; - pixel_x = 24; - pixel_y = -5 - }, -/turf/open/floor/carpet/nanoweave/red, -/area/ship/crew/crewthree) -"DF" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/toxin_output{ - dir = 1 - }, -/turf/open/floor/engine/hydrogen, -/area/ship/engineering/atmospherics) -"DL" = ( -/obj/effect/decal/cleanable/food/flour, -/obj/effect/turf_decal/corner/opaque/green/mono, -/turf/open/floor/plasteel, -/area/ship/crew/canteen/kitchen) -"DN" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 1 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"DV" = ( -/obj/structure/chair/sofa/brown/corner/directional/south, -/obj/structure/sign/poster/official/random{ - pixel_y = 32 - }, -/obj/machinery/computer/helm/viewscreen/directional/east, -/turf/open/floor/carpet/red, -/area/ship/hallway/central) -"DZ" = ( -/obj/effect/turf_decal/corner/opaque/white/mono, -/obj/structure/extinguisher_cabinet/directional/north, -/obj/effect/decal/cleanable/food/flour, -/obj/structure/sink/kitchen{ - dir = 4; - pixel_x = -11 - }, -/turf/open/floor/plasteel, -/area/ship/crew/canteen/kitchen) -"Eb" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) -"Ek" = ( -/obj/machinery/advanced_airlock_controller{ - pixel_x = 25 - }, -/turf/open/floor/plating, -/area/ship/hallway/central) -"Eu" = ( -/obj/docking_port/stationary{ - dwidth = 15; - width = 30; - height = 15; - dir = 2 - }, -/turf/template_noop, -/area/template_noop) -"Ev" = ( -/obj/structure/table/wood, -/obj/item/paper_bin{ - pixel_x = 6 - }, -/obj/item/pen{ - pixel_x = 5; - pixel_y = 2 - }, -/obj/item/reagent_containers/food/snacks/fortunecookie{ - pixel_y = 7; - pixel_x = -7 - }, -/obj/machinery/newscaster/directional/east, -/obj/machinery/firealarm/directional/south, -/turf/open/floor/wood, -/area/ship/crew/cryo) -"Ew" = ( -/obj/machinery/atmospherics/pipe/layer_manifold, -/obj/structure/extinguisher_cabinet/directional/east, -/obj/structure/catwalk/over/plated_catwalk/dark, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"Ex" = ( -/obj/structure/railing{ - dir = 1 - }, -/obj/item/kirbyplants/random, -/obj/machinery/light/dim/directional/west, -/turf/open/floor/carpet/nanoweave/beige, -/area/ship/bridge) -"EE" = ( -/obj/structure/window/reinforced/spawner/west, -/obj/machinery/door/poddoor{ - dir = 4; - id = "enginelockdown" - }, -/obj/machinery/door/window/eastright{ - name = "Engine Access" - }, -/obj/machinery/atmospherics/components/unary/shuttle/fire_heater{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"EF" = ( -/obj/machinery/modular_computer/console/preset/command{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/bar/half{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) -"EG" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 1 - }, -/obj/machinery/firealarm/directional/west, -/turf/open/floor/wood, -/area/ship/hallway/central) -"EJ" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 10 - }, -/obj/effect/turf_decal/techfloor{ - dir = 6 - }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/atmospherics) -"EP" = ( -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"ES" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/light/broken/directional/east, -/obj/effect/turf_decal/corner/opaque/ntblue/diagonal, -/obj/effect/turf_decal/corner/opaque/neutral/diagonal{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"Fc" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 1 - }, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"Fj" = ( -/obj/machinery/door/airlock/command{ - name = "Bridge"; - req_access_txt = "19" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/carpet/nanoweave/beige, -/area/ship/bridge) -"Fn" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 - }, -/turf/open/floor/carpet/blue, -/area/ship/crew/dorm) -"Fq" = ( -/obj/machinery/airalarm/directional/west, -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/effect/decal/cleanable/generic, -/turf/open/floor/plasteel, -/area/ship/cargo) -"Fu" = ( -/turf/closed/wall, -/area/ship/cargo) -"Fv" = ( -/obj/machinery/fax/nanotrasen, -/obj/structure/table/reinforced, -/turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) -"Fx" = ( -/obj/machinery/light/dim/directional/south, -/obj/structure/chair{ - dir = 4 - }, -/obj/effect/decal/cleanable/food/egg_smudge, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"FB" = ( -/obj/structure/flora/bigplant, -/turf/open/floor/wood, -/area/ship/hallway/central) -"FC" = ( -/obj/structure/rack, -/obj/item/pickaxe, -/obj/item/pickaxe, -/obj/item/shovel, -/obj/item/kinetic_crusher, -/turf/open/floor/plasteel, -/area/ship/cargo) -"FO" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/glass, -/turf/open/floor/plasteel, -/area/ship/cargo) -"FW" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 8 - }, -/obj/effect/turf_decal/techfloor{ - dir = 6 - }, -/turf/open/floor/carpet/nanoweave/beige, -/area/ship/bridge) -"Gb" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 8 - }, -/turf/open/floor/wood, -/area/ship/hallway/central) -"Gc" = ( -/obj/structure/bed, -/obj/item/bedsheet/medical, -/obj/machinery/iv_drip, -/obj/effect/turf_decal/borderfloorwhite/full, -/obj/item/radio/intercom/directional/north, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"Gh" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "Activate Cooling" - }, -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 1 - }, -/turf/open/floor/engine, -/area/ship/engineering/engine) -"Gi" = ( -/turf/open/floor/engine, -/area/ship/engineering/engine) -"Gm" = ( -/obj/machinery/power/apc/auto_name/directional/east, -/obj/structure/cable{ - icon_state = "0-8" - }, -/turf/open/floor/carpet/nanoweave/blue, -/area/ship/crew/office) -"Gp" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/plasteel, -/area/ship/cargo) -"Gq" = ( -/obj/structure/table, -/obj/item/folder/blue, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 4 - }, -/obj/item/clipboard, -/turf/open/floor/wood, -/area/ship/crew/office) -"Gs" = ( -/obj/machinery/door/window/westleft, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 9 - }, -/obj/structure/sign/poster/official/cleanliness{ - pixel_y = -33 - }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"GL" = ( -/turf/open/floor/wood, -/area/ship/crew/crewtwo) -"GQ" = ( -/obj/structure/fluff/hedge, -/turf/open/floor/wood, -/area/ship/crew/office) -"GW" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/hallway/central) -"Hb" = ( -/obj/machinery/vending/cola/random, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"Hd" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/corner/opaque/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/ntblue, -/obj/effect/turf_decal/corner/opaque/neutral/half{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/ship/crew/canteen/kitchen) -"Hm" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/obj/machinery/atmospherics/components/binary/pump/layer4{ - name = "Oxygen to Mix" - }, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"Hq" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 9 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"Hu" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/visible/layer4{ - dir = 5 - }, -/obj/effect/turf_decal/atmos/mix, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"HA" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/techfloor{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/turf/open/floor/carpet/nanoweave/beige, -/area/ship/bridge) -"HE" = ( -/obj/structure/catwalk/over, -/obj/structure/closet/emcloset, -/turf/open/floor/plating, -/area/ship/crew/toilet) -"HL" = ( -/obj/machinery/igniter/incinerator_atmos, -/obj/machinery/air_sensor/atmos/incinerator_tank{ - id_tag = "nemo_incinerator_sensor" - }, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/turf/open/floor/engine/airless, -/area/ship/engineering/engine) -"HO" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/table/glass, -/obj/item/storage/backpack/duffelbag/med/surgery{ - pixel_y = 11 - }, -/obj/machinery/light_switch{ - pixel_x = -5; - pixel_y = 24 - }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"HR" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/dark/visible{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/engine, -/area/ship/engineering/atmospherics) -"HW" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/wood, -/area/ship/hallway/central) -"HZ" = ( -/obj/machinery/vending/coffee, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"Ir" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 - }, -/obj/machinery/airalarm/directional/south, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"IA" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/structure/catwalk/over/plated_catwalk/dark, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"IB" = ( -/obj/structure/bookcase/random/fiction, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"IV" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/effect/turf_decal/techfloor{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/obj/machinery/atmospherics/pipe/simple/cyan/visible/layer4, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/atmospherics) -"Jj" = ( -/obj/structure/closet/crate/bin, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"Jk" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/orange/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/visible/layer4{ - dir = 6 - }, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"Jm" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/engine) -"Jn" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Infirmary" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/carpet/nanoweave/blue, -/area/ship/medical) -"JA" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/computer/cargo{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/ship/cargo/office) -"JE" = ( -/obj/effect/turf_decal/industrial/warning{ - dir = 1 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo) -"JJ" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/turf/open/floor/wood, -/area/ship/hallway/central) -"JM" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"JQ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/turf/open/floor/plasteel, -/area/ship/cargo) -"JS" = ( -/obj/machinery/cryopod{ - dir = 4 - }, -/obj/structure/sign/poster/official/nanotrasen_logo{ - pixel_x = -30 - }, -/turf/open/floor/plasteel/telecomms_floor, -/area/ship/crew/cryo) -"JT" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 6 - }, -/obj/machinery/airalarm/directional/north, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"JX" = ( -/obj/effect/turf_decal/radiation/white, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/engine) -"JY" = ( -/obj/structure/closet/emcloset/anchored, -/obj/machinery/light/small/directional/north, -/turf/open/floor/plating, -/area/ship/hallway/central) -"Ka" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/wood, -/area/ship/hallway/central) -"Kb" = ( -/obj/machinery/firealarm/directional/south, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"Kd" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 10 - }, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"Kf" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"Kh" = ( -/obj/machinery/button/door{ - dir = 1; - pixel_y = -24; - id = "privacyshutters" - }, -/obj/item/kirbyplants/random, -/turf/open/floor/carpet/nanoweave/blue, -/area/ship/crew/office) -"Ki" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 1 - }, -/turf/open/floor/wood, -/area/ship/hallway/central) -"Kn" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 8 - }, -/turf/open/floor/engine/airless, -/area/ship/external) -"Kv" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/ship/cargo) -"Kz" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/effect/turf_decal/techfloor/corner{ - dir = 4 - }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/atmospherics) -"KH" = ( -/obj/structure/punching_bag, -/obj/machinery/light_switch{ - dir = 1; - pixel_x = 6; - pixel_y = -24 - }, -/turf/open/floor/wood, -/area/ship/hallway/central) -"KI" = ( -/obj/machinery/door/airlock/maintenance_hatch{ - dir = 4 - }, -/obj/effect/mapping_helpers/airlock/locked, -/obj/structure/barricade/wooden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/turf/open/floor/plating, -/area/ship/crew/toilet) -"KL" = ( -/obj/effect/turf_decal/corner/opaque/green/mono, -/turf/open/floor/plasteel, -/area/ship/crew/canteen/kitchen) -"KU" = ( -/obj/machinery/computer/arcade/orion_trail{ - dir = 8; - pixel_x = 5 - }, -/obj/item/reagent_containers/food/drinks/waterbottle{ - pixel_x = -15; - pixel_y = 10 - }, -/turf/open/floor/wood, -/area/ship/hallway/central) -"La" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 10 - }, -/obj/effect/turf_decal/siding/wood, -/obj/structure/table/wood, -/obj/structure/bedsheetbin, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"Lm" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/oxygen_input, -/turf/open/floor/engine/o2, -/area/ship/engineering/atmospherics) -"Lq" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 1 - }, -/obj/effect/turf_decal/industrial/warning{ - dir = 4 - }, -/obj/machinery/door/poddoor/preopen{ - dir = 4; - id = "coolingshutdown" - }, -/turf/open/floor/engine/airless, -/area/ship/external) -"Ls" = ( -/obj/machinery/door/airlock/mining/glass, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/brown/hidden/layer4, -/turf/open/floor/plasteel, -/area/ship/cargo) -"Lv" = ( -/obj/machinery/power/smes/engineering, -/obj/structure/catwalk/over/plated_catwalk/dark, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/light/directional/north, -/turf/open/floor/plating, -/area/ship/engineering/engine) -"Lz" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/obj/machinery/atmospherics/pipe/simple/cyan/visible/layer4, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/atmospherics) -"LA" = ( -/obj/structure/frame/computer{ - dir = 8 - }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"LD" = ( -/obj/structure/chair{ - dir = 1 - }, -/obj/machinery/airalarm/directional/west, -/turf/open/floor/wood, -/area/ship/crew/office) -"LX" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/obj/machinery/button/door{ - id = "hallwindows"; - name = "Shutters Control"; - pixel_y = 24 - }, -/turf/open/floor/plasteel/dark, -/area/ship/cargo/office) -"Mi" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"Mk" = ( -/obj/machinery/door/airlock{ - dir = 4; - name = "Dormitory" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/turf/open/floor/wood, -/area/ship/crew/cryo) -"Mn" = ( -/obj/structure/closet/cabinet, -/obj/item/clothing/under/color/grey, -/obj/item/clothing/under/color/grey, -/obj/item/clothing/under/color/grey, -/obj/item/clothing/shoes/sneakers/black, -/obj/item/clothing/shoes/sneakers/black, -/obj/item/clothing/shoes/sneakers/black, -/obj/item/storage/backpack, -/obj/item/radio, -/obj/item/radio, -/obj/item/radio, -/obj/item/radio, -/obj/item/radio, -/obj/item/storage/backpack/satchel, -/obj/item/radio, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4{ - dir = 1 - }, -/obj/machinery/light/small/directional/south, -/turf/open/floor/wood, -/area/ship/crew/cryo) -"Mq" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/brown/visible/layer4{ - dir = 6 - }, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"Mr" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 1 - }, -/turf/open/floor/carpet/nanoweave/beige, -/area/ship/bridge) -"ME" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 1 - }, -/turf/open/floor/engine/airless, -/area/ship/external) -"MG" = ( -/obj/effect/turf_decal/borderfloorwhite/full, -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = 6; - pixel_y = 2 - }, -/obj/item/pen{ - pixel_y = 4; - pixel_x = 5 - }, -/obj/item/folder/blue{ - pixel_y = 11; - pixel_x = -8 - }, -/obj/item/stamp/cmo{ - pixel_x = -7 - }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"MH" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/effect/turf_decal/steeldecal/steel_decals_central7{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/ship/cargo) -"MI" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/window/northright, -/obj/machinery/door/window/southright{ - req_one_access_txt = "57" - }, -/turf/open/floor/plasteel/dark, -/area/ship/crew/crewthree) -"MJ" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/techfloor/corner, -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/obj/machinery/atmospherics/pipe/simple/cyan/visible/layer4, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/atmospherics) -"MP" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 10 - }, -/turf/open/floor/engine, -/area/ship/engineering/engine) -"MS" = ( -/obj/machinery/atmospherics/components/binary/circulator, -/turf/open/floor/engine, -/area/ship/engineering/engine) -"MT" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 6 - }, -/obj/effect/turf_decal/techfloor, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 1 - }, -/turf/open/floor/carpet/nanoweave/beige, -/area/ship/bridge) -"MV" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "Mix Extract to TEG" - }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/engine) -"MZ" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ship/crew/office) -"Nh" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/turf/open/floor/wood, -/area/ship/crew/cryo) -"Ni" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"Nm" = ( -/obj/machinery/light/directional/west, -/obj/effect/turf_decal/industrial/warning/corner{ - dir = 8 - }, -/obj/structure/table, -/obj/item/clipboard{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/stamp{ - pixel_x = 10 - }, -/obj/item/stamp/denied{ - pixel_x = 2 - }, -/obj/item/flashlight/lamp{ - pixel_x = -8; - pixel_y = 10 - }, -/obj/item/folder{ - pixel_x = -10 - }, -/turf/open/floor/plasteel/dark, -/area/ship/cargo/office) -"Np" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 - }, -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/machinery/light_switch{ - pixel_x = -14; - pixel_y = 24 - }, -/obj/effect/turf_decal/steeldecal/steel_decals_central6, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"Ny" = ( -/obj/structure/chair{ - dir = 1 - }, -/obj/machinery/newscaster/directional/south, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"NB" = ( -/obj/machinery/atmospherics/pipe/heat_exchanging/simple{ - dir = 9 - }, -/turf/open/floor/engine/airless, -/area/ship/external) -"NC" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/ship/cargo) -"NH" = ( -/obj/machinery/atmospherics/pipe/simple/dark/visible{ - dir = 4 - }, -/obj/effect/turf_decal/techfloor{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/obj/machinery/atmospherics/pipe/simple/cyan/visible/layer4, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/atmospherics) -"NK" = ( -/obj/machinery/light_switch{ - pixel_x = -5; - pixel_y = 24 - }, -/obj/effect/turf_decal/radiation/white, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/engine) -"NL" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/obj/effect/turf_decal/siding/wood{ - dir = 4 - }, -/turf/open/floor/wood, -/area/ship/crew/office) -"Oi" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/wood, -/area/ship/hallway/central) -"Om" = ( -/obj/machinery/suit_storage_unit/mining/eva, -/obj/machinery/light/directional/north, -/turf/open/floor/plasteel, -/area/ship/cargo) -"Oo" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/obj/machinery/atmospherics/pipe/simple/cyan/visible/layer4, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/atmospherics) -"Op" = ( -/obj/effect/turf_decal/borderfloorwhite{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/carpet/nanoweave/blue, -/area/ship/medical) -"OF" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/turf/open/floor/carpet/nanoweave/blue, -/area/ship/medical) -"OG" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/item/storage/fancy/cigarettes/cigpack_robust{ - pixel_y = 9; - pixel_x = -1 - }, -/obj/item/lighter{ - pixel_y = 7; - pixel_x = 4 - }, -/obj/machinery/firealarm/directional/south, -/obj/machinery/light/small/directional/east, -/turf/open/floor/carpet/nanoweave/blue, -/area/ship/crew/office) -"OH" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/effect/turf_decal/industrial/hatch/yellow, -/obj/machinery/space_heater, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo/office) -"OJ" = ( -/obj/machinery/power/smes/shuttle/precharged{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/structure/window/reinforced/spawner/west, -/obj/machinery/door/poddoor{ - dir = 4; - id = "enginelockdown" - }, -/obj/machinery/door/window/eastright{ - name = "Engine Access" - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"OQ" = ( -/obj/machinery/door/poddoor{ - id = "amogusdoors"; - name = "Cargo Bay Blast Door" - }, -/obj/effect/turf_decal/industrial/warning, -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/layer_manifold, -/turf/open/floor/plating, -/area/ship/cargo) -"OT" = ( -/obj/effect/turf_decal/corner/opaque/white/mono, -/turf/open/floor/plasteel, -/area/ship/crew/canteen/kitchen) -"Pb" = ( -/obj/machinery/power/shuttle/engine/electric{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/turf/open/floor/plating, -/area/ship/external) -"Pf" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/nitrogen_input, -/turf/open/floor/engine/n2, -/area/ship/engineering/atmospherics) -"Pk" = ( -/obj/effect/turf_decal/borderfloorwhite/full, -/obj/machinery/sleeper, -/obj/machinery/light/directional/north, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"Pl" = ( -/obj/structure/chair/stool/bar{ - dir = 1; - pixel_y = 10 - }, -/obj/effect/turf_decal/corner/opaque/ntblue/diagonal, -/obj/effect/turf_decal/corner/opaque/neutral/diagonal{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"Pq" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/brown/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/plasteel, -/area/ship/cargo) -"Px" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible, -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 - }, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"PI" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/ship/cargo) -"PJ" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/corner/opaque/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/ntblue, -/obj/effect/turf_decal/corner/opaque/neutral/half{ - dir = 1 - }, -/obj/item/reagent_containers/food/condiment/saltshaker{ - pixel_y = 6; - pixel_x = -8 - }, -/obj/item/reagent_containers/food/condiment/peppermill{ - pixel_x = -2; - pixel_y = 11 - }, -/turf/open/floor/plasteel, -/area/ship/crew/canteen/kitchen) -"Qo" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 9 - }, -/obj/structure/sign/poster/official/random{ - pixel_y = -32 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"Qp" = ( -/turf/closed/wall/r_wall, -/area/ship/bridge) -"Qs" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4, -/obj/effect/turf_decal/siding/wood{ - dir = 6 - }, -/turf/open/floor/wood, -/area/ship/crew/crewthree) -"QK" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"QM" = ( -/obj/structure/closet/crate/freezer/blood, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"QQ" = ( -/obj/item/cigbutt, -/obj/item/cigbutt{ - pixel_x = -10; - pixel_y = 10 - }, -/turf/open/floor/wood, -/area/ship/crew/office) -"QU" = ( -/obj/effect/turf_decal/corner/opaque/ntblue/diagonal, -/obj/effect/turf_decal/corner/opaque/neutral/diagonal{ - dir = 4 - }, -/obj/machinery/newscaster/directional/west, -/obj/structure/chair, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"QY" = ( -/obj/effect/turf_decal/corner/opaque/ntblue/diagonal, -/obj/effect/turf_decal/corner/opaque/neutral/diagonal{ - dir = 4 - }, -/obj/structure/closet/crate/bin, -/obj/item/trash/plate, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"Ra" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer2{ - dir = 4 - }, -/obj/structure/catwalk/over/plated_catwalk/dark, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"Re" = ( -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/cable{ - icon_state = "0-4" - }, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"Ri" = ( -/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/n2{ - dir = 8 - }, -/obj/structure/catwalk/over/plated_catwalk/dark, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"Rv" = ( -/obj/structure/grille, -/obj/structure/window/plasma/reinforced/fulltile, -/obj/machinery/atmospherics/pipe/simple/brown/visible, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"Rw" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 1 - }, -/turf/open/floor/carpet/nanoweave/beige, -/area/ship/bridge) -"RB" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible/layer2{ - dir = 8 - }, -/obj/structure/catwalk/over/plated_catwalk/dark, -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/obj/machinery/atmospherics/pipe/simple/cyan/visible/layer4, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"RK" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/components/binary/pump/on{ - name = "Oxygen to Air and Mix"; - target_pressure = 1000 - }, -/obj/effect/turf_decal/atmos/oxygen, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"RL" = ( -/obj/structure/closet/secure_closet/freezer{ - anchored = 1 - }, -/obj/item/reagent_containers/food/condiment/enzyme, -/obj/item/reagent_containers/food/condiment/sugar, -/obj/item/reagent_containers/food/condiment/rice, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/soymilk, -/obj/effect/turf_decal/corner/opaque/green/mono, -/turf/open/floor/plasteel, -/area/ship/crew/canteen/kitchen) -"RO" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/atmos/air_output{ - dir = 8 - }, -/turf/open/floor/engine/air, -/area/ship/engineering/atmospherics) -"RQ" = ( -/obj/machinery/power/generator{ - dir = 4 - }, -/obj/structure/cable/yellow{ - icon_state = "0-4" - }, -/turf/open/floor/engine, -/area/ship/engineering/engine) -"RR" = ( -/obj/effect/turf_decal/borderfloorwhite{ - dir = 4 - }, -/turf/open/floor/carpet/nanoweave/blue, -/area/ship/medical) -"Sc" = ( -/obj/structure/chair/office{ - dir = 1; - name = "Requests" - }, -/turf/open/floor/carpet/nanoweave/red, -/area/ship/crew/crewthree) -"Ss" = ( -/obj/machinery/vending/boozeomat, -/obj/effect/turf_decal/corner/opaque/green/mono, -/turf/open/floor/plasteel, -/area/ship/crew/canteen/kitchen) -"Sv" = ( -/obj/machinery/vending/cola/shamblers, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"SA" = ( -/obj/machinery/door/airlock/command{ - name = "Requests Office"; - req_one_access_txt = "57"; - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/turf/open/floor/wood, -/area/ship/crew/crewthree) -"SE" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible, -/obj/structure/extinguisher_cabinet/directional/east, -/obj/effect/turf_decal/atmos/air{ - dir = 1 - }, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"SG" = ( -/obj/effect/decal/cleanable/food/egg_smudge, -/obj/effect/turf_decal/corner/opaque/green/mono, -/turf/open/floor/plasteel, -/area/ship/crew/canteen/kitchen) -"SK" = ( -/obj/machinery/suit_storage_unit/standard_unit, -/obj/machinery/light/small/directional/south, -/turf/open/floor/plating, -/area/ship/hallway/central) -"SO" = ( -/turf/open/floor/plasteel/showroomfloor, -/area/ship/crew/crewtwo) -"SY" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/carpet/nanoweave/blue, -/area/ship/crew/office) -"Ta" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 10 - }, -/turf/open/floor/carpet/nanoweave/blue, -/area/ship/crew/office) -"Tc" = ( -/obj/structure/table, -/obj/item/reagent_containers/food/drinks/beer{ - pixel_y = 10; - pixel_x = 9 - }, -/obj/item/trash/popcorn, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/plasteel/tech/grid, -/area/ship/hallway/central) -"Tf" = ( -/obj/machinery/light_switch{ - dir = 8; - pixel_x = 24; - pixel_y = 5 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden, -/obj/effect/turf_decal/techfloor/corner{ - dir = 4 - }, -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high/empty, -/obj/item/stock_parts/cell/high/empty, -/obj/item/stock_parts/cell/high/empty, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"Th" = ( -/obj/machinery/power/apc/auto_name/directional/west, -/obj/structure/chair/sofa/brown/left/directional/east, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/machinery/light_switch{ - dir = 4; - pixel_x = -24; - pixel_y = 14 - }, -/turf/open/floor/carpet/nanoweave/blue, -/area/ship/medical) -"Tm" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 1 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"Tz" = ( -/obj/machinery/vending/snack/random, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"TF" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 6 - }, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"TG" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 6 - }, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"TH" = ( -/obj/machinery/button/door{ - dir = 4; - pixel_x = -24; - id = "enginelockdown"; - name = "Lockdown Engines" - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 - }, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"TI" = ( -/obj/effect/decal/cleanable/ash, -/turf/open/floor/plasteel, -/area/ship/cargo) -"TJ" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/obj/effect/turf_decal/siding/wood/corner, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"TL" = ( -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/item/radio/intercom/directional/south, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"TN" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 9 - }, -/obj/effect/turf_decal/atmos/nitrogen, -/obj/structure/sign/warning/gasmask{ - pixel_x = 31 - }, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"TO" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 8 - }, -/obj/structure/grille, -/obj/structure/window/plasma/reinforced/fulltile, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"TS" = ( -/obj/machinery/atmospherics/components/trinary/mixer/airmix, -/obj/structure/catwalk/over/plated_catwalk/dark, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"Ug" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/techfloor{ - dir = 8 - }, -/obj/effect/turf_decal/techfloor/corner, -/turf/open/floor/plasteel/dark, -/area/ship/crew/cryo) -"Uh" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 5 - }, -/obj/structure/extinguisher_cabinet/directional/south, -/turf/open/floor/plasteel/dark, -/area/ship/cargo/office) -"Uk" = ( -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/obj/effect/turf_decal/techfloor{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/visible/layer4, -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/atmospherics) -"Uo" = ( -/obj/machinery/newscaster/directional/north, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"Ut" = ( -/obj/machinery/door/poddoor/shutters/preopen{ - name = "Privacy Shutters"; - id = "privacyshutters" - }, -/obj/structure/window/fulltile, -/obj/structure/grille, -/turf/open/floor/plasteel/dark, -/area/ship/crew/office) -"Uu" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 9 - }, -/turf/open/floor/plasteel, -/area/ship/cargo) -"Uv" = ( -/obj/structure/table, -/turf/open/floor/wood, -/area/ship/crew/office) -"UA" = ( -/obj/structure/bed, -/obj/structure/curtain/cloth/grey, -/obj/item/bedsheet/random, -/turf/open/floor/carpet/blue, -/area/ship/crew/dorm) -"UD" = ( -/obj/structure/closet/firecloset, -/obj/effect/turf_decal/corner/opaque/ntblue/diagonal, -/obj/effect/turf_decal/corner/opaque/neutral/diagonal{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"UI" = ( -/obj/effect/turf_decal/siding/wood, -/turf/open/floor/plasteel/tech/grid, -/area/ship/hallway/central) -"UJ" = ( -/obj/machinery/power/smes/engineering, -/obj/structure/catwalk/over/plated_catwalk/dark, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/structure/sign/warning/enginesafety{ - pixel_y = 32 - }, -/turf/open/floor/plating, -/area/ship/engineering/engine) -"UM" = ( -/obj/structure/closet/secure_closet{ - icon_state = "cap"; - name = "\proper captain's locker"; - req_access_txt = "20" - }, -/obj/machinery/light_switch{ - dir = 8; - pixel_x = 24; - pixel_y = -5 - }, -/obj/item/storage/backpack/satchel/cap, -/obj/item/storage/backpack/captain, -/obj/item/storage/belt/sabre, -/obj/item/clothing/glasses/sunglasses, -/obj/item/clothing/suit/armor/vest/capcarapace, -/obj/item/clothing/shoes/laceup, -/obj/item/door_remote/captain, -/obj/item/clothing/gloves/color/captain/nt, -/obj/item/clothing/suit/armor/nanotrasen/captain, -/obj/item/clothing/suit/armor/nanotrasen/captain/parade, -/obj/item/clothing/gloves/color/captain/nt, -/obj/item/clothing/under/nanotrasen/captain/skirt, -/obj/item/clothing/under/nanotrasen/captain, -/obj/item/clothing/head/nanotrasen/captain/peaked, -/obj/item/clothing/head/nanotrasen/captain, -/turf/open/floor/wood, -/area/ship/crew/crewtwo) -"UN" = ( -/turf/open/floor/wood, -/area/ship/hallway/central) -"UR" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/techfloor{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 6 - }, -/turf/open/floor/carpet/nanoweave/beige, -/area/ship/bridge) -"Vd" = ( -/obj/machinery/door/airlock/engineering{ - dir = 4; - name = "Engineering" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 4 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 8 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/engineering/atmospherics) -"Ve" = ( -/obj/structure/railing, -/obj/item/kirbyplants/random, -/obj/machinery/light/dim/directional/west, -/turf/open/floor/carpet/nanoweave/beige, -/area/ship/bridge) -"Vj" = ( -/turf/closed/wall, -/area/ship/hallway/central) -"Vp" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/food/drinks/beer, -/obj/effect/turf_decal/corner/opaque/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/ntblue, -/obj/effect/turf_decal/corner/opaque/green/half{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/ship/crew/canteen/kitchen) -"Vq" = ( -/obj/structure/closet/secure_closet{ - anchored = 1; - can_be_unanchored = 1; - icon_state = "sec"; - name = "equipment locker"; - req_access_txt = "1" - }, -/obj/item/melee/baton/loaded, -/obj/item/restraints/handcuffs, -/obj/item/restraints/handcuffs, -/obj/item/stock_parts/cell/gun, -/obj/item/stock_parts/cell/gun/mini, -/obj/item/stock_parts/cell/gun/mini, -/obj/item/ammo_box/magazine/co9mm, -/obj/item/ammo_box/magazine/co9mm, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 - }, -/turf/open/floor/wood, -/area/ship/crew/crewthree) -"VP" = ( -/obj/structure/chair{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only{ - dir = 4 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"VQ" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/effect/turf_decal/corner/opaque/ntblue/diagonal, -/obj/effect/turf_decal/corner/opaque/neutral/diagonal{ - dir = 4 - }, -/obj/item/radio/intercom/directional/east, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"Wa" = ( -/obj/effect/turf_decal/borderfloorwhite/full, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/ship/medical) -"Wg" = ( -/obj/structure/table, -/obj/item/toy/cards/deck{ - pixel_y = 7 - }, -/turf/open/floor/carpet/red, -/area/ship/hallway/central) -"Wr" = ( -/obj/machinery/vending/clothing{ - pixel_y = 10 - }, -/obj/machinery/light_switch{ - dir = 8; - pixel_x = 24; - pixel_y = -5 - }, -/turf/open/floor/wood, -/area/ship/crew/cryo) -"Ws" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/engine, -/area/ship/engineering/atmospherics) -"Wy" = ( -/obj/structure/closet/emcloset/wall/directional/north, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"Wz" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 1 - }, -/obj/structure/extinguisher_cabinet/directional/west, -/turf/open/floor/wood, -/area/ship/hallway/central) -"WC" = ( -/obj/machinery/light/directional/north, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"WE" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 10 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"WO" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 5 - }, -/obj/effect/decal/cleanable/oil, -/turf/open/floor/plasteel, -/area/ship/cargo) -"WP" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"WR" = ( -/obj/effect/turf_decal/corner/opaque/white/mono, -/obj/machinery/vending/dinnerware, -/obj/machinery/light/directional/north, -/turf/open/floor/plasteel, -/area/ship/crew/canteen/kitchen) -"WU" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 4 - }, -/obj/machinery/light/directional/west, -/obj/structure/reagent_dispensers/fueltank, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/obj/machinery/door/firedoor/border_only, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/atmospherics) -"WX" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/turf/open/floor/wood, -/area/ship/crew/dorm) -"WZ" = ( -/turf/closed/wall, -/area/ship/crew/cryo) -"Xe" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/obj/machinery/atmospherics/pipe/simple/cyan/visible/layer4, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"Xl" = ( -/obj/structure/bed, -/obj/item/bedsheet/random, -/obj/structure/curtain/cloth/grey, -/turf/open/floor/carpet/blue, -/area/ship/crew/dorm) -"Xp" = ( -/turf/closed/wall/r_wall, -/area/ship/cargo/office) -"Xt" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/ntblue/diagonal, -/obj/effect/turf_decal/corner/opaque/neutral/diagonal{ - dir = 4 - }, -/obj/machinery/newscaster/directional/north, -/turf/open/floor/plasteel, -/area/ship/hallway/central) -"Xu" = ( -/obj/machinery/medical_kiosk, -/obj/machinery/light/directional/south, -/turf/open/floor/carpet/nanoweave/blue, -/area/ship/medical) -"Xy" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/carpet/blue, -/area/ship/crew/crewthree) -"XA" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/effect/turf_decal/ntspaceworks_small/left, -/turf/open/floor/plasteel/dark, -/area/ship/cargo/office) -"XJ" = ( -/obj/effect/turf_decal/corner/opaque/white/mono, -/obj/machinery/door/window/brigdoor/southright{ - name = "The Captain's Personal Lavatory"; - opacity = 1; - dir = 8 - }, -/turf/open/floor/plasteel, -/area/ship/crew/crewtwo) -"XU" = ( -/turf/closed/wall/r_wall, -/area/ship/crew/dorm) -"XY" = ( -/obj/machinery/door/poddoor/preopen{ - dir = 4; - id = "bridgelockdown" - }, -/obj/structure/grille, -/obj/structure/window/reinforced/fulltile, -/obj/machinery/door/firedoor/window, -/turf/open/floor/plating, -/area/ship/bridge) -"Yb" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 1 - }, -/obj/machinery/door/airlock/command{ - name = "Bridge"; - req_access_txt = "19" - }, -/obj/machinery/door/firedoor/border_only, -/obj/machinery/door/firedoor/border_only{ - dir = 1 - }, -/turf/open/floor/carpet/nanoweave/beige, -/area/ship/bridge) -"Yj" = ( -/obj/structure/catwalk/over/plated_catwalk/dark, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable/yellow{ - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - icon_state = "0-2" - }, -/turf/open/floor/plating, -/area/ship/engineering/engine) -"Ym" = ( -/obj/machinery/door/poddoor{ - id = "amogusdoors"; - name = "Cargo Bay Blast Door" - }, -/obj/effect/turf_decal/industrial/warning, -/obj/machinery/door/firedoor, -/turf/open/floor/plating, -/area/ship/cargo) -"Yn" = ( -/obj/structure/disposalpipe/segment{ - dir = 2 - }, -/obj/effect/turf_decal/techfloor{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/orange/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/visible/layer4, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/atmospherics) -"Yp" = ( -/obj/structure/closet/secure_closet/miningcloset{ - anchored = 1 - }, -/obj/item/storage/bag/ore, -/obj/item/storage/bag/ore, -/obj/item/clothing/suit/hooded/explorer, -/obj/item/clothing/suit/hooded/explorer, -/obj/item/clothing/glasses/meson, -/obj/item/clothing/glasses/meson, -/obj/item/mining_scanner, -/obj/item/mining_scanner, -/obj/machinery/light_switch{ - pixel_x = 11; - pixel_y = 23 - }, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/plasteel, -/area/ship/cargo) -"Yv" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 - }, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"Yx" = ( -/obj/structure/chair/sofa/brown/right/directional/south, -/obj/machinery/light_switch{ - pixel_x = 11; - pixel_y = 23 - }, -/obj/machinery/firealarm/directional/north, -/turf/open/floor/carpet/red, -/area/ship/hallway/central) -"YC" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 1 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"YQ" = ( -/obj/effect/turf_decal/siding/wood/corner{ - dir = 8 - }, -/obj/structure/chair{ - dir = 4 - }, -/turf/open/floor/plasteel/tech/grid, -/area/ship/hallway/central) -"YT" = ( -/obj/effect/turf_decal/industrial/outline/yellow, -/obj/structure/closet/crate/medical, -/obj/item/defibrillator, -/obj/item/pinpointer/crew/prox, -/obj/item/storage/firstaid/fire, -/obj/item/storage/box/bodybags, -/obj/machinery/newscaster/directional/east, -/turf/open/floor/plasteel/mono/dark, -/area/ship/cargo/office) -"Za" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 4 - }, -/turf/open/floor/carpet/nanoweave/blue, -/area/ship/medical) -"Zd" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 4 - }, -/obj/effect/turf_decal/corner/opaque/white/mono, -/turf/open/floor/plasteel, -/area/ship/crew/canteen/kitchen) -"Zf" = ( -/obj/machinery/suit_storage_unit/engine, -/obj/machinery/light/small/directional/south, -/turf/open/floor/plasteel/tech/grid, -/area/ship/engineering/engine) -"Zo" = ( -/obj/machinery/computer/crew{ - dir = 8 - }, -/obj/effect/turf_decal/corner/opaque/bar/half{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/bridge) -"Zr" = ( -/obj/machinery/firealarm/directional/east, -/obj/machinery/atmospherics/components/binary/volume_pump{ - name = "Fuel Pump" - }, -/obj/machinery/atmospherics/components/binary/valve/on/layer4{ - name = "Emergency Stop" - }, -/turf/open/floor/plasteel/tech, -/area/ship/engineering/atmospherics) -"Zu" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden/layer2{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/hidden{ - dir = 5 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) -"Zw" = ( -/obj/structure/railing{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/ship/cargo/office) -"ZD" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/structure/catwalk/over/plated_catwalk/dark, -/obj/structure/sign/warning/electricshock{ - pixel_y = 25 - }, -/turf/open/floor/plating, -/area/ship/engineering/atmospherics) -"ZE" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ - dir = 1 - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) -"ZI" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/brown/hidden/layer4, -/turf/open/floor/plasteel, -/area/ship/cargo) -"ZJ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer2, -/obj/structure/dresser, -/obj/machinery/light/small/directional/north, -/turf/open/floor/wood, -/area/ship/crew/cryo) -"ZR" = ( -/obj/machinery/power/apc/auto_name/directional/north, -/obj/structure/cable{ - icon_state = "0-2" - }, -/turf/open/floor/carpet/nanoweave, -/area/ship/hallway/central) - -(1,1,1) = {" -fW -fW -fW -fW -fW -fW -fW -yo -Pb -Pb -ul -ul -ul -ul -mX -ul -ul -ul -ul -Pb -Pb -fW -fW -fW -fW -fW -fW -fW -fW -fW -"} -(2,1,1) = {" -fW -fW -fW -fW -fW -qF -mF -tf -gh -OJ -ul -lE -dj -nF -HL -bk -dj -Zf -ul -gh -OJ -kz -mF -mF -fW -fW -fW -fW -fW -fW -"} -(3,1,1) = {" -fW -fW -fW -kz -kz -bG -EE -tf -ZD -IA -WU -JX -ul -lY -lV -lY -ul -NK -uT -IA -IA -kz -bG -EE -kz -kz -fW -fW -fW -fW -"} -(4,1,1) = {" -fW -fW -kz -kz -JT -wt -gO -dJ -xO -sz -cQ -aR -kn -MV -sK -AG -Jm -uM -yG -we -sD -TH -zy -zy -gk -kz -kz -fW -fW -fW -"} -(5,1,1) = {" -fW -kz -kz -kz -Np -Kd -Jk -nj -Hm -RB -Lz -MJ -IV -NH -lg -Yn -Uk -ub -Oo -bI -Xe -yF -CR -Hu -mL -kz -kz -kz -fW -fW -"} -(6,1,1) = {" -fW -kz -pT -At -RK -qK -dS -Ra -tF -mS -cL -EJ -CE -HR -Ws -bA -fc -hc -Kz -Fc -lW -sJ -qK -dO -qK -Rv -DF -kz -fW -fW -"} -(7,1,1) = {" -fW -kz -Lm -pZ -yj -TF -gN -Ni -vW -ne -ra -hZ -ft -MS -RQ -tp -Gi -vB -fw -Tf -ww -Mq -zK -Zr -Ew -Rv -wC -kz -fW -fW -"} -(8,1,1) = {" -kz -kz -kz -Cu -Px -Px -TS -lR -dZ -kz -TO -ul -rx -fT -nu -gB -vB -mc -kz -kz -Vd -pM -Fu -Fu -Fu -tx -tx -tx -tx -fW -"} -(9,1,1) = {" -kz -Pf -pZ -Dd -Ri -Yv -TG -oE -EP -va -RO -ul -Lv -Yj -fD -MP -Gh -ik -kz -fz -ai -CA -Fu -FC -Fq -qy -tz -pr -uG -fW -"} -(10,1,1) = {" -kz -rM -At -TN -kB -fl -fu -bf -SE -At -sk -ul -UJ -rz -Gi -tk -aL -pB -kz -jZ -wB -sC -Fu -Ca -hz -sh -Kv -jv -Ym -fW -"} -(11,1,1) = {" -kz -kz -kz -kz -kz -kz -kz -kz -kz -kz -kz -ul -ul -ul -ul -ul -ul -ul -kz -kz -er -og -Fu -Om -JQ -WO -FO -JE -Ym -fW -"} -(12,1,1) = {" -hr -JY -SK -hr -UD -dB -rK -um -QU -vO -QY -WZ -JS -Bc -Da -Bc -fU -WZ -rW -cS -sU -bh -Fu -Yp -TI -PI -Pq -fQ -OQ -fW -"} -(13,1,1) = {" -wg -ky -gx -tR -VQ -ES -Bw -tm -gi -Ao -Fx -WZ -ek -Ug -qp -CM -BS -WZ -tI -xb -hA -bz -Ls -aQ -aQ -ZI -ug -jv -Ym -Eu -"} -(14,1,1) = {" -hr -Ek -hr -hr -hr -hr -hr -Xt -GW -Ao -Tc -WZ -ZJ -Nh -xK -xW -Mn -WZ -il -pD -Cz -pz -is -Gp -bZ -Uu -NC -fs -jX -fW -"} -(15,1,1) = {" -lw -lw -lw -DZ -dp -rF -Vp -Pl -GW -qY -aF -WZ -WZ -Wr -vc -Ev -WZ -WZ -ib -cq -Mi -wZ -Fu -MH -yh -zu -zu -tx -tx -fW -"} -(16,1,1) = {" -fW -lw -wT -KL -vY -KL -Hd -Pl -GW -UI -fn -FB -WZ -WZ -Mk -WZ -Vj -bY -HW -WP -hA -si -ys -pt -ys -uQ -uQ -Xp -fW -fW -"} -(17,1,1) = {" -fW -lw -RL -OT -Ss -OT -vI -Pl -gr -gQ -JJ -cp -Wz -hb -Ki -lh -EG -cp -ie -Tm -Hq -gc -ys -LX -Nm -hG -hG -Xp -fW -fW -"} -(18,1,1) = {" -fW -lw -WR -SG -OT -wX -PJ -Pl -if -UI -sd -re -re -Gb -UN -al -UN -UN -HW -WP -eu -hC -qR -Au -JA -wG -Uh -Xp -fW -fW -"} -(19,1,1) = {" -fW -lw -kL -Zd -DL -Br -xf -kO -if -YQ -Vj -Yx -Wg -Oi -gP -UN -UN -KH -mf -ts -hA -pD -ys -nd -Zw -nv -gm -Xp -fW -fW -"} -(20,1,1) = {" -fW -lw -yf -uw -uD -jr -tX -Bg -xo -pI -Vj -xs -fa -Oi -cF -cF -UN -uX -fx -WC -hA -pD -ys -OH -nB -wA -AP -Xp -fW -fW -"} -(21,1,1) = {" -fW -lw -xf -xf -xf -xf -xf -nX -Dc -Cs -Vj -DV -fI -Ka -qq -fY -zG -KU -Vj -qr -hA -rc -ys -iI -pq -AB -XA -Xp -fW -fW -"} -(22,1,1) = {" -fW -sY -As -mT -Bh -LD -Ut -BE -zO -TL -ji -ji -ji -ji -ji -qa -qa -qa -hr -pD -hA -om -ys -jf -lU -ic -BI -Xp -fW -fW -"} -(23,1,1) = {" -fW -sY -QQ -vR -Uv -mM -Ut -pD -ir -pD -eC -xA -bO -dl -ji -id -qS -qa -Hb -pD -hA -Jj -ys -js -pf -YT -CV -Xp -fW -fW -"} -(24,1,1) = {" -fW -sY -GQ -mM -Gq -zM -Ut -pD -ir -pD -MI -Sc -us -Vq -ji -ze -SO -qa -Tz -Bd -ta -Vj -ys -ys -ys -ys -ys -Xp -fW -fW -"} -(25,1,1) = {" -fW -sY -uv -NL -oU -MZ -Ut -pD -sA -ZE -ji -Dz -ps -dG -ji -qa -XJ -qa -hr -Bq -hA -ga -bd -Th -CH -kE -Xu -ls -fW -fW -"} -(26,1,1) = {" -fW -nq -nq -xE -SY -Kh -tB -om -ir -cd -ji -ji -SA -ji -ji -bq -GL -bW -hr -ZR -QK -Jn -iY -OF -CB -oq -ls -ls -fW -fW -"} -(27,1,1) = {" -fW -fW -nq -ed -Ta -Cy -eL -oT -fo -Ny -ji -Aa -kp -oN -ji -lk -iP -vp -qa -pD -hA -ve -dy -ix -Za -wd -hJ -fW -fW -fW -"} -(28,1,1) = {" -fW -fW -nq -dW -Gm -OG -tB -eg -JM -VP -ji -yM -Qs -rw -ji -wp -ok -ao -qa -Uo -hA -ga -vP -RR -Op -kM -hJ -fW -fW -fW -"} -(29,1,1) = {" -fW -fW -nq -tB -tB -tB -tB -tB -vf -Ir -ji -lf -Xy -xi -ji -UM -hi -vZ -qa -de -eY -AT -Pk -tZ -Wa -MG -hJ -fW -fW -fW -"} -(30,1,1) = {" -fW -fW -XU -IB -eP -Re -BW -jS -bw -Kb -ji -ji -fi -ji -ji -qa -iB -qa -qa -gM -dM -AT -Gc -tZ -Wa -zC -hJ -fW -fW -fW -"} -(31,1,1) = {" -fW -fW -XU -XU -wO -WX -eB -jS -hT -cJ -Qp -Ve -Eb -BJ -zi -iv -AE -Ex -Qp -pn -hA -AT -HO -tr -Gs -ls -ls -fW -fW -fW -"} -(32,1,1) = {" -fW -fW -fW -XU -uL -uh -Kf -yU -WE -YC -Yb -Az -Mr -MT -Zu -UR -Rw -aA -Fj -DN -Qo -AT -zS -Cr -oD -ls -fW -fW -fW -fW -"} -(33,1,1) = {" -fW -fW -fW -XU -dq -uq -eQ -jS -Wy -om -Qp -ph -sc -FW -du -HA -jM -wb -Qp -Sv -Dp -AT -LA -dX -QM -ls -fW -fW -fW -fW -"} -(34,1,1) = {" -fW -fW -fW -XU -XU -mQ -jK -jS -lA -HZ -Qp -EF -Zo -Fv -ng -vo -hP -uY -Qp -kU -Cl -kU -kU -kU -wH -ls -fW -fW -fW -fW -"} -(35,1,1) = {" -fW -fW -fW -fW -XU -yB -TJ -jS -jS -jS -XU -XY -XY -XY -ih -ih -XY -XY -wH -qg -fG -mi -ja -kU -wH -fW -fW -fW -fW -fW -"} -(36,1,1) = {" -fW -fW -fW -fW -XU -bo -gu -Xl -uS -mI -XU -mg -ME -ME -NB -np -ME -qb -wH -mU -zJ -mw -sn -kU -wH -fW -fW -fW -fW -fW -"} -(37,1,1) = {" -fW -fW -fW -fW -XU -XU -hM -rq -Fn -aZ -XU -np -ME -ME -ME -ME -qb -Kn -wH -kU -kU -KI -kU -wH -wH -fW -fW -fW -fW -fW -"} -(38,1,1) = {" -fW -fW -fW -fW -fW -XU -La -kW -aZ -aZ -jq -mg -ME -ME -ME -ME -NB -Kn -xu -bR -mN -bs -HE -wH -fW -fW -fW -fW -fW -fW -"} -(39,1,1) = {" -fW -fW -fW -fW -fW -XU -XU -Xl -aZ -aZ -jq -fg -Lq -Lq -Lq -Lq -Lq -zP -xu -aN -ut -eD -wH -wH -fW -fW -fW -fW -fW -fW -"} -(40,1,1) = {" -fW -fW -fW -fW -fW -fW -XU -XU -BH -UA -jq -im -fW -fW -fW -fW -fW -im -xu -BK -Dy -wH -wH -fW -fW -fW -fW -fW -fW -fW -"} -(41,1,1) = {" -fW -fW -fW -fW -fW -fW -fW -XU -XU -XU -XU -im -fW -fW -fW -fW -fW -im -wH -Co -wH -wH -fW -fW -fW -fW -fW -fW -fW -fW -"} -(42,1,1) = {" -fW -fW -fW -fW -fW -fW -fW -fW -XU -XU -XU -im -fW -fW -fW -fW -fW -im -wH -wH -wH -fW -fW -fW -fW -fW -fW -fW -fW -fW -"} -(43,1,1) = {" -fW -fW -fW -fW -fW -fW -fW -fW -fW -XU -XU -im -fW -fW -fW -fW -fW -im -wH -wH -fW -fW -fW -fW -fW -fW -fW -fW -fW -fW -"} diff --git a/_maps/shuttles/pgf/pgf_crying_sun.dmm b/_maps/shuttles/pgf/pgf_crying_sun.dmm index e016ef725525..0c740842e5d9 100644 --- a/_maps/shuttles/pgf/pgf_crying_sun.dmm +++ b/_maps/shuttles/pgf/pgf_crying_sun.dmm @@ -1,4 +1,18 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ae" = ( +/obj/structure/cable/blue{ + icon_state = "0-4" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/door/poddoor{ + dir = 4; + id = "lib_engine_blast" + }, +/obj/machinery/power/shuttle/engine/fire{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/engineering/engines/port) "ai" = ( /obj/structure/railing, /obj/structure/cable/yellow{ @@ -129,6 +143,13 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel/white, /area/ship/hallway/port) +"bi" = ( +/obj/machinery/computer/crew{ + dir = 8 + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/bridge) "bl" = ( /obj/effect/turf_decal/industrial/traffic, /obj/machinery/power/apc/auto_name/directional/north, @@ -215,10 +236,6 @@ /obj/item/storage/box/flashes{ pixel_y = -1 }, -/obj/item/screwdriver{ - pixel_x = -8; - pixel_y = -5 - }, /obj/item/screwdriver{ pixel_x = -5; pixel_y = -5 @@ -235,10 +252,6 @@ pixel_x = 4; pixel_y = -5 }, -/obj/item/screwdriver{ - pixel_x = 7; - pixel_y = -5 - }, /obj/structure/closet/secure_closet/wall/directional/west{ icon_state = "sec_wall"; name = "equipment locker" @@ -406,23 +419,25 @@ dir = 6 }, /obj/structure/catwalk/over/plated_catwalk/dark, -/obj/structure/cable{ - icon_state = "1-8" - }, /obj/structure/cable{ icon_state = "1-2" }, /turf/open/floor/plating, /area/ship/engineering/engines/starboard) -"du" = ( -/obj/machinery/porta_turret/ship/weak{ - dir = 6 +"dv" = ( +/obj/structure/cable/blue{ + icon_state = "0-4" }, -/obj/structure/cable{ - icon_state = "0-8" +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/door/poddoor{ + dir = 4; + id = "lib_engine_blast" }, -/turf/open/floor/engine/hull, -/area/ship/external/dark) +/obj/machinery/power/shuttle/engine/fire{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/engineering/engines/starboard) "dz" = ( /obj/effect/turf_decal/corner_steel_grid{ dir = 10 @@ -464,10 +479,10 @@ /turf/open/floor/plasteel/telecomms_floor, /area/ship/hallway/port) "dK" = ( -/obj/machinery/computer/cargo{ - dir = 8 +/obj/structure/chair/comfy/shuttle{ + dir = 4 }, -/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/effect/turf_decal/floordetail/tiled, /obj/structure/cable{ icon_state = "1-2" }, @@ -509,6 +524,29 @@ }, /turf/open/floor/plasteel/mono/dark, /area/ship/hallway/central) +"ee" = ( +/obj/effect/turf_decal/corner_steel_grid{ + dir = 9 + }, +/obj/effect/turf_decal/corner_steel_grid{ + dir = 4 + }, +/obj/machinery/button/door{ + id = "lib_bridge_shut"; + name = "Bridge Shutters"; + pixel_y = 20; + pixel_x = 8 + }, +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/obj/machinery/turretid/ship{ + pixel_y = 24; + pixel_x = -7; + id = "crying_sun_grid" + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) "ej" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 8 @@ -523,9 +561,6 @@ dir = 8; name = "engine fuel pump" }, -/obj/structure/cable{ - icon_state = "2-4" - }, /obj/machinery/camera/autoname{ dir = 2; network = list("GEC") @@ -1010,16 +1045,20 @@ /obj/machinery/light/directional/north, /turf/open/floor/plating, /area/ship/engineering) -"if" = ( -/obj/structure/cable{ - icon_state = "0-8" +"hX" = ( +/obj/structure/window/reinforced/fulltile/shuttle, +/obj/structure/grille, +/obj/machinery/door/firedoor/border_only{ + dir = 8 }, -/obj/machinery/porta_turret/ship/weak{ - dir = 4 +/obj/machinery/door/firedoor/border_only{ + dir = 1 }, -/obj/structure/catwalk/over/plated_catwalk/dark, -/turf/open/floor/plating/airless, -/area/ship/external/dark) +/obj/machinery/door/poddoor/shutters{ + id = "lib_bridge_shut" + }, +/turf/open/floor/plating, +/area/ship/bridge) "ih" = ( /obj/structure/table/reinforced, /obj/item/modular_computer/laptop/preset, @@ -1151,6 +1190,17 @@ }, /turf/open/floor/plasteel/mono, /area/ship/hangar/starboard) +"jg" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/porta_turret/ship/pgf/light{ + dir = 5; + mode = 1; + id = "crying_sun_grid" + }, +/turf/open/floor/engine/hull, +/area/ship/external/dark) "jh" = ( /obj/effect/turf_decal/industrial/traffic{ dir = 1 @@ -1166,12 +1216,12 @@ /area/ship/hangar/starboard) "jm" = ( /obj/machinery/holopad/emergency, -/obj/effect/turf_decal/spline/fancy/opaque/lime{ - dir = 1 - }, /obj/structure/cable{ icon_state = "4-8" }, +/obj/effect/turf_decal/spline/fancy/opaque/lime{ + dir = 1 + }, /turf/open/floor/plasteel/dark, /area/ship/bridge) "jt" = ( @@ -1253,7 +1303,7 @@ }, /obj/machinery/button/door{ id = "lib_armory_1"; - name = "Sergeant Access"; + name = "Lieutenant Access"; dir = 4; pixel_x = -20; pixel_y = -5; @@ -1421,7 +1471,7 @@ /obj/structure/table/reinforced, /obj/effect/turf_decal/corner/opaque/lime/mono, /obj/machinery/camera/autoname{ - dir = 1 + dir = 10 }, /obj/machinery/light/directional/south, /turf/open/floor/plasteel/mono/dark, @@ -1436,6 +1486,17 @@ /obj/structure/catwalk/over/plated_catwalk/dark, /turf/open/floor/plating/airless, /area/ship/external/dark) +"mf" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/porta_turret/ship/pgf/light{ + dir = 8; + mode = 1; + id = "crying_sun_grid" + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/external/dark) "mk" = ( /obj/structure/table/wood, /obj/item/toy/plush/sharai{ @@ -1457,14 +1518,13 @@ pixel_x = 4; pixel_y = 4 }, +/obj/machinery/light/directional/north, /obj/item/reagent_containers/food/drinks/bottle/whiskey{ pixel_x = -10; pixel_y = 3; - name = "'Anastheasia'"; + name = "'Anesthesia'"; desc = "A bottle of Git's with the word 'Anastheasia' written over it in marker." }, -/obj/machinery/light/directional/north, -/obj/item/clothing/neck/stethoscope, /turf/open/floor/mineral/titanium, /area/ship/medical) "mL" = ( @@ -1473,7 +1533,7 @@ }, /obj/structure/closet/crate{ icon_state = "wooden"; - name = "myning geer"; + name = "mining gear"; desc = "A rectangular steel crate with 'myning geer' spelled out in crayon on top." }, /obj/item/storage/bag/ore{ @@ -1608,9 +1668,12 @@ /turf/open/floor/plasteel/white, /area/ship/hallway/port) "no" = ( -/obj/structure/bed, -/obj/item/bedsheet/cosmos, /obj/structure/curtain/cloth/grey, +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/bed, +/obj/item/bedsheet/brown, /turf/open/floor/plasteel/dark, /area/ship/crew/dorm) "nv" = ( @@ -1665,6 +1728,26 @@ }, /turf/open/floor/plasteel/telecomms_floor, /area/ship/crew/cryo) +"om" = ( +/obj/effect/turf_decal/corner/opaque/lime/mono, +/obj/structure/table/reinforced, +/obj/item/clipboard{ + pixel_x = -9; + pixel_y = -1 + }, +/obj/item/pen{ + pixel_x = -10; + pixel_y = 1 + }, +/obj/item/gps{ + pixel_x = 8; + pixel_y = -2 + }, +/obj/item/binoculars{ + pixel_y = 9 + }, +/turf/open/floor/plasteel/mono/dark, +/area/ship/bridge) "ou" = ( /obj/structure/railing{ dir = 8 @@ -1784,22 +1867,22 @@ /obj/structure/railing{ dir = 4 }, -/obj/structure/table, /obj/item/toy/plush/knight{ - pixel_y = 10; + pixel_y = 11; pixel_x = -10 }, /obj/item/toy/plush/hornet{ - pixel_y = 8; - pixel_x = -3 + pixel_y = 10; + pixel_x = -2 }, /obj/item/toy/plush/mora{ - pixel_y = 4; - pixel_x = 5 + pixel_y = 6; + pixel_x = 6 }, /obj/effect/turf_decal/corner_steel_grid{ dir = 10 }, +/obj/structure/dresser, /turf/open/floor/plasteel/dark, /area/ship/crew/dorm) "oX" = ( @@ -1848,6 +1931,22 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2, /turf/open/floor/plasteel/mono/dark, /area/ship/hallway/central) +"pK" = ( +/obj/structure/cable/blue{ + icon_state = "0-8" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/window/plasma/reinforced{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/shuttle/fire_heater{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/engineering/engines/starboard) "pW" = ( /obj/machinery/computer/helm/viewscreen/directional/west, /obj/effect/turf_decal/siding/wood{ @@ -1883,15 +1982,8 @@ /turf/open/floor/plasteel/sepia, /area/ship/crew/dorm/dormthree) "qj" = ( -/obj/structure/table/reinforced, -/obj/item/desk_flag/gezena{ - pixel_x = 9; - pixel_y = 1 - }, -/obj/machinery/recharger{ - pixel_y = 1; - pixel_x = -6 - }, +/obj/structure/chair/comfy/shuttle, +/obj/effect/turf_decal/floordetail/tiled, /turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) "qm" = ( @@ -1904,7 +1996,6 @@ /turf/open/floor/plasteel/dark, /area/ship/crew/canteen) "qp" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible, /obj/structure/cable{ icon_state = "1-10" }, @@ -1915,6 +2006,9 @@ dir = 1 }, /obj/item/paper/guides/jobs/engi/combustion_thruster, +/obj/machinery/atmospherics/pipe/manifold/orange/visible{ + dir = 4 + }, /turf/open/floor/plasteel/tech, /area/ship/engineering/engines/starboard) "qy" = ( @@ -2104,11 +2198,6 @@ /turf/closed/wall/mineral/plastitanium, /area/ship/engineering/engines/starboard) "sF" = ( -/obj/machinery/door/airlock/security/glass{ - req_one_access_txt = "1"; - req_access = list(1); - name = "Checkpoint" - }, /obj/structure/cable{ icon_state = "1-2" }, @@ -2117,6 +2206,10 @@ dir = 1 }, /obj/machinery/door/firedoor/border_only, +/obj/machinery/door/airlock/security/glass{ + req_one_access_txt = "1"; + name = "Checkpoint" + }, /turf/open/floor/plasteel/dark, /area/ship/hallway/port) "sJ" = ( @@ -2241,7 +2334,6 @@ pixel_y = 3 }, /obj/effect/turf_decal/corner/opaque/lime/mono, -/obj/machinery/light/directional/south, /obj/machinery/light_switch{ dir = 4; pixel_x = -19; @@ -2260,26 +2352,21 @@ /turf/closed/wall/mineral/titanium/exterior, /area/ship/crew/cryo) "tQ" = ( -/obj/structure/chair/comfy/shuttle, /obj/effect/turf_decal/corner_steel_grid{ dir = 9 }, +/obj/structure/chair/comfy/shuttle, +/obj/effect/turf_decal/floordetail/tiled, /turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) -"tU" = ( -/obj/machinery/porta_turret/ship/weak{ - dir = 5 - }, -/obj/structure/cable{ - icon_state = "0-2" +"tY" = ( +/obj/machinery/modular_computer/console/preset/command{ + dir = 1 }, -/turf/open/floor/engine/hull, -/area/ship/external/dark) +/obj/structure/catwalk/over/plated_catwalk/dark, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/bridge) "uh" = ( -/obj/structure/chair/comfy/shuttle{ - dir = 4 - }, -/obj/effect/turf_decal/floordetail/tiled, /obj/structure/cable{ icon_state = "4-8" }, @@ -2497,11 +2584,11 @@ pixel_x = 9; pixel_y = -5 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_y = 10; pixel_x = -6 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_y = 10 }, /turf/open/floor/plasteel/dark, @@ -2585,12 +2672,12 @@ /turf/open/floor/plasteel/dark, /area/ship/crew/canteen) "wz" = ( -/obj/effect/turf_decal/corner_steel_grid{ - dir = 9 - }, /obj/structure/cable{ icon_state = "4-8" }, +/obj/effect/turf_decal/corner_steel_grid{ + dir = 9 + }, /turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) "wK" = ( @@ -2812,6 +2899,19 @@ /obj/machinery/airalarm/directional/east, /turf/open/floor/plasteel/tech, /area/ship/engineering/engines/port) +"yy" = ( +/obj/structure/table/reinforced, +/obj/item/desk_flag/gezena{ + pixel_x = 9; + pixel_y = 1 + }, +/obj/machinery/recharger{ + pixel_y = 1; + pixel_x = -6 + }, +/obj/effect/turf_decal/floordetail/tiled, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/bridge) "yF" = ( /obj/effect/turf_decal/industrial/traffic{ dir = 1 @@ -2932,9 +3032,6 @@ icon_state = "1-4" }, /obj/structure/catwalk/over/plated_catwalk, -/obj/structure/table/reinforced{ - color = "#c1b6a5" - }, /obj/machinery/cell_charger, /obj/item/stock_parts/cell/high, /obj/structure/cable, @@ -2945,6 +3042,7 @@ dir = 5 }, /obj/machinery/airalarm/directional/west, +/obj/structure/table/reinforced, /turf/open/floor/plating, /area/ship/engineering) "zL" = ( @@ -2970,7 +3068,7 @@ }, /obj/machinery/door/airlock/security{ req_access = list(3); - name = "Sergeant's Quarters" + name = "Lieutenant's Quarters" }, /turf/open/floor/plasteel/tech, /area/ship/security) @@ -2997,28 +3095,6 @@ }, /turf/open/floor/vault, /area/ship/security/armory) -"Aq" = ( -/obj/effect/turf_decal/corner_steel_grid{ - dir = 9 - }, -/obj/effect/turf_decal/corner_steel_grid{ - dir = 4 - }, -/obj/machinery/button/door{ - id = "lib_bridge_shut"; - name = "Bridge Shutters"; - pixel_y = 20; - pixel_x = 8 - }, -/obj/structure/chair/comfy/shuttle{ - dir = 4 - }, -/obj/machinery/turretid{ - pixel_y = 23; - pixel_x = -8 - }, -/turf/open/floor/plasteel/mono/dark, -/area/ship/bridge) "Ar" = ( /obj/effect/turf_decal/corner_steel_grid{ dir = 9 @@ -3088,10 +3164,38 @@ "At" = ( /turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/security/armory) +"Az" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/porta_turret/ship/pgf/light{ + dir = 4; + mode = 1; + id = "crying_sun_grid" + }, +/turf/open/floor/plating/airless, +/area/ship/external/dark) "AL" = ( /obj/machinery/vending/toyliberationstation, /turf/open/floor/plasteel/tech, /area/ship/security) +"AM" = ( +/obj/structure/cable/blue{ + icon_state = "0-8" + }, +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/door/firedoor/border_only{ + dir = 4 + }, +/obj/structure/window/plasma/reinforced{ + dir = 8 + }, +/obj/machinery/atmospherics/components/unary/shuttle/fire_heater{ + dir = 4 + }, +/turf/open/floor/plating, +/area/ship/engineering/engines/port) "AN" = ( /obj/structure/window/reinforced{ dir = 1 @@ -3254,19 +3358,19 @@ pixel_x = 3; pixel_y = 5 }, -/obj/item/kitchen/knife/plastic{ +/obj/item/melee/knife/plastic{ pixel_y = 5; pixel_x = -1 }, -/obj/item/kitchen/knife/plastic{ +/obj/item/melee/knife/plastic{ pixel_y = 5; pixel_x = -3 }, -/obj/item/kitchen/knife/plastic{ +/obj/item/melee/knife/plastic{ pixel_y = 5; pixel_x = -5 }, -/obj/item/kitchen/knife/plastic{ +/obj/item/melee/knife/plastic{ pixel_y = 5; pixel_x = -7 }, @@ -3347,19 +3451,10 @@ dir = 8 }, /turf/open/floor/plating, -/area/ship/engineering/engines/port) -"CD" = ( -/turf/open/floor/plasteel/white, -/area/ship/crew/canteen) -"CF" = ( -/obj/machinery/porta_turret/ship/weak{ - dir = 10 - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/turf/open/floor/engine/hull, -/area/ship/external/dark) +/area/ship/engineering/engines/port) +"CD" = ( +/turf/open/floor/plasteel/white, +/area/ship/crew/canteen) "CO" = ( /obj/machinery/vending/coffee, /obj/effect/turf_decal/corner_steel_grid/full{ @@ -3517,6 +3612,17 @@ /obj/item/clothing/head/helmet/space/gezena, /turf/open/floor/plating, /area/ship/engineering) +"DG" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/porta_turret/ship/pgf/light{ + dir = 5; + mode = 1; + id = "crying_sun_grid" + }, +/turf/open/floor/engine/hull, +/area/ship/external/dark) "DJ" = ( /obj/effect/turf_decal/industrial/traffic, /obj/structure/sign/flag/gezena{ @@ -3583,10 +3689,7 @@ /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/external/dark) "El" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/machinery/modular_computer/console/preset/command{ +/obj/machinery/computer/security{ dir = 1 }, /obj/structure/catwalk/over/plated_catwalk/dark, @@ -3633,13 +3736,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, /turf/open/floor/plasteel, /area/ship/hallway/central) -"Eu" = ( -/obj/machinery/porta_turret/ship/weak{ - dir = 5 - }, -/obj/structure/cable, -/turf/open/floor/engine/hull, -/area/ship/external/dark) "EA" = ( /obj/structure/sign/poster/contraband/pgf{ pixel_y = 32 @@ -3896,15 +3992,6 @@ }, /turf/open/floor/plasteel/mono/dark, /area/ship/hallway/central) -"FJ" = ( -/obj/machinery/porta_turret/ship/weak{ - dir = 5 - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/turf/open/floor/engine/hull, -/area/ship/external/dark) "FN" = ( /obj/structure/catwalk/over/plated_catwalk/dark, /obj/machinery/door/poddoor{ @@ -3916,15 +4003,6 @@ }, /turf/open/floor/plating, /area/ship/engineering/engines/starboard) -"FO" = ( -/obj/machinery/porta_turret/ship/weak{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/turf/open/floor/engine/hull/reinforced, -/area/ship/external/dark) "FU" = ( /obj/effect/turf_decal/corner_steel_grid{ dir = 10 @@ -3946,10 +4024,10 @@ /turf/open/floor/plasteel/mono/dark, /area/ship/hallway/central) "Gb" = ( -/obj/machinery/computer/crew{ - dir = 8 +/obj/structure/chair/comfy/shuttle{ + dir = 4 }, -/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/effect/turf_decal/floordetail/tiled, /obj/structure/cable{ icon_state = "1-8" }, @@ -4104,8 +4182,8 @@ "GW" = ( /obj/structure/rack, /obj/item/stock_parts/cell/gun/pgf{ - pixel_y = 12; - pixel_x = -3 + pixel_x = -6; + pixel_y = -2 }, /obj/item/stock_parts/cell/gun/pgf{ pixel_y = 10; @@ -4128,6 +4206,13 @@ pixel_x = 3 }, /obj/effect/turf_decal/corner/opaque/neutral/full, +/obj/item/stock_parts/cell/gun/pgf{ + pixel_x = -12 + }, +/obj/item/stock_parts/cell/gun/pgf{ + pixel_x = -8; + pixel_y = -2 + }, /turf/open/floor/vault, /area/ship/security/armory) "Ha" = ( @@ -4144,15 +4229,6 @@ /obj/effect/turf_decal/corner/opaque/neutral/full, /turf/open/floor/vault, /area/ship/security/armory) -"Hb" = ( -/obj/machinery/porta_turret/ship/weak{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "0-2" - }, -/turf/open/floor/engine/hull, -/area/ship/external/dark) "Hf" = ( /obj/structure/railing, /obj/effect/turf_decal/corner_steel_grid{ @@ -4160,6 +4236,18 @@ }, /turf/open/floor/plasteel/telecomms_floor, /area/ship/crew/cryo) +"Hl" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/porta_turret/ship/pgf/light{ + dir = 4; + mode = 1; + id = "crying_sun_grid" + }, +/turf/open/floor/plating/airless, +/area/ship/external/dark) "Hn" = ( /turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/crew/cryo) @@ -4300,10 +4388,6 @@ /area/ship/crew/canteen) "Ig" = ( /obj/machinery/computer/helm/viewscreen/directional/north, -/obj/structure/chair/comfy/shuttle{ - dir = 4 - }, -/obj/effect/turf_decal/floordetail/tiled, /turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) "Ir" = ( @@ -4466,6 +4550,20 @@ }, /turf/open/floor/engine/hull, /area/ship/external/dark) +"KH" = ( +/obj/structure/window/reinforced/fulltile/shuttle, +/obj/structure/grille, +/obj/machinery/door/poddoor/shutters{ + id = "lib_bridge_shut" + }, +/obj/machinery/door/firedoor/border_only{ + dir = 8 + }, +/obj/machinery/door/firedoor/border_only{ + dir = 1 + }, +/turf/open/floor/plating, +/area/ship/bridge) "KM" = ( /turf/closed/wall/mineral/titanium/nodiagonal, /area/ship/hallway/port) @@ -4516,9 +4614,6 @@ dir = 8; name = "engine fuel pump" }, -/obj/structure/cable{ - icon_state = "1-4" - }, /obj/machinery/camera/autoname{ dir = 1; network = list("GEC") @@ -4677,7 +4772,7 @@ "Mw" = ( /obj/structure/bed, /obj/item/bedsheet/hos{ - name = "Sergeant's Bedsheet"; + name = "Lieutenant's Bedsheet"; desc = "It is decorated with a shield emblem." }, /obj/effect/turf_decal/borderfloorblack, @@ -4713,9 +4808,6 @@ pixel_x = -9; pixel_y = 3 }, -/obj/item/clothing/head/gezena/medic/flap{ - pixel_x = 12 - }, /obj/item/clothing/head/gezena/medic{ pixel_y = 4; pixel_x = 7 @@ -4743,6 +4835,11 @@ pixel_x = -13; pixel_y = -19 }, +/obj/item/clothing/neck/stethoscope, +/obj/item/clothing/head/gezena/flap/medic{ + pixel_y = 1; + pixel_x = 12 + }, /turf/open/floor/mineral/titanium, /area/ship/medical) "MF" = ( @@ -4801,6 +4898,9 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on/layer2{ dir = 8 }, +/obj/structure/railing/corner{ + dir = 4 + }, /turf/open/floor/plasteel/tech, /area/ship/bridge) "MZ" = ( @@ -4877,7 +4977,7 @@ dir = 8 }, /obj/structure/closet/crate{ - name = "Mishun Acomplshed" + name = "Mission Accomplished" }, /obj/item/poster/mission_accomplished_7, /obj/item/poster/mission_accomplished_6, @@ -4917,8 +5017,13 @@ /area/ship/external/dark) "NF" = ( /obj/structure/closet/crate/radiation, -/obj/effect/turf_decal/borderfloorblack{ - dir = 4 +/obj/item/clothing/suit/radiation, +/obj/item/clothing/suit/radiation, +/obj/item/clothing/head/radiation{ + pixel_x = -7 + }, +/obj/item/clothing/head/radiation{ + pixel_x = -7 }, /turf/open/floor/plasteel/dark, /area/ship/construction) @@ -5119,6 +5224,9 @@ /turf/open/floor/vault, /area/ship/security/armory) "Pb" = ( +/obj/structure/railing{ + dir = 4 + }, /turf/open/floor/plasteel/stairs{ icon = 'icons/obj/stairs.dmi'; dir = 2 @@ -5145,7 +5253,6 @@ /turf/open/floor/plating, /area/ship/engineering) "Ph" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible, /obj/structure/cable{ icon_state = "2-9" }, @@ -5155,6 +5262,9 @@ /obj/machinery/atmospherics/components/trinary/mixer/layer2{ dir = 1 }, +/obj/machinery/atmospherics/pipe/manifold/orange/visible{ + dir = 4 + }, /turf/open/floor/plasteel/tech, /area/ship/engineering/engines/port) "Pi" = ( @@ -5360,21 +5470,28 @@ /obj/effect/turf_decal/corner/opaque/neutral/full, /turf/open/floor/vault, /area/ship/security/armory) +"Qi" = ( +/obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/computer/cargo{ + dir = 8 + }, +/turf/open/floor/plasteel/telecomms_floor, +/area/ship/bridge) "Qq" = ( /obj/structure/rack, -/obj/item/kitchen/knife/combat/survival{ +/obj/item/melee/knife/survival{ pixel_x = -7; pixel_y = 4 }, -/obj/item/kitchen/knife/combat/survival{ +/obj/item/melee/knife/survival{ pixel_x = -2; pixel_y = 4 }, -/obj/item/kitchen/knife/combat/survival{ +/obj/item/melee/knife/survival{ pixel_y = 4; pixel_x = 3 }, -/obj/item/kitchen/knife/combat/survival{ +/obj/item/melee/knife/survival{ pixel_y = 4; pixel_x = 8 }, @@ -5718,6 +5835,17 @@ /obj/machinery/light/floor/hangar, /turf/open/floor/engine/hull/reinforced, /area/ship/external/dark) +"Tp" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/porta_turret/ship/pgf/light{ + dir = 10; + mode = 1; + id = "crying_sun_grid" + }, +/turf/open/floor/engine/hull, +/area/ship/external/dark) "Tw" = ( /obj/structure/cable{ icon_state = "0-2" @@ -5867,6 +5995,7 @@ /obj/item/gun/energy/kalix/pistol{ pixel_y = -16 }, +/obj/item/screwdriver, /turf/open/floor/plasteel/sepia, /area/ship/crew/dorm/dormthree) "UH" = ( @@ -5915,13 +6044,6 @@ pixel_x = -10; pixel_y = -7 }, -/obj/item/clothing/under/gezena/marine{ - pixel_x = -10; - pixel_y = -7 - }, -/obj/item/clothing/gloves/gezena/marine{ - pixel_y = 11 - }, /obj/item/clothing/gloves/gezena/marine{ pixel_y = 11 }, @@ -5931,22 +6053,6 @@ /obj/item/clothing/gloves/gezena/marine{ pixel_y = 11 }, -/obj/item/clothing/head/gezena/marine/flap{ - pixel_x = -10 - }, -/obj/item/clothing/head/gezena/marine/flap{ - pixel_x = -10 - }, -/obj/item/clothing/head/gezena/marine/flap{ - pixel_x = -10 - }, -/obj/item/clothing/head/gezena/marine/flap{ - pixel_x = -10 - }, -/obj/item/clothing/head/gezena/marine{ - pixel_y = 10; - pixel_x = -10 - }, /obj/item/clothing/head/gezena/marine{ pixel_y = 10; pixel_x = -10 @@ -5975,13 +6081,6 @@ /obj/item/storage/backpack/duffelbag/sec{ pixel_y = -13 }, -/obj/item/storage/backpack/duffelbag/sec{ - pixel_y = -13 - }, -/obj/item/storage/backpack/satchel/sec{ - pixel_x = -8; - pixel_y = -17 - }, /obj/item/storage/backpack/satchel/sec{ pixel_x = -8; pixel_y = -17 @@ -6006,11 +6105,19 @@ pixel_x = 3; pixel_y = 0 }, -/obj/item/clothing/shoes/combat/gezena{ - pixel_x = 3; - pixel_y = 0 - }, /obj/effect/turf_decal/corner/opaque/neutral/full, +/obj/item/clothing/head/gezena/flap/marine{ + pixel_y = 1; + pixel_x = -10 + }, +/obj/item/clothing/head/gezena/flap/marine{ + pixel_y = 1; + pixel_x = -10 + }, +/obj/item/clothing/head/gezena/flap/marine{ + pixel_y = 1; + pixel_x = -10 + }, /turf/open/floor/vault, /area/ship/security/armory) "Vp" = ( @@ -6059,11 +6166,11 @@ /turf/open/floor/plasteel/mono, /area/ship/hangar/starboard) "VM" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable, /obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "engine fuel pump" + }, /turf/open/floor/plating, /area/ship/engineering/engines/starboard) "VY" = ( @@ -6075,7 +6182,7 @@ anchored = 1; can_be_unanchored = 1; icon_state = "warden"; - name = "sergeant's locker"; + name = "Lieutenant's locker"; req_access_txt = "3"; req_access = list(3) }, @@ -6106,10 +6213,6 @@ pixel_y = 1; pixel_x = -11 }, -/obj/item/clothing/head/gezena/marine/lead/flap{ - pixel_y = 9; - pixel_x = -11 - }, /obj/item/clothing/suit/armor/gezena/marinecoat{ pixel_y = 8 }, @@ -6117,14 +6220,6 @@ pixel_y = 11; pixel_x = 5 }, -/obj/item/radio/headset/pgf/captain{ - pixel_x = -4; - pixel_y = 9 - }, -/obj/item/kitchen/knife/combat/survival{ - pixel_y = 0; - pixel_x = 1 - }, /obj/item/storage/belt/military/gezena{ pixel_y = 1 }, @@ -6132,6 +6227,10 @@ pixel_x = -8; pixel_y = -17 }, +/obj/item/radio/headset/pgf/captain{ + pixel_x = -2; + pixel_y = 9 + }, /obj/item/storage/backpack/duffelbag/sec{ pixel_y = -13 }, @@ -6140,7 +6239,14 @@ pixel_x = -3 }, /obj/item/clothing/head/helmet/gezena{ - pixel_y = -11 + pixel_x = -11 + }, +/obj/item/clothing/suit/armor/gezena/marine{ + pixel_y = 8 + }, +/obj/item/clothing/head/gezena/flap/marine/lead{ + pixel_y = 10; + pixel_x = -10 }, /turf/open/floor/plasteel/tech, /area/ship/crew/dorm/dormtwo) @@ -6171,6 +6277,27 @@ }, /turf/open/floor/plasteel/sepia, /area/ship/crew/dorm) +"Wg" = ( +/obj/effect/turf_decal/spline/fancy/opaque/lime{ + dir = 1 + }, +/obj/effect/turf_decal/spline/fancy/opaque/lime, +/obj/structure/railing{ + dir = 1 + }, +/turf/open/floor/plasteel/tech, +/area/ship/bridge) +"Wi" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/porta_turret/ship/pgf/light{ + dir = 6; + mode = 1; + id = "crying_sun_grid" + }, +/turf/open/floor/engine/hull, +/area/ship/external/dark) "Wk" = ( /obj/machinery/power/smes/shuttle/precharged{ dir = 4 @@ -6229,9 +6356,6 @@ dir = 5 }, /obj/structure/catwalk/over/plated_catwalk/dark, -/obj/structure/cable{ - icon_state = "2-8" - }, /obj/structure/cable{ icon_state = "1-2" }, @@ -6244,6 +6368,17 @@ /obj/structure/catwalk/over/plated_catwalk/dark, /turf/open/floor/plating/airless, /area/ship/external/dark) +"WU" = ( +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/porta_turret/ship/pgf/light{ + dir = 5; + mode = 1; + id = "crying_sun_grid" + }, +/turf/open/floor/engine/hull, +/area/ship/external/dark) "WV" = ( /obj/effect/turf_decal/trimline/opaque/bottlegreen/filled/line{ dir = 4 @@ -6384,13 +6519,11 @@ /turf/open/floor/plasteel/tech, /area/ship/construction) "Yd" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/obj/structure/cable{ - icon_state = "0-2" - }, /obj/structure/catwalk/over/plated_catwalk/dark, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "engine fuel pump" + }, /turf/open/floor/plating, /area/ship/engineering/engines/port) "Yo" = ( @@ -6565,6 +6698,15 @@ }, /turf/open/floor/plasteel/tech, /area/ship/engineering/engines/port) +"Zr" = ( +/obj/structure/cable, +/obj/machinery/porta_turret/ship/pgf/light{ + dir = 5; + mode = 1; + id = "crying_sun_grid" + }, +/turf/open/floor/engine/hull, +/area/ship/external/dark) "Zw" = ( /obj/structure/railing{ dir = 4 @@ -6707,14 +6849,14 @@ xz xz lc hJ -hJ +ae is lc xz xz TV FN -fN +dv fN TV xz @@ -6735,14 +6877,14 @@ xz lc lc CB -CB +AM UM lc -FO +mf LD TV bB -Wk +pK Wk TV TV @@ -7092,7 +7234,7 @@ xz (15,1,1) = {" xz xz -FJ +jg ow ow mG @@ -7170,7 +7312,7 @@ xK zz DT SB -CF +Tp xz "} (18,1,1) = {" @@ -7289,7 +7431,7 @@ xz xz xz Si -KB +DG KM Te EM @@ -7346,7 +7488,7 @@ xz xz xz eR -Eu +Zr KP BX xy @@ -7478,7 +7620,7 @@ Bq oR Ne SB -du +Wi xz "} (29,1,1) = {" @@ -7683,7 +7825,7 @@ xz xz xz xz -tU +WU xk UE pW @@ -7881,7 +8023,7 @@ xz xz xz MF -Aq +ee Xs jm jH @@ -7914,8 +8056,8 @@ bb wz tQ El -Ms -MF +Wg +om MF eO Ly @@ -7941,10 +8083,10 @@ MF Ig uh qj -Ms -CZ -xz -Mk +tY +hX +MF +MF Bc KS Sp @@ -7964,14 +8106,14 @@ xz xz xz xz -Hb +WU vr dK Gb -Ms +yy +KH CZ xz -xz Mk iK sQ @@ -7993,13 +8135,13 @@ xz xz xz cR -Rx -bD -bD +Sd +Qi +bi +Ms CZ xz xz -xz Mk Er Mk @@ -8021,10 +8163,10 @@ xz xz xz xz -xz -xz -xz -xz +Rx +bD +bD +CZ xz xz xz @@ -8141,11 +8283,11 @@ xz xz xz xz -if +Hl xz xz xz -if +Az xz xz xz diff --git a/_maps/shuttles/pirate/pirate_libertatia.dmm b/_maps/shuttles/pirate/pirate_libertatia.dmm index 2fe2cd9ddb20..46d00806edd7 100644 --- a/_maps/shuttles/pirate/pirate_libertatia.dmm +++ b/_maps/shuttles/pirate/pirate_libertatia.dmm @@ -299,7 +299,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ dir = 4 }, -/obj/structure/fireaxecabinet{ +/obj/structure/cabinet/fireaxe{ pixel_y = 32 }, /turf/open/floor/pod/light, @@ -566,11 +566,11 @@ /area/ship/security) "sI" = ( /obj/machinery/firealarm/directional/south, -/obj/item/kitchen/knife/hunting{ +/obj/item/melee/knife/hunting{ pixel_y = 5 }, -/obj/item/kitchen/knife/hunting, -/obj/item/kitchen/knife/hunting{ +/obj/item/melee/knife/hunting, +/obj/item/melee/knife/hunting{ pixel_y = -5 }, /obj/item/storage/belt/security/webbing, diff --git a/_maps/shuttles/pirate/pirate_noderider.dmm b/_maps/shuttles/pirate/pirate_noderider.dmm index 2e0352c54a58..6861f971143f 100644 --- a/_maps/shuttles/pirate/pirate_noderider.dmm +++ b/_maps/shuttles/pirate/pirate_noderider.dmm @@ -341,10 +341,11 @@ /area/ship/crew) "et" = ( /obj/machinery/porta_turret/ship{ - dir = 5 + dir = 5; + id = "jupiter_grid" }, /turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) +/area/ship/security/armory) "ev" = ( /obj/machinery/power/rtg, /obj/structure/cable{ @@ -578,10 +579,11 @@ /area/ship/crew) "iH" = ( /obj/machinery/porta_turret/ship{ - dir = 9 + dir = 9; + id = "jupiter_grid" }, /turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) +/area/ship/engineering) "iJ" = ( /obj/effect/turf_decal/industrial/warning, /obj/effect/turf_decal/spline/fancy/opaque/black{ @@ -965,6 +967,13 @@ /obj/item/pickaxe/drill, /turf/open/floor/plasteel/dark, /area/ship/cargo) +"oX" = ( +/obj/machinery/porta_turret/ship{ + dir = 4; + id = "jupiter_grid" + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/security/armory) "pi" = ( /obj/structure/cable{ icon_state = "1-2" @@ -1596,6 +1605,13 @@ /obj/effect/turf_decal/spline/fancy/opaque/black, /turf/open/floor/plasteel/tech/grid, /area/ship/maintenance/central) +"yH" = ( +/obj/machinery/porta_turret/ship{ + dir = 4; + id = "jupiter_grid" + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/bridge) "yI" = ( /obj/structure/cable{ icon_state = "1-2" @@ -1733,7 +1749,8 @@ /area/ship/engineering) "Az" = ( /obj/machinery/porta_turret/ship{ - dir = 6 + dir = 6; + id = "jupiter_grid" }, /turf/closed/wall/mineral/plastitanium, /area/ship/bridge) @@ -2578,10 +2595,11 @@ /area/ship/maintenance/central) "MX" = ( /obj/machinery/porta_turret/ship{ - dir = 1 + dir = 1; + id = "jupiter_grid" }, /turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) +/area/ship/maintenance/central) "MZ" = ( /obj/structure/cable{ icon_state = "0-8" @@ -2862,10 +2880,11 @@ /area/ship/cargo) "RE" = ( /obj/machinery/porta_turret/ship{ - dir = 4 + dir = 4; + id = "jupiter_grid" }, /turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) +/area/ship/crew) "RI" = ( /obj/structure/cable{ icon_state = "1-8" @@ -2889,10 +2908,11 @@ /area/ship/engineering) "Ss" = ( /obj/machinery/porta_turret/ship{ - dir = 10 + dir = 10; + id = "jupiter_grid" }, /turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) +/area/ship/engineering) "SP" = ( /obj/machinery/power/shieldwallgen/anchored, /obj/structure/cable, @@ -2982,9 +3002,12 @@ /turf/open/floor/plating/airless, /area/ship/external) "VC" = ( -/obj/machinery/porta_turret/ship, +/obj/machinery/porta_turret/ship{ + dir = 2; + id = "jupiter_grid" + }, /turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) +/area/ship/maintenance/central) "VF" = ( /obj/machinery/ai_slipper, /obj/effect/turf_decal/spline/fancy/opaque/black, @@ -4102,7 +4125,7 @@ qc Th Kc by -RE +oX by oJ Ne @@ -4192,7 +4215,7 @@ by by by by -RE +yH by by by diff --git a/_maps/shuttles/pirate/pirate_tortuga.dmm b/_maps/shuttles/pirate/pirate_tortuga.dmm index 4bc354b31b5c..fc08d44db510 100644 --- a/_maps/shuttles/pirate/pirate_tortuga.dmm +++ b/_maps/shuttles/pirate/pirate_tortuga.dmm @@ -753,7 +753,7 @@ /obj/structure/closet/crate{ icon_state = "o2crate" }, -/obj/item/spear/explosive, +/obj/item/melee/spear/explosive, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/airless, /area/ship/maintenance) @@ -2375,19 +2375,19 @@ /area/ship/cargo) "FB" = ( /obj/structure/rack, -/obj/item/kitchen/knife/combat/survival{ +/obj/item/melee/knife/survival{ pixel_y = 8; pixel_x = -9 }, -/obj/item/kitchen/knife/combat/survival{ +/obj/item/melee/knife/survival{ pixel_y = 7; pixel_x = 5 }, -/obj/item/kitchen/knife/combat/survival{ +/obj/item/melee/knife/survival{ pixel_y = 7; pixel_x = -4 }, -/obj/item/kitchen/knife/combat/survival{ +/obj/item/melee/knife/survival{ pixel_y = 7; pixel_x = 1 }, @@ -3403,7 +3403,7 @@ /turf/open/floor/plating, /area/ship/cargo) "RV" = ( -/obj/item/kitchen/knife/plastic{ +/obj/item/melee/knife/plastic{ pixel_x = 8 }, /obj/item/reagent_containers/food/snacks/grown/potato{ diff --git a/_maps/shuttles/roumain/srm_elder.dmm b/_maps/shuttles/roumain/srm_elder.dmm index 5ef138ad19db..0e501c62ed57 100644 --- a/_maps/shuttles/roumain/srm_elder.dmm +++ b/_maps/shuttles/roumain/srm_elder.dmm @@ -1533,7 +1533,7 @@ /obj/item/clothing/shoes/cowboy, /obj/item/clothing/shoes/cowboy/black, /obj/item/clothing/shoes/combat, -/obj/item/kitchen/knife/hunting, +/obj/item/melee/knife/hunting, /obj/item/gps{ pixel_x = -7 }, @@ -2017,7 +2017,7 @@ pixel_x = -2; pixel_y = 2 }, -/obj/item/kitchen/knife/combat, +/obj/item/melee/knife/combat, /obj/effect/turf_decal/spline/fancy/wood{ dir = 5 }, @@ -2462,15 +2462,15 @@ /area/ship/roumain) "Eh" = ( /obj/structure/table/wood, -/obj/item/spear/bonespear{ +/obj/item/melee/spear/bone{ pixel_y = -3; pixel_x = 2 }, -/obj/item/spear/bonespear{ +/obj/item/melee/spear/bone{ pixel_y = 1; pixel_x = 2 }, -/obj/item/spear/bonespear{ +/obj/item/melee/spear/bone{ pixel_y = 5; pixel_x = 2 }, @@ -2643,7 +2643,7 @@ /obj/item/clothing/shoes/cowboy/black, /obj/item/clothing/shoes/cowboy, /obj/item/clothing/shoes/combat, -/obj/item/kitchen/knife/combat/survival, +/obj/item/melee/knife/survival, /obj/item/gps{ pixel_x = -7 }, @@ -2687,7 +2687,7 @@ pixel_x = -2; pixel_y = 2 }, -/obj/item/kitchen/knife/combat, +/obj/item/melee/knife/combat, /obj/effect/turf_decal/spline/fancy/wood{ dir = 5 }, @@ -3656,7 +3656,7 @@ /obj/item/clothing/shoes/cowboy, /obj/item/clothing/shoes/cowboy/black, /obj/item/clothing/shoes/combat, -/obj/item/kitchen/knife/hunting, +/obj/item/melee/knife/hunting, /obj/item/gps{ pixel_x = -7 }, diff --git a/_maps/shuttles/solgov/solgov_chronicle.dmm b/_maps/shuttles/solgov/solgov_chronicle.dmm index 012261bda246..bacabd6cc23c 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, @@ -267,7 +267,7 @@ /obj/item/door_remote/captain, /obj/item/storage/belt/sabre/solgov, /obj/item/clothing/under/solgov/dress, -/obj/item/clothing/suit/armor/vest/bulletproof/solgov/captain, +/obj/item/clothing/suit/armor/vest/solgov/captain, /obj/item/stamp/solgov, /obj/item/clothing/suit/armor/solgov_trenchcoat, /obj/item/spacecash/bundle/loadsamoney, @@ -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, @@ -569,7 +569,7 @@ /obj/item/clothing/suit/hazardvest/solgov, /obj/item/clothing/accessory/armband/cargo, /obj/item/clothing/shoes/workboots, -/obj/item/kitchen/knife/combat/survival, +/obj/item/melee/knife/survival, /obj/item/clothing/gloves/combat, /obj/item/storage/backpack, /obj/machinery/light/small/directional/north, @@ -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{ @@ -955,7 +955,7 @@ /obj/item/clothing/gloves/combat, /obj/item/radio/headset/solgov/alt, /obj/item/storage/backpack, -/obj/item/clothing/suit/armor/vest/bulletproof/solgov, +/obj/item/clothing/suit/armor/vest/solgov, /obj/effect/turf_decal/techfloor{ dir = 1 }, @@ -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,15 +2469,15 @@ 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, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, /turf/open/floor/wood/mahogany, /area/ship/crew) "zh" = ( @@ -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" @@ -2528,14 +2528,14 @@ /obj/item/reagent_containers/food/snacks/grown/cabbage, /obj/item/reagent_containers/food/snacks/grown/cabbage, /obj/item/reagent_containers/food/snacks/grown/cabbage, -/obj/item/reagent_containers/food/condiment/saltshaker, -/obj/item/reagent_containers/food/condiment/saltshaker, -/obj/item/reagent_containers/food/condiment/saltshaker, -/obj/item/reagent_containers/food/condiment/saltshaker, +/obj/item/reagent_containers/condiment/saltshaker, +/obj/item/reagent_containers/condiment/saltshaker, +/obj/item/reagent_containers/condiment/saltshaker, +/obj/item/reagent_containers/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 @@ -3352,12 +3352,6 @@ }, /turf/open/floor/plasteel/white, /area/ship/engineering) -"GH" = ( -/obj/effect/turf_decal/corner/opaque/solgovgold{ - dir = 6 - }, -/turf/template_noop, -/area/template_noop) "GP" = ( /obj/machinery/door/airlock/solgov{ dir = 4; @@ -3396,8 +3390,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 +3448,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 +3473,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 +3661,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 +3768,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 +3817,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 +3998,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 +4022,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 +4065,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" @@ -4105,7 +4099,7 @@ /area/ship/crew/office) "OU" = ( /obj/item/clothing/neck/cloak/overseer, -/obj/item/clothing/suit/armor/vest/bulletproof/solgov/overseer, +/obj/item/clothing/suit/armor/vest/solgov/overseer, /obj/structure/closet/secure_closet/head_of_personnel{ anchored = 1; name = "\proper overseer's locker"; @@ -4131,8 +4125,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 +4144,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 +4172,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 +4350,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 +4400,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 @@ -4433,12 +4427,12 @@ "RX" = ( /obj/structure/table/wood, /obj/item/cutting_board, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /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 +4465,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 +4479,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 +4515,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 +4530,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 +4661,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 +4751,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 +5020,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 +5084,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 +5126,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) @@ -5313,7 +5307,7 @@ pS pS KZ KZ -GH +pS AN Bz Wn diff --git a/_maps/shuttles/solgov/solgov_inkwell.dmm b/_maps/shuttles/solgov/solgov_inkwell.dmm index 86781cc2e251..27427f9bbfa2 100644 --- a/_maps/shuttles/solgov/solgov_inkwell.dmm +++ b/_maps/shuttles/solgov/solgov_inkwell.dmm @@ -1,4 +1,11 @@ //MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/obj/machinery/porta_turret/ship/solgov{ + id = "inkwell_grid"; + dir = 6 + }, +/turf/closed/wall/mineral/titanium, +/area/ship/crew/canteen/kitchen) "af" = ( /obj/effect/turf_decal/techfloor{ dir = 1 @@ -62,6 +69,13 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/wood, /area/ship/crew/library) +"aB" = ( +/obj/machinery/porta_turret/ship/solgov{ + id = "inkwell_grid"; + dir = 5 + }, +/turf/closed/wall/mineral/titanium, +/area/ship/security/armory) "aO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 1 @@ -117,10 +131,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 +166,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 +175,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{ @@ -177,7 +191,7 @@ /obj/item/clothing/gloves/combat, /obj/item/radio/headset/solgov/alt, /obj/item/storage/backpack, -/obj/item/clothing/suit/armor/vest/bulletproof/solgov, +/obj/item/clothing/suit/armor/vest/solgov, /obj/effect/turf_decal/techfloor, /obj/effect/turf_decal/industrial/outline/red, /obj/structure/window/reinforced{ @@ -220,8 +234,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 +270,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 +306,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{ @@ -308,7 +322,7 @@ /obj/item/clothing/gloves/combat, /obj/item/radio/headset/solgov/alt, /obj/item/storage/backpack, -/obj/item/clothing/suit/armor/vest/bulletproof/solgov, +/obj/item/clothing/suit/armor/vest/solgov, /obj/effect/turf_decal/techfloor, /obj/effect/turf_decal/industrial/outline/red, /obj/structure/window/reinforced{ @@ -433,9 +447,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 +496,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 +565,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 +628,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 +678,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, @@ -1045,6 +1059,13 @@ /obj/item/tank/jetpack/oxygen, /turf/open/floor/wood/maple, /area/ship/crew/dorm/dormtwo) +"hk" = ( +/obj/machinery/porta_turret/ship/solgov{ + id = "inkwell_grid"; + dir = 6 + }, +/turf/closed/wall/mineral/titanium, +/area/ship/crew/toilet) "hl" = ( /obj/effect/turf_decal/corner/opaque/solgovblue{ dir = 1 @@ -1059,8 +1080,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, @@ -1088,9 +1109,12 @@ /turf/open/floor/plasteel/mono, /area/ship/cargo) "hE" = ( -/obj/machinery/porta_turret/ship/solgov, +/obj/machinery/porta_turret/ship/solgov{ + id = "inkwell_grid"; + dir = 6 + }, /turf/closed/wall/mineral/titanium, -/area/ship/bridge) +/area/ship/storage) "hF" = ( /obj/effect/turf_decal/siding/wood, /obj/effect/turf_decal/siding/wood/corner{ @@ -1308,11 +1332,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, @@ -1526,9 +1550,9 @@ /obj/structure/closet/cabinet{ name = "armor cabinet" }, -/obj/item/clothing/suit/armor/vest/bulletproof/solgov, -/obj/item/clothing/suit/armor/vest/bulletproof/solgov, -/obj/item/clothing/suit/armor/vest/bulletproof/solgov, +/obj/item/clothing/suit/armor/vest/solgov, +/obj/item/clothing/suit/armor/vest/solgov, +/obj/item/clothing/suit/armor/vest/solgov, /obj/item/clothing/head/solgov/sonnensoldner, /obj/item/clothing/head/solgov/sonnensoldner, /obj/item/clothing/head/solgov/sonnensoldner, @@ -1620,6 +1644,13 @@ }, /turf/open/floor/plasteel/mono/dark, /area/ship/engineering) +"kE" = ( +/obj/machinery/porta_turret/ship/solgov{ + id = "inkwell_grid"; + dir = 9 + }, +/turf/closed/wall/mineral/titanium, +/area/ship/maintenance/starboard) "kK" = ( /obj/machinery/door/window/brigdoor/westleft, /obj/structure/rack, @@ -1717,8 +1748,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, @@ -1729,9 +1760,9 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt/dust, -/obj/machinery/turretid/lethal{ - pixel_y = 0; - pixel_x = -26 +/obj/machinery/turretid/ship{ + pixel_x = -26; + id = "inkwell_grid" }, /turf/open/floor/plasteel/stairs/wood/left{ dir = 1 @@ -1836,8 +1867,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, @@ -1848,10 +1879,10 @@ /area/ship/crew/canteen/kitchen) "mz" = ( /obj/structure/closet/crate, -/obj/item/reagent_containers/food/snacks/store/bread/plain, -/obj/item/reagent_containers/food/snacks/store/bread/plain, -/obj/item/reagent_containers/food/snacks/store/bread/plain, -/obj/item/reagent_containers/food/snacks/store/bread/plain, +/obj/item/food/bread/plain, +/obj/item/food/bread/plain, +/obj/item/food/bread/plain, +/obj/item/food/bread/plain, /obj/item/reagent_containers/food/drinks/waterbottle/large, /obj/item/reagent_containers/food/drinks/waterbottle/large, /obj/item/reagent_containers/food/drinks/waterbottle/large, @@ -1880,8 +1911,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, @@ -2138,6 +2169,13 @@ }, /turf/open/floor/plasteel/mono, /area/ship/cargo) +"nN" = ( +/obj/machinery/porta_turret/ship/solgov{ + id = "inkwell_grid"; + dir = 10 + }, +/turf/closed/wall/mineral/titanium, +/area/ship/maintenance/starboard) "nO" = ( /obj/machinery/computer/cargo/solgov, /turf/open/floor/wood/maple, @@ -2153,8 +2191,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 +2251,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 @@ -2282,6 +2320,7 @@ dir = 4; name = "Fuel Mixer" }, +/obj/item/paper/guides/jobs/engi/combustion_thruster, /turf/open/floor/plasteel/tech, /area/ship/maintenance/starboard) "oH" = ( @@ -2372,8 +2411,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 @@ -2398,8 +2437,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{ @@ -2532,11 +2571,11 @@ /area/ship/crew/canteen) "qE" = ( /obj/structure/table/wood, -/obj/item/kitchen/knife/letter_opener{ - pixel_x = -13; +/obj/item/melee/knife/letter_opener{ 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{ @@ -2547,6 +2586,13 @@ }, /turf/open/floor/plasteel/mono, /area/ship/cargo) +"qF" = ( +/obj/machinery/porta_turret/ship/solgov{ + id = "inkwell_grid"; + dir = 10 + }, +/turf/closed/wall/mineral/titanium, +/area/ship/maintenance/port) "qG" = ( /obj/machinery/light/small/directional/south, /obj/effect/decal/cleanable/dirt/dust, @@ -2555,8 +2601,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) @@ -2592,8 +2638,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, @@ -2639,9 +2685,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, @@ -2665,7 +2711,7 @@ dir = 4 }, /obj/item/clothing/glasses/meson/prescription, -/obj/item/kitchen/knife/letter_opener, +/obj/item/melee/knife/letter_opener, /obj/item/clothing/glasses/meson, /obj/machinery/light/directional/north, /obj/item/storage/bag/ore, @@ -2956,22 +3002,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, @@ -2985,9 +3031,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, @@ -3011,7 +3057,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/obj/item/kitchen/knife/letter_opener, +/obj/item/melee/knife/letter_opener, /obj/item/clothing/glasses/meson, /obj/structure/sign/poster/solgov/random{ pixel_y = 32 @@ -3034,8 +3080,8 @@ dir = 8 }, /obj/machinery/door/poddoor{ - id = "sgi_engine"; - dir = 4 + dir = 4; + id = "sgi_engine" }, /obj/machinery/door/window/westright{ dir = 4 @@ -3084,8 +3130,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) @@ -3296,11 +3342,11 @@ "uS" = ( /obj/structure/table/wood, /obj/item/cutting_board, -/obj/item/kitchen/knife, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/melee/knife/kitchen, +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -17 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -10; pixel_y = 6 }, @@ -3343,14 +3389,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" @@ -3395,8 +3441,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" @@ -3552,8 +3598,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" @@ -3571,6 +3617,13 @@ }, /turf/open/floor/plating, /area/ship/crew/dorm/dormthree) +"wn" = ( +/obj/machinery/porta_turret/ship/solgov{ + id = "inkwell_grid"; + dir = 5 + }, +/turf/closed/wall/mineral/titanium, +/area/ship/crew/toilet) "wo" = ( /obj/item/clothing/gloves/combat, /obj/item/folder/solgov, @@ -3581,11 +3634,11 @@ /obj/item/stamp/solgov, /obj/item/clothing/suit/armor/solgov_trenchcoat, /obj/item/storage/backpack/satchel, -/obj/item/kitchen/knife/letter_opener, +/obj/item/melee/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, @@ -3630,9 +3683,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{ @@ -3646,7 +3699,7 @@ /obj/item/clothing/gloves/combat, /obj/item/radio/headset/solgov/alt, /obj/item/storage/backpack, -/obj/item/clothing/suit/armor/vest/bulletproof/solgov, +/obj/item/clothing/suit/armor/vest/solgov, /obj/effect/turf_decal/techfloor, /obj/effect/turf_decal/industrial/outline/red, /turf/open/floor/plasteel/white, @@ -3886,8 +3939,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 @@ -3897,17 +3950,17 @@ /area/ship/crew/dorm/dormtwo) "yE" = ( /obj/structure/closet/secure_closet/freezer/fridge, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/rice, -/obj/item/reagent_containers/food/condiment/sugar, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/soymilk, -/obj/item/reagent_containers/food/condiment/soymilk, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/rice, +/obj/item/reagent_containers/condiment/sugar, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/reagent_containers/condiment/soymilk, /obj/item/storage/fancy/egg_box, -/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/reagent_containers/condiment/enzyme, /turf/open/floor/wood/walnut, /area/ship/crew/canteen/kitchen) "yG" = ( @@ -3988,8 +4041,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) @@ -4186,8 +4239,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, @@ -4198,8 +4251,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{ @@ -4225,9 +4278,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 @@ -4255,8 +4308,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, @@ -4345,6 +4398,13 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel/white, /area/ship/engineering) +"BN" = ( +/obj/machinery/porta_turret/ship/solgov{ + id = "inkwell_grid"; + dir = 9 + }, +/turf/closed/wall/mineral/titanium, +/area/ship/maintenance/port) "BO" = ( /obj/effect/turf_decal/industrial/warning, /obj/effect/turf_decal/industrial/warning{ @@ -4424,8 +4484,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 @@ -4537,8 +4597,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; @@ -4564,6 +4624,13 @@ }, /turf/open/floor/plasteel/patterned/cargo_one, /area/ship/cargo) +"CY" = ( +/obj/machinery/porta_turret/ship/solgov{ + id = "inkwell_grid"; + dir = 5 + }, +/turf/closed/wall/mineral/titanium, +/area/ship/crew/canteen/kitchen) "Dc" = ( /obj/effect/turf_decal/corner/opaque/solgovblue/full, /obj/structure/cable{ @@ -4587,9 +4654,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) @@ -5200,6 +5267,13 @@ }, /turf/open/floor/plasteel/mono, /area/ship/cargo) +"Hl" = ( +/obj/machinery/porta_turret/ship/solgov{ + id = "inkwell_grid"; + dir = 1 + }, +/turf/closed/wall/mineral/titanium, +/area/ship/bridge) "Ho" = ( /obj/structure/chair/comfy/grey/directional/south, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, @@ -5387,13 +5461,13 @@ }, /obj/structure/rack, /obj/structure/window/reinforced, -/obj/item/kitchen/knife/letter_opener{ +/obj/item/melee/knife/letter_opener{ pixel_x = -2 }, -/obj/item/kitchen/knife/letter_opener{ +/obj/item/melee/knife/letter_opener{ pixel_x = 1 }, -/obj/item/kitchen/knife/letter_opener{ +/obj/item/melee/knife/letter_opener{ pixel_x = 4 }, /obj/effect/turf_decal/corner/opaque/solgovblue{ @@ -5421,9 +5495,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) @@ -5739,8 +5813,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{ @@ -5838,7 +5912,7 @@ /area/ship/cargo) "LB" = ( /obj/item/clothing/head/solgov/captain, -/obj/item/clothing/suit/armor/vest/bulletproof/solgov/captain, +/obj/item/clothing/suit/armor/vest/solgov/captain, /obj/item/clothing/under/solgov/formal/captain, /obj/item/clothing/shoes/laceup, /obj/item/clothing/gloves/combat, @@ -5954,10 +6028,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) @@ -5969,8 +6043,8 @@ dir = 8 }, /obj/machinery/door/poddoor{ - id = "sgi_engine"; - dir = 4 + dir = 4; + id = "sgi_engine" }, /obj/machinery/door/window/westright{ dir = 4 @@ -6203,8 +6277,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) @@ -6221,9 +6295,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) @@ -6238,17 +6312,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) @@ -6395,11 +6469,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 @@ -6439,8 +6513,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, @@ -6601,8 +6675,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, @@ -6674,7 +6748,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, @@ -6862,9 +6936,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, @@ -6885,7 +6959,7 @@ }, /obj/effect/turf_decal/industrial/outline/red, /obj/item/clothing/glasses/meson/prescription, -/obj/item/kitchen/knife/letter_opener, +/obj/item/melee/knife/letter_opener, /obj/item/clothing/glasses/meson, /obj/item/storage/bag/ore, /turf/open/floor/plasteel/white, @@ -7092,13 +7166,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) @@ -7202,8 +7276,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 @@ -7267,8 +7341,8 @@ color = "#D5A66E" }, /obj/structure/railing/corner/wood{ - dir = 4; - color = "#D5A66E" + color = "#D5A66E"; + dir = 4 }, /obj/structure/cable{ icon_state = "1-4" @@ -7292,14 +7366,14 @@ /obj/item/reagent_containers/food/snacks/grown/cabbage, /obj/item/reagent_containers/food/snacks/grown/cabbage, /obj/item/reagent_containers/food/snacks/grown/cabbage, -/obj/item/reagent_containers/food/condiment/saltshaker, -/obj/item/reagent_containers/food/condiment/saltshaker, -/obj/item/reagent_containers/food/condiment/saltshaker, -/obj/item/reagent_containers/food/condiment/saltshaker, +/obj/item/reagent_containers/condiment/saltshaker, +/obj/item/reagent_containers/condiment/saltshaker, +/obj/item/reagent_containers/condiment/saltshaker, +/obj/item/reagent_containers/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, @@ -7374,9 +7448,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, @@ -7475,10 +7549,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{ @@ -7505,8 +7579,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) @@ -7619,11 +7693,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, @@ -7688,8 +7762,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 @@ -7750,8 +7824,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" @@ -7819,10 +7893,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) @@ -7843,12 +7917,12 @@ (1,1,1) = {" iG -hE +BN UJ Hp Hp zI -hE +qF iG iG iG @@ -7866,12 +7940,12 @@ iG iG iG iG -hE +kE ni dv dv vY -hE +nN iG iG "} @@ -8046,7 +8120,7 @@ DH iG "} (7,1,1) = {" -hE +Hl XY DE Cq @@ -8076,7 +8150,7 @@ Np ts qx ts -hE +ts iG "} (8,1,1) = {" @@ -8488,7 +8562,7 @@ sJ iG "} (20,1,1) = {" -hE +aB SI kK LJ @@ -8999,7 +9073,7 @@ iG "} (35,1,1) = {" iG -hE +wn ea pc cH @@ -9027,7 +9101,7 @@ FE nA yE AA -hE +aa iG iG "} @@ -9037,7 +9111,7 @@ iG DS DS DS -hE +hk iG iG iG @@ -9057,7 +9131,7 @@ iG iG iG iG -hE +CY qc qc FE diff --git a/_maps/shuttles/solgov/solgov_paracelsus.dmm b/_maps/shuttles/solgov/solgov_paracelsus.dmm index 1235af6da913..9cfda7a14c0d 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) @@ -731,10 +731,10 @@ /area/ship/hallway/starboard) "hh" = ( /obj/structure/closet/crate, -/obj/item/reagent_containers/food/snacks/store/bread/plain, -/obj/item/reagent_containers/food/snacks/store/bread/plain, -/obj/item/reagent_containers/food/snacks/store/bread/plain, -/obj/item/reagent_containers/food/snacks/store/bread/plain, +/obj/item/food/bread/plain, +/obj/item/food/bread/plain, +/obj/item/food/bread/plain, +/obj/item/food/bread/plain, /obj/item/reagent_containers/food/drinks/waterbottle/large, /obj/item/reagent_containers/food/drinks/waterbottle/large, /obj/item/reagent_containers/food/drinks/waterbottle/large, @@ -803,7 +803,7 @@ /obj/effect/turf_decal/siding/yellow{ dir = 4 }, -/obj/item/kitchen/knife/combat/survival, +/obj/item/melee/knife/survival, /obj/item/clothing/gloves/combat, /obj/item/clothing/suit/hazardvest/solgov, /obj/item/clothing/head/hardhat/solgov, @@ -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{ @@ -1652,7 +1652,7 @@ /obj/effect/turf_decal/siding/yellow{ dir = 4 }, -/obj/item/kitchen/knife/combat/survival, +/obj/item/melee/knife/survival, /obj/item/clothing/gloves/combat, /obj/item/clothing/suit/hazardvest/solgov, /obj/item/clothing/head/hardhat/solgov, @@ -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 @@ -2463,7 +2463,7 @@ /area/ship/bridge) "ye" = ( /obj/item/clothing/neck/cloak/overseer, -/obj/item/clothing/suit/armor/vest/bulletproof/solgov/overseer, +/obj/item/clothing/suit/armor/vest/solgov/overseer, /obj/structure/closet/secure_closet/head_of_personnel{ anchored = 1; name = "\proper overseer's locker"; @@ -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,14 +3535,14 @@ "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{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = 4; pixel_y = 10 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = 10; pixel_y = 10 }, @@ -3560,7 +3560,7 @@ /area/ship/crew/crewtwo) "IX" = ( /obj/item/clothing/head/solgov/captain, -/obj/item/clothing/suit/armor/vest/bulletproof/solgov/captain, +/obj/item/clothing/suit/armor/vest/solgov/captain, /obj/item/clothing/under/solgov/formal/captain, /obj/item/clothing/shoes/laceup, /obj/item/clothing/gloves/combat, @@ -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" @@ -4004,17 +4004,17 @@ /turf/open/floor/carpet/royalblue, /area/ship/crew/office) "ML" = ( -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/rice, -/obj/item/reagent_containers/food/condiment/sugar, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/soymilk, -/obj/item/reagent_containers/food/condiment/soymilk, -/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/rice, +/obj/item/reagent_containers/condiment/sugar, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/reagent_containers/condiment/soymilk, +/obj/item/reagent_containers/condiment/enzyme, /obj/structure/closet/secure_closet/freezer{ anchored = 1; name = "refrigerator" @@ -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{ @@ -4715,7 +4715,7 @@ /obj/effect/decal/cleanable/dirt/dust, /obj/structure/table/wood, /obj/item/cutting_board, -/obj/item/kitchen/knife, +/obj/item/melee/knife/kitchen, /obj/item/kitchen/rollingpin, /turf/open/floor/wood/ebony, /area/ship/crew/canteen) @@ -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/Subshuttle Catalog.txt b/_maps/shuttles/subshuttles/Subshuttle Catalog.txt index 732d43938f30..14a2fff4895e 100644 --- a/_maps/shuttles/subshuttles/Subshuttle Catalog.txt +++ b/_maps/shuttles/subshuttles/Subshuttle Catalog.txt @@ -13,6 +13,11 @@ Size = "12x7" Purpose = "A multi-role dropship used by almost every group faring space. Its ease of manufacture and high mobility makes it ideal for transport." File Path = "_maps\shuttles\subshuttles\indepenent_kunai.dmm" +Name = "Tanto-class Drop Pod" +Size = "6x5" +Purpose = "A combat-ready drop pod designed for quick deployment in hectic battles. Its lack of holofields makes it unsuitable for environments without sufficient atmosphere, unless depressurised beforehand." +File Path = "_maps\shuttles\subshuttles\indepenent_kunai.dmm" + Name = "Haste-class Patient Recovery Ship" Size = "6x4" Purpose = "A small, nimble ship utilized as an ambulance by Inteq forces." diff --git a/_maps/shuttles/subshuttles/frontiersmen_brawler.dmm b/_maps/shuttles/subshuttles/frontiersmen_brawler.dmm index d9c361701213..20fe92d380f7 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/frontiersmen_gut.dmm b/_maps/shuttles/subshuttles/frontiersmen_gut.dmm index 6044e1011891..d27da7c54e5e 100644 --- a/_maps/shuttles/subshuttles/frontiersmen_gut.dmm +++ b/_maps/shuttles/subshuttles/frontiersmen_gut.dmm @@ -61,7 +61,8 @@ /area/ship/storage) "dJ" = ( /obj/machinery/porta_turret/ship/ballistic{ - dir = 5 + dir = 5; + id = "gut_grid" }, /turf/closed/wall/r_wall/syndicate/nodiagonal, /area/ship/storage) @@ -305,6 +306,10 @@ dir = 9 }, /obj/machinery/computer/helm, +/obj/machinery/turretid/ship{ + pixel_y = 24; + id = "gut_grid" + }, /turf/open/floor/plasteel/telecomms_floor, /area/ship/storage) "sk" = ( @@ -397,7 +402,8 @@ /area/ship/storage) "vJ" = ( /obj/machinery/porta_turret/ship/ballistic{ - dir = 9 + dir = 9; + id = "gut_grid" }, /turf/closed/wall/r_wall/syndicate/nodiagonal, /area/ship/storage) @@ -478,7 +484,8 @@ /area/ship/storage) "GQ" = ( /obj/machinery/porta_turret/ship/ballistic{ - dir = 5 + dir = 5; + id = "gut_grid" }, /turf/closed/wall/mineral/plastitanium, /area/ship/storage) @@ -576,7 +583,8 @@ /area/ship/storage) "RY" = ( /obj/machinery/porta_turret/ship/ballistic{ - dir = 9 + dir = 9; + id = "gut_grid" }, /turf/closed/wall/mineral/plastitanium, /area/ship/storage) diff --git a/_maps/shuttles/subshuttles/independent_kunai.dmm b/_maps/shuttles/subshuttles/independent_kunai.dmm index e1975d0a1737..1cd4e42355e5 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/independent_sugarcube.dmm b/_maps/shuttles/subshuttles/independent_sugarcube.dmm index 11a8de916cd6..0504142f55b3 100644 --- a/_maps/shuttles/subshuttles/independent_sugarcube.dmm +++ b/_maps/shuttles/subshuttles/independent_sugarcube.dmm @@ -235,7 +235,7 @@ /obj/effect/decal/cleanable/glass, /obj/item/shard, /obj/item/shard, -/obj/item/kitchen/knife/shiv, +/obj/item/melee/knife/shiv, /turf/open/floor/plating, /area/ship/storage) "B" = ( diff --git a/_maps/shuttles/subshuttles/independent_tanto.dmm b/_maps/shuttles/subshuttles/independent_tanto.dmm new file mode 100644 index 000000000000..e99e605fed4b --- /dev/null +++ b/_maps/shuttles/subshuttles/independent_tanto.dmm @@ -0,0 +1,333 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"e" = ( +/obj/effect/turf_decal/siding/white, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/landmark/ert_shuttle_spawn, +/turf/open/floor/pod, +/area/ship/storage) +"f" = ( +/obj/effect/turf_decal/industrial/traffic{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/traffic{ + dir = 8 + }, +/obj/machinery/door/poddoor{ + dir = 4; + id = "pod_aft" + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/docking_port/mobile{ + dir = 4; + name = "tanto pod"; + port_direction = 2; + preferred_direction = 4 + }, +/turf/open/floor/engine/hull/reinforced/interior, +/area/ship/storage) +"l" = ( +/obj/structure/chair/comfy/shuttle{ + dir = 4; + layer = 3.3 + }, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/traffic, +/obj/machinery/button/door{ + dir = 4; + pixel_y = -6; + pixel_x = -22; + name = "Aft Door"; + id = "pod_aft" + }, +/obj/machinery/button/door{ + dir = 4; + pixel_x = -32; + name = "Window Shutters"; + id = "pod_window" + }, +/obj/machinery/door/window/brigdoor/northleft, +/obj/machinery/button/door{ + dir = 4; + pixel_y = 6; + pixel_x = -22; + name = "Fore Door"; + id = "pod_fore" + }, +/obj/effect/landmark/ert_shuttle_spawn, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/storage) +"n" = ( +/obj/effect/turf_decal/siding/white, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/power/apc/auto_name/directional/north, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/item/radio/intercom/directional/south, +/obj/effect/landmark/ert_shuttle_brief_spawn, +/turf/open/floor/pod, +/area/ship/storage) +"p" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/cable/yellow, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "pod_window" + }, +/obj/machinery/power/terminal{ + dir = 8 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/storage) +"s" = ( +/obj/effect/turf_decal/siding/white, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/pod, +/area/ship/storage) +"w" = ( +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/storage) +"x" = ( +/obj/effect/turf_decal/industrial/traffic{ + dir = 1 + }, +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/cable, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/effect/turf_decal/techfloor, +/obj/machinery/power/port_gen/pacman, +/obj/item/stack/sheet/mineral/plasma/twenty, +/obj/item/stack/sheet/mineral/plasma/five, +/obj/item/stack/sheet/mineral/plasma/five, +/obj/item/wrench, +/obj/machinery/door/window/brigdoor/southleft, +/obj/structure/closet/wall/red/directional/west{ + secure = 1; + locked = 1 + }, +/obj/item/pickaxe/mini, +/obj/item/flashlight/flare{ + pixel_y = 3 + }, +/obj/item/flashlight/flare, +/obj/item/flashlight/flare{ + pixel_y = -3 + }, +/obj/item/storage/toolbox/emergency/shuttle/electric, +/obj/item/tank/internals/emergency_oxygen/double, +/obj/item/clothing/mask/gas, +/obj/item/tank/internals/emergency_oxygen/double, +/obj/item/clothing/mask/gas, +/obj/item/tank/internals/emergency_oxygen/double, +/obj/item/clothing/mask/gas, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/storage) +"z" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/computer/helm{ + dir = 8; + layer = 3.3 + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/techfloor{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/traffic, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/storage) +"C" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/power/smes/shuttle/micro/precharged{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "pod_window" + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/storage) +"E" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "pod_window" + }, +/obj/machinery/power/terminal{ + dir = 8 + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/storage) +"J" = ( +/obj/structure/window/reinforced, +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/obj/effect/turf_decal/industrial/traffic{ + dir = 1 + }, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, +/obj/machinery/light/small/directional/east{ + pixel_y = -6 + }, +/obj/machinery/light_switch{ + dir = 8 + }, +/obj/effect/turf_decal/techfloor, +/obj/machinery/light_switch{ + pixel_x = 22; + pixel_y = 5; + dir = 8 + }, +/obj/effect/landmark/ert_shuttle_spawn, +/turf/open/floor/plasteel/patterned/brushed, +/area/ship/storage) +"K" = ( +/obj/effect/turf_decal/siding/white, +/obj/effect/turf_decal/siding/white{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/pod, +/area/ship/storage) +"L" = ( +/obj/effect/turf_decal/industrial/traffic{ + dir = 4 + }, +/obj/effect/turf_decal/industrial/traffic{ + dir = 8 + }, +/obj/machinery/door/poddoor{ + dir = 4; + id = "pod_fore" + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/engine/hull/reinforced/interior, +/area/ship/storage) +"S" = ( +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/power/smes/shuttle/micro/precharged{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "pod_window" + }, +/obj/structure/cable/yellow{ + icon_state = "0-8" + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/storage) +"Y" = ( +/obj/machinery/power/shuttle/engine/electric{ + dir = 4 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/open/floor/engine/hull/reinforced, +/area/ship/storage) + +(1,1,1) = {" +a +w +f +w +a +"} +(2,1,1) = {" +Y +w +e +w +Y +"} +(3,1,1) = {" +C +l +K +x +S +"} +(4,1,1) = {" +E +z +s +J +p +"} +(5,1,1) = {" +w +w +n +w +w +"} +(6,1,1) = {" +a +w +L +w +a +"} diff --git a/_maps/shuttles/subshuttles/inteq_anvil.dmm b/_maps/shuttles/subshuttles/inteq_anvil.dmm index 5e591774e259..61d7946fb794 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 @@ -189,13 +191,6 @@ "w" = ( /turf/template_noop, /area/template_noop) -"x" = ( -/obj/machinery/porta_turret/ship/weak{ - faction = list("playerInteq","turret"); - dir = 1 - }, -/turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/bridge) "y" = ( /obj/machinery/power/terminal, /obj/structure/cable{ @@ -223,10 +218,11 @@ /obj/effect/turf_decal/corner/opaque/yellow, /obj/structure/chair/comfy/shuttle, /obj/effect/landmark/ert_shuttle_spawn, -/obj/machinery/turretid{ - pixel_y = 25 - }, /obj/machinery/light/directional/east, +/obj/machinery/turretid/ship{ + pixel_y = 24; + id = "anvil_grid" + }, /turf/open/floor/plasteel/dark, /area/ship/bridge) "B" = ( @@ -383,8 +379,9 @@ /turf/open/floor/plasteel/dark, /area/ship/bridge) "T" = ( -/obj/machinery/porta_turret/ship/weak{ - faction = list("playerInteq","turret") +/obj/machinery/porta_turret/ship/inteq/light{ + dir = 8; + id = "anvil_grid" }, /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/bridge) @@ -430,7 +427,7 @@ (1,1,1) = {" w -x +T X u Q diff --git a/_maps/shuttles/subshuttles/inteq_haste.dmm b/_maps/shuttles/subshuttles/inteq_haste.dmm index 25324d952a5e..177dcd41bc5c 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/pgf_nail.dmm b/_maps/shuttles/subshuttles/pgf_nail.dmm index 9a5224dc4573..6b0c12bc7f53 100644 --- a/_maps/shuttles/subshuttles/pgf_nail.dmm +++ b/_maps/shuttles/subshuttles/pgf_nail.dmm @@ -115,6 +115,11 @@ /obj/structure/chair/comfy/shuttle{ dir = 8 }, +/obj/machinery/turretid/ship{ + pixel_y = -30; + pixel_x = -2; + id = "nail_grid" + }, /turf/open/floor/plasteel/telecomms_floor, /area/ship/bridge) "p" = ( @@ -390,8 +395,10 @@ /obj/structure/cable{ icon_state = "0-4" }, -/obj/machinery/porta_turret/ship/weak{ - dir = 8 +/obj/machinery/porta_turret/ship/pgf/light{ + dir = 8; + mode = 1; + id = "nail_grid" }, /turf/open/floor/engine/hull/reinforced/interior, /area/ship/external/dark) diff --git a/_maps/shuttles/subshuttles/syndicate_runner.dmm b/_maps/shuttles/subshuttles/syndicate_runner.dmm index 69430bf09157..d7f64a0d43ee 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_cybersun_kansatsu.dmm b/_maps/shuttles/syndicate/syndicate_cybersun_kansatsu.dmm index ffc2472b5dec..253a82277fdf 100644 --- a/_maps/shuttles/syndicate/syndicate_cybersun_kansatsu.dmm +++ b/_maps/shuttles/syndicate/syndicate_cybersun_kansatsu.dmm @@ -549,7 +549,7 @@ dir = 4 }, /obj/item/storage/box/rxglasses/spyglasskit, -/obj/item/kitchen/knife/letter_opener, +/obj/item/melee/knife/letter_opener, /turf/open/floor/plasteel/dark, /area/ship/crew/office) "nF" = ( @@ -887,13 +887,6 @@ /obj/effect/landmark/observer_start, /turf/open/floor/plasteel/white, /area/ship/hallway/central) -"tV" = ( -/obj/machinery/porta_turret/ship/syndicate/weak{ - dir = 4; - pixel_x = 8 - }, -/turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) "uq" = ( /obj/effect/turf_decal/spline/fancy/opaque/syndiered{ dir = 10 @@ -902,10 +895,11 @@ /area/ship/bridge) "uR" = ( /obj/machinery/porta_turret/ship/syndicate/weak{ - dir = 9 + dir = 9; + id = "kansatsu_grid" }, /turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) +/area/ship/engineering) "vk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -1135,10 +1129,11 @@ /area/ship/cargo) "Ah" = ( /obj/machinery/porta_turret/ship/syndicate/weak{ - dir = 6 + dir = 6; + id = "kansatsu_grid" }, /turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) +/area/ship/engineering) "AM" = ( /obj/effect/turf_decal/trimline/opaque/syndiered/filled/warning, /obj/effect/turf_decal/trimline/opaque/syndiered/filled/warning{ @@ -1194,10 +1189,11 @@ /area/ship/crew/dorm) "CR" = ( /obj/machinery/porta_turret/ship/syndicate/weak{ - dir = 10 + dir = 10; + id = "kansatsu_grid" }, /turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) +/area/ship/engineering) "CU" = ( /obj/machinery/power/smes/shuttle/precharged{ dir = 4 @@ -1313,7 +1309,7 @@ /obj/machinery/porta_turret/ship/syndicate/weak{ dir = 4; pixel_x = 8; - pixel_y = 4 + id = "kansatsu_grid" }, /turf/closed/wall/mineral/plastitanium, /area/ship/bridge) @@ -1417,10 +1413,11 @@ /area/ship/bridge) "KA" = ( /obj/machinery/porta_turret/ship/syndicate/weak{ - dir = 5 + dir = 5; + id = "kansatsu_grid" }, /turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) +/area/ship/engineering) "KP" = ( /obj/structure/closet/wall/directional/north{ name = "emergency rum cabinet" @@ -1457,10 +1454,11 @@ dir = 4; name = "Captain's Chair" }, -/obj/machinery/turretid{ - pixel_y = 28 - }, /obj/effect/turf_decal/trimline/opaque/bar, +/obj/machinery/turretid/ship{ + pixel_y = 26; + id = "kansatsu_grid" + }, /turf/open/floor/plasteel/dark, /area/ship/bridge) "MH" = ( @@ -1846,7 +1844,7 @@ /obj/item/implanter/stealth, /obj/item/modular_computer/laptop/preset/civilian, /obj/item/clothing/mask/chameleon, -/obj/item/kitchen/knife/combat, +/obj/item/melee/knife/combat, /obj/item/reagent_containers/pill/cyanide, /obj/item/reagent_containers/pill/cyanide, /obj/item/reagent_containers/pill/cyanide, @@ -1950,10 +1948,10 @@ layer = 2.91 }, /obj/effect/turf_decal/box, -/obj/item/kitchen/knife/combat/survival, -/obj/item/kitchen/knife/combat/survival, -/obj/item/kitchen/knife/combat/survival, -/obj/item/kitchen/knife/combat/survival, +/obj/item/melee/knife/survival, +/obj/item/melee/knife/survival, +/obj/item/melee/knife/survival, +/obj/item/melee/knife/survival, /obj/item/pickaxe, /obj/item/pickaxe, /obj/item/pickaxe, @@ -2302,7 +2300,7 @@ YQ YQ YQ YQ -tV +GV bO bO dA diff --git a/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm b/_maps/shuttles/syndicate/syndicate_gorlex_hyena.dmm index ae46dc0286f3..66133d79d47a 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) @@ -333,6 +333,13 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer4, /turf/open/floor/mineral/plastitanium/red, /area/ship/security/armory) +"ge" = ( +/obj/machinery/porta_turret/ship/syndicate{ + dir = 2; + id = "hyena_grid" + }, +/turf/closed/wall/mineral/plastitanium/nodiagonal, +/area/ship/crew/dorm) "gg" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt/dust, @@ -880,27 +887,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 +1013,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 +1122,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 +1236,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 +1298,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 +1397,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 +1618,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{ @@ -1671,15 +1626,19 @@ /turf/open/floor/plasteel/tech, /area/ship/hallway/central) "BG" = ( -/obj/machinery/porta_turret/ship/ballistic, +/obj/machinery/porta_turret/ship/syndicate{ + dir = 8; + id = "hyena_grid" + }, /turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/bridge) +/area/ship/storage) "BR" = ( /obj/machinery/porta_turret/ship/syndicate{ - dir = 1 + dir = 1; + id = "hyena_grid" }, /turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/bridge) +/area/ship/maintenance/port) "BZ" = ( /obj/structure/window/reinforced/tinted/frosted, /obj/machinery/suit_storage_unit/inherit{ @@ -1752,8 +1711,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 +1811,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 +1903,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 +1930,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) @@ -2323,9 +2302,12 @@ /turf/open/floor/carpet/red_gold, /area/ship/bridge) "NA" = ( -/obj/machinery/porta_turret/ship/syndicate, +/obj/machinery/porta_turret/ship/syndicate{ + dir = 2; + id = "hyena_grid" + }, /turf/closed/wall/mineral/plastitanium/nodiagonal, -/area/ship/bridge) +/area/ship/maintenance/starboard) "NF" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/cargo) @@ -2491,10 +2473,37 @@ /area/ship/cargo) "Qz" = ( /obj/machinery/porta_turret/ship/syndicate{ - dir = 6 + dir = 6; + id = "hyena_grid" }, /turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) +/area/ship/maintenance/fore) +"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 +2861,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) @@ -2867,8 +2876,9 @@ /turf/open/floor/carpet/red_gold, /area/ship/bridge) "Up" = ( -/obj/machinery/porta_turret/ship/syndicate/heavy{ - dir = 4 +/obj/machinery/porta_turret/ship/syndicate{ + dir = 4; + id = "hyena_grid" }, /turf/closed/wall/mineral/plastitanium, /area/ship/bridge) @@ -2884,10 +2894,11 @@ /area/ship/crew) "UN" = ( /obj/machinery/porta_turret/ship/syndicate{ - dir = 1 + dir = 1; + id = "hyena_grid" }, /turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) +/area/ship/hallway/central) "UX" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/crew) @@ -3038,6 +3049,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 +3164,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 +3185,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 +3404,7 @@ iT XO VX iL -Yc +yH Sm Sa sE @@ -3423,7 +3443,7 @@ KH Ic vG iT -tx +GM dh Oy KX @@ -3444,7 +3464,7 @@ uq La Gw iT -pt +Xv qO xx rF @@ -3578,7 +3598,7 @@ UX GV GV GV -NA +ge nn Zb "} @@ -3598,7 +3618,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 bfbdc4e43e04..c466f5351f9c 100644 --- a/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm +++ b/_maps/shuttles/syndicate/syndicate_gorlex_komodo.dmm @@ -122,6 +122,9 @@ }, /turf/open/floor/plasteel/tech/grid, /area/ship/cargo) +"bC" = ( +/turf/template_noop, +/area/ship/cargo) "bM" = ( /obj/effect/turf_decal/industrial/warning{ dir = 8 @@ -212,10 +215,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, @@ -312,10 +315,11 @@ /area/ship/hallway/central) "ea" = ( /obj/machinery/porta_turret/ship/syndicate/weak{ - dir = 6 + dir = 6; + id = "komodo_grid" }, /turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) +/area/ship/maintenance/starboard) "en" = ( /obj/structure/railing/corner{ dir = 8 @@ -332,8 +336,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 +517,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,11 +964,30 @@ }, /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; id = "syndie_mechbay"; - name = "Mechbay" + name = "Exosuit Bay" }, /obj/machinery/door/firedoor/border_only{ dir = 8 @@ -1082,15 +1105,36 @@ /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) "kG" = ( /obj/machinery/porta_turret/ship/syndicate/weak{ - dir = 1 + dir = 1; + id = "komodo_grid" }, /turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) +/area/ship/hallway/central) "kI" = ( /turf/open/floor/engine, /area/ship/bridge) @@ -1153,30 +1197,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, @@ -1300,6 +1320,13 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/plasteel/tech, /area/ship/engineering) +"mq" = ( +/obj/machinery/porta_turret/ship/syndicate/weak{ + dir = 1; + id = "komodo_grid" + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/cargo) "my" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, @@ -1390,8 +1417,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 +1445,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"; @@ -1666,10 +1693,11 @@ /area/ship/engineering) "pN" = ( /obj/machinery/porta_turret/ship/syndicate/weak{ - dir = 9 + dir = 9; + id = "komodo_grid" }, /turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) +/area/ship/engineering) "qf" = ( /obj/structure/railing{ dir = 8 @@ -1699,8 +1727,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 +1801,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 +1888,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, @@ -1863,10 +1905,11 @@ /area/ship/bridge) "rS" = ( /obj/machinery/porta_turret/ship/syndicate/weak{ - dir = 5 + dir = 5; + id = "komodo_grid" }, /turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) +/area/ship/maintenance/port) "rX" = ( /obj/effect/turf_decal/industrial/warning{ dir = 1 @@ -1994,25 +2037,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 @@ -2024,7 +2048,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4, -/obj/structure/fireaxecabinet{ +/obj/structure/cabinet/fireaxe{ dir = 8; pixel_x = 27 }, @@ -2044,7 +2068,7 @@ /obj/machinery/button/door{ dir = 4; id = "syndie_mechbay"; - name = "mechbay door"; + name = "Exosuit Bay Door"; pixel_x = -24 }, /obj/item/radio/intercom/directional/south, @@ -2099,7 +2123,7 @@ /obj/machinery/button/door{ dir = 8; id = "syndie_mechbay"; - name = "mechbay door"; + name = "Exosuit Bay Door"; pixel_x = 24 }, /obj/effect/turf_decal/techfloor{ @@ -2201,8 +2225,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 @@ -2475,6 +2499,7 @@ /obj/machinery/atmospherics/components/trinary/mixer/flipped{ dir = 1 }, +/obj/item/paper/guides/jobs/engi/combustion_thruster, /turf/open/floor/plasteel/tech, /area/ship/engineering) "wJ" = ( @@ -2724,20 +2749,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, @@ -2871,32 +2882,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, @@ -2943,9 +2928,12 @@ /turf/open/floor/plasteel/tech, /area/ship/bridge) "Bx" = ( -/obj/machinery/porta_turret/ship/syndicate/weak, +/obj/machinery/porta_turret/ship/syndicate/weak{ + dir = 10; + id = "komodo_grid" + }, /turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) +/area/ship/crew/dorm) "BK" = ( /obj/effect/turf_decal/box, /obj/machinery/shower{ @@ -2997,6 +2985,13 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/ship/engineering) +"BU" = ( +/obj/machinery/porta_turret/ship/syndicate/weak{ + dir = 2; + id = "komodo_grid" + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/security/armory) "BY" = ( /obj/effect/turf_decal/industrial/warning/corner{ dir = 1 @@ -3115,26 +3110,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, @@ -3162,6 +3137,13 @@ "Ep" = ( /turf/closed/wall/mineral/plastitanium/nodiagonal, /area/ship/cargo) +"Es" = ( +/obj/machinery/porta_turret/ship/syndicate/weak{ + dir = 9; + id = "komodo_grid" + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/cargo) "EB" = ( /obj/structure/closet/crate{ name = "food crate" @@ -3491,6 +3473,13 @@ /obj/structure/catwalk/over, /turf/open/floor/plating, /area/ship/engineering) +"Hx" = ( +/obj/machinery/porta_turret/ship/syndicate/weak{ + dir = 2; + id = "komodo_grid" + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/hallway/central) "HF" = ( /obj/effect/turf_decal/industrial/warning{ dir = 4 @@ -3596,8 +3585,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{ @@ -3654,8 +3643,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, @@ -3803,6 +3792,39 @@ }, /turf/open/floor/mineral/plastitanium/red, /area/ship/hallway/central) +"KJ" = ( +/obj/machinery/porta_turret/ship/syndicate/weak{ + dir = 10; + id = "komodo_grid" + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/maintenance/starboard) +"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" @@ -3861,8 +3883,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, @@ -3982,8 +4004,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) @@ -4130,8 +4152,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, @@ -4165,8 +4187,8 @@ /obj/structure/table/reinforced, /obj/effect/decal/cleanable/dirt/dust, /obj/machinery/airalarm/directional/north, -/obj/machinery/turretid{ - pixel_y = 2 +/obj/machinery/turretid/ship{ + id = "komodo_grid" }, /turf/open/floor/plasteel/dark, /area/ship/bridge) @@ -4204,10 +4226,11 @@ /area/ship/hallway/central) "OP" = ( /obj/machinery/porta_turret/ship/syndicate/weak{ - dir = 10 + dir = 10; + id = "komodo_grid" }, /turf/closed/wall/mineral/plastitanium, -/area/ship/bridge) +/area/ship/engineering) "OQ" = ( /turf/closed/wall/mineral/plastitanium, /area/ship/maintenance/starboard) @@ -4268,7 +4291,7 @@ /turf/open/floor/plating, /area/ship/engineering) "PA" = ( -/obj/structure/mecha_wreckage/mauler, +/obj/structure/mecha_wreckage/touro, /obj/effect/turf_decal/techfloor{ dir = 8 }, @@ -4583,6 +4606,13 @@ }, /turf/open/floor/plasteel/tech, /area/ship/bridge) +"RX" = ( +/obj/machinery/porta_turret/ship/syndicate/weak{ + dir = 9; + id = "komodo_grid" + }, +/turf/closed/wall/mineral/plastitanium, +/area/ship/maintenance/port) "RZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden/layer2{ dir = 4 @@ -5075,8 +5105,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; @@ -5348,6 +5378,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 @@ -5463,8 +5519,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 @@ -5627,7 +5683,7 @@ wG yb YR nA -lr +KK hY "} (6,1,1) = {" @@ -5732,7 +5788,7 @@ CM "} (11,1,1) = {" CM -CM +bC Ep uJ es @@ -5752,7 +5808,7 @@ Bx "} (12,1,1) = {" CM -kG +Es Ep jA jA @@ -5825,7 +5881,7 @@ kh gE ue vp -sX +jy Ni km tf @@ -5864,7 +5920,7 @@ jv VR gE gE -yH +qP VU MV eY @@ -5892,7 +5948,7 @@ tf "} (19,1,1) = {" CM -kG +mq Ep Ep We @@ -5908,7 +5964,7 @@ gE wT Im gE -Bx +BU "} (20,1,1) = {" CM @@ -5967,7 +6023,7 @@ Dd Dd Dd Dd -Bx +Hx CM "} (23,1,1) = {" @@ -6132,7 +6188,7 @@ CM "} (31,1,1) = {" CM -pN +RX gN nU iL @@ -6148,7 +6204,7 @@ Dd JJ Hc OQ -OP +KJ "} (32,1,1) = {" CM @@ -6182,7 +6238,7 @@ wR ae GS tC -Ek +kw RK tC yd @@ -6262,7 +6318,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 09ad85bc606f..2b12f177f57e 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_panacea.dmm b/_maps/shuttles/syndicate/syndicate_panacea.dmm index 702798048e53..3d26ff6512b5 100644 --- a/_maps/shuttles/syndicate/syndicate_panacea.dmm +++ b/_maps/shuttles/syndicate/syndicate_panacea.dmm @@ -2877,7 +2877,7 @@ pixel_x = 8; pixel_y = -6 }, -/obj/item/clothing/suit/armor/vest/bulletproof/suns/xo{ +/obj/item/clothing/suit/armor/vest/suns/xo{ pixel_y = 7; pixel_x = -5 }, @@ -3100,7 +3100,7 @@ pixel_x = 6; pixel_y = -9 }, -/obj/item/clothing/suit/armor/vest/bulletproof/suns/captain{ +/obj/item/clothing/suit/armor/vest/suns/captain{ pixel_y = -1 }, /obj/item/clothing/under/syndicate/suns/captain{ @@ -4895,7 +4895,7 @@ pixel_x = -1; pixel_y = 4 }, -/obj/item/clothing/suit/armor/vest/bulletproof/suns{ +/obj/item/clothing/suit/armor/vest/suns{ pixel_y = 4; pixel_x = 8 }, @@ -6072,7 +6072,7 @@ /area/ship/external/dark) "JJ" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/store/cake/lemon{ +/obj/item/food/cake/lemon{ pixel_y = 5 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer4{ @@ -6496,15 +6496,15 @@ /area/ship/crew/dorm/dormtwo) "LY" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = -2; pixel_y = 11 }, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_y = 8; pixel_x = -8 }, -/obj/item/reagent_containers/food/condiment/enzyme{ +/obj/item/reagent_containers/condiment/enzyme{ pixel_y = 14; pixel_x = 14 }, @@ -6798,15 +6798,15 @@ /area/ship/crew/office) "Nz" = ( /obj/structure/table, -/obj/item/reagent_containers/food/condiment/mayonnaise{ +/obj/item/reagent_containers/condiment/mayonnaise{ pixel_x = 2; pixel_y = 15 }, -/obj/item/reagent_containers/food/condiment/ketchup{ +/obj/item/reagent_containers/condiment/ketchup{ pixel_x = 11; pixel_y = 10 }, -/obj/item/reagent_containers/food/condiment/hotsauce{ +/obj/item/reagent_containers/condiment/hotsauce{ pixel_y = 16; pixel_x = -8 }, @@ -7344,7 +7344,7 @@ /obj/item/cutting_board{ pixel_y = 3 }, -/obj/item/kitchen/knife/butcher{ +/obj/item/melee/knife/butcher{ pixel_y = 4; pixel_x = 4 }, diff --git a/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm b/_maps/shuttles/syndicate/syndicate_twinkleshine.dmm index 1adef58948fe..29f4bc28922b 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,9 +91,36 @@ }, /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, +/obj/item/melee/knife/kitchen, /obj/item/cutting_board, /obj/item/clothing/under/suit/waiter/syndicate, /obj/item/clothing/suit/hazardvest/donk, @@ -277,11 +263,6 @@ "bQ" = ( /obj/effect/turf_decal/corner/opaque/syndiered/bordercorner, /obj/machinery/light/directional/north, -/obj/machinery/turretid{ - pixel_y = 32; - req_access = null; - req_access_txt = "150" - }, /obj/effect/turf_decal/spline/fancy/opaque/black/corner, /obj/effect/turf_decal/corner/opaque/syndiered/bordercorner{ dir = 4 @@ -898,31 +879,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 +1151,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 +1198,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 @@ -1547,6 +1554,15 @@ /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/plasteel/tech/grid, /area/ship/bridge) +"iX" = ( +/obj/machinery/porta_turret/ship/syndicate/heavy{ + dir = 10; + id = "twink_grid" + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal{ + rad_insulation = 0 + }, +/area/ship/engineering/atmospherics) "iZ" = ( /obj/effect/turf_decal/trimline/opaque/syndiered/filled/line{ dir = 1 @@ -1807,6 +1823,31 @@ /obj/item/ammo_box/a357, /turf/open/floor/carpet/nanoweave/red, /area/ship/crew/dorm/dormtwo) +"kr" = ( +/obj/structure/closet/secure_closet/security{ + populate = 0; + icon_state = "syndicate"; + name = "operative's locker" + }, +/obj/item/clothing/suit/armor/vest/syndie, +/obj/item/clothing/head/helmet/operator, +/obj/item/gun/ballistic/automatic/pistol/ringneck/no_mag, +/obj/item/ammo_box/magazine/m10mm_ringneck, +/obj/item/ammo_box/magazine/m10mm_ringneck, +/obj/item/storage/belt/security/webbing{ + name = "syndicate webbing"; + desc = "Unique and versatile chest rig, can hold syndicate gear." + }, +/obj/item/radio/headset/syndicate/alt{ + keyslot = null + }, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/gloves/color/black, +/obj/machinery/light/directional/west, +/obj/item/flashlight/seclite, +/obj/item/melee/knife/combat, +/turf/open/floor/mineral/plastitanium, +/area/ship/security) "ky" = ( /obj/machinery/portable_atmospherics/canister/toxins, /obj/machinery/light/directional/east, @@ -1823,33 +1864,6 @@ /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/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) "kJ" = ( /obj/item/tank/internals/plasma/full, /obj/structure/cable{ @@ -2079,6 +2093,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/melee/knife/combat, +/turf/open/floor/mineral/plastitanium, +/area/ship/security) "ma" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -2141,12 +2182,13 @@ /area/ship/engineering/engine) "ms" = ( /obj/machinery/porta_turret/ship/syndicate/heavy{ - dir = 9 + dir = 9; + id = "twink_grid" }, /turf/closed/wall/r_wall/syndicate/nodiagonal{ rad_insulation = 0 }, -/area/ship/bridge) +/area/ship/engineering/atmospherics) "mt" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/nitrogen_output{ dir = 8 @@ -2758,31 +2800,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 @@ -2976,18 +2993,18 @@ "qP" = ( /obj/machinery/light/directional/north, /obj/item/kitchen/rollingpin, -/obj/item/reagent_containers/food/condiment/sugar, -/obj/item/reagent_containers/food/condiment/sugar, +/obj/item/reagent_containers/condiment/sugar, +/obj/item/reagent_containers/condiment/sugar, /obj/structure/closet/secure_closet/freezer/kitchen, /obj/item/storage/fancy/egg_box, /obj/item/storage/fancy/egg_box, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/flour, -/obj/item/reagent_containers/food/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, +/obj/item/reagent_containers/condiment/flour, /obj/item/storage/box/ingredients/carnivore, /obj/item/storage/box/ingredients/vegetarian, -/obj/item/reagent_containers/food/condiment/milk, -/obj/item/reagent_containers/food/condiment/milk, +/obj/item/reagent_containers/condiment/milk, +/obj/item/reagent_containers/condiment/milk, /obj/effect/spawner/lootdrop/donkpockets, /obj/effect/spawner/lootdrop/donkpockets, /turf/open/floor/carpet/red, @@ -3286,6 +3303,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/melee/knife/combat, +/turf/open/floor/mineral/plastitanium, +/area/ship/security) "sW" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 8 @@ -3293,6 +3336,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 @@ -3431,7 +3500,7 @@ pixel_y = 4 }, /obj/item/storage/toolbox/electrical, -/obj/structure/fireaxecabinet{ +/obj/structure/cabinet/fireaxe{ pixel_y = -32; dir = 1 }, @@ -3509,6 +3578,25 @@ }, /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 + }, +/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{ @@ -3548,12 +3636,13 @@ /area/ship/engineering/atmospherics) "vd" = ( /obj/machinery/porta_turret/ship/syndicate/heavy{ - dir = 5 + dir = 5; + id = "twink_grid" }, /turf/closed/wall/r_wall/syndicate/nodiagonal{ rad_insulation = 0 }, -/area/ship/bridge) +/area/ship/hallway/port) "vl" = ( /obj/machinery/sleeper/syndie{ dir = 8 @@ -4403,45 +4492,19 @@ }, /turf/open/floor/engine, /area/ship/engineering/engine) -"zS" = ( -/obj/structure/sign/directions/medical{ - dir = 1; - pixel_y = 6 - }, -/obj/structure/sign/directions/command{ - dir = 4; - pixel_y = -4 - }, -/turf/closed/wall/r_wall/syndicate/nodiagonal{ - 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 +"zS" = ( +/obj/structure/sign/directions/medical{ + dir = 1; + pixel_y = 6 }, -/obj/item/pipe_dispenser, -/obj/structure/sign/poster/contraband/gec{ - pixel_y = -32 +/obj/structure/sign/directions/command{ + dir = 4; + pixel_y = -4 }, -/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/closed/wall/r_wall/syndicate/nodiagonal{ + rad_insulation = 0 }, -/turf/open/floor/plasteel/dark, -/area/ship/engineering) +/area/ship/medical) "Af" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/oxygen_output{ dir = 8 @@ -4633,51 +4696,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 +5049,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 +5647,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; @@ -6679,12 +6697,13 @@ /area/ship/engineering/engine) "Mr" = ( /obj/machinery/porta_turret/ship/syndicate/heavy{ - dir = 6 + dir = 6; + id = "twink_grid" }, /turf/closed/wall/r_wall/syndicate/nodiagonal{ rad_insulation = 0 }, -/area/ship/bridge) +/area/ship/hallway/starboard) "Mw" = ( /obj/effect/turf_decal/industrial/caution/red, /obj/effect/decal/cleanable/shreds{ @@ -7097,6 +7116,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/melee/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, @@ -7323,8 +7367,8 @@ /obj/item/clothing/glasses/hud/security/suns, /obj/item/clothing/gloves/tackler/dolphin/suns, /obj/item/clothing/suit/toggle/suns/pkcoat, -/obj/item/clothing/suit/armor/vest/bulletproof/suns/hos, -/obj/item/clothing/suit/armor/vest/bulletproof/suns/ehos, +/obj/item/clothing/suit/armor/vest/suns/hos, +/obj/item/clothing/suit/armor/vest/suns/ehos, /obj/item/clothing/head/welding/suns/hos, /obj/item/clothing/under/syndicate/suns/pkuniform, /obj/item/radio/headset/syndicate/alt{ @@ -7493,33 +7537,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 +7585,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 @@ -7923,6 +7961,15 @@ /obj/machinery/vending/tool, /turf/open/floor/plasteel/dark, /area/ship/engineering/atmospherics) +"TH" = ( +/obj/machinery/porta_turret/ship/syndicate/heavy{ + dir = 9; + id = "twink_grid" + }, +/turf/closed/wall/r_wall/syndicate/nodiagonal{ + rad_insulation = 0 + }, +/area/ship/crew/canteen) "TI" = ( /obj/effect/turf_decal/siding/wood{ dir = 4 @@ -8041,32 +8088,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, @@ -8385,12 +8406,13 @@ /area/ship/crew/cryo) "We" = ( /obj/machinery/porta_turret/ship/syndicate/heavy{ - dir = 10 + dir = 10; + id = "twink_grid" }, /turf/closed/wall/r_wall/syndicate/nodiagonal{ rad_insulation = 0 }, -/area/ship/bridge) +/area/ship/security) "Wj" = ( /obj/effect/turf_decal/corner/opaque/syndiered{ dir = 5 @@ -8563,6 +8585,13 @@ dir = 8 }, /obj/machinery/fax/syndicate, +/obj/machinery/turretid/ship{ + pixel_y = 24; + pixel_x = -5; + id = "twink_grid"; + req_access = null; + req_access_txt = "150" + }, /turf/open/floor/mineral/plastitanium, /area/ship/bridge) "Xf" = ( @@ -8812,6 +8841,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 +8900,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 +8945,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 @@ -9116,7 +9142,7 @@ FR FR LX ae -We +iX mp mp mp @@ -9482,7 +9508,7 @@ ZX Qd bM zH -zZ +hB ZX hN IT @@ -9517,7 +9543,7 @@ ZX fz zK qK -Zc +hh ZX RG BV @@ -9615,7 +9641,7 @@ mp mp "} (17,1,1) = {" -ms +TH xj xj xj @@ -9674,7 +9700,7 @@ xo pc TT PL -Gm +Dj Si Sg PL @@ -9744,7 +9770,7 @@ oX PN ec PL -YO +RF ji wg Uc @@ -9779,14 +9805,14 @@ ea BG tY PL -Rv +aF jx TC on ep sd da -kH +lZ Bj "} (22,1,1) = {" @@ -9814,9 +9840,9 @@ sO AK Pe PL -Bq +uM Fr -Up +sX PL Tt sd @@ -9856,7 +9882,7 @@ PL BL EG da -pN +kr Bj "} (24,1,1) = {" @@ -9884,7 +9910,7 @@ sO QC Cq Bj -aD +YI nt oc Eh @@ -9961,7 +9987,7 @@ Bj Tt sd da -fJ +Pf Bj "} (27,1,1) = {" @@ -10031,7 +10057,7 @@ Pa At sd da -pN +kr Bj "} (29,1,1) = {" @@ -10136,7 +10162,7 @@ GD Nj eN da -Bn +sU Bj "} (32,1,1) = {" diff --git a/_maps/templates/shelter_2.dmm b/_maps/templates/shelter_2.dmm index 9c2571e6f5a5..c12d8dd837da 100644 --- a/_maps/templates/shelter_2.dmm +++ b/_maps/templates/shelter_2.dmm @@ -39,7 +39,7 @@ /area/survivalpod) "i" = ( /obj/structure/toilet/secret{ - secret_type = /obj/item/kitchen/knife/combat/survival + secret_type = /obj/item/melee/knife/survival }, /turf/open/floor/pod, /area/survivalpod) diff --git a/_maps/templates/shelter_3.dmm b/_maps/templates/shelter_3.dmm index dd4f6645a518..570483a06a1d 100644 --- a/_maps/templates/shelter_3.dmm +++ b/_maps/templates/shelter_3.dmm @@ -187,11 +187,11 @@ /area/survivalpod) "F" = ( /obj/structure/table/wood/fancy, -/obj/item/reagent_containers/food/condiment/peppermill{ +/obj/item/reagent_containers/condiment/peppermill{ pixel_x = -4; pixel_y = 12 }, -/obj/item/reagent_containers/food/condiment/saltshaker{ +/obj/item/reagent_containers/condiment/saltshaker{ pixel_x = 4; pixel_y = 4 }, diff --git a/check_regex.yaml b/check_regex.yaml index 441f1e44d743..a56bd83644d3 100644 --- a/check_regex.yaml +++ b/check_regex.yaml @@ -29,16 +29,16 @@ standards: - exactly: [1, "/area text paths", '"/area'] - exactly: [17, "/datum text paths", '"/datum'] - exactly: [4, "/mob text paths", '"/mob'] - - exactly: [43, "/obj text paths", '"/obj'] + - exactly: [36, "/obj text paths", '"/obj'] - exactly: [0, "/turf text paths", '"/turf'] - - exactly: [116, "text2path uses", "text2path"] + - exactly: [115, "text2path uses", "text2path"] - exactly: [18, "world<< uses", 'world[ \t]*<<'] - exactly: [0, "world.log<< uses", 'world.log[ \t]*<<'] - exactly: [ - 266, + 261, "non-bitwise << uses", '(? pre_attack -> target.attackby (item.attack) -> afterattack + ///Ends the attack chain. If sent early might cause posterior attacks not to happen. + #define COMPONENT_CANCEL_ATTACK_CHAIN (1<<0) + ///Skips the specific attack step, continuing for the next one to happen. + #define COMPONENT_SKIP_ATTACK (1<<1) ///from base of atom/attack_ghost(): (mob/dead/observer/ghost) #define COMSIG_ATOM_ATTACK_GHOST "atom_attack_ghost" ///from base of atom/attack_hand(): (mob/user) @@ -324,6 +346,37 @@ #define COMSIG_MOVABLE_LIGHT_OVERLAY_TOGGLE_ON "movable_light_overlay_toggle_on" ///called when the movable's glide size is updated: (new_glide_size) #define COMSIG_MOVABLE_UPDATE_GLIDE_SIZE "movable_glide_size" +/// from base of atom/movable/Process_Spacemove(): (movement_dir, continuous_move) +#define COMSIG_MOVABLE_SPACEMOVE "spacemove" + #define COMSIG_MOVABLE_STOP_SPACEMOVE (1<<0) + ///from datum/component/drift/apply_initial_visuals(): () +#define COMSIG_MOVABLE_DRIFT_VISUAL_ATTEMPT "movable_drift_visual_attempt" + #define DRIFT_VISUAL_FAILED (1<<0) + ///from datum/component/drift/allow_final_movement(): () +#define COMSIG_MOVABLE_DRIFT_BLOCK_INPUT "movable_drift_block_input" + #define DRIFT_ALLOW_INPUT (1<<0) + +///signal sent out by an atom when it checks if it can be pulled, for additional checks +#define COMSIG_ATOM_CAN_BE_PULLED "movable_can_be_pulled" + #define COMSIG_ATOM_CANT_PULL (1 << 0) +///signal sent out by an atom when it is no longer being pulled by something else +#define COMSIG_ATOM_NO_LONGER_PULLED "movable_no_longer_pulled" +///signal sent out by an atom when it is no longer pulling something : (atom/pulling) +#define COMSIG_ATOM_NO_LONGER_PULLING "movable_no_longer_pulling" +///called on /living, when pull is attempted, but before it completes, from base of [/mob/living/start_pulling]: (atom/movable/thing, force) +#define COMSIG_LIVING_TRY_PULL "living_try_pull" + #define COMSIG_LIVING_CANCEL_PULL (1 << 0) +/// Called from /mob/living/update_pull_movespeed +#define COMSIG_LIVING_UPDATING_PULL_MOVESPEED "living_updating_pull_movespeed" +/// Called from /mob/living/PushAM -- Called when this mob is about to push a movable, but before it moves +/// (aotm/movable/being_pushed) +#define COMSIG_LIVING_PUSHING_MOVABLE "living_pushing_movable" +///from base of [/atom/proc/interact]: (mob/user) +#define COMSIG_ATOM_UI_INTERACT "atom_ui_interact" +///called on /living when attempting to pick up an item, from base of /mob/living/put_in_hand_check(): (obj/item/I) +#define COMSIG_LIVING_TRY_PUT_IN_HAND "living_try_put_in_hand" + /// Can't pick up + #define COMPONENT_LIVING_CANT_PUT_IN_HAND (1<<0) // /mob signals @@ -345,6 +398,9 @@ #define COMSIG_MOB_ALTCLICKON "mob_altclickon" #define COMSIG_MOB_CANCEL_CLICKON (1<<0) +///From base of mob/living/MobBump() (mob/living) +#define COMSIG_LIVING_MOB_BUMP "living_mob_bump" + ///from base of obj/allowed(mob/M): (/obj) returns bool, if TRUE the mob has id access to the obj #define COMSIG_MOB_ALLOWED "mob_allowed" ///from base of mob/anti_magic_check(): (mob/user, magic, holy, tinfoil, chargecost, self, protection_sources) @@ -498,84 +554,6 @@ #define COMSIG_HOSTILE_ATTACKINGTARGET "hostile_attackingtarget" #define COMPONENT_HOSTILE_NO_ATTACK 1 -// /obj signals - -///from base of obj/deconstruct(): (disassembled) -#define COMSIG_OBJ_DECONSTRUCT "obj_deconstruct" -///from base of code/game/machinery -#define COMSIG_OBJ_DEFAULT_UNFASTEN_WRENCH "obj_default_unfasten_wrench" -///from base of /turf/proc/levelupdate(). (intact) true to hide and false to unhide -#define COMSIG_OBJ_HIDE "obj_hide" - -// /obj/machinery signals - -///from /obj/machinery/obj_break(damage_flag): (damage_flag) -#define COMSIG_MACHINERY_BROKEN "machinery_broken" -///from base power_change() when power is lost -#define COMSIG_MACHINERY_POWER_LOST "machinery_power_lost" -///from base power_change() when power is restored -#define COMSIG_MACHINERY_POWER_RESTORED "machinery_power_restored" - -// /obj/machinery/power/supermatter_crystal signals -/// from /obj/machinery/power/supermatter_crystal/process_atmos(); when the SM delam reaches the point of sounding alarms -#define COMSIG_SUPERMATTER_DELAM_START_ALARM "sm_delam_start_alarm" -/// from /obj/machinery/power/supermatter_crystal/process_atmos(); when the SM sounds an audible alarm -#define COMSIG_SUPERMATTER_DELAM_ALARM "sm_delam_alarm" - -// /obj/item signals -#define COMSIG_ITEM_ATTACK "item_attack" //from base of obj/item/attack(): (/mob/living/target, /mob/living/user) -#define COMSIG_ITEM_ATTACK_SELF "item_attack_self" //from base of obj/item/attack_self(): (/mob) - #define COMPONENT_NO_INTERACT 1 -#define COMSIG_ITEM_ATTACK_OBJ "item_attack_obj" //from base of obj/item/attack_obj(): (/obj, /mob) - #define COMPONENT_NO_ATTACK_OBJ 1 -#define COMSIG_ITEM_PRE_ATTACK "item_pre_attack" //from base of obj/item/pre_attack(): (atom/target, mob/user, params) - #define COMPONENT_NO_ATTACK 1 -#define COMSIG_ITEM_AFTERATTACK "item_afterattack" //from base of obj/item/afterattack(): (atom/target, mob/user, params) -#define COMSIG_ITEM_ATTACK_QDELETED "item_attack_qdeleted" //from base of obj/item/attack_qdeleted(): (atom/target, mob/user, params) -#define COMSIG_ITEM_EQUIPPED "item_equip" //from base of obj/item/equipped(): (/mob/equipper, slot) -#define COMSIG_ITEM_DROPPED "item_drop" //from base of obj/item/dropped(): (mob/user) -#define COMSIG_ITEM_PICKUP "item_pickup" //from base of obj/item/pickup(): (/mob/taker) -#define COMSIG_ITEM_ATTACK_ZONE "item_attack_zone" //from base of mob/living/carbon/attacked_by(): (mob/living/carbon/target, mob/living/user, hit_zone) -#define COMSIG_ITEM_IMBUE_SOUL "item_imbue_soul" //return a truthy value to prevent ensouling, checked in /obj/effect/proc_holder/spell/targeted/lichdom/cast(): (mob/user) -#define COMSIG_ITEM_MARK_RETRIEVAL "item_mark_retrieval" //called before marking an object for retrieval, checked in /obj/effect/proc_holder/spell/targeted/summonitem/cast() : (mob/user) - #define COMPONENT_BLOCK_MARK_RETRIEVAL 1 -#define COMSIG_ITEM_HIT_REACT "item_hit_react" //from base of obj/item/hit_reaction(): (list/args) -#define COMSIG_ITEM_WEARERCROSSED "wearer_crossed" //called on item when crossed by something (): (/atom/movable, mob/living/crossed) -#define COMSIG_ITEM_MICROWAVE_ACT "microwave_act" //called on item when microwaved (): (obj/machinery/microwave/M) -#define COMSIG_ITEM_SHARPEN_ACT "sharpen_act" //from base of item/sharpener/attackby(): (amount, max) - #define COMPONENT_BLOCK_SHARPEN_APPLIED 1 - #define COMPONENT_BLOCK_SHARPEN_BLOCKED 2 - #define COMPONENT_BLOCK_SHARPEN_ALREADY 4 - #define COMPONENT_BLOCK_SHARPEN_MAXED 8 -#define COMSIG_TOOL_IN_USE "tool_in_use" ///from base of [/obj/item/proc/tool_check_callback]: (mob/living/user) -#define COMSIG_TOOL_START_USE "tool_start_use" ///from base of [/obj/item/proc/tool_start_check]: (mob/living/user) -#define COMSIG_ITEM_DISABLE_EMBED "item_disable_embed" ///from [/obj/item/proc/disableEmbedding]: -#define COMSIG_MINE_TRIGGERED "minegoboom" ///from [/obj/item/mine/proc/trigger_mine]: -///from [/obj/structure/closet/supplypod/proc/endlaunch]: -#define COMSIG_SUPPLYPOD_LANDED "supplypodgoboom" - -// Item mouse siganls -#define COMSIG_ITEM_MOUSE_EXIT "item_mouse_exit" //from base of obj/item/MouseExited(): (location, control, params) -#define COMSIG_ITEM_MOUSE_ENTER "item_mouse_enter" //from base of obj/item/MouseEntered(): (location, control, params) - -///Called when an item is being offered, from [/obj/item/proc/on_offered(mob/living/carbon/offerer)] -#define COMSIG_ITEM_OFFERING "item_offering" - ///Interrupts the offer proc - #define COMPONENT_OFFER_INTERRUPT (1<<0) -///Called when an someone tries accepting an offered item, from [/obj/item/proc/on_offer_taken(mob/living/carbon/offerer, mob/living/carbon/taker)] -#define COMSIG_ITEM_OFFER_TAKEN "item_offer_taken" - ///Interrupts the offer acceptance - #define COMPONENT_OFFER_TAKE_INTERRUPT (1<<0) -/// sent from obj/effect/attackby(): (/obj/effect/hit_effect, /mob/living/attacker, params) -#define COMSIG_ITEM_ATTACK_EFFECT "item_effect_attacked" - -// /obj/item signals for economy -#define COMSIG_ITEM_SOLD "item_sold" //called when an item is sold by the exports subsystem -#define COMSIG_STRUCTURE_UNWRAPPED "structure_unwrapped" //called when a wrapped up structure is opened by hand -#define COMSIG_ITEM_UNWRAPPED "item_unwrapped" //called when a wrapped up item is opened by hand - #define COMSIG_ITEM_SPLIT_VALUE 1 -#define COMSIG_ITEM_SPLIT_PROFIT "item_split_profits" //Called when getting the item's exact ratio for cargo's profit. -#define COMSIG_ITEM_SPLIT_PROFIT_DRY "item_split_profits_dry" //Called when getting the item's exact ratio for cargo's profit, without selling the item. /// Admin helps /// From /datum/admin_help/RemoveActive(). @@ -585,21 +563,6 @@ /// Called when the player replies. From /client/proc/cmd_admin_pm(). #define COMSIG_ADMIN_HELP_REPLIED "admin_help_replied" -// /obj/item/clothing signals -#define COMSIG_SHOES_STEP_ACTION "shoes_step_action" //from base of obj/item/clothing/shoes/proc/step_action(): () -#define COMSIG_SUIT_SPACE_TOGGLE "suit_space_toggle" //from base of /obj/item/clothing/suit/space/proc/toggle_spacesuit(): (obj/item/clothing/suit/space/suit) - -// /obj/item/implant signals -#define COMSIG_IMPLANT_ACTIVATED "implant_activated" //from base of /obj/item/implant/proc/activate(): () -#define COMSIG_IMPLANT_IMPLANTING "implant_implanting" //from base of /obj/item/implant/proc/implant(): (list/args) - #define COMPONENT_STOP_IMPLANTING 1 -#define COMSIG_IMPLANT_OTHER "implant_other" //called on already installed implants when a new one is being added in /obj/item/implant/proc/implant(): (list/args, obj/item/implant/new_implant) - //#define COMPONENT_STOP_IMPLANTING 1 //The name makes sense for both - #define COMPONENT_DELETE_NEW_IMPLANT 2 - #define COMPONENT_DELETE_OLD_IMPLANT 4 -#define COMSIG_IMPLANT_EXISTING_UPLINK "implant_uplink_exists" //called on implants being implanted into someone with an uplink implant: (datum/component/uplink) - //This uses all return values of COMSIG_IMPLANT_OTHER - // /obj/item/pda signals #define COMSIG_PDA_CHANGE_RINGTONE "pda_change_ringtone" //called on pda when the user changes the ringtone: (mob/living/user, new_ringtone) #define COMPONENT_STOP_RINGTONE_CHANGE 1 @@ -615,10 +578,6 @@ // /obj/item/gun signals #define COMSIG_MOB_FIRED_GUN "mob_fired_gun" //called in /obj/item/gun/process_fire (user, target, params, zone_override) -// /obj/item/grenade signals -#define COMSIG_GRENADE_PRIME "grenade_prime" //called in /obj/item/gun/process_fire (user, target, params, zone_override) -#define COMSIG_GRENADE_ARMED "grenade_armed" //called in /obj/item/gun/process_fire (user, target, params, zone_override) - // /obj/projectile signals (sent to the firer) #define COMSIG_PROJECTILE_SELF_ON_HIT "projectile_self_on_hit" // from base of /obj/projectile/proc/on_hit(): (atom/movable/firer, atom/target, Angle) #define COMSIG_PROJECTILE_ON_HIT "projectile_on_hit" // from base of /obj/projectile/proc/on_hit(): (atom/movable/firer, atom/target, Angle) @@ -633,13 +592,6 @@ // /obj/mecha signals #define COMSIG_MECHA_ACTION_ACTIVATE "mecha_action_activate" //sent from mecha action buttons to the mecha they're linked to -// /mob/living/carbon/human signals -#define COMSIG_HUMAN_EARLY_UNARMED_ATTACK "human_early_unarmed_attack" //from mob/living/carbon/human/UnarmedAttack(): (atom/target, proximity) -#define COMSIG_HUMAN_MELEE_UNARMED_ATTACK "human_melee_unarmed_attack" //from mob/living/carbon/human/UnarmedAttack(): (atom/target, proximity) -#define COMSIG_HUMAN_MELEE_UNARMED_ATTACKBY "human_melee_unarmed_attackby" //from mob/living/carbon/human/UnarmedAttack(): (mob/living/carbon/human/attacker) -#define COMSIG_HUMAN_DISARM_HIT "human_disarm_hit" //Hit by successful disarm attack (mob/living/carbon/human/attacker,zone_targeted) -#define COMSIG_JOB_RECEIVED "job_received" //Whenever EquipRanked is called, called after job is set - // /datum/species signals #define COMSIG_SPECIES_GAIN "species_gain" //from datum/species/on_species_gain(): (datum/species/new_species, datum/species/old_species) #define COMSIG_SPECIES_LOSS "species_loss" //from datum/species/on_species_loss(): (datum/species/lost_species) @@ -665,9 +617,6 @@ //Creamed #define COMSIG_COMPONENT_CLEAN_FACE_ACT "clean_face_act" //called when you wash your face at a sink: (num/strength) -//Food -#define COMSIG_FOOD_EATEN "food_eaten" //from base of obj/item/reagent_containers/food/snacks/attack(): (mob/living/eater, mob/feeder) - //Gibs #define COMSIG_GIBS_STREAK "gibs_streak" // from base of /obj/effect/decal/cleanable/blood/gibs/streak(): (list/directions, list/diseases) @@ -724,6 +673,7 @@ #define COMPONENT_TWOHANDED_BLOCK_WIELD 1 #define COMSIG_TWOHANDED_UNWIELD "twohanded_unwield" //from base of datum/component/two_handed/proc/unwield(mob/living/carbon/user): (/mob/user) + // /datum/action signals #define COMSIG_ACTION_TRIGGER "action_trigger" //from base of datum/action/proc/Trigger(): (datum/action) #define COMPONENT_ACTION_BLOCK_TRIGGER 1 @@ -753,10 +703,6 @@ #define COMSIG_BEAM_BEFORE_DRAW "beam_before_draw" #define BEAM_CANCEL_DRAW (1 << 0) -// Aquarium related signals -#define COMSIG_AQUARIUM_SURFACE_CHANGED "aquarium_surface_changed" -#define COMSIG_AQUARIUM_FLUID_CHANGED "aquarium_fluid_changed" - // Fish signals #define COMSIG_FISH_STATUS_CHANGED "fish_status_changed" #define COMSIG_FISH_STIRRED "fish_stirred" @@ -792,3 +738,9 @@ ///sent when the access on an id is changed/updated, ensures wallets get updated once ids generate there access #define COSMIG_ACCESS_UPDATED "acces_updated" + +// Point of interest signals +/// Sent from base of /datum/controller/subsystem/points_of_interest/proc/on_poi_element_added : (atom/new_poi) +#define COMSIG_ADDED_POINT_OF_INTEREST "added_point_of_interest" +/// Sent from base of /datum/controller/subsystem/points_of_interest/proc/on_poi_element_removed : (atom/old_poi) +#define COMSIG_REMOVED_POINT_OF_INTEREST "removed_point_of_interest" diff --git a/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm new file mode 100644 index 000000000000..2428eddf1346 --- /dev/null +++ b/code/__DEFINES/dcs/signals/signals_mob/signals_mob_carbon.dm @@ -0,0 +1,82 @@ +///Called from /mob/living/carbon/help_shake_act, before any hugs have ocurred. (mob/living/helper) +#define COMSIG_CARBON_PRE_HELP_ACT "carbon_pre_help" + /// Stops the rest of help act (hugging, etc) from occuring + #define COMPONENT_BLOCK_HELP_ACT (1<<0) + +///Called from /mob/living/carbon/help_shake_act on the person being helped, after any hugs have ocurred. (mob/living/helper) +#define COMSIG_CARBON_HELP_ACT "carbon_help" +///Called from /mob/living/carbon/help_shake_act on the helper, after any hugs have ocurred. (mob/living/helped) +#define COMSIG_CARBON_HELPED "carbon_helped_someone" + +///Before a carbon mob is shoved, sent to the turf we're trying to shove onto (mob/living/carbon/shover, mob/living/carbon/target) +#define COMSIG_CARBON_DISARM_PRESHOVE "carbon_disarm_preshove" + #define COMSIG_CARBON_ACT_SOLID (1<<0) //Tells disarm code to act as if the mob was shoved into something solid, even we we're not +///When a carbon mob is disarmed, this is sent to the turf we're trying to shove onto (mob/living/carbon/shover, mob/living/carbon/target, shove_blocked) +#define COMSIG_CARBON_DISARM_COLLIDE "carbon_disarm_collision" + #define COMSIG_CARBON_SHOVE_HANDLED (1<<0) + +// /mob/living/carbon physiology signals +#define COMSIG_CARBON_GAIN_WOUND "carbon_gain_wound" //from /datum/wound/proc/apply_wound() (/mob/living/carbon/C, /datum/wound/W, /obj/item/bodypart/L) +#define COMSIG_CARBON_LOSE_WOUND "carbon_lose_wound" //from /datum/wound/proc/remove_wound() (/mob/living/carbon/C, /datum/wound/W, /obj/item/bodypart/L) +///from base of /obj/item/bodypart/proc/attach_limb(): (new_limb, special) allows you to fail limb attachment +#define COMSIG_CARBON_ATTACH_LIMB "carbon_attach_limb" +#define COMSIG_CARBON_REMOVE_LIMB "carbon_remove_limb" //from base of /obj/item/bodypart/proc/drop_limb(lost_limb, dismembered) +#define COMSIG_BODYPART_GAUZED "bodypart_gauzed" // from /obj/item/bodypart/proc/apply_gauze(/obj/item/stack/gauze) +#define COMSIG_BODYPART_GAUZE_DESTROYED "bodypart_degauzed" // from [/obj/item/bodypart/proc/seep_gauze] when it runs out of absorption + +///Called when someone attempts to cuff a carbon +#define COMSIG_CARBON_CUFF_ATTEMPTED "carbon_attempt_cuff" +///Called when a carbon mutates (source = dna, mutation = mutation added) +#define COMSIG_CARBON_GAIN_MUTATION "carbon_gain_mutation" +///Called when a carbon loses a mutation (source = dna, mutation = mutation lose) +#define COMSIG_CARBON_LOSE_MUTATION "carbon_lose_mutation" +///Called when a carbon becomes addicted (source = what addiction datum, addicted_mind = mind of the addicted carbon) +#define COMSIG_CARBON_GAIN_ADDICTION "carbon_gain_addiction" +///Called when a carbon is no longer addicted (source = what addiction datum was lost, addicted_mind = mind of the freed carbon) +#define COMSIG_CARBON_LOSE_ADDICTION "carbon_lose_addiction" +///Called when a carbon gets a brain trauma (source = carbon, trauma = what trauma was added) - this is before on_gain() +#define COMSIG_CARBON_GAIN_TRAUMA "carbon_gain_trauma" +///Called when a carbon loses a brain trauma (source = carbon, trauma = what trauma was removed) +#define COMSIG_CARBON_LOSE_TRAUMA "carbon_lose_trauma" +///Called when a carbon updates their health (source = carbon) +#define COMSIG_CARBON_HEALTH_UPDATE "carbon_health_update" +///Called when a carbon updates their sanity (source = carbon) +#define COMSIG_CARBON_SANITY_UPDATE "carbon_sanity_update" +///Called when a carbon breathes, before the breath has actually occured +#define COMSIG_CARBON_PRE_BREATHE "carbon_pre_breathe" +///Called when a carbon updates their mood +#define COMSIG_CARBON_MOOD_UPDATE "carbon_mood_update" + +// /mob/living/carbon/human signals + +///Hit by successful disarm attack (mob/living/carbon/human/attacker,zone_targeted) +#define COMSIG_HUMAN_DISARM_HIT "human_disarm_hit" +///Whenever EquipRanked is called, called after job is set +#define COMSIG_JOB_RECEIVED "job_received" +///from /mob/living/carbon/human/proc/set_coretemperature(): (oldvalue, newvalue) +#define COMSIG_HUMAN_CORETEMP_CHANGE "human_coretemp_change" +///from /datum/species/handle_fire. Called when the human is set on fire and burning clothes and stuff +#define COMSIG_HUMAN_BURNING "human_burning" +///from mob/living/carbon/human/UnarmedAttack(): (atom/target, proximity, modifiers) +#define COMSIG_HUMAN_EARLY_UNARMED_ATTACK "human_early_unarmed_attack" +///from mob/living/carbon/human/UnarmedAttack(): (atom/target, proximity, modifiers) +#define COMSIG_HUMAN_MELEE_UNARMED_ATTACK "human_melee_unarmed_attack" +//from mob/living/carbon/human/UnarmedAttack(): (mob/living/carbon/human/attacker) +#define COMSIG_HUMAN_MELEE_UNARMED_ATTACKBY "human_melee_unarmed_attackby" +//from /mob/living/carbon/human/proc/check_shields(): (atom/hit_by, damage, attack_text, attack_type, armour_penetration) +#define COMSIG_HUMAN_CHECK_SHIELDS "human_check_shields" + #define SHIELD_BLOCK (1<<0) + +// Mob transformation signals +///Called when a human turns into a monkey, from /mob/living/carbon/proc/finish_monkeyize() +#define COMSIG_HUMAN_MONKEYIZE "human_monkeyize" +///Called when a monkey turns into a human, from /mob/living/carbon/proc/finish_humanize(species) +#define COMSIG_MONKEY_HUMANIZE "monkey_humanize" + +///From mob/living/carbon/human/suicide() +#define COMSIG_HUMAN_SUICIDE_ACT "human_suicide_act" + +/// A mob has just equipped an item. Called on [/mob] from base of [/obj/item/equipped()]: (/obj/item/equipped_item, slot) +#define COMSIG_MOB_EQUIPPED_ITEM "mob_equipped_item" +/// A mob has just unequipped an item. +#define COMSIG_MOB_UNEQUIPPED_ITEM "mob_unequipped_item" diff --git a/code/__DEFINES/dcs/signals/signals_mod.dm b/code/__DEFINES/dcs/signals/signals_mod.dm new file mode 100644 index 000000000000..e5c27a902a65 --- /dev/null +++ b/code/__DEFINES/dcs/signals/signals_mod.dm @@ -0,0 +1,25 @@ +//MODsuit signals +/// Called when a module is selected to be the active one from on_select(obj/item/mod/module/module) +#define COMSIG_MOD_MODULE_SELECTED "mod_module_selected" +/// Called when a MOD activation is called from toggle_activate(mob/user) +#define COMSIG_MOD_ACTIVATE "mod_activate" + /// Cancels the suit's activation + #define MOD_CANCEL_ACTIVATE (1 << 0) +/// Called when a MOD is having modules removed from crowbar_act(mob/user, obj/crowbar) +#define COMSIG_MOD_MODULE_REMOVAL "mod_module_removal" + /// Cancels the removal of modules + #define MOD_CANCEL_REMOVAL (1 << 0) +/// Called when a module attempts to activate, however it does. At the end of checks so you can add some yourself, or work on trigger behavior (mob/user) +#define COMSIG_MODULE_TRIGGERED "mod_module_triggered" + // Cancels activation, with no message. include feedback on your cancel. + #define MOD_ABORT_USE (1<<0) +/// Called when a module activates, after all checks have passed and cooldown started. +#define COMSIG_MODULE_ACTIVATED "mod_module_activated" +/// Called when a module deactivates, after all checks have passed. +#define COMSIG_MODULE_DEACTIVATED "mod_module_deactivated" +/// Called when a module is used, after all checks have passed and cooldown started. +#define COMSIG_MODULE_USED "mod_module_used" +/// Called when the MODsuit wearer is set. +#define COMSIG_MOD_WEARER_SET "mod_wearer_set" +/// Called when the MODsuit wearer is unset. +#define COMSIG_MOD_WEARER_UNSET "mod_wearer_unset" diff --git a/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_clothing.dm b/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_clothing.dm new file mode 100644 index 000000000000..6eb107d55fda --- /dev/null +++ b/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_clothing.dm @@ -0,0 +1,10 @@ +// Format: +// When the signal is called: (signal arguments) +// All signals send the source datum of the signal as the first argument + +// /obj/item/clothing signals + +//from base of obj/item/clothing/shoes/proc/step_action(): () +#define COMSIG_SHOES_STEP_ACTION "shoes_step_action" +//from base of /obj/item/clothing/suit/space/proc/toggle_spacesuit(): (obj/item/clothing/suit/space/suit) +#define COMSIG_SUIT_SPACE_TOGGLE "suit_space_toggle" diff --git a/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_food.dm b/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_food.dm new file mode 100644 index 000000000000..831363f5a523 --- /dev/null +++ b/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_food.dm @@ -0,0 +1,22 @@ +// Eating stuff +/// From datum/component/edible/proc/TakeBite: (mob/living/eater, mob/feeder, bitecount, bitesize) +#define COMSIG_FOOD_EATEN "food_eaten" +/// From base of Component/edible/On_Consume: (mob/living/eater, mob/living/feeder) +#define COMSIG_FOOD_CONSUMED "food_consumed" + +// Deep frying foods +/// An item becomes fried - From /datum/element/fried_item/Attach: (fry_time) +#define COMSIG_ITEM_FRIED "item_fried" + #define COMSIG_FRYING_HANDLED (1<<0) + +// Microwaving foods +///called on item when microwaved (): (obj/machinery/microwave/M) +#define COMSIG_ITEM_MICROWAVE_ACT "microwave_act" + #define COMPONENT_SUCCESFUL_MICROWAVE (1<<0) +///called on item when created through microwaving (): (obj/machinery/microwave/M, cooking_efficiency) +#define COMSIG_ITEM_MICROWAVE_COOKED "microwave_cooked" + +///From /datum/component/edible/on_compost(source, /mob/living/user) +#define COMSIG_EDIBLE_ON_COMPOST "on_compost" + // Used to stop food from being composted. + #define COMPONENT_EDIBLE_BLOCK_COMPOST 1 diff --git a/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_grenade.dm b/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_grenade.dm new file mode 100644 index 000000000000..03767ecbc53f --- /dev/null +++ b/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_grenade.dm @@ -0,0 +1,11 @@ +// Format: +// When the signal is called: (signal arguments) +// All signals send the source datum of the signal as the first argument + +// /obj/item/grenade signals + +//called in /obj/item/gun/process_fire (user, target, params, zone_override) +#define COMSIG_GRENADE_PRIME "grenade_prime" + +//called in /obj/item/gun/process_fire (user, target, params, zone_override) +#define COMSIG_GRENADE_ARMED "grenade_armed" diff --git a/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_hydroponic.dm b/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_hydroponic.dm new file mode 100644 index 000000000000..32fbb4867b2d --- /dev/null +++ b/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_hydroponic.dm @@ -0,0 +1,34 @@ +//Plants / Plant Traits + +///called when a plant with slippery skin is slipped on (mob/victim) +#define COMSIG_PLANT_ON_SLIP "plant_on_slip" +///called when a plant with liquid contents is squashed on (atom/target) +#define COMSIG_PLANT_ON_SQUASH "plant_on_squash" +///called when a plant backfires via the backfire element (mob/victim) +#define COMSIG_PLANT_ON_BACKFIRE "plant_on_backfire" +///called when a seed grows in a tray (obj/machinery/hydroponics) +#define COMSIG_SEED_ON_GROW "plant_on_grow" +///called when a seed is planted in a tray (obj/machinery/hydroponics) +#define COMSIG_SEED_ON_PLANTED "plant_on_plant" + +//Hydro tray +///from base of /obj/machinery/hydroponics/set_seed() : (obj/item/new_seed) +#define COMSIG_HYDROTRAY_SET_SEED "hydrotray_set_seed" +///from base of /obj/machinery/hydroponics/set_self_sustaining() : (new_value) +#define COMSIG_HYDROTRAY_SET_SELFSUSTAINING "hydrotray_set_selfsustaining" +///from base of /obj/machinery/hydroponics/set_weedlevel() : (new_value) +#define COMSIG_HYDROTRAY_SET_WEEDLEVEL "hydrotray_set_weedlevel" +///from base of /obj/machinery/hydroponics/set_pestlevel() : (new_value) +#define COMSIG_HYDROTRAY_SET_PESTLEVEL "hydrotray_set_pestlevel" +///from base of /obj/machinery/hydroponics/set_waterlevel() : (new_value) +#define COMSIG_HYDROTRAY_SET_WATERLEVEL "hydrotray_set_waterlevel" +///from base of /obj/machinery/hydroponics/set_plant_health() : (new_value) +#define COMSIG_HYDROTRAY_SET_PLANT_HEALTH "hydrotray_set_plant_health" +///from base of /obj/machinery/hydroponics/set_toxic() : (new_value) +#define COMSIG_HYDROTRAY_SET_TOXIC "hydrotray_set_toxic" +///from base of /obj/machinery/hydroponics/set_plant_status() : (new_value) +#define COMSIG_HYDROTRAY_SET_PLANT_STATUS "hydrotray_set_plant_status" +///from base of /obj/machinery/hydroponics/update_tray() : (mob/user, product_count) +#define COMSIG_HYDROTRAY_ON_HARVEST "hydrotray_on_harvest" +///from base of /obj/machinery/hydroponics/plantdies() +#define COMSIG_HYDROTRAY_PLANT_DEATH "hydrotray_plant_death" diff --git a/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_implant.dm b/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_implant.dm new file mode 100644 index 000000000000..95123ef8b309 --- /dev/null +++ b/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_implant.dm @@ -0,0 +1,14 @@ +// Format: +// When the signal is called: (signal arguments) +// All signals send the source datum of the signal as the first argument + +// /obj/item/implant signals +#define COMSIG_IMPLANT_ACTIVATED "implant_activated" //from base of /obj/item/implant/proc/activate(): () +#define COMSIG_IMPLANT_IMPLANTING "implant_implanting" //from base of /obj/item/implant/proc/implant(): (list/args) + #define COMPONENT_STOP_IMPLANTING 1 +#define COMSIG_IMPLANT_OTHER "implant_other" //called on already installed implants when a new one is being added in /obj/item/implant/proc/implant(): (list/args, obj/item/implant/new_implant) + //#define COMPONENT_STOP_IMPLANTING 1 //The name makes sense for both + #define COMPONENT_DELETE_NEW_IMPLANT 2 + #define COMPONENT_DELETE_OLD_IMPLANT 4 +#define COMSIG_IMPLANT_EXISTING_UPLINK "implant_uplink_exists" //called on implants being implanted into someone with an uplink implant: (datum/component/uplink) + //This uses all return values of COMSIG_IMPLANT_OTHER diff --git a/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_item.dm b/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_item.dm new file mode 100644 index 000000000000..1a562b84a4a1 --- /dev/null +++ b/code/__DEFINES/dcs/signals/signals_obj/signals_item/signals_item.dm @@ -0,0 +1,68 @@ +// Format: +// When the signal is called: (signal arguments) +// All signals send the source datum of the signal as the first argument + +// /obj/item signals +///from base of obj/item/equipped(): (/mob/equipper, slot) +#define COMSIG_ITEM_EQUIPPED "item_equip" +///from base of obj/item/dropped(): (mob/user) +#define COMSIG_ITEM_DROPPED "item_drop" +///from base of obj/item/pickup(): (/mob/taker) +#define COMSIG_ITEM_PICKUP "item_pickup" + +///from base of mob/living/carbon/attacked_by(): (mob/living/carbon/target, mob/living/user, hit_zone) +#define COMSIG_ITEM_ATTACK_ZONE "item_attack_zone" +///from base of obj/item/hit_reaction(): (list/args) +#define COMSIG_ITEM_HIT_REACT "item_hit_react" //from base of obj/item/hit_reaction(): (list/args) + #define COMPONENT_HIT_REACTION_BLOCK (1<<0) + +#define COMSIG_ITEM_ATTACK "item_attack" //from base of obj/item/attack(): (/mob/living/target, /mob/living/user) +#define COMSIG_ITEM_ATTACK_SELF "item_attack_self" //from base of obj/item/attack_self(): (/mob) + #define COMPONENT_NO_INTERACT 1 +#define COMSIG_ITEM_ATTACK_OBJ "item_attack_obj" //from base of obj/item/attack_obj(): (/obj, /mob) + #define COMPONENT_NO_ATTACK_OBJ 1 +#define COMSIG_ITEM_PRE_ATTACK "item_pre_attack" //from base of obj/item/pre_attack(): (atom/target, mob/user, params) + #define COMPONENT_NO_ATTACK 1 +#define COMSIG_ITEM_AFTERATTACK "item_afterattack" //from base of obj/item/afterattack(): (atom/target, mob/user, params) +#define COMSIG_ITEM_ATTACK_QDELETED "item_attack_qdeleted" //from base of obj/item/attack_qdeleted(): (atom/target, mob/user, params) +#define COMSIG_ITEM_IMBUE_SOUL "item_imbue_soul" //return a truthy value to prevent ensouling, checked in /obj/effect/proc_holder/spell/targeted/lichdom/cast(): (mob/user) +#define COMSIG_ITEM_MARK_RETRIEVAL "item_mark_retrieval" //called before marking an object for retrieval, checked in /obj/effect/proc_holder/spell/targeted/summonitem/cast() : (mob/user) + #define COMPONENT_BLOCK_MARK_RETRIEVAL 1 +#define COMSIG_ITEM_WEARERCROSSED "wearer_crossed" //called on item when crossed by something (): (/atom/movable, mob/living/crossed) + +///from base of item/sharpener/attackby(): (amount, max) +#define COMSIG_ITEM_SHARPEN_ACT "sharpen_act" + #define COMPONENT_BLOCK_SHARPEN_APPLIED 1 + #define COMPONENT_BLOCK_SHARPEN_BLOCKED 2 + #define COMPONENT_BLOCK_SHARPEN_ALREADY 4 + #define COMPONENT_BLOCK_SHARPEN_MAXED 8 + +#define COMSIG_TOOL_IN_USE "tool_in_use" ///from base of [/obj/item/proc/tool_check_callback]: (mob/living/user) +#define COMSIG_TOOL_START_USE "tool_start_use" ///from base of [/obj/item/proc/tool_start_check]: (mob/living/user) +#define COMSIG_ITEM_DISABLE_EMBED "item_disable_embed" ///from [/obj/item/proc/disableEmbedding]: +#define COMSIG_MINE_TRIGGERED "minegoboom" ///from [/obj/item/mine/proc/trigger_mine]: +///from [/obj/structure/closet/supplypod/proc/endlaunch]: +#define COMSIG_SUPPLYPOD_LANDED "supplypodgoboom" + +// Item mouse siganls +#define COMSIG_ITEM_MOUSE_EXIT "item_mouse_exit" //from base of obj/item/MouseExited(): (location, control, params) +#define COMSIG_ITEM_MOUSE_ENTER "item_mouse_enter" //from base of obj/item/MouseEntered(): (location, control, params) + +///Called when an item is being offered, from [/obj/item/proc/on_offered(mob/living/carbon/offerer)] +#define COMSIG_ITEM_OFFERING "item_offering" + ///Interrupts the offer proc + #define COMPONENT_OFFER_INTERRUPT (1<<0) +///Called when an someone tries accepting an offered item, from [/obj/item/proc/on_offer_taken(mob/living/carbon/offerer, mob/living/carbon/taker)] +#define COMSIG_ITEM_OFFER_TAKEN "item_offer_taken" + ///Interrupts the offer acceptance + #define COMPONENT_OFFER_TAKE_INTERRUPT (1<<0) +/// sent from obj/effect/attackby(): (/obj/effect/hit_effect, /mob/living/attacker, params) +#define COMSIG_ITEM_ATTACK_EFFECT "item_effect_attacked" + +// /obj/item signals for economy +#define COMSIG_ITEM_SOLD "item_sold" //called when an item is sold by the exports subsystem +#define COMSIG_STRUCTURE_UNWRAPPED "structure_unwrapped" //called when a wrapped up structure is opened by hand +#define COMSIG_ITEM_UNWRAPPED "item_unwrapped" //called when a wrapped up item is opened by hand + #define COMSIG_ITEM_SPLIT_VALUE 1 +#define COMSIG_ITEM_SPLIT_PROFIT "item_split_profits" //Called when getting the item's exact ratio for cargo's profit. +#define COMSIG_ITEM_SPLIT_PROFIT_DRY "item_split_profits_dry" //Called when getting the item's exact ratio for cargo's profit, without selling the item. diff --git a/code/__DEFINES/dcs/signals/signals_obj/signals_machine/signals_aquarium.dm b/code/__DEFINES/dcs/signals/signals_obj/signals_machine/signals_aquarium.dm new file mode 100644 index 000000000000..d4c88d7c16b2 --- /dev/null +++ b/code/__DEFINES/dcs/signals/signals_obj/signals_machine/signals_aquarium.dm @@ -0,0 +1,7 @@ +// Format: +// When the signal is called: (signal arguments) +// All signals send the source datum of the signal as the first argument + +// Aquarium related signals +#define COMSIG_AQUARIUM_SURFACE_CHANGED "aquarium_surface_changed" +#define COMSIG_AQUARIUM_FLUID_CHANGED "aquarium_fluid_changed" diff --git a/code/__DEFINES/dcs/signals/signals_obj/signals_machine/signals_machinery.dm b/code/__DEFINES/dcs/signals/signals_obj/signals_machine/signals_machinery.dm new file mode 100644 index 000000000000..929a2f844074 --- /dev/null +++ b/code/__DEFINES/dcs/signals/signals_obj/signals_machine/signals_machinery.dm @@ -0,0 +1,12 @@ +// Format: +// When the signal is called: (signal arguments) +// All signals send the source datum of the signal as the first argument + +// /obj/machinery signals + +///from /obj/machinery/obj_break(damage_flag): (damage_flag) +#define COMSIG_MACHINERY_BROKEN "machinery_broken" +///from base power_change() when power is lost +#define COMSIG_MACHINERY_POWER_LOST "machinery_power_lost" +///from base power_change() when power is restored +#define COMSIG_MACHINERY_POWER_RESTORED "machinery_power_restored" diff --git a/code/__DEFINES/dcs/signals/signals_obj/signals_machine/signals_supermatter.dm b/code/__DEFINES/dcs/signals/signals_obj/signals_machine/signals_supermatter.dm new file mode 100644 index 000000000000..b4e8abe2b80b --- /dev/null +++ b/code/__DEFINES/dcs/signals/signals_obj/signals_machine/signals_supermatter.dm @@ -0,0 +1,9 @@ +// Format: +// When the signal is called: (signal arguments) +// All signals send the source datum of the signal as the first argument + +// /obj/machinery/power/supermatter_crystal signals +/// from /obj/machinery/power/supermatter_crystal/process_atmos(); when the SM delam reaches the point of sounding alarms +#define COMSIG_SUPERMATTER_DELAM_START_ALARM "sm_delam_start_alarm" +/// from /obj/machinery/power/supermatter_crystal/process_atmos(); when the SM sounds an audible alarm +#define COMSIG_SUPERMATTER_DELAM_ALARM "sm_delam_alarm" diff --git a/code/__DEFINES/dcs/signals/signals_obj/signals_object.dm b/code/__DEFINES/dcs/signals/signals_obj/signals_object.dm new file mode 100644 index 000000000000..136b73ffb3d2 --- /dev/null +++ b/code/__DEFINES/dcs/signals/signals_obj/signals_object.dm @@ -0,0 +1,14 @@ +// Format: +// When the signal is called: (signal arguments) +// All signals send the source datum of the signal as the first argument + +// /obj signals + +///from base of obj/deconstruct(): (disassembled) +#define COMSIG_OBJ_DECONSTRUCT "obj_deconstruct" +///from base of code/game/machinery +#define COMSIG_OBJ_DEFAULT_UNFASTEN_WRENCH "obj_default_unfasten_wrench" +///from base of /turf/proc/levelupdate(). (intact) true to hide and false to unhide +#define COMSIG_OBJ_HIDE "obj_hide" +/// from base of [/atom/proc/obj_destruction]: (damage_flag) +#define COMSIG_OBJ_DESTRUCTION "obj_destruction" diff --git a/code/__DEFINES/dcs/signals/signals_reagent.dm b/code/__DEFINES/dcs/signals/signals_reagent.dm new file mode 100644 index 000000000000..957bb6083674 --- /dev/null +++ b/code/__DEFINES/dcs/signals/signals_reagent.dm @@ -0,0 +1,59 @@ +// Atom reagent signals. Format: +// When the signal is called: (signal arguments) +// All signals send the source datum of the signal as the first argument + +///from base of atom/expose_reagents(): (/list, /datum/reagents, methods, volume_modifier, show_message) +//#define COMSIG_ATOM_EXPOSE_REAGENTS "atom_expose_reagents" + /// Prevents the atom from being exposed to reagents if returned on [COMSIG_ATOM_EXPOSE_REAGENTS] + //#define COMPONENT_NO_EXPOSE_REAGENTS (1<<0) +///from base of atom/expose_reagents(): (/list, /datum/reagents, methods, volume_modifier, show_message) +//#define COMSIG_ATOM_AFTER_EXPOSE_REAGENTS "atom_after_expose_reagents" +///from base of [/datum/reagent/proc/expose_atom]: (/datum/reagent, reac_volume) +//#define COMSIG_ATOM_EXPOSE_REAGENT "atom_expose_reagent" +///from base of [/datum/reagent/proc/expose_atom]: (/atom, reac_volume) +//#define COMSIG_REAGENT_EXPOSE_ATOM "reagent_expose_atom" +///from base of [/datum/reagent/proc/expose_atom]: (/obj, reac_volume) +//#define COMSIG_REAGENT_EXPOSE_OBJ "reagent_expose_obj" +///from base of [/datum/reagent/proc/expose_atom]: (/mob/living, reac_volume, methods, show_message, touch_protection, /mob/camera/blob) // ovemind arg is only used by blob reagents. +//#define COMSIG_REAGENT_EXPOSE_MOB "reagent_expose_mob" +///from base of [/datum/reagent/proc/expose_atom]: (/turf, reac_volume) +//#define COMSIG_REAGENT_EXPOSE_TURF "reagent_expose_turf" + +///from base of [/datum/materials_controller/proc/InitializeMaterial]: (/datum/material) +//#define COMSIG_MATERIALS_INIT_MAT "SSmaterials_init_mat" + +///from base of [/datum/component/multiple_lives/proc/respawn]: (mob/respawned_mob, gibbed, lives_left) +//#define COMSIG_ON_MULTIPLE_LIVES_RESPAWN "on_multiple_lives_respawn" + +///from base of [/datum/reagents/proc/add_reagent] - Sent before the reagent is added: (reagenttype, amount, reagtemp, data, no_react) +//#define COMSIG_REAGENTS_PRE_ADD_REAGENT "reagents_pre_add_reagent" + /// Prevents the reagent from being added. + //#define COMPONENT_CANCEL_REAGENT_ADD (1<<0) +///from base of [/datum/reagents/proc/add_reagent]: (/datum/reagent, amount, reagtemp, data, no_react) +#define COMSIG_REAGENTS_NEW_REAGENT "reagents_new_reagent" +///from base of [/datum/reagents/proc/add_reagent]: (/datum/reagent, amount, reagtemp, data, no_react) +#define COMSIG_REAGENTS_ADD_REAGENT "reagents_add_reagent" +///from base of [/datum/reagents/proc/del_reagent]: (/datum/reagent) +#define COMSIG_REAGENTS_DEL_REAGENT "reagents_del_reagent" +///from base of [/datum/reagents/proc/remove_reagent]: (/datum/reagent, amount) +#define COMSIG_REAGENTS_REM_REAGENT "reagents_rem_reagent" +///from base of [/datum/reagents/proc/clear_reagents]: () +#define COMSIG_REAGENTS_CLEAR_REAGENTS "reagents_clear_reagents" +///from base of [/datum/reagents/proc/set_temperature]: (new_temp, old_temp) +//#define COMSIG_REAGENTS_TEMP_CHANGE "reagents_temp_change" +///from base of [/datum/reagents/proc/handle_reactions]: (num_reactions) +//#define COMSIG_REAGENTS_REACTED "reagents_reacted" +///from base of [/datum/reagents/proc/process]: (num_reactions) +//#define COMSIG_REAGENTS_REACTION_STEP "reagents_time_step" +///from base of [/atom/proc/expose_reagents]: (/atom, /list, methods, volume_modifier, show_message) +//#define COMSIG_REAGENTS_EXPOSE_ATOM "reagents_expose_atom" +///from base of [/obj/proc/expose_reagents]: (/obj, /list, methods, volume_modifier, show_message) +//#define COMSIG_REAGENTS_EXPOSE_OBJ "reagents_expose_obj" +///from base of [/mob/living/proc/expose_reagents]: (/mob/living, /list, methods, volume_modifier, show_message, touch_protection) +//#define COMSIG_REAGENTS_EXPOSE_MOB "reagents_expose_mob" +///from base of [/turf/proc/expose_reagents]: (/turf, /list, methods, volume_modifier, show_message) +//#define COMSIG_REAGENTS_EXPOSE_TURF "reagents_expose_turf" +/// sent when reagents are transfered from a cup, to something refillable (atom/transfer_to) +//#define COMSIG_REAGENTS_CUP_TRANSFER_TO "reagents_cup_transfer_to" +/// sent when reagents are transfered from some reagent container, to a cup (atom/transfer_from) +//#define COMSIG_REAGENTS_CUP_TRANSFER_FROM "reagents_cup_transfer_from" diff --git a/code/__DEFINES/dcs/signals/signals_ship.dm b/code/__DEFINES/dcs/signals/signals_ship.dm new file mode 100644 index 000000000000..c18a26c5089d --- /dev/null +++ b/code/__DEFINES/dcs/signals/signals_ship.dm @@ -0,0 +1,2 @@ +///Sent when a shuttle finishes loading to allow for any machinery that requires a late connection to fire that connection +#define COMSIG_SHIP_DONE_CONNECTING "late_connect" diff --git a/code/__DEFINES/dcs/signals/signals_storage.dm b/code/__DEFINES/dcs/signals/signals_storage.dm new file mode 100644 index 000000000000..456ac3c0781a --- /dev/null +++ b/code/__DEFINES/dcs/signals/signals_storage.dm @@ -0,0 +1,4 @@ +/// Sent when /datum/storage/dump_content_at(): (obj/item/storage_source, mob/user) +#define COMSIG_STORAGE_DUMP_CONTENT "storage_dump_contents" + /// Return to stop the standard dump behavior. + #define STORAGE_DUMP_HANDLED (1<<0) diff --git a/code/__DEFINES/factions.dm b/code/__DEFINES/factions.dm index 5eb0209dda4c..596060d6610e 100644 --- a/code/__DEFINES/factions.dm +++ b/code/__DEFINES/factions.dm @@ -8,7 +8,37 @@ #define FACTION_PLAYER_NANOTRASEN "playerNanotrasen" #define FACTION_PLAYER_FRONTIERSMEN "playerFrontiersmen" #define FACTION_PLAYER_MINUTEMAN "playerMinuteman" -#define FACTION_PLAYER_SOLGOV "playerSolgov" +#define FACTION_PLAYER_SOLCON "playerSolcon" #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/flags.dm b/code/__DEFINES/flags.dm index c27a78ffd2de..77e608ac922e 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -46,6 +46,8 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define SHOW_BEHIND_LARGE_ICONS_1 (1<<12) /// Should we use the initial icon for display? Mostly used by overlay only objects #define HTML_USE_INITAL_ICON_1 (1<<20) +// Whether or not this atom is storing contents for a disassociated storage object +#define HAS_DISASSOCIATED_STORAGE_1 (1<<24) // Update flags for [/atom/proc/update_appearance] /// Update the atom's name @@ -83,8 +85,6 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 ////////////////Area flags\\\\\\\\\\\\\\ /// If it's a valid territory for cult summoning or the CRAB-17 phone to spawn #define VALID_TERRITORY (1<<0) -/// If blobs can spawn there and if it counts towards their score. -#define BLOBS_ALLOWED (1<<1) /// If mining tunnel generation is allowed in this area #define CAVES_ALLOWED (1<<2) /// If flora are allowed to spawn in this area randomly through tunnel generation @@ -108,7 +108,6 @@ GLOBAL_LIST_INIT(bitflags, list(1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 204 #define PASSTABLE (1<<0) #define PASSGLASS (1<<1) #define PASSGRILLE (1<<2) -#define PASSBLOB (1<<3) #define PASSMOB (1<<4) #define PASSCLOSEDTURF (1<<5) /// Let thrown things past us. **ONLY MEANINGFUL ON pass_flags_self!** diff --git a/code/__DEFINES/fonts.dm b/code/__DEFINES/fonts.dm index 32a08f38861b..8ffecbbe20d5 100644 --- a/code/__DEFINES/fonts.dm +++ b/code/__DEFINES/fonts.dm @@ -19,3 +19,5 @@ #define SHARE "Share Tech Mono" GLOBAL_LIST_INIT(pda_styles, sortList(list(MONO, VT, ORBITRON, SHARE))) + +#define EMOJI_SET 'icons/emoji.dmi' diff --git a/code/__DEFINES/food.dm b/code/__DEFINES/food.dm index f2b6a8fd196d..a12ceca284dd 100644 --- a/code/__DEFINES/food.dm +++ b/code/__DEFINES/food.dm @@ -49,6 +49,16 @@ #define DRINK_FANTASTIC 4 #define FOOD_AMAZING 5 +/// Food is "in a container", not in a code sense, but in a literal sense (canned foods) #define FOOD_IN_CONTAINER (1<<0) +/// Finger food can be eaten while walking / running around +#define FOOD_FINGER_FOOD (1<<1) #define STOP_SERVING_BREAKFAST (15 MINUTES) + +///Amount of reagents you start with on crafted food excluding the used parts +#define CRAFTED_FOOD_BASE_REAGENT_MODIFIER 0.7 +///Modifier of reagents you get when crafting food from the parts used +#define CRAFTED_FOOD_INGREDIENT_REAGENT_MODIFIER 0.5 + +#define IS_EDIBLE(O) (O.GetComponent(/datum/component/edible)) diff --git a/code/__DEFINES/generators.dm b/code/__DEFINES/generators.dm new file mode 100644 index 000000000000..e9d373c9a65d --- /dev/null +++ b/code/__DEFINES/generators.dm @@ -0,0 +1,15 @@ +//generator types +#define GEN_NUM "num" +#define GEN_VECTOR "vector" +#define GEN_BOX "box" +#define GEN_COLOR "color" +#define GEN_CIRCLE "circle" +#define GEN_SPHERE "sphere" +#define GEN_SQUARE "square" +#define GEN_CUBE "cube" + +///particle editor var modifiers +#define P_DATA_GENERATOR "generator" +#define P_DATA_ICON_ADD "icon_add" +#define P_DATA_ICON_REMOVE "icon_remove" +#define P_DATA_ICON_WEIGHT "icon_edit" diff --git a/code/__DEFINES/guns.dm b/code/__DEFINES/guns.dm index 17cbab5683d8..d1cea0d28de4 100644 --- a/code/__DEFINES/guns.dm +++ b/code/__DEFINES/guns.dm @@ -24,6 +24,9 @@ ///Gun has a bolt, it locks back when empty. It can be released to chamber a round if a magazine is in. /// Example: Pistols with a slide lock, some SMGs #define BOLT_TYPE_LOCKING 4 +///Gun has an HK-style locking charging handle, so you can slap it. Only use this for flavor, otherwise modern-style automatics should use BOLT_TYPE_LOCKING. +/// Example: everything made by lanchester +#define BOLT_TYPE_CLIP 5 //Sawn off nerfs ///accuracy penalty of sawn off guns #define SAWN_OFF_ACC_PENALTY 25 @@ -61,10 +64,16 @@ #define MANUFACTURER_BRAZIL "a green flag with a blue circle and a yellow diamond around it" #define MANUFACTURER_INTEQ "an orange crest with the letters 'IRMG'" #define MANUFACTURER_MINUTEMAN "the Lanchester City Firearms Plant logo" +#define MANUFACTURER_MINUTEMAN_LASER "the Clover Photonics logo" #define MANUFACTURER_DONKCO "the Donk! Co. logo" #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 5 +#define GUN_NO_SAFETY_MALFUNCTION_CHANCE_MEDIUM 10 +#define GUN_NO_SAFETY_MALFUNCTION_CHANCE_HIGH 15 + ///////////////// // ATTACHMENTS // ///////////////// diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index 64aa6aa52627..5b99546fed97 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -46,6 +46,7 @@ #define HIDEFACIALHAIR (1<<9) #define HIDENECK (1<<10) #define HIDEHORNS (1<<11) // Used for hiding Sarathi horns. +#define HIDESNOUT (1<<11) //bitflags for clothing coverage - also used for limbs #define HEAD (1<<0) @@ -149,7 +150,7 @@ GLOBAL_LIST_INIT(security_vest_allowed, typecacheof(list( /obj/item/gun/energy, /obj/item/gun/grenadelauncher, /obj/item/flamethrower, - /obj/item/kitchen/knife/combat, + /obj/item/melee/knife/combat, /obj/item/melee/baton, /obj/item/melee/classic_baton/telescopic, /obj/item/reagent_containers/spray/pepper, diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 241136c297b9..7120afd8cf45 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -8,6 +8,8 @@ #define isweakref(D) (istype(D, /datum/weakref)) +#define isgenerator(A) (istype(A, /generator)) + //Turfs //#define isturf(A) (istype(A, /turf)) This is actually a byond built-in. Added here for completeness sake. @@ -98,8 +100,6 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list( #define isalienqueen(A) (istype(A, /mob/living/carbon/alien/humanoid/royal/queen)) -#define istruedevil(A) (istype(A, /mob/living/carbon/true_devil)) - //Silicon mobs #define issilicon(A) (istype(A, /mob/living/silicon)) @@ -136,8 +136,6 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list( #define ishostile(A) (istype(A, /mob/living/simple_animal/hostile)) -#define isswarmer(A) (istype(A, /mob/living/simple_animal/hostile/swarmer)) - #define isguardian(A) (istype(A, /mob/living/simple_animal/hostile/guardian)) #define isconstruct(A) (istype(A, /mob/living/simple_animal/hostile/construct)) @@ -155,8 +153,6 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list( #define isnewplayer(A) (istype(A, /mob/dead/new_player)) -#define isovermind(A) (istype(A, /mob/camera/blob)) - #define iscameramob(A) (istype(A, /mob/camera)) #define isaicamera(A) (istype(A, /mob/camera/aiEye)) @@ -166,6 +162,8 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list( #define isitem(A) (istype(A, /obj/item)) +#define isstack(A) (istype(A, /obj/item/stack)) + #define isgrenade(A) (istype(A, /obj/item/grenade)) #define islandmine(A) (istype(A, /obj/item/mine)) @@ -227,8 +225,6 @@ GLOBAL_LIST_INIT(glass_sheet_types, typecacheof(list( #define iseffect(O) (istype(O, /obj/effect)) -#define isblobmonster(O) (istype(O, /mob/living/simple_animal/hostile/blob)) - #define isshuttleturf(T) (length(T.baseturfs) && (/turf/baseturf_skipover/shuttle in T.baseturfs)) #define isProbablyWallMounted(O) (O.pixel_x > 20 || O.pixel_x < -20 || O.pixel_y > 20 || O.pixel_y < -20) diff --git a/code/__DEFINES/language.dm b/code/__DEFINES/language.dm index 021cb202004d..00e0fb557833 100644 --- a/code/__DEFINES/language.dm +++ b/code/__DEFINES/language.dm @@ -12,7 +12,6 @@ #define LANGUAGE_APHASIA "aphasia" #define LANGUAGE_CULTIST "cultist" #define LANGUAGE_CURATOR "curator" -#define LANGUAGE_DEVIL "devil" #define LANGUAGE_GLAND "gland" #define LANGUAGE_HAT "hat" #define LANGUAGE_HIGH "high" diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm index d021558901f4..bd9b0f0063bb 100644 --- a/code/__DEFINES/layers.dm +++ b/code/__DEFINES/layers.dm @@ -1,5 +1,6 @@ //Defines for atom layers and planes //KEEP THESE IN A NICE ACSCENDING ORDER, PLEASE +#define LOWEST_EVER_PLANE -100 #define CLICKCATCHER_PLANE -99 @@ -21,6 +22,20 @@ #define BLACKNESS_PLANE 0 //To keep from conflicts with SEE_BLACKNESS internals #define BLACKNESS_PLANE_RENDER_TARGET "BLACKNESS_PLANE" +#define ABOVE_GAME_PLANE 1 + +//-------------------- Rendering --------------------- +#define RENDER_PLANE_GAME 100 +#define RENDER_PLANE_NON_GAME 101 +#define RENDER_PLANE_MASTER 102 + +// Lummox I swear to god I will find you +// NOTE! You can only ever have planes greater then -10000, if you add too many with large offsets you will brick multiz +// Same can be said for large multiz maps. Tread carefully mappers +#define HIGHEST_EVER_PLANE RENDER_PLANE_MASTER +/// The range unique planes can be in +#define PLANE_RANGE (HIGHEST_EVER_PLANE - LOWEST_EVER_PLANE) + #define SPACE_LAYER 1.8 //#define TURF_LAYER 2 //For easy recordkeeping; this is a byond define #define MID_TURF_LAYER 2.02 diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm index a89965da7bec..02e6853338d7 100644 --- a/code/__DEFINES/machines.dm +++ b/code/__DEFINES/machines.dm @@ -123,9 +123,16 @@ #define MACHINE_ELECTRIFIED_PERMANENT -1 #define MACHINE_DEFAULT_ELECTRIFY_TIME 30 -//these flags are used to tell the DNA modifier if a plant gene cannot be extracted or modified. +/// -- Flags for genes -- +/// Plant genes that can be removed via gene shears. #define PLANT_GENE_REMOVABLE (1<<0) -#define PLANT_GENE_EXTRACTABLE (1<<1) +/// Plant genes that can be mutated randomly in strange seeds / due to high instability. +#define PLANT_GENE_MUTATABLE (1<<1) +#define PLANT_GENE_EXTRACTABLE (1<<2) + +/// -- Flags for traits. -- +/// Caps the plant's yield at 5 instead of 10. +#define TRAIT_HALVES_YIELD (1<<0) //used to determine what rotation mode the ore redemption machine is in #define ORM_BOTH 0 diff --git a/code/__DEFINES/maths.dm b/code/__DEFINES/maths.dm index 719f06f2a812..a442ddb464b8 100644 --- a/code/__DEFINES/maths.dm +++ b/code/__DEFINES/maths.dm @@ -290,3 +290,11 @@ /// Like SPT_PROB_RATE but easier to use, simply put `if(SPT_PROB(10, 5))` #define SPT_PROB(prob_per_second_percent, seconds_per_tick) (prob(100*SPT_PROB_RATE((prob_per_second_percent)/100, (seconds_per_tick)))) + +/// Converts a probability/second chance to probability/delta_time chance +/// For example, if you want an event to happen with a 10% per second chance, but your proc only runs every 5 seconds, do `if(prob(100*DT_PROB_RATE(0.1, 5)))` +#define DT_PROB_RATE(prob_per_second, delta_time) (1 - (1 - (prob_per_second)) ** (delta_time)) + +/// Like DT_PROB_RATE but easier to use, simply put `if(DT_PROB(10, 5))` +#define DT_PROB(prob_per_second_percent, delta_time) (prob(100*DT_PROB_RATE((prob_per_second_percent)/100, (delta_time)))) +// ) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index ddd395d3879a..c6fe0591ee27 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -28,7 +28,6 @@ #define LEGCUFF_LAYER 5 #define HANDS_LAYER 4 #define BODY_FRONT_LAYER 3 -#define HALO_LAYER 2 //blood cult ascended halo, because there's currently no better solution for adding/removing #define FIRE_LAYER 1 //If you're on fire #define TOTAL_LAYERS 31 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_; @@ -277,12 +276,6 @@ GLOBAL_LIST_INIT(ghost_others_options, list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE #define NUKE_SYNDICATE_BASE 3 #define STATION_DESTROYED_NUKE 4 #define STATION_EVACUATED 5 -#define BLOB_WIN 8 -#define BLOB_NUKE 9 -#define BLOB_DESTROYED 10 -#define CULT_ESCAPE 11 -#define CULT_FAILURE 12 -#define CULT_SUMMON 13 #define NUKE_MISS 14 #define OPERATIVES_KILLED 15 #define OPERATIVE_SKIRMISH 16 @@ -381,7 +374,6 @@ GLOBAL_LIST_INIT(ghost_others_options, list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE #define TELEPORT_CHANNEL_QUANTUM "quantum" //Quantum-based teleportation, requires both sender and receiver, but is free from normal disruption #define TELEPORT_CHANNEL_WORMHOLE "wormhole" //Wormhole teleportation, is not disrupted by bluespace fluctuations but tends to be very random or unsafe #define TELEPORT_CHANNEL_MAGIC "magic" //Magic teleportation, does whatever it wants (unless there's antimagic) -#define TELEPORT_CHANNEL_CULT "cult" //Cult teleportation, does whatever it wants (unless there's holiness) #define TELEPORT_CHANNEL_FREE "free" //Anything else //Run the world with this parameter to enable a single run though of the game setup and tear down process with unit tests in between diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index f5c382c15c29..7bcca355f34a 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -76,7 +76,6 @@ #define MONKEY_BODYPART "monkey" #define ALIEN_BODYPART "alien" #define LARVA_BODYPART "larva" -#define DEVIL_BODYPART "devil" //Defines for Species IDs #define SPECIES_ABDUCTOR "abductor" @@ -416,9 +415,6 @@ #define SILENCE_RANGED_MESSAGE (1<<0) -///Swarmer flags -#define SWARMER_LIGHT_ON (1<<0) - /// Returns whether or not the given mob can succumb #define CAN_SUCCUMB(target) (HAS_TRAIT(target, TRAIT_CRITICAL_CONDITION) && !HAS_TRAIT(target, TRAIT_NODEATH)) diff --git a/code/__DEFINES/mod.dm b/code/__DEFINES/mod.dm new file mode 100644 index 000000000000..29a450eceb91 --- /dev/null +++ b/code/__DEFINES/mod.dm @@ -0,0 +1,40 @@ +/// Default value for the max_complexity var on MODsuits +#define DEFAULT_MAX_COMPLEXITY 15 + +/// Default cell drain per process on MODsuits +#define DEFAULT_CHARGE_DRAIN 0.09 + +/// Default time for a part to seal +#define MOD_ACTIVATION_STEP_TIME (2 SECONDS) + +/// Passive module, just acts when put in naturally. +#define MODULE_PASSIVE 0 +/// Usable module, does something when you press a button. +#define MODULE_USABLE 1 +/// Toggle module, you turn it on/off and it does stuff. +#define MODULE_TOGGLE 2 +/// Actively usable module, you may only have one selected at a time. +#define MODULE_ACTIVE 3 + +//Defines used by the theme for clothing flags and similar +#define CONTROL_LAYER "control_layer" +#define HELMET_FLAGS "helmet_flags" +#define CHESTPLATE_FLAGS "chestplate_flags" +#define GAUNTLETS_FLAGS "gauntlets_flags" +#define BOOTS_FLAGS "boots_flags" + +#define UNSEALED_LAYER "unsealed_layer" +#define UNSEALED_CLOTHING "unsealed_clothing" +#define SEALED_CLOTHING "sealed_clothing" +#define UNSEALED_INVISIBILITY "unsealed_invisibility" +#define SEALED_INVISIBILITY "sealed_invisibility" +#define UNSEALED_COVER "unsealed_cover" +#define SEALED_COVER "sealed_cover" +#define CAN_OVERSLOT "can_overslot" + +//Defines used to override MOD clothing's icon and worn icon files in the skin. +#define MOD_ICON_OVERRIDE "mod_icon_override" +#define MOD_WORN_ICON_OVERRIDE "mod_worn_icon_override" + +/// Global list of all /datum/mod_theme +GLOBAL_LIST_INIT(mod_themes, setup_mod_themes()) diff --git a/code/__DEFINES/obj_flags.dm b/code/__DEFINES/obj_flags.dm index d9ca63008c1d..387f87c90acc 100644 --- a/code/__DEFINES/obj_flags.dm +++ b/code/__DEFINES/obj_flags.dm @@ -52,6 +52,7 @@ #define ANTI_TINFOIL_MANEUVER (1<<12) //Hats with negative effects when worn (i.e the tinfoil hat). #define DANGEROUS_OBJECT (1<<13) //Clothes that cause a larger notification when placed on a person. #define FAST_EMBARK (1<<14) //Clothes that speed up mech and pod boarding. +#define SEALS_EYES (1<<15) //Goggles and helmets that seal eyes from the enviroment /// Flags for the organ_flags var on /obj/item/organ #define ORGAN_SYNTHETIC (1<<0) //Synthetic organs, or cybernetic organs. Reacts to EMPs and don't deteriorate or heal diff --git a/code/__DEFINES/particles.dm b/code/__DEFINES/particles.dm new file mode 100644 index 000000000000..5657566a63bb --- /dev/null +++ b/code/__DEFINES/particles.dm @@ -0,0 +1,5 @@ +// /obj/effect/abstract/particle_holder/var/particle_flags +// Flags that effect how a particle holder displays something + +/// If we're inside something inside a mob, display off that mob too +#define PARTICLE_ATTACH_MOB (1<<0) diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index c65f26a89fd3..4f225d304313 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -21,7 +21,6 @@ #define DEADMIN_POSITION_SECURITY (1<<18) #define DEADMIN_POSITION_SILICON (1<<19) #define SOUND_ENDOFROUND (1<<20) -#define ADMIN_IGNORE_CULT_GHOST (1<<21) #define SPLIT_ADMIN_TABS (1<<22) #define FAST_MC_REFRESH (1<<23) diff --git a/code/__DEFINES/processing.dm b/code/__DEFINES/processing.dm new file mode 100644 index 000000000000..905c03830d51 --- /dev/null +++ b/code/__DEFINES/processing.dm @@ -0,0 +1,3 @@ +#define TOOL_PROCESSING_RESULT "result" +#define TOOL_PROCESSING_AMOUNT "amount" +#define TOOL_PROCESSING_TIME "time" diff --git a/code/__DEFINES/projectiles.dm b/code/__DEFINES/projectiles.dm index 61038b17c1ec..db31a4b5552d 100644 --- a/code/__DEFINES/projectiles.dm +++ b/code/__DEFINES/projectiles.dm @@ -7,3 +7,9 @@ #define PROJECTILE_PIERCE_PHASE 2 // Delete self without hitting #define PROJECTILE_DELETE_WITHOUT_HITTING 3 + +#define PROJECTILE_BONUS_DAMAGE_NONE 0 +#define PROJECTILE_BONUS_DAMAGE_MINERALS (1<<0) //minable walls +#define PROJECTILE_BONUS_DAMAGE_WALLS (1<<1) // walls +#define PROJECTILE_BONUS_DAMAGE_RWALLS (1<<2) //reinforced walls + diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm index 9e253563fe89..9cb2732d3a5c 100644 --- a/code/__DEFINES/role_preferences.dm +++ b/code/__DEFINES/role_preferences.dm @@ -17,13 +17,10 @@ #define ROLE_REV_SUCCESSFUL "Victorious Revolutionary" #define ROLE_ALIEN "Xenomorph" #define ROLE_PAI "pAI" -#define ROLE_CULTIST "Cultist" -#define ROLE_BLOB "Blob" #define ROLE_NINJA "Space Ninja" #define ROLE_MONKEY "Monkey" #define ROLE_ABDUCTOR "Abductor" #define ROLE_REVENANT "Revenant" -#define ROLE_DEVIL "Devil" #define ROLE_BROTHER "Blood Brother" #define ROLE_BRAINWASHED "Brainwashed Victim" #define ROLE_OVERTHROW "Syndicate Mutineer" //Role removed, left here for safety. @@ -53,14 +50,11 @@ GLOBAL_LIST_INIT(special_roles, list( ROLE_MALF, ROLE_ALIEN, ROLE_PAI, - ROLE_CULTIST = /datum/game_mode/cult, - ROLE_BLOB, ROLE_NINJA, ROLE_OBSESSED, ROLE_SPACE_DRAGON, ROLE_REVENANT, ROLE_ABDUCTOR, - ROLE_DEVIL = /datum/game_mode/devil, ROLE_INTERNAL_AFFAIRS = /datum/game_mode/traitor/internal_affairs, ROLE_SENTIENCE, ROLE_BORER diff --git a/code/__DEFINES/ruins.dm b/code/__DEFINES/ruins.dm index 894b9c0863f4..93a63d207c30 100644 --- a/code/__DEFINES/ruins.dm +++ b/code/__DEFINES/ruins.dm @@ -32,3 +32,52 @@ return SSmapping.ruins_templates else return SSmapping.ruin_types_list[ruintype] + +/* +Maps described in the catalogue must be described with at least one or more of the following tags. + +*Loot Summary +Minor Loot = Has negligable/no loot at all, only contains fluff items or just the loot found from enemy drops or structures in the ruin. +Medium Loot = Has a pool of loot that is useful for the average player or ship, but not in large amounts, and does not have more than one or two boss drops. +Major Loot = Contains a large pool of loot useful to the average player or ship. Or includes more boss drops or necropolis loot than there are challenges for. +*/ +#define RUIN_TAG_MINOR_LOOT "Minor Loot" +#define RUIN_TAG_MEDIUM_LOOT "Medium Loot" +#define RUIN_TAG_MAJOR_LOOT "Major Loot" + +/*Combat Summary +No Combat = Contains no enemies or combat challenges. +Minor Combat Challenge = Has only 1-2 hit melee mobs in small or moderate amounts. +Medium Combat Challenge = Contains more than just simple low health melee mobs, or a moderate amount of mobs. +Boss Combat Challenge = Contains either one or more bossmobs, has a large number of mobs that are either overwhelming or considerably challenging, or has a significant combat challenge overall. +*/ +#define RUIN_TAG_NO_COMBAT "No Combat" +#define RUIN_TAG_MINOR_COMBAT "Minor Combat Challenge" +#define RUIN_TAG_MEDIUM_COMBAT "Medium Combat Challenge" +#define RUIN_TAG_HARD_COMBAT "Hard Combat Challenge" +#define RUIN_TAG_BOSS_COMBAT "Boss Combat Challenge" + + +/*Qualities +Megafauna = Map contains one or more megafauna. +Antag Gear = Map contains one or more items typically only obtainable by antag roles. +Necropolis Loot = Map contains an item or chest from the necropolis loot pool. +Liveable = The entirety of the map is inhabitable without protective gear, and the map is not surrounded by an inhospitable environment. +Inhospitable = The majority of the map is uninhabitable without protective gear, and the map is not surrounded by a hospitable environment. +Shelter = The map contains a portion that is hospitable without protective gear, with a surrounding section that is inhospitable. Or the map is an enclosed hospitable space that spawns on an inhospitable planet. +Bad Shelter = The map contains a portion that is inhospitable without protective gear, with a surround section that is hospitable. Or the map is an enclosed inhospitable space that spawn on a hospitable planet. +No Content = A map that contains no objects. It contains only turfs, walls, and or areas. +Hazardous = Contains hazardous environment elements. Elements include but are not limited to: Mines, IEDs, Chasms appearing more than twice or more than once if one is 3x3 or more, disease spawns, beartraps. +Unknown Details = Something about the map can't be checked with a map editor alone, and has not been tested for confirmation yet. +Lava = Contains lava or liquid plasma tiles. +Ghost Role = Contains a ghost role. +*/ +#define RUIN_TAG_MEGAFAUNA "Megafauna" +#define RUIN_TAG_LIVEABLE "Liveable" +#define RUIN_TAG_INHOSPITABLE "Inhospitable" +#define RUIN_TAG_SHELTER "Shelter" +#define RUIN_TAG_BAD_SHELTER "Bad Shelter" +#define RUIN_TAG_NO_CONTENT "No Content" +#define RUIN_TAG_HAZARDOUS "Hazardous" +#define RUIN_TAG_UNKNOWN_DETAILS "Unknown Details" +#define RUIN_TAG_LAVA "Lava" diff --git a/code/__DEFINES/sound.dm b/code/__DEFINES/sound.dm index 1bd23038c600..285e7ce5ff80 100644 --- a/code/__DEFINES/sound.dm +++ b/code/__DEFINES/sound.dm @@ -174,4 +174,36 @@ #define SOUND_AREA_ICEMOON SOUND_ENVIRONMENT_CAVE #define SOUND_AREA_WOODFLOOR SOUND_ENVIRONMENT_CITY +/// List of all of our sound keys. +#define SFX_BODYFALL "bodyfall" +#define SFX_BULLET_MISS "bullet_miss" +#define SFX_CAN_OPEN "can_open" +#define SFX_CLOWN_STEP "clown_step" +#define SFX_DESECRATION "desecration" +#define SFX_EXPLOSION "explosion" +#define SFX_EXPLOSION_CREAKING "explosion_creaking" +#define SFX_HISS "hiss" +#define SFX_HONKBOT_E "honkbot_e" +#define SFX_HULL_CREAKING "hull_creaking" +#define SFX_HYPERTORUS_CALM "hypertorus_calm" +#define SFX_HYPERTORUS_MELTING "hypertorus_melting" +#define SFX_IM_HERE "im_here" +#define SFX_LAW "law" +#define SFX_PAGE_TURN "page_turn" +#define SFX_PUNCH "punch" +#define SFX_REVOLVER_SPIN "revolver_spin" +#define SFX_RICOCHET "ricochet" +#define SFX_RUSTLE "rustle" +#define SFX_SHATTER "shatter" +#define SFX_SM_CALM "sm_calm" +#define SFX_SM_DELAM "sm_delam" +#define SFX_SPARKS "sparks" +#define SFX_SUIT_STEP "suit_step" +#define SFX_SWING_HIT "swing_hit" +#define SFX_TERMINAL_TYPE "terminal_type" +#define SFX_WARPSPEED "warpspeed" +#define SFX_CRUNCHY_BUSH_WHACK "crunchy_bush_whack" +#define SFX_TREE_CHOP "tree_chop" +#define SFX_ROCK_TAP "rock_tap" + #define SOUND_EMPTY_MAG 'sound/weapons/empty.ogg' diff --git a/code/__DEFINES/species_clothing_defines.dm b/code/__DEFINES/species_clothing_defines.dm index 517579192634..4dd9e26da752 100644 --- a/code/__DEFINES/species_clothing_defines.dm +++ b/code/__DEFINES/species_clothing_defines.dm @@ -12,7 +12,7 @@ #define DEFAULT_HEAD_PATH 'icons/mob/clothing/head.dmi' #define DEFAULT_NECK_PATH 'icons/mob/clothing/neck.dmi' #define DEFAULT_GLOVES_PATH 'icons/mob/clothing/hands.dmi' -#define DEFAULT_GLASSES_PATH 'icons/mob/clothing/eyes.dmi' +#define DEFAULT_GLASSES_PATH 'icons/mob/clothing/eyes/eyes.dmi' #define DEFAULT_BELT_PATH 'icons/mob/clothing/belt.dmi' ///VOX PATHS @@ -22,6 +22,7 @@ #define VOX_SUIT_PATH 'icons/mob/species/vox/onmob_suit_vox.dmi' #define VOX_EARS_PATH 'icons/mob/species/vox/onmob_ears_vox.dmi' #define VOX_MASK_PATH 'icons/mob/species/vox/onmob_mask_vox.dmi' +#define VOX_NECK_PATH 'icons/mob/species/vox/onmob_neck_vox.dmi' #define VOX_HEAD_PATH 'icons/mob/species/vox/onmob_head_vox.dmi' #define VOX_GLOVES_PATH 'icons/mob/species/vox/onmob_hands_vox.dmi' #define VOX_GLASSES_PATH 'icons/mob/species/vox/onmob_eyes_vox.dmi' @@ -29,6 +30,7 @@ ///KEPORI PATHS #define KEPORI_UNIFORM_PATH 'icons/mob/species/kepori/onmob_uniform_kepori.dmi' +#define KEPORI_BACK_PATH 'icons/mob/species/kepori/onmob_back_kepori.dmi' #define KEPORI_SHOES_PATH 'icons/mob/species/kepori/onmob_feet_kepori.dmi' #define KEPORI_SUIT_PATH 'icons/mob/species/kepori/onmob_suit_kepori.dmi' #define KEPORI_EARS_PATH 'icons/mob/species/kepori/onmob_ears_kepori.dmi' diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index d1fbf26616d5..9a7c477b8b14 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -64,8 +64,6 @@ #define STATUS_EFFECT_HISWRATH /datum/status_effect/his_wrath //His Wrath. -#define STATUS_EFFECT_SUMMONEDGHOST /datum/status_effect/cultghost //is a cult ghost and can't use manifest runes - #define STATUS_EFFECT_CRUSHERMARK /datum/status_effect/crusher_mark //if struck with a proto-kinetic crusher, takes a ton of damage #define STATUS_EFFECT_SAWBLEED /datum/status_effect/stacking/saw_bleed //if the bleed builds up enough, takes a ton of damage @@ -99,6 +97,14 @@ #define STATUS_EFFECT_METAB_FROZEN /datum/status_effect/metab_frozen // Affected cannot process chems +//Incapacitated status effect flags +/// If the incapacitated status effect will ignore a mob in restraints (handcuffs) +#define IGNORE_RESTRAINTS (1<<0) +/// If the incapacitated status effect will ignore a mob in stasis (stasis beds) +#define IGNORE_STASIS (1<<1) +/// If the incapacitated status effect will ignore a mob being agressively grabbed +#define IGNORE_GRAB (1<<2) + ///////////// // NEUTRAL // ///////////// diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 36aa57e48625..54874bc9e16b 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/tools.dm b/code/__DEFINES/tools.dm index 320648170b44..eb2696c0afbb 100644 --- a/code/__DEFINES/tools.dm +++ b/code/__DEFINES/tools.dm @@ -14,6 +14,8 @@ #define TOOL_DRILL "drill" #define TOOL_SCALPEL "scalpel" #define TOOL_SAW "saw" +#define TOOL_KNIFE "knife" //luv me kuh-nyfe +#define TOOL_DECONSTRUCT "deconstruct" // If delay between the start and the end of tool operation is less than MIN_TOOL_SOUND_DELAY, // tool sound is only played when op is started. If not, it's played twice. diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index f88f0c9d791c..664e6cc687f7 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -173,13 +173,20 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_RESISTCOLD "resist_cold" #define TRAIT_RESISTHIGHPRESSURE "resist_high_pressure" #define TRAIT_RESISTLOWPRESSURE "resist_low_pressure" +#define TRAIT_METALLIC "metallic" //used on IPCs #define TRAIT_BOMBIMMUNE "bomb_immunity" #define TRAIT_RADIMMUNE "rad_immunity" #define TRAIT_GENELESS "geneless" #define TRAIT_VIRUSIMMUNE "virus_immunity" #define TRAIT_PIERCEIMMUNE "pierce_immunity" #define TRAIT_NODISMEMBER "dismember_immunity" +#define TRAIT_LAVA_IMMUNE "lava_immunity" +#define TRAIT_SNOWSTORM_IMMUNE "snow_immunity" +#define TRAIT_ASHSTORM_IMMUNE "ash_immunity" +#define TRAIT_SANDSTORM_IMMUNE "sand_immunity" #define TRAIT_NOFIRE "nonflammable" +/// Prevents plasmamen from self-igniting if only their helmet is missing +#define TRAIT_NOSELFIGNITION_HEAD_ONLY "no_selfignition_head_only" #define TRAIT_NOGUNS "no_guns" #define TRAIT_NOHUNGER "no_hunger" #define TRAIT_NOMETABOLISM "no_metabolism" @@ -215,6 +222,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_NOMOBSWAP "no-mob-swap" #define TRAIT_XRAY_VISION "xray_vision" #define TRAIT_THERMAL_VISION "thermal_vision" +/// Like antimagic, but doesn't block the user from casting +#define TRAIT_ANTIMAGIC_NO_SELFBLOCK "anti_magic_no_selfblock" /// We have some form of forced gravity acting on us #define TRAIT_FORCED_GRAVITY "forced_gravity" #define TRAIT_ABDUCTOR_TRAINING "abductor-training" @@ -248,6 +257,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_GAMERGOD "gamer-god" //double arcade prizes #define TRAIT_GIANT "giant" #define TRAIT_DWARF "dwarf" +#define TRAIT_FASTMED "fast_med_use" #define TRAIT_SILENT_FOOTSTEPS "silent_footsteps" //makes your footsteps completely silent #define TRAIT_NICE_SHOT "nice_shot" //hnnnnnnnggggg..... you're pretty good.... /// The holder of this trait has antennae or whatever that hurt a ton when noogied @@ -264,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 @@ -279,6 +291,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_AREA_SENSITIVE "area-sensitive" ///Used for managing KEEP_TOGETHER in [/atom/var/appearance_flags] +///every object that is currently the active storage of some client mob has this trait +#define TRAIT_ACTIVE_STORAGE "active_storage" + #define TRAIT_KEEP_TOGETHER "keep-together" // item traits @@ -286,6 +301,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_NO_STORAGE_INSERT "no_storage_insert" //cannot be inserted in a storage. #define TRAIT_T_RAY_VISIBLE "t-ray-visible" // Visible on t-ray scanners if the atom/var/level == 1 #define TRAIT_NO_TELEPORT "no-teleport" //you just can't +#define TRAIT_WIELDED "wielded" //The item is currently being wielded //quirk traits #define TRAIT_ALCOHOL_TOLERANCE "alcohol_tolerance" @@ -337,7 +353,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define CYBORG_ITEM_TRAIT "cyborg-item" #define ADMIN_TRAIT "admin" // (B)admins only. #define CHANGELING_TRAIT "changeling" -#define CULT_TRAIT "cult" #define CURSED_ITEM_TRAIT "cursed-item" // The item is magically cursed #define ABSTRACT_ITEM_TRAIT "abstract-item" #define STATUS_EFFECT_TRAIT "status-effect" @@ -362,6 +377,8 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define LYING_DOWN_TRAIT "lying-down" /// Trait associated to lacking electrical power. #define POWER_LACK_TRAIT "power-lack" +/// Trait applied by MODsuits. +#define MOD_TRAIT "mod" // unique trait sources, still defines #define CLONING_POD_TRAIT "cloning-pod" @@ -374,7 +391,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define STASIS_MUTE "stasis" #define GENETICS_SPELL "genetics_spell" #define EYES_COVERED "eyes_covered" -#define CULT_EYES "cult_eyes" #define TRAIT_SANTA "santa" #define SCRYING_ORB "scrying-orb" #define ABDUCTOR_ANTAGONIST "abductor-antagonist" @@ -385,14 +401,12 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define STICKY_MOUSTACHE_TRAIT "sticky-moustache" #define CHAINSAW_FRENZY_TRAIT "chainsaw-frenzy" #define CHRONO_GUN_TRAIT "chrono-gun" -#define REVERSE_BEAR_TRAP_TRAIT "reverse-bear-trap" #define CURSED_MASK_TRAIT "cursed-mask" #define HAND_REPLACEMENT_TRAIT "magic-hand" #define HOT_POTATO_TRAIT "hot-potato" #define ABDUCTOR_VEST_TRAIT "abductor-vest" #define CAPTURE_THE_FLAG_TRAIT "capture-the-flag" #define EYE_OF_GOD_TRAIT "eye-of-god" -#define SHAMEBRERO_TRAIT "shamebrero" #define CHRONOSUIT_TRAIT "chronosuit" #define LOCKED_HELMET_TRAIT "locked-helmet" #define NINJA_SUIT_TRAIT "ninja-suit" @@ -411,8 +425,6 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define WARPWHISTLE_TRAIT "warpwhistle" ///Turf trait for when a turf is transparent #define TURF_Z_TRANSPARENT_TRAIT "turf_z_transparent" -/// Trait applied by by [/datum/component/soulstoned] -#define SOULSTONE_TRAIT "soulstone" /// Trait applied to slimes by low temperature #define SLIME_COLD "slime-cold" /// Trait applied to bots by being tipped over @@ -435,6 +447,31 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define BEAUTY_ELEMENT_TRAIT "beauty_element" #define MOOD_COMPONENT_TRAIT "mood_component" +// mobility flag traits +// IN THE FUTURE, IT WOULD BE NICE TO DO SOMETHING SIMILAR TO https://github.com/tgstation/tgstation/pull/48923/files (ofcourse not nearly the same because I have my.. thoughts on it) +// BUT FOR NOW, THESE ARE HOOKED TO DO update_mobility() VIA COMSIG IN living_mobility.dm +// SO IF YOU ADD MORE, BESURE TO UPDATE IT THERE. + +/// Disallow movement +#define TRAIT_MOBILITY_NOMOVE "mobility_nomove" +/// Disallow pickup +#define TRAIT_MOBILITY_NOPICKUP "mobility_nopickup" +/// Disallow item use +#define TRAIT_MOBILITY_NOUSE "mobility_nouse" +///Disallow resting/unresting +#define TRAIT_MOBILITY_NOREST "mobility_norest" + +#define TRAIT_FORCED_STANDING "forcedstanding" + +///Movement type traits for movables. See elements/movetype_handler.dm +#define TRAIT_MOVE_GROUND "move_ground" +#define TRAIT_MOVE_FLYING "move_flying" +#define TRAIT_MOVE_VENTCRAWLING "move_ventcrawling" +#define TRAIT_MOVE_FLOATING "move_floating" +#define TRAIT_MOVE_PHASING "move_phasing" +/// Disables the floating animation. See above. +#define TRAIT_NO_FLOATING_ANIM "no-floating-animation" + /// Trait granted by [mob/living/silicon/ai] /// Applied when the ai anchors itself #define AI_ANCHOR_TRAIT "ai_anchor" diff --git a/code/__DEFINES/turfs.dm b/code/__DEFINES/turfs.dm index 571bade19ef2..30db6fc98f33 100644 --- a/code/__DEFINES/turfs.dm +++ b/code/__DEFINES/turfs.dm @@ -12,3 +12,9 @@ #define CHANGETURF_DEFER_BATCH (1 << 5) #define IS_OPAQUE_TURF(turf) (turf.directional_opacity == ALL_CARDINALS) + +// Integrity of mineral walls. +#define MINERAL_WALL_INTEGRITY 100 + +// how many bullet holes a wall can have at a given time +#define MAX_DENT_DECALS 15 diff --git a/code/__DEFINES/vv.dm b/code/__DEFINES/vv.dm index 5d9522b18ee4..602473b6086d 100644 --- a/code/__DEFINES/vv.dm +++ b/code/__DEFINES/vv.dm @@ -92,6 +92,7 @@ #define VV_HK_AUTO_RENAME "auto_rename" #define VV_HK_RADIATE "radiate" #define VV_HK_EDIT_FILTERS "edit_filters" +#define VV_HK_EDIT_PARTICLES "edit_particles" // /obj #define VV_HK_OSAY "osay" diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index f603e85292ad..b231b4e944c9 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -87,6 +87,42 @@ };\ } while(FALSE) + +/** + * Custom binary search sorted insert utilising comparison procs instead of vars. + * INPUT: Object to be inserted + * LIST: List to insert object into + * TYPECONT: The typepath of the contents of the list + * COMPARE: The object to compare against, usualy the same as INPUT + * COMPARISON: The plaintext name of a proc on INPUT that takes a single argument to accept a single element from LIST and returns a positive, negative or zero number to perform a comparison. + * COMPTYPE: How should the values be compared? Either COMPARE_KEY or COMPARE_VALUE. + */ +#define BINARY_INSERT_PROC_COMPARE(INPUT, LIST, TYPECONT, COMPARE, COMPARISON, COMPTYPE) \ + do {\ + var/list/__BIN_LIST = LIST;\ + var/__BIN_CTTL = length(__BIN_LIST);\ + if(!__BIN_CTTL) {\ + __BIN_LIST += INPUT;\ + } else {\ + var/__BIN_LEFT = 1;\ + var/__BIN_RIGHT = __BIN_CTTL;\ + var/__BIN_MID = (__BIN_LEFT + __BIN_RIGHT) >> 1;\ + var ##TYPECONT/__BIN_ITEM;\ + while(__BIN_LEFT < __BIN_RIGHT) {\ + __BIN_ITEM = COMPTYPE;\ + if(__BIN_ITEM.##COMPARISON(COMPARE) <= 0) {\ + __BIN_LEFT = __BIN_MID + 1;\ + } else {\ + __BIN_RIGHT = __BIN_MID;\ + };\ + __BIN_MID = (__BIN_LEFT + __BIN_RIGHT) >> 1;\ + };\ + __BIN_ITEM = COMPTYPE;\ + __BIN_MID = __BIN_ITEM.##COMPARISON(COMPARE) > 0 ? __BIN_MID : __BIN_MID + 1;\ + __BIN_LIST.Insert(__BIN_MID, INPUT);\ + };\ + } while(FALSE) + //Returns a list in plain english as a string /proc/english_list(list/input, nothing_text = "nothing", and_text = " and ", comma_text = ", ", final_comma_text = "" ) var/total = length(input) @@ -109,13 +145,25 @@ return "[output][and_text][input[index]]" -//Checks for specific types in a list -/proc/is_type_in_list(atom/A, list/L) - if(!LAZYLEN(L) || !A) +/** + * Checks for specific types in a list. + * + * If using zebra mode the list should be an assoc list with truthy/falsey values. + * The check short circuits so earlier entries in the input list will take priority. + * Ergo, subtypes should come before parent types. + * Notice that this is the opposite priority of [/proc/typecacheof]. + * + * Arguments: + * - [type_to_check][/datum]: An instance to check. + * - [list_to_check][/list]: A list of typepaths to check the type_to_check against. + * - zebra: Whether to use the value of the matching type in the list instead of just returning true when a match is found. + */ +/proc/is_type_in_list(datum/type_to_check, list/list_to_check, zebra = FALSE) + if(!LAZYLEN(list_to_check) || !type_to_check) return FALSE - for(var/type in L) - if(istype(A, type)) - return TRUE + for(var/type in list_to_check) + if(istype(type_to_check, type)) + return !zebra || list_to_check[type] // Subtypes must come first in zebra lists. return FALSE //Checks for specific types in specifically structured (Assoc "type" = TRUE) lists ('typecaches') diff --git a/code/__HELPERS/_planes.dm b/code/__HELPERS/_planes.dm new file mode 100644 index 000000000000..d8306c356d4c --- /dev/null +++ b/code/__HELPERS/_planes.dm @@ -0,0 +1,80 @@ +// This file contains helper macros for plane operations +// See the planes section of Visuals.md for more detail, but essentially +// When we render multiz, we do it by placing all atoms on lower levels on well, lower planes +// This is done with stacks of plane masters (things we use to apply effects to planes) +// These macros exist to facilitate working with this system, and other associated small bits + +/// Takes an atom to change the plane of, a new plane value, and something that can be used as a reference to a z level as input +/// Modifies the new value to match the plane we actually want. Note, if you pass in an already offset plane the offsets will add up +/// Use PLANE_TO_TRUE() to avoid this +#define SET_PLANE(thing, new_value, z_reference) (thing.plane = MUTATE_PLANE(new_value, z_reference)) + +/// Takes a plane and a z reference, and offsets the plane by the mutation +/// The SSmapping.max_plane_offset bit here is technically redundant, but saves a bit of work in the base case +/// And the base case is important to me. Non multiz shouldn't get hit too bad by this code +#define MUTATE_PLANE(new_value, z_reference) ((SSmapping.max_plane_offset) ? GET_NEW_PLANE(new_value, GET_TURF_PLANE_OFFSET(z_reference)) : (new_value)) + +/// Takes a z reference that we are unsure of, sanity checks it +/// Returns either its offset, or 0 if it's not a valid ref +#define GET_TURF_PLANE_OFFSET(z_reference) ((SSmapping.max_plane_offset && isatom(z_reference)) ? GET_Z_PLANE_OFFSET(z_reference.z) : 0) +/// Essentially just an unsafe version of GET_TURF_PLANE_OFFSET() +/// Takes a z value we returns its offset with a list lookup +/// Will runtime during parts of init. Be careful :) +#define GET_Z_PLANE_OFFSET(z) (SSmapping.z_level_to_plane_offset[z]) + +/// Takes a plane to offset, and the multiplier to use, and well, does the offsetting +/// Respects a blacklist we use to remove redundant plane masters, such as hud objects +#define GET_NEW_PLANE(new_value, multiplier) (SSmapping.plane_offset_blacklist?["[new_value]"] ? new_value : (new_value) - (PLANE_RANGE * (multiplier))) + +// Now for the more niche things + +/// Takes an object, new plane, and multipler, and offsets the plane +/// This is for cases where you have a multipler precalculated, and just want to use it +/// Often an optimization, sometimes a necessity +#define SET_PLANE_W_SCALAR(thing, new_value, multiplier) (thing.plane = GET_NEW_PLANE(new_value, multiplier)) + + +/// Implicit plane set. We take the turf from the object we're changing the plane of, and use ITS z as a spokesperson for our plane value +#define SET_PLANE_IMPLICIT(thing, new_value) SET_PLANE_EXPLICIT(thing, new_value, thing) + +// This is an unrolled and optimized version of SET_PLANE, for use anywhere where you are unsure of a source's "turfness" +// The plane is cached to allow for fancy stuff to be eval'd once, rather then often +#define SET_PLANE_EXPLICIT(thing, new_value, source) \ + do {\ + if(SSmapping.max_plane_offset) {\ + var/_cached_plane = new_value;\ + var/turf/_our_turf = get_turf(source);\ + if(_our_turf){\ + thing.plane = GET_NEW_PLANE(_cached_plane, GET_Z_PLANE_OFFSET(_our_turf.z));\ + }\ + }\ + else {\ + thing.plane = new_value;\ + }\ + }\ + while (FALSE) + +// Now for macros that exist to get info from SSmapping +// Mostly about details of planes, or z levels + +/// Takes a z level, gets the lowest plane offset in its "stack" +#define GET_LOWEST_STACK_OFFSET(z) ((SSmapping.max_plane_offset) ? SSmapping.z_level_to_lowest_plane_offset[z] : 0) +/// Takes a plane, returns the canonical, unoffset plane it represents +#define PLANE_TO_TRUE(plane) ((SSmapping.plane_offset_to_true) ? SSmapping.plane_offset_to_true["[plane]"] : plane) +/// Takes a plane, returns the offset it uses +#define PLANE_TO_OFFSET(plane) ((SSmapping.plane_to_offset) ? SSmapping.plane_to_offset["[plane]"] : plane) +/// Takes a plane, returns TRUE if it is of critical priority, FALSE otherwise +#define PLANE_IS_CRITICAL(plane) ((SSmapping.plane_to_offset) ? !!SSmapping.critical_planes["[plane]"] : FALSE) +/// Takes a true plane, returns the offset planes that would canonically represent it +#define TRUE_PLANE_TO_OFFSETS(plane) ((SSmapping.true_to_offset_planes) ? SSmapping.true_to_offset_planes["[plane]"] : list(plane)) +/// Takes a render target and an offset, returns a canonical render target string for it +#define OFFSET_RENDER_TARGET(render_target, offset) (_OFFSET_RENDER_TARGET(render_target, SSmapping.render_offset_blacklist?["[render_target]"] ? 0 : offset)) +/// Helper macro for the above +/// Honestly just exists to make the pattern of render target strings more readable +#define _OFFSET_RENDER_TARGET(render_target, offset) ("[(render_target)] #[(offset)]") + +// Known issues: +// Potentially too much client load? Hard to tell due to not having a potato pc to hand. +// This is solvable with lowspec preferences, which would not be hard to implement +// Player popups will now render their effects, like overlay lights. this is fixable, but I've not gotten to it +// I think overlay lights can render on the wrong z layer. s fucked diff --git a/code/__HELPERS/areas.dm b/code/__HELPERS/areas.dm index 70349078bd92..5479f2bcbe54 100644 --- a/code/__HELPERS/areas.dm +++ b/code/__HELPERS/areas.dm @@ -42,7 +42,6 @@ GLOBAL_LIST_INIT(typecache_powerfailure_safe_areas, typecacheof(/area/ship/engin // Passed into the above proc as list/break_if_found var/static/area_or_turf_fail_types = typecacheof(list( /turf/open/space, - /area/shuttle, )) // Ignore these areas and dont let people expand them. They can expand into them though var/static/blacklisted_areas = typecacheof(list( diff --git a/code/__HELPERS/atoms.dm b/code/__HELPERS/atoms.dm new file mode 100644 index 000000000000..dbb42122ff45 --- /dev/null +++ b/code/__HELPERS/atoms.dm @@ -0,0 +1,9 @@ +///Returns the src and all recursive contents as a list. +/atom/proc/get_all_contents(ignore_flag_1) + . = list(src) + var/i = 0 + while(i < length(.)) + var/atom/checked_atom = .[++i] + if(checked_atom.flags_1 & ignore_flag_1) + continue + . += checked_atom.contents diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index e7af7f31884d..7bb70222072f 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -6,7 +6,6 @@ block( \ ) #define Z_TURFS(ZLEVEL) block(locate(1,1,ZLEVEL), locate(world.maxx, world.maxy, ZLEVEL)) -#define CULT_POLL_WAIT 2400 /proc/get_area_name(atom/X, format_text = FALSE) var/area/A = isarea(X) ? X : get_area(X) @@ -596,3 +595,31 @@ block( \ continue C.energy_fail(rand(duration_min,duration_max)) + +///Returns a list of turfs around a center based on RANGE_TURFS() +/proc/circle_range_turfs(center = usr, radius = 3) + + var/turf/center_turf = get_turf(center) + var/list/turfs = new/list() + var/rsq = radius * (radius + 0.5) + + for(var/turf/checked_turf as anything in RANGE_TURFS(radius, center_turf)) + var/dx = checked_turf.x - center_turf.x + var/dy = checked_turf.y - center_turf.y + if(dx * dx + dy * dy <= rsq) + turfs += checked_turf + return turfs + +///Returns a list of turfs around a center based on view() +/proc/circle_view_turfs(center=usr,radius=3) //Is there even a diffrence between this proc and circle_range_turfs()? + + var/turf/center_turf = get_turf(center) + var/list/turfs = new/list() + var/rsq = radius * (radius + 0.5) + + for(var/turf/checked_turf in view(radius, center_turf)) + var/dx = checked_turf.x - center_turf.x + var/dy = checked_turf.y - center_turf.y + if(dx * dx + dy * dy <= rsq) + turfs += checked_turf + return turfs diff --git a/code/__HELPERS/generators.dm b/code/__HELPERS/generators.dm new file mode 100644 index 000000000000..d50df7deba19 --- /dev/null +++ b/code/__HELPERS/generators.dm @@ -0,0 +1,11 @@ +/** + * returns the arguments given to a generator and manually extracts them from the internal byond object + * returns: + * * flat list of strings for args given to the generator. + * * Note: this means things like "list(1,2,3)" will need to be processed + */ +/proc/return_generator_args(generator/target) + var/string_repr = "[target]" //the name of the generator is the string representation of it's _binobj, which also contains it's args + string_repr = copytext(string_repr, 11, length(string_repr)) // strips extraneous data + string_repr = replacetext(string_repr, "\"", "") // removes the " around the type + return splittext(string_repr, ", ") diff --git a/code/__HELPERS/maths.dm b/code/__HELPERS/maths.dm new file mode 100644 index 000000000000..983ecc800274 --- /dev/null +++ b/code/__HELPERS/maths.dm @@ -0,0 +1,13 @@ +///Calculate the angle between two movables and the west|east coordinate +/proc/get_angle(atom/movable/start, atom/movable/end)//For beams. + if(!start || !end) + return 0 + var/dy =(32 * end.y + end.pixel_y) - (32 * start.y + start.pixel_y) + var/dx =(32 * end.x + end.pixel_x) - (32 * start.x + start.pixel_x) + if(!dy) + return (dx >= 0) ? 90 : 270 + . = arctan(dx/dy) + if(dy < 0) + . += 180 + else if(dx < 0) + . += 360 diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 6a3028443dcc..ae5a1c1ce929 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -257,7 +257,19 @@ GLOBAL_LIST_EMPTY(species_list) return ..() /** - * Timed action involving one mob user. A target can also be specified, but it is optional. + * Used to get the amount of change between two body temperatures + * + * When passed the difference between two temperatures returns the amount of change to temperature to apply. + * The change rate should be kept at a low value tween 0.16 and 0.02 for optimal results. + * vars: + * * temp_diff (required) The differance between two temperatures + * * change_rate (optional)(Default: 0.06) The rate of range multiplyer + */ +/proc/get_temp_change_amount(temp_diff, change_rate = 0.06) + if(temp_diff < 0) + return -(BODYTEMP_AUTORECOVERY_DIVISOR / 2) * log(1 - (temp_diff * change_rate)) + +/* Timed action involving one mob user. A target can also be specified, but it is optional. * * Checks that `user` does not move, change hands, get stunned, etc. for the * given `delay`. Returns `TRUE` on success or `FALSE` on failure. diff --git a/code/__HELPERS/names.dm b/code/__HELPERS/names.dm index 6f4ec205448c..d78667dbfb4b 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/__HELPERS/priority_announce.dm b/code/__HELPERS/priority_announce.dm index 65ea832c0e0b..fb02a93e144d 100644 --- a/code/__HELPERS/priority_announce.dm +++ b/code/__HELPERS/priority_announce.dm @@ -1,4 +1,4 @@ -/proc/priority_announce(text, title = "", sound = 'sound/ai/attention.ogg', type, sender_override, auth_id, zlevel) //WS Edit - Make cap's announcement use logged-in name +/proc/priority_announce(text, title = "", sound = 'sound/ai/attention.ogg', type, sender_override, auth_id, zlevel) if(!text) return @@ -73,3 +73,9 @@ to_chat(M, "[title]
[message]

[from ? "-[from.name] ([from.job])" : null]") if(M.client.prefs.toggles & SOUND_ANNOUNCEMENTS) SEND_SOUND(M, S) + +/proc/create_distress_beacon(datum/overmap/ship/ship) + if(!ship) + return + var/text = "A distress beacon has been launched by [ship.name], at local sector co-ordinates [ship.x || ship.docked_to.x]/[ship.y || ship.docked_to.y]. No further information available." + priority_announce(text, null, 'sound/effects/alert.ogg', sender_override = "Outpost Distress Beacon System", zlevel = 0) diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index 5301f0ec9d3e..01fd964120ea 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -77,10 +77,6 @@ var/pos = length(file_data["[escape_status]"]) + 1 file_data["[escape_status]"]["[pos]"] = mob_data - var/datum/station_state/end_state = new /datum/station_state() - end_state.count() - var/station_integrity = min(PERCENT(GLOB.start_state.score(end_state)), 100) - file_data["additional data"]["station integrity"] = station_integrity WRITE_FILE(json_file, json_encode(file_data)) SSblackbox.record_feedback("nested tally", "round_end_stats", num_survivors, list("survivors", "total")) @@ -88,7 +84,6 @@ SSblackbox.record_feedback("nested tally", "round_end_stats", GLOB.joined_player_list.len - num_survivors, list("players", "dead")) . = list() .[POPCOUNT_SURVIVORS] = num_survivors - .["station_integrity"] = station_integrity /datum/controller/subsystem/ticker/proc/gather_antag_data() var/team_gid = 1 @@ -121,7 +116,7 @@ SSblackbox.record_feedback("associative", "antagonists", 1, antag_info) /datum/controller/subsystem/ticker/proc/record_nuke_disk_location() - var/obj/item/disk/nuclear/N = locate() in GLOB.poi_list + var/obj/item/disk/nuclear/N = locate() in SSpoints_of_interest.other_points_of_interest if(N) var/list/data = list() var/turf/T = get_turf(N) diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index d6b048de4289..7bd6f72771cc 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -294,70 +294,6 @@ Turf and target are separate in case you want to teleport some distance from a t /proc/ionnum() return "[pick("!","@","#","$","%","^","&")][pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")][pick("!","@","#","$","%","^","&","*")]" -//Returns a list of all items of interest with their name -/proc/getpois(mobs_only = FALSE, skip_mindless = FALSE, specify_dead_role = TRUE, only_realname = FALSE) - var/list/mobs = sortmobs() - var/list/namecounts = list() - var/list/pois = list() - for(var/mob/M in mobs) - if(skip_mindless && (!M.mind && !M.ckey)) - if(!isbot(M) && !iscameramob(M) && !ismegafauna(M)) - continue - if(M.client && M.client.holder && M.client.holder.fakekey) //stealthmins - continue - var/name = "" - if(only_realname) - name = avoid_assoc_duplicate_keys(M.real_name, namecounts) - else - name = avoid_assoc_duplicate_keys(M.name, namecounts) + M.get_realname_string() - - if(M.stat == DEAD && specify_dead_role) - if(isobserver(M)) - name += " \[ghost\]" - else - name += " \[dead\]" - pois[name] = M - - if(!mobs_only) - for(var/atom/A in GLOB.poi_list) - if(!A || !A.loc) - continue - pois[avoid_assoc_duplicate_keys(A.name, namecounts)] = A - - return pois - -//Orders mobs by type then by name -/proc/sortmobs() - var/list/moblist = list() - var/list/sortmob = sortNames(GLOB.mob_list) - for(var/mob/living/silicon/ai/M in sortmob) - moblist.Add(M) - for(var/mob/camera/M in sortmob) - moblist.Add(M) - for(var/mob/living/silicon/pai/M in sortmob) - moblist.Add(M) - for(var/mob/living/silicon/robot/M in sortmob) - moblist.Add(M) - for(var/mob/living/carbon/human/M in sortmob) - moblist.Add(M) - for(var/mob/living/brain/M in sortmob) - moblist.Add(M) - for(var/mob/living/carbon/alien/M in sortmob) - moblist.Add(M) - for(var/mob/dead/observer/M in sortmob) - moblist.Add(M) - for(var/mob/dead/new_player/M in sortmob) - moblist.Add(M) - for(var/mob/living/carbon/monkey/M in sortmob) - moblist.Add(M) - for(var/mob/living/simple_animal/slime/M in sortmob) - moblist.Add(M) - for(var/mob/living/simple_animal/M in sortmob) - moblist.Add(M) - for(var/mob/living/carbon/true_devil/M in sortmob) - moblist.Add(M) - return moblist - // Format a power value in W, kW, MW, or GW. /proc/DisplayPower(powerused) if(powerused < 1000) //Less than a kW @@ -389,7 +325,7 @@ Turf and target are separate in case you want to teleport some distance from a t /proc/get_mob_by_ckey(key) if(!key) return - var/list/mobs = sortmobs() + var/list/mobs = SSpoints_of_interest.get_mob_pois() for(var/mob/M in mobs) if(M.ckey == key) return M @@ -744,7 +680,7 @@ GLOBAL_LIST_INIT(WALLITEMS, typecacheof(list( /obj/machinery/newscaster, /obj/machinery/firealarm, /obj/structure/noticeboard, /obj/machinery/button, /obj/machinery/computer/security/telescreen, /obj/machinery/embedded_controller/radio/simple_vent_controller, /obj/item/storage/secure/safe, /obj/machinery/door_timer, /obj/machinery/flasher, /obj/machinery/keycard_auth, - /obj/structure/mirror, /obj/structure/fireaxecabinet, /obj/machinery/computer/security/telescreen/entertainment, + /obj/structure/mirror, /obj/structure/cabinet, /obj/machinery/computer/security/telescreen/entertainment, /obj/structure/sign/picture_frame, /obj/machinery/bounty_board ))) @@ -1425,10 +1361,15 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) REMOVE_TRAIT(the_atom2,trait,source) /proc/get_random_food() - var/list/blocked = list(/obj/item/reagent_containers/food/snacks/store/bread, - /obj/item/reagent_containers/food/snacks/breadslice, - /obj/item/reagent_containers/food/snacks/store/cake, - /obj/item/reagent_containers/food/snacks/cakeslice, + var/static/list/allowed_food = list() + + if(!LAZYLEN(allowed_food)) //it's static so we only ever do this once + var/list/blocked = list( + /obj/item/food/spaghetti, + /obj/item/food/bread, + /obj/item/food/breadslice, + /obj/item/food/cake, + /obj/item/food/cakeslice, /obj/item/reagent_containers/food/snacks/store, /obj/item/reagent_containers/food/snacks/pie, /obj/item/reagent_containers/food/snacks/kebab, @@ -1440,15 +1381,21 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) /obj/item/reagent_containers/food/snacks/soup, /obj/item/reagent_containers/food/snacks/grown, /obj/item/reagent_containers/food/snacks/grown/mushroom, - /obj/item/reagent_containers/food/snacks/deepfryholder, + /obj/item/food/deepfryholder, /obj/item/reagent_containers/food/snacks/clothing, /obj/item/reagent_containers/food/snacks/grown/shell, //base types - /obj/item/reagent_containers/food/snacks/store/bread, + /obj/item/food/bread, /obj/item/reagent_containers/food/snacks/grown/nettle ) - blocked |= typesof(/obj/item/reagent_containers/food/snacks/customizable) + blocked |= typesof(/obj/item/reagent_containers/food/snacks/customizable) + + var/list/unfiltered_allowed_food = subtypesof(/obj/item/food) - blocked + for(var/obj/item/food/food as anything in unfiltered_allowed_food) + if(!initial(food.icon_state)) //food with no icon_state should probably not be spawned + continue + allowed_food.Add(food) - return pick(subtypesof(/obj/item/reagent_containers/food/snacks) - blocked) + return pick(allowed_food) /proc/get_random_drink() var/list/blocked = list(/obj/item/reagent_containers/food/drinks/soda_cans, diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index bbfb0d3a74c5..d9957c7db0f1 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -50,7 +50,6 @@ DEFINE_BITFIELD(appearance_flags, list( DEFINE_BITFIELD(area_flags, list( "VALID_TERRITORY" = VALID_TERRITORY, - "BLOBS_ALLOWED" = BLOBS_ALLOWED, "CAVES_ALLOWED" = CAVES_ALLOWED, "FLORA_ALLOWED" = FLORA_ALLOWED, "MOB_SPAWN_ALLOWED" = MOB_SPAWN_ALLOWED, @@ -213,7 +212,6 @@ DEFINE_BITFIELD(obj_flags, list( DEFINE_BITFIELD(pass_flags, list( "LETPASSTHROW" = LETPASSTHROW, - "PASSBLOB" = PASSBLOB, "PASSCLOSEDTURF" = PASSCLOSEDTURF, "PASSGLASS" = PASSGLASS, "PASSGRILLE" = PASSGRILLE, diff --git a/code/_globalvars/game_modes.dm b/code/_globalvars/game_modes.dm index 56037ab30389..a30e316f5326 100644 --- a/code/_globalvars/game_modes.dm +++ b/code/_globalvars/game_modes.dm @@ -5,10 +5,6 @@ GLOBAL_VAR(survivor_report) //Contains shared survivor report for roundend repor GLOBAL_VAR_INIT(wavesecret, 0) // meteor mode, delays wave progression, terrible name -GLOBAL_DATUM(start_state, /datum/station_state) // Used in round-end report - -//TODO clear this one up too -GLOBAL_DATUM(cult_narsie, /obj/singularity/narsie/large/cult) GLOBAL_DATUM(sac_mind, /datum/mind) // So Cryo can modify sac stuff GLOBAL_VAR_INIT(sac_image, null) diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm index 532ed3f888d7..15fbf39c6e24 100644 --- a/code/_globalvars/lists/maintenance_loot.dm +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -164,7 +164,7 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items /obj/item/roller = 1, /obj/item/restraints/legcuffs/bola = 1, /obj/item/restraints/handcuffs/cable = 1, - /obj/item/spear = 1, + /obj/item/melee/spear = 1, /obj/item/shield/riot/buckler = 1, /obj/item/grenade/iedcasing/spawned = 1, /obj/item/melee/baton/cattleprod = 1, @@ -243,7 +243,6 @@ GLOBAL_LIST_INIT(uncommon_loot, list(//uncommon: useful items )) GLOBAL_LIST_INIT(oddity_loot, list(//oddity: strange or crazy items - /obj/effect/rune/teleport = 1, /obj/item/clothing/gloves/color/yellow = 1, /obj/item/clothing/head/helmet/abductor = 1, /obj/item/clothing/head/helmet/justice =1, @@ -253,7 +252,7 @@ GLOBAL_LIST_INIT(oddity_loot, list(//oddity: strange or crazy items /obj/item/clothing/shoes/jackboots/fast = 1, /obj/item/clothing/suit/armor/reactive/table = 1, /obj/item/storage/box/donkpockets/donkpocketgondola = 1, - /obj/item/melee/greykingsword = 1 //WS - Meth Sword + /obj/item/melee/sword/greyking = 1 //WS - Meth Sword )) //Maintenance loot spawner pools diff --git a/code/_globalvars/lists/mapping.dm b/code/_globalvars/lists/mapping.dm index ff4237d1e892..332ac86582a0 100644 --- a/code/_globalvars/lists/mapping.dm +++ b/code/_globalvars/lists/mapping.dm @@ -30,7 +30,6 @@ GLOBAL_LIST_EMPTY(tdome2) GLOBAL_LIST_EMPTY(tdomeobserve) GLOBAL_LIST_EMPTY(tdomeadmin) GLOBAL_LIST_EMPTY(prisonwarped) //list of players already warped -GLOBAL_LIST_EMPTY(blobstart) //blobs, santa, respawning devils GLOBAL_LIST_EMPTY(secequipment) //sec equipment lockers that scale with the number of sec players GLOBAL_LIST_EMPTY(deathsquadspawn) GLOBAL_LIST_EMPTY(emergencyresponseteamspawn) diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 7ee53ec1f37b..6d08f1d1bceb 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -46,8 +46,6 @@ GLOBAL_LIST_EMPTY(apcs_list) GLOBAL_LIST_EMPTY(tracked_implants) /// List of implants the prisoner console can track and send inject commands too GLOBAL_LIST_EMPTY(tracked_chem_implants) -/// List of points of interest for observe/follow -GLOBAL_LIST_EMPTY(poi_list) /// List of all pinpointers. Used to change stuff they are pointing to all at once. GLOBAL_LIST_EMPTY(pinpointer_list) /// List of all zombie_infection organs, for any mass "animation" diff --git a/code/_globalvars/lists/poll_ignore.dm b/code/_globalvars/lists/poll_ignore.dm index e25b0b6e9a87..7fbc92bb8af5 100644 --- a/code/_globalvars/lists/poll_ignore.dm +++ b/code/_globalvars/lists/poll_ignore.dm @@ -11,7 +11,6 @@ #define POLL_IGNORE_CONSTRUCT "construct" #define POLL_IGNORE_SPIDER "spider" #define POLL_IGNORE_ASHWALKER "ashwalker" -#define POLL_IGNORE_SWARMER "swarmer" #define POLL_IGNORE_DRONE "drone" #define POLL_IGNORE_FUGITIVE "fugitive" #define POLL_IGNORE_DEFECTIVECLONE "defective_clone" //WS Edit - Cloning @@ -35,7 +34,6 @@ GLOBAL_LIST_INIT(poll_ignore_desc, list( POLL_IGNORE_CONSTRUCT = "Construct", POLL_IGNORE_SPIDER = "Spiders", POLL_IGNORE_ASHWALKER = "Ashwalker eggs", - POLL_IGNORE_SWARMER = "Swarmer shells", POLL_IGNORE_DRONE = "Drone shells", POLL_IGNORE_FUGITIVE = "Fugitive Hunter", POLL_IGNORE_DEFECTIVECLONE = "Defective clone", //WS Edit - Cloning diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index 5f5c26731d15..d87596cf828c 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -44,6 +44,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_RESISTCOLD" = TRAIT_RESISTCOLD, "TRAIT_RESISTHIGHPRESSURE" = TRAIT_RESISTHIGHPRESSURE, "TRAIT_RESISTLOWPRESSURE" = TRAIT_RESISTLOWPRESSURE, + "TRAIT_METALLIC" = TRAIT_METALLIC, "TRAIT_BOMBIMMUNE" = TRAIT_BOMBIMMUNE, "TRAIT_RADIMMUNE" = TRAIT_RADIMMUNE, "TRAIT_GENELESS" = TRAIT_GENELESS, @@ -147,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/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index 8e9fde4d1859..dc6dfd37cea7 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -37,7 +37,6 @@ //Middle left indicators #define ui_lingchemdisplay "WEST,CENTER-1:15" #define ui_lingstingdisplay "WEST:6,CENTER-3:11" -#define ui_devilsouldisplay "WEST:6,CENTER-1:15" //Lower center, persistent menu #define ui_sstore1 "CENTER-5:10,SOUTH:5" diff --git a/code/_onclick/hud/action_button.dm b/code/_onclick/hud/action_button.dm index fb2bac175034..6cd9aa8a0849 100644 --- a/code/_onclick/hud/action_button.dm +++ b/code/_onclick/hud/action_button.dm @@ -56,10 +56,16 @@ if(id && usr.client) //try to (un)remember position usr.client.prefs.action_buttons_screen_locs["[name]_[id]"] = locked ? moved : null return TRUE + var/trigger_flags + if(LAZYACCESS(modifiers, ALT_CLICK)) + if(locked) + to_chat(usr, "Action button \"[name]\" is locked, unlock it first.") + return TRUE + trigger_flags |= TRIGGER_SECONDARY_ACTION if(usr.next_click > world.time) return usr.next_click = world.time + 1 - linked_action.Trigger() + linked_action.Trigger(trigger_flags) return TRUE //Hide/Show Action Buttons ... Button diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index 43ae8ffbe246..3eefdb7c2f02 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -190,15 +190,40 @@ Override makes it so the alert is not replaced until cleared by a clear_alert wi icon_state = "gross3" /atom/movable/screen/alert/hot - name = "Too Hot" - desc = "You're flaming hot! Get somewhere cooler and take off any insulating clothing like a fire suit." + name = "Hot" + desc = "It's quite warm. Get somewhere cooler and take off any insulating clothing like a fire suit." + icon_state = "hot" + +/atom/movable/screen/alert/warm + name = "Warm" + desc = "It's a bit warm, but not unbearably so." icon_state = "hot" /atom/movable/screen/alert/cold - name = "Too Cold" - desc = "You're freezing cold! Get somewhere warmer and take off any insulating clothing like a space suit." + name = "Cold" + desc = "It's quite cold. Get somewhere warmer and take off any insulating clothing like a space suit." + icon_state = "cold" + +/atom/movable/screen/alert/chilly + name = "Chilly" + desc = "It's a bit chilly, but not unbearably so." icon_state = "cold" +/atom/movable/screen/alert/sweat + name = "Sweating" + desc = "You're sweating and the heat is starting to hurt. Get somewhere cooler and take off any insulating clothing like a fire suit." + icon_state = "sweat" + +/atom/movable/screen/alert/shiver + name = "Shivering" + desc = "You're shivering and the cold is starting to hurt. Get somewhere warmer and take off any insulating clothing like a space suit." + icon_state = "shiver" + +/atom/movable/screen/alert/fans + name = "High Fan Speed" + desc = "Your fans are spinning quite fast, and your components are reaching a dangerous temperature! Get somewhere cooler and take off any insulating clothing like a fire suit." + icon_state = "fans" + /atom/movable/screen/alert/lowpressure name = "Low Pressure" desc = "The air around you is hazardously thin. A space suit would protect you." @@ -420,123 +445,6 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." icon_state = "alien_noqueen" alerttooltipstyle = "alien" -//BLOBS - -/atom/movable/screen/alert/nofactory - name = "No Factory" - desc = "You have no factory, and are slowly dying!" - icon_state = "blobbernaut_nofactory" - alerttooltipstyle = "blob" - -// BLOODCULT - -/atom/movable/screen/alert/bloodsense - name = "Blood Sense" - desc = "Allows you to sense blood that is manipulated by dark magicks." - icon_state = "cult_sense" - alerttooltipstyle = "cult" - var/static/image/narnar - var/angle = 0 - var/mob/living/simple_animal/hostile/construct/Cviewer = null - -/atom/movable/screen/alert/bloodsense/Initialize() - . = ..() - narnar = new('icons/hud/screen_alert.dmi', "mini_nar") - START_PROCESSING(SSprocessing, src) - -/atom/movable/screen/alert/bloodsense/Destroy() - Cviewer = null - STOP_PROCESSING(SSprocessing, src) - return ..() - -/atom/movable/screen/alert/bloodsense/process() - var/atom/blood_target - - if(!owner.mind) - return - - var/datum/antagonist/cult/antag = owner.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - if(!antag) - return - var/datum/objective/sacrifice/sac_objective = locate() in antag.cult_team.objectives - - if(antag.cult_team.blood_target) - if(!get_turf(antag.cult_team.blood_target)) - antag.cult_team.blood_target = null - else - blood_target = antag.cult_team.blood_target - if(Cviewer && Cviewer.seeking && Cviewer.master) - blood_target = Cviewer.master - desc = "Your blood sense is leading you to [Cviewer.master]" - if(!blood_target) - if(sac_objective && !sac_objective.check_completion()) - if(icon_state == "runed_sense0") - return - animate(src, transform = null, time = 1, loop = 0) - angle = 0 - cut_overlays() - icon_state = "runed_sense0" - desc = "Nar'Sie demands that [sac_objective.target] be sacrificed before the summoning ritual can begin." - add_overlay(sac_objective.sac_image) - else - var/datum/objective/eldergod/summon_objective = locate() in antag.cult_team.objectives - if(!summon_objective) - return - desc = "The sacrifice is complete, summon Nar'Sie! The summoning can only take place in [english_list(summon_objective.summon_spots)]!" - if(icon_state == "runed_sense1") - return - animate(src, transform = null, time = 1, loop = 0) - angle = 0 - cut_overlays() - icon_state = "runed_sense1" - add_overlay(narnar) - return - var/turf/P = get_turf(blood_target) - var/turf/Q = get_turf(owner) - if(!P || !Q || (P.virtual_z()!= Q.virtual_z())) //The target is on a different Z level, we cannot sense that far. - icon_state = "runed_sense2" - desc = "You can no longer sense your target's presence." - return - if(isliving(blood_target)) - var/mob/living/real_target = blood_target - desc = "You are currently tracking [real_target.real_name] in [get_area_name(blood_target)]." - else - desc = "You are currently tracking [blood_target] in [get_area_name(blood_target)]." - var/target_angle = Get_Angle(Q, P) - var/target_dist = get_dist(P, Q) - cut_overlays() - switch(target_dist) - if(0 to 1) - icon_state = "runed_sense2" - if(2 to 8) - icon_state = "arrow8" - if(9 to 15) - icon_state = "arrow7" - if(16 to 22) - icon_state = "arrow6" - if(23 to 29) - icon_state = "arrow5" - if(30 to 36) - icon_state = "arrow4" - if(37 to 43) - icon_state = "arrow3" - if(44 to 50) - icon_state = "arrow2" - if(51 to 57) - icon_state = "arrow1" - if(58 to 64) - icon_state = "arrow0" - if(65 to 400) - icon_state = "arrow" - var/difference = target_angle - angle - angle = target_angle - if(!difference) - return - var/matrix/final = matrix(transform) - final.Turn(difference) - animate(src, transform = final, time = 5, loop = 0) - - //GUARDIANS /atom/movable/screen/alert/cancharge @@ -587,6 +495,29 @@ Recharging stations are available in robotics, the dormitory bathrooms, and the desc = "Your blood's electric charge is becoming dangerously high, find an outlet for your energy. Use Grab Intent on an APC to channel your energy into it." icon_state = "ethereal_overcharge" +//MODsuit unique +/atom/movable/screen/alert/nocore + name = "Missing Core" + desc = "Unit has no core. No modules available until a core is reinstalled. Robotics may provide assistance." + icon_state = "no_cell" + +/atom/movable/screen/alert/emptycell/plasma + name = "Out of Power" + desc = "Unit's plasma core has no charge remaining. No modules available until plasma core is recharged. \ + Unit can be refilled through plasma fuel." + +/atom/movable/screen/alert/emptycell/plasma/update_desc() + . = ..() + desc = initial(desc) + +/atom/movable/screen/alert/lowcell/plasma + name = "Low Charge" + desc = "Unit's plasma core is running low. Unit can be refilled through plasma fuel." + +/atom/movable/screen/alert/lowcell/plasma/update_desc() + . = ..() + desc = initial(desc) + //Need to cover all use cases - emag, illegal upgrade module, malf AI hack, traitor cyborg /atom/movable/screen/alert/hacked name = "Hacked" @@ -625,11 +556,11 @@ so as to remain in compliance with the most up-to-date laws." if(T) AI.eyeobj.setLoc(T) -//MECHS +//EXOSUITS /atom/movable/screen/alert/low_mech_integrity - name = "Mech Damaged" - desc = "Mech integrity is low." + name = "Exosuit Damaged" + desc = "Exosuit integrity is low." icon_state = "low_mech_integrity" diff --git a/code/_onclick/hud/blob_overmind.dm b/code/_onclick/hud/blob_overmind.dm deleted file mode 100644 index cd7597e33f0d..000000000000 --- a/code/_onclick/hud/blob_overmind.dm +++ /dev/null @@ -1,187 +0,0 @@ - -/atom/movable/screen/blob - icon = 'icons/mob/blob.dmi' - -/atom/movable/screen/blob/MouseEntered(location,control,params) - . = ..() - openToolTip(usr,src,params,title = name,content = desc, theme = "blob") - -/atom/movable/screen/blob/MouseExited() - closeToolTip(usr) - -/atom/movable/screen/blob/BlobHelp - icon_state = "ui_help" - name = "Blob Help" - desc = "Help on playing blob!" - -/atom/movable/screen/blob/BlobHelp/Click() - if(isovermind(usr)) - var/mob/camera/blob/B = usr - B.blob_help() - -/atom/movable/screen/blob/JumpToNode - icon_state = "ui_tonode" - name = "Jump to Node" - desc = "Moves your camera to a selected blob node." - -/atom/movable/screen/blob/JumpToNode/Click() - if(isovermind(usr)) - var/mob/camera/blob/B = usr - B.jump_to_node() - -/atom/movable/screen/blob/JumpToCore - icon_state = "ui_tocore" - name = "Jump to Core" - desc = "Moves your camera to your blob core." - -/atom/movable/screen/blob/JumpToCore/MouseEntered(location,control,params) - if(hud && hud.mymob && isovermind(hud.mymob)) - var/mob/camera/blob/B = hud.mymob - if(!B.placed) - name = "Place Blob Core" - desc = "Attempt to place your blob core at this location." - else - name = initial(name) - desc = initial(desc) - return ..() - -/atom/movable/screen/blob/JumpToCore/Click() - if(isovermind(usr)) - var/mob/camera/blob/B = usr - if(!B.placed) - B.place_blob_core(0) - B.transport_core() - -/atom/movable/screen/blob/Blobbernaut - icon_state = "ui_blobbernaut" - name = "Produce Blobbernaut (40)" - desc = "Produces a strong, smart blobbernaut from a factory blob for 40 resources.
The factory blob used will become fragile and unable to produce spores." - -/atom/movable/screen/blob/Blobbernaut/Click() - if(isovermind(usr)) - var/mob/camera/blob/B = usr - B.create_blobbernaut() - -/atom/movable/screen/blob/ResourceBlob - icon_state = "ui_resource" - name = "Produce Resource Blob (40)" - desc = "Produces a resource blob for 40 resources.
Resource blobs will give you resources every few seconds." - -/atom/movable/screen/blob/ResourceBlob/Click() - if(isovermind(usr)) - var/mob/camera/blob/B = usr - B.create_resource() - -/atom/movable/screen/blob/NodeBlob - icon_state = "ui_node" - name = "Produce Node Blob (50)" - desc = "Produces a node blob for 50 resources.
Node blobs will expand and activate nearby resource and factory blobs." - -/atom/movable/screen/blob/NodeBlob/Click() - if(isovermind(usr)) - var/mob/camera/blob/B = usr - B.create_node() - -/atom/movable/screen/blob/FactoryBlob - icon_state = "ui_factory" - name = "Produce Factory Blob (60)" - desc = "Produces a factory blob for 60 resources.
Factory blobs will produce spores every few seconds." - -/atom/movable/screen/blob/FactoryBlob/Click() - if(isovermind(usr)) - var/mob/camera/blob/B = usr - B.create_factory() - -/atom/movable/screen/blob/ReadaptStrain - icon_state = "ui_chemswap" - name = "Readapt Strain (40)" - desc = "Allows you to choose a new strain from 4 random choices for 40 resources." - -/atom/movable/screen/blob/ReadaptStrain/MouseEntered(location,control,params) - if(hud && hud.mymob && isovermind(hud.mymob)) - var/mob/camera/blob/B = hud.mymob - if(B.free_strain_rerolls) - name = "Readapt Strain (FREE)" - desc = "Randomly rerolls your strain for free." - else - name = initial(name) - desc = initial(desc) - ..() - -/atom/movable/screen/blob/ReadaptStrain/Click() - if(isovermind(usr)) - var/mob/camera/blob/B = usr - B.strain_reroll() - -/atom/movable/screen/blob/RelocateCore - icon_state = "ui_swap" - name = "Relocate Core (80)" - desc = "Swaps a node and your core for 80 resources." - -/atom/movable/screen/blob/RelocateCore/Click() - if(isovermind(usr)) - var/mob/camera/blob/B = usr - B.relocate_core() - -/datum/hud/blob_overmind/New(mob/owner) - ..() - var/atom/movable/screen/using - - blobpwrdisplay = new /atom/movable/screen() - blobpwrdisplay.name = "blob power" - blobpwrdisplay.icon_state = "block" - blobpwrdisplay.screen_loc = ui_health - blobpwrdisplay.mouse_opacity = MOUSE_OPACITY_TRANSPARENT - blobpwrdisplay.layer = ABOVE_HUD_LAYER - blobpwrdisplay.plane = ABOVE_HUD_PLANE - blobpwrdisplay.hud = src - infodisplay += blobpwrdisplay - - healths = new /atom/movable/screen/healths/blob() - healths.hud = src - infodisplay += healths - - using = new /atom/movable/screen/blob/BlobHelp() - using.screen_loc = "WEST:6,NORTH:-3" - using.hud = src - static_inventory += using - - using = new /atom/movable/screen/blob/JumpToNode() - using.screen_loc = ui_inventory - using.hud = src - static_inventory += using - - using = new /atom/movable/screen/blob/JumpToCore() - using.screen_loc = ui_zonesel - using.hud = src - static_inventory += using - - using = new /atom/movable/screen/blob/Blobbernaut() - using.screen_loc = ui_belt - using.hud = src - static_inventory += using - - using = new /atom/movable/screen/blob/ResourceBlob() - using.screen_loc = ui_back - using.hud = src - static_inventory += using - - using = new /atom/movable/screen/blob/NodeBlob() - using.screen_loc = ui_hand_position(2) - using.hud = src - static_inventory += using - - using = new /atom/movable/screen/blob/FactoryBlob() - using.screen_loc = ui_hand_position(1) - using.hud = src - static_inventory += using - - using = new /atom/movable/screen/blob/ReadaptStrain() - using.screen_loc = ui_storage1 - using.hud = src - static_inventory += using - - using = new /atom/movable/screen/blob/RelocateCore() - using.screen_loc = ui_storage2 - using.hud = src - static_inventory += using diff --git a/code/_onclick/hud/blobbernauthud.dm b/code/_onclick/hud/blobbernauthud.dm deleted file mode 100644 index 430e8e81e7f8..000000000000 --- a/code/_onclick/hud/blobbernauthud.dm +++ /dev/null @@ -1,11 +0,0 @@ - -/datum/hud/blobbernaut/New(mob/owner) - ..() - - blobpwrdisplay = new /atom/movable/screen/healths/blob/naut/core() - blobpwrdisplay.hud = src - infodisplay += blobpwrdisplay - - healths = new /atom/movable/screen/healths/blob/naut() - healths.hud = src - infodisplay += healths diff --git a/code/_onclick/hud/devil.dm b/code/_onclick/hud/devil.dm deleted file mode 100644 index 55fbeb26a7c9..000000000000 --- a/code/_onclick/hud/devil.dm +++ /dev/null @@ -1,69 +0,0 @@ - -//Soul counter is stored with the humans, it does weird when you place it here apparently... - - -/datum/hud/devil/New(mob/owner) - ..() - var/atom/movable/screen/using - - using = new /atom/movable/screen/drop() - using.icon = ui_style - using.screen_loc = ui_drone_drop - using.hud = src - static_inventory += using - - pull_icon = new /atom/movable/screen/pull() - pull_icon.icon = ui_style - pull_icon.update_appearance() - pull_icon.screen_loc = ui_drone_pull - pull_icon.hud = src - static_inventory += pull_icon - - build_hand_slots() - - using = new /atom/movable/screen/inventory() - using.name = "hand" - using.icon = ui_style - using.icon_state = "swap_1_m" - using.screen_loc = ui_swaphand_position(owner,1) - using.layer = HUD_LAYER - using.plane = HUD_PLANE - using.hud = src - static_inventory += using - - using = new /atom/movable/screen/inventory() - using.name = "hand" - using.icon = ui_style - using.icon_state = "swap_2" - using.screen_loc = ui_swaphand_position(owner,2) - using.layer = HUD_LAYER - using.plane = HUD_PLANE - using.hud = src - static_inventory += using - - zone_select = new /atom/movable/screen/zone_sel() - zone_select.icon = ui_style - zone_select.hud = src - zone_select.update_appearance() - - lingchemdisplay = new /atom/movable/screen/ling/chems() - lingchemdisplay.hud = src - - devilsouldisplay = new /atom/movable/screen/devil/soul_counter - devilsouldisplay.hud = src - infodisplay += devilsouldisplay - - -/datum/hud/devil/persistent_inventory_update() - if(!mymob) - return - var/mob/living/carbon/true_devil/D = mymob - - if(hud_version != HUD_STYLE_NOHUD) - for(var/obj/item/I in D.held_items) - I.screen_loc = ui_hand_position(D.get_held_index_of_item(I)) - D.client.screen += I - else - for(var/obj/item/I in D.held_items) - I.screen_loc = null - D.client.screen -= I diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 27b220d7fdb7..c8e99a395bfa 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -29,12 +29,9 @@ GLOBAL_LIST_INIT(available_ui_styles, list( var/atom/movable/screen/ling/chems/lingchemdisplay var/atom/movable/screen/ling/sting/lingstingdisplay - var/atom/movable/screen/blobpwrdisplay - var/atom/movable/screen/alien_plasma_display var/atom/movable/screen/alien_queen_finder - var/atom/movable/screen/devil/soul_counter/devilsouldisplay var/atom/movable/screen/combo/combo_display var/atom/movable/screen/action_intent @@ -111,9 +108,7 @@ GLOBAL_LIST_INIT(available_ui_styles, list( healthdoll = null internals = null lingchemdisplay = null - devilsouldisplay = null lingstingdisplay = null - blobpwrdisplay = null alien_plasma_display = null alien_queen_finder = null combo_display = null diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 0833d606927f..848702876f42 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -33,35 +33,6 @@ var/mob/living/carbon/human/H = usr H.quick_equip() -/atom/movable/screen/devil - icon = 'icons/hud/screen_devil.dmi' - invisibility = INVISIBILITY_ABSTRACT - -/atom/movable/screen/devil/soul_counter - name = "souls owned" - icon_state = "Devil-6" - screen_loc = ui_devilsouldisplay - -/atom/movable/screen/devil/soul_counter/proc/update_counter(souls = 0) - invisibility = 0 - maptext = "
[souls]
" - switch(souls) - if(0,null) - icon_state = "Devil-1" - if(1,2) - icon_state = "Devil-2" - if(3 to 5) - icon_state = "Devil-3" - if(6 to 8) - icon_state = "Devil-4" - if(9 to INFINITY) - icon_state = "Devil-5" - else - icon_state = "Devil-6" - -/atom/movable/screen/devil/soul_counter/proc/clear() - invisibility = INVISIBILITY_ABSTRACT - /atom/movable/screen/ling icon = 'icons/hud/screen_changeling.dmi' invisibility = INVISIBILITY_ABSTRACT @@ -338,10 +309,6 @@ lingstingdisplay.hud = src infodisplay += lingstingdisplay - devilsouldisplay = new /atom/movable/screen/devil/soul_counter - devilsouldisplay.hud = src - infodisplay += devilsouldisplay - zone_select = new /atom/movable/screen/zone_sel() zone_select.icon = ui_style zone_select.hud = src diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index ef1f614809fe..bf171d339912 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -597,22 +597,6 @@ icon = 'icons/hud/screen_cyborg.dmi' screen_loc = ui_borg_health -/atom/movable/screen/healths/blob - name = "blob health" - icon_state = "block" - screen_loc = ui_internal - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - -/atom/movable/screen/healths/blob/naut - name = "health" - icon = 'icons/mob/blob.dmi' - icon_state = "nauthealth" - -/atom/movable/screen/healths/blob/naut/core - name = "overmind health" - icon_state = "corehealth" - screen_loc = ui_health - /atom/movable/screen/healths/guardian name = "summoner health" icon = 'icons/mob/guardian.dmi' diff --git a/code/_onclick/hud/swarmer.dm b/code/_onclick/hud/swarmer.dm deleted file mode 100644 index 6aba23fab5c7..000000000000 --- a/code/_onclick/hud/swarmer.dm +++ /dev/null @@ -1,98 +0,0 @@ - - -/atom/movable/screen/swarmer - icon = 'icons/mob/swarmer.dmi' - -/atom/movable/screen/swarmer/FabricateTrap - icon_state = "ui_trap" - name = "Create trap (Costs 5 Resources)" - desc = "Creates a trap that will nonlethally shock any non-swarmer that attempts to cross it. (Costs 5 resources)" - -/atom/movable/screen/swarmer/FabricateTrap/Click() - if(isswarmer(usr)) - var/mob/living/simple_animal/hostile/swarmer/S = usr - S.CreateTrap() - -/atom/movable/screen/swarmer/Barricade - icon_state = "ui_barricade" - name = "Create barricade (Costs 5 Resources)" - desc = "Creates a destructible barricade that will stop any non swarmer from passing it. Also allows disabler beams to pass through. (Costs 5 resources)" - -/atom/movable/screen/swarmer/Barricade/Click() - if(isswarmer(usr)) - var/mob/living/simple_animal/hostile/swarmer/S = usr - S.CreateBarricade() - -/atom/movable/screen/swarmer/Replicate - icon_state = "ui_replicate" - name = "Replicate (Costs 50 Resources)" - desc = "Creates another of our kind." - -/atom/movable/screen/swarmer/Replicate/Click() - if(isswarmer(usr)) - var/mob/living/simple_animal/hostile/swarmer/S = usr - S.CreateSwarmer() - -/atom/movable/screen/swarmer/RepairSelf - icon_state = "ui_self_repair" - name = "Repair self" - desc = "Repairs damage to our body." - -/atom/movable/screen/swarmer/RepairSelf/Click() - if(isswarmer(usr)) - var/mob/living/simple_animal/hostile/swarmer/S = usr - S.RepairSelf() - -/atom/movable/screen/swarmer/ToggleLight - icon_state = "ui_light" - name = "Toggle light" - desc = "Toggles our inbuilt light on or off." - -/atom/movable/screen/swarmer/ToggleLight/Click() - if(isswarmer(usr)) - var/mob/living/simple_animal/hostile/swarmer/S = usr - S.ToggleLight() - -/atom/movable/screen/swarmer/ContactSwarmers - icon_state = "ui_contact_swarmers" - name = "Contact swarmers" - desc = "Sends a message to all other swarmers, should they exist." - -/atom/movable/screen/swarmer/ContactSwarmers/Click() - if(isswarmer(usr)) - var/mob/living/simple_animal/hostile/swarmer/S = usr - S.ContactSwarmers() - -/datum/hud/swarmer/New(mob/owner) - ..() - var/atom/movable/screen/using - - using = new /atom/movable/screen/swarmer/FabricateTrap() - using.screen_loc = ui_hand_position(2) - using.hud = src - static_inventory += using - - using = new /atom/movable/screen/swarmer/Barricade() - using.screen_loc = ui_hand_position(1) - using.hud = src - static_inventory += using - - using = new /atom/movable/screen/swarmer/Replicate() - using.screen_loc = ui_zonesel - using.hud = src - static_inventory += using - - using = new /atom/movable/screen/swarmer/RepairSelf() - using.screen_loc = ui_storage1 - using.hud = src - static_inventory += using - - using = new /atom/movable/screen/swarmer/ToggleLight() - using.screen_loc = ui_back - using.hud = src - static_inventory += using - - using = new /atom/movable/screen/swarmer/ContactSwarmers() - using.screen_loc = ui_inventory - using.hud = src - static_inventory += using diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index 806e3e6df328..8e848963567e 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -177,14 +177,6 @@ /atom/proc/attack_drone(mob/living/simple_animal/drone/user) attack_hand(user) //defaults to attack_hand. Override it when you don't want drones to do same stuff as humans. - -/* - True Devil -*/ - -/mob/living/carbon/true_devil/UnarmedAttack(atom/A, proximity) - A.attack_hand(src) - /* Brain */ diff --git a/code/_onclick/overmind.dm b/code/_onclick/overmind.dm deleted file mode 100644 index d6b8994f82f0..000000000000 --- a/code/_onclick/overmind.dm +++ /dev/null @@ -1,36 +0,0 @@ -// Blob Overmind Controls - - -/mob/camera/blob/ClickOn(atom/A, params) //Expand blob - var/list/modifiers = params2list(params) - if(LAZYACCESS(modifiers, MIDDLE_CLICK)) - MiddleClickOn(A, params) - return - if(LAZYACCESS(modifiers, SHIFT_CLICK)) - ShiftClickOn(A) - return - if(LAZYACCESS(modifiers, ALT_CLICK)) - AltClickOn(A) - return - if(LAZYACCESS(modifiers, CTRL_CLICK)) - CtrlClickOn(A) - return - var/turf/T = get_turf(A) - if(T) - expand_blob(T) - -/mob/camera/blob/MiddleClickOn(atom/A) //Rally spores - . = ..() - var/turf/T = get_turf(A) - if(T) - rally_spores(T) - -/mob/camera/blob/CtrlClickOn(atom/A) //Create a shield - var/turf/T = get_turf(A) - if(T) - create_shield(T) - -/mob/camera/blob/AltClickOn(atom/A) //Remove a blob - var/turf/T = get_turf(A) - if(T) - remove_blob(T) diff --git a/code/controllers/subsystem/blackmarket.dm b/code/controllers/subsystem/blackmarket.dm index cbd07fcd8fda..99a6932570b8 100644 --- a/code/controllers/subsystem/blackmarket.dm +++ b/code/controllers/subsystem/blackmarket.dm @@ -6,7 +6,8 @@ SUBSYSTEM_DEF(blackmarket) /// Descriptions for each shipping methods. var/shipping_method_descriptions = list( SHIPPING_METHOD_LAUNCH="Launches the item at your coordinates from across deep space. Cheap, but you might not recieve your item at all. We recommend being stationary in space, away from any large structures, for best results.", - SHIPPING_METHOD_LTSRBT="Long-To-Short-Range-Bluespace-Transceiver, a machine that prepares items at a remote storage location and then teleports them to the location of the LTRSBT." + SHIPPING_METHOD_DEAD_DROP="Our couriers will fire your item via orbital drop pod at the nearest safe abandoned structure for discreet pick up. Reliable, but you'll have to find your package yourself. We accept no responsibility for lost packages if you try to do this in empty space or the outpost.", + SHIPPING_METHOD_LTSRBT="Long-To-Short-Range-Bluespace-Transceiver, a machine that prepares items at a remote storage location and then teleports them to the location of the LTRSBT. Secure, quick and reliable, though it ain't cheap to do." ) /// List of all existing markets. @@ -32,6 +33,9 @@ SUBSYSTEM_DEF(blackmarket) markets[M].add_item(item, FALSE) qdel(I) + for(var/market in markets) + var/datum/blackmarket_market/market_to_cycle = markets[market] + market_to_cycle.cycle_stock() . = ..() /datum/controller/subsystem/blackmarket/fire(resumed) @@ -62,16 +66,72 @@ SUBSYSTEM_DEF(blackmarket) var/startSide = pick(GLOB.cardinals) var/turf/T = get_turf(purchase.uplink) var/datum/virtual_level/vlevel = T.get_virtual_level() - var/pickedloc = vlevel.get_side_turf(startSide) + var/turf/pickedloc + + switch(startSide) + if(NORTH) + pickedloc = locate(T.x, (vlevel.high_y - vlevel.reserved_margin),T.z) + if(EAST) + pickedloc = locate((vlevel.high_x - vlevel.reserved_margin), T.y ,T.z) + if(SOUTH) + pickedloc = locate(T.x, (vlevel.low_y + vlevel.reserved_margin),T.z) + if(WEST) + pickedloc = locate((vlevel.low_x + vlevel.reserved_margin), T.y ,T.z) + else + pickedloc = vlevel.get_side_turf(startSide) var/atom/movable/item = purchase.entry.spawn_item(pickedloc) - item.safe_throw_at(purchase.uplink, 3, 3, spin = FALSE) - + item.Move(get_step(pickedloc,get_dir(pickedloc,T))) to_chat(recursive_loc_check(purchase.uplink.loc, /mob), "[purchase.uplink] flashes a message noting the order is being launched at your coordinates from [dir2text(startSide)].") queued_purchases -= purchase qdel(purchase) + // Drop the order somewhere with the bounds of overmap encounter's ruin + if(SHIPPING_METHOD_DEAD_DROP) + var/datum/overmap/dynamic/overmap_loc = SSovermap.get_overmap_object_by_location(purchase.uplink, TRUE) + var/datum/virtual_level/zlevel = purchase.uplink.get_virtual_level() + var/turf/landing_turf + var/datum/map_template/ruin + if(!isnull(overmap_loc)) + for(var/possible_ruin in overmap_loc.ruin_turfs) + var/turf/lowerbound = overmap_loc.ruin_turfs[possible_ruin] + ruin = overmap_loc.spawned_ruins[possible_ruin] + var/list/possible_ruin_turfs = zlevel.get_block_portion(lowerbound.x,lowerbound.y,(lowerbound.x + ruin.width),(lowerbound.y + ruin.height)) + for(var/cycle in 1 to length(possible_ruin_turfs)) + var/potential_turf = pick_n_take(possible_ruin_turfs) + if(!isopenturf(potential_turf)) + continue + var/turf/open/potential_open_turf = potential_turf + if(ischasm(potential_open_turf)) + continue + if(islava(potential_open_turf)) + var/turf/open/lava/potential_lava_floor = potential_open_turf + if(!potential_lava_floor.is_safe()) + continue + if(istype(potential_open_turf, /turf/open/water/acid)) + var/turf/open/water/acid/potential_acid_floor = potential_open_turf + if(!potential_acid_floor.is_safe_to_cross()) + continue + if(potential_open_turf.is_blocked_turf()) + continue + + //yippee, there's a viable turf for the package to land on + landing_turf = potential_open_turf + to_chat(recursive_loc_check(purchase.uplink.loc, /mob),"[purchase.uplink] flashes a message noting the order is being launched at a structure in your local area.") + break + + if(!landing_turf) + landing_turf = zlevel.get_random_position_in_margin() + to_chat(recursive_loc_check(purchase.uplink.loc, /mob), "[purchase.uplink] flashes a message that the pod was unable to reach it's designated landing spot, and has landed somewhere in the local area instead.") + + var/obj/structure/closet/supplypod/pod = new() + pod.setStyle(STYLE_BOX) + purchase.entry.spawn_item(pod) + pod.explosionSize = list(0,0,0,1) + new /obj/effect/pod_landingzone(landing_turf, pod) + queued_purchases -= purchase + qdel(purchase) if(MC_TICK_CHECK) break diff --git a/code/controllers/subsystem/faction.dm b/code/controllers/subsystem/faction.dm new file mode 100644 index 000000000000..106fb4687b83 --- /dev/null +++ b/code/controllers/subsystem/faction.dm @@ -0,0 +1,32 @@ +SUBSYSTEM_DEF(factions) + name = "Faction" + init_order = INIT_ORDER_FACTION + flags = SS_NO_FIRE + var/list/datum/faction/factions = list() + +/datum/controller/subsystem/factions/Initialize(timeofday) + for(var/path in subtypesof(/datum/faction)) + factions += new path() + return ..() + +/datum/controller/subsystem/factions/proc/ship_prefix_to_faction(prefix) + for(var/datum/faction/faction in factions) + if(prefix in faction.prefixes) + return faction + var/static/list/screamed = list() + if(!(prefix in screamed)) + screamed += prefix + stack_trace("attempted to get faction for unknown prefix [prefix]") + return null + +/datum/controller/subsystem/factions/proc/ship_prefix_to_name(prefix) + var/datum/faction/faction = ship_prefix_to_faction(prefix) + if(faction) + return faction.name + return "?!ERR!?" + +/datum/controller/subsystem/factions/proc/faction_path_to_datum(path) + for(var/datum/faction/faction in factions) + if(faction.type == path) + return faction + stack_trace("we did not return any faction with path [path]") diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index 03720e4d641f..3fecc68fbfe4 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -42,6 +42,28 @@ SUBSYSTEM_DEF(mapping) /// Translation of virtual level ID to a virtual level reference var/list/virtual_z_translation = list() + /// List of z level (as number) -> plane offset of that z level + /// Used to maintain the plane cube + var/list/z_level_to_plane_offset = list() + /// List of z level (as number) -> The lowest plane offset in that z stack + var/list/z_level_to_lowest_plane_offset = list() + // This pair allows for easy conversion between an offset plane, and its true representation + // Both are in the form "input plane" -> output plane(s) + /// Assoc list of string plane values to their true, non offset representation + var/list/plane_offset_to_true + /// Assoc list of true string plane values to a list of all potential offset planess + var/list/true_to_offset_planes + /// Assoc list of string plane to the plane's offset value + var/list/plane_to_offset + /// List of planes that do not allow for offsetting + var/list/plane_offset_blacklist + /// List of render targets that do not allow for offsetting + var/list/render_offset_blacklist + /// List of plane masters that are of critical priority + var/list/critical_planes + /// The largest plane offset we've generated so far + var/max_plane_offset = 0 + /datum/controller/subsystem/mapping/Initialize(timeofday) if(initialized) return @@ -184,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/controllers/subsystem/overmap.dm b/code/controllers/subsystem/overmap.dm index 1304eeeb34ea..113bfefa7a52 100644 --- a/code/controllers/subsystem/overmap.dm +++ b/code/controllers/subsystem/overmap.dm @@ -291,6 +291,7 @@ SUBSYSTEM_DEF(overmap) mapgen.generate_turfs(vlevel.get_unreserved_block()) var/list/ruin_turfs = list() + var/list/ruin_templates = list() if(used_ruin) var/turf/ruin_turf = locate( rand( @@ -302,6 +303,7 @@ SUBSYSTEM_DEF(overmap) ) used_ruin.load(ruin_turf) ruin_turfs[used_ruin.name] = ruin_turf + ruin_templates[used_ruin.name] = used_ruin // fill in the turfs, AFTER generating the ruin. this prevents them from generating within the ruin // and ALSO prevents the ruin from being spaced when it spawns in @@ -376,7 +378,7 @@ SUBSYSTEM_DEF(overmap) quaternary_dock.dwidth = 0 docking_ports += quaternary_dock - return list(mapzone, docking_ports, ruin_turfs) + return list(mapzone, docking_ports, ruin_turfs, ruin_templates) /** * Returns a random, usually empty turf in the overmap @@ -418,10 +420,10 @@ SUBSYSTEM_DEF(overmap) * Gets the parent overmap object (e.g. the planet the atom is on) for a given atom. * * source - The object you want to get the corresponding parent overmap object for. */ -/datum/controller/subsystem/overmap/proc/get_overmap_object_by_location(atom/source) +/datum/controller/subsystem/overmap/proc/get_overmap_object_by_location(atom/source, exclude_ship = FALSE) var/turf/T = get_turf(source) var/area/ship/A = get_area(source) - while(istype(A) && A.mobile_port) + while(istype(A) && A.mobile_port && !exclude_ship) if(A.mobile_port.current_ship) return A.mobile_port.current_ship A = A.mobile_port.underlying_turf_area[T] diff --git a/code/controllers/subsystem/points_of_interest.dm b/code/controllers/subsystem/points_of_interest.dm new file mode 100644 index 000000000000..6de327bc8666 --- /dev/null +++ b/code/controllers/subsystem/points_of_interest.dm @@ -0,0 +1,227 @@ +/// Subsystem for managing all POIs. +SUBSYSTEM_DEF(points_of_interest) + name = "Points of Interest" + + flags = SS_NO_FIRE | SS_NO_INIT + + /// List of mob POIs. This list is automatically sorted. + var/list/datum/point_of_interest/mob_poi/mob_points_of_interest = list() + /// List of non-mob POIs. This list is automatically sorted. + var/list/datum/point_of_interest/other_points_of_interest = list() + /// List of all value:POI datums by their key:target refs. + var/list/datum/point_of_interest/points_of_interest_by_target_ref = list() + +/** + * Turns new_poi into a new point of interest by adding the /datum/element/point_of_interest element to it. + */ +/datum/controller/subsystem/points_of_interest/proc/make_point_of_interest(atom/new_poi) + new_poi.AddElement(/datum/element/point_of_interest) + +/** + * Stops old_poi from being a point of interest by removing the /datum/element/point_of_interest element from it. + */ +/datum/controller/subsystem/points_of_interest/proc/remove_point_of_interest(atom/old_poi) + old_poi.RemoveElement(/datum/element/point_of_interest) + +/** + * Called by [/datum/element/point_of_interest] when it gets removed from old_poi. + */ +/datum/controller/subsystem/points_of_interest/proc/on_poi_element_added(atom/new_poi) + var/datum/point_of_interest/new_poi_datum + if(ismob(new_poi)) + new_poi_datum = new /datum/point_of_interest/mob_poi(new_poi) + BINARY_INSERT_PROC_COMPARE(new_poi_datum, mob_points_of_interest, /datum/point_of_interest/mob_poi, new_poi_datum, compare_to, COMPARE_KEY) + points_of_interest_by_target_ref[REF(new_poi)] = new_poi_datum + else + new_poi_datum = new /datum/point_of_interest(new_poi) + BINARY_INSERT_PROC_COMPARE(new_poi_datum, other_points_of_interest, /datum/point_of_interest, new_poi_datum, compare_to, COMPARE_KEY) + points_of_interest_by_target_ref[REF(new_poi)] = new_poi_datum + + + SEND_SIGNAL(src, COMSIG_ADDED_POINT_OF_INTEREST, new_poi) + +/** + * Called by [/datum/element/point_of_interest] when it gets removed from old_poi. + */ +/datum/controller/subsystem/points_of_interest/proc/on_poi_element_removed(atom/old_poi) + var/poi_ref = REF(old_poi) + var/datum/point_of_interest/poi_to_remove = points_of_interest_by_target_ref[poi_ref] + + if(!poi_to_remove) + return + + if(ismob(old_poi)) + mob_points_of_interest -= poi_to_remove + else + other_points_of_interest -= poi_to_remove + + points_of_interest_by_target_ref -= poi_ref + + poi_to_remove.target = null + + SEND_SIGNAL(src, COMSIG_REMOVED_POINT_OF_INTEREST, old_poi) + +/** + * If there is a valid POI for a given reference, it returns that POI's associated atom. Otherwise, it returns null. + */ +/datum/controller/subsystem/points_of_interest/proc/get_poi_atom_by_ref(reference) + return points_of_interest_by_target_ref[reference]?.target + +/** + * Returns a list of mob POIs with names as keys and mobs as values. + * + * If multiple POIs have the same name, then avoid_assoc_duplicate_keys is used alongside used_name_list to + * tag them as Mob Name (1), Mob Name (2), Mob Name (3) etc. + * + * Arguments: + * * poi_validation_override - [OPTIONAL] Callback to a proc that takes a single argument for the POI and returns TRUE if this POI should be included. Overrides standard POI validation. + * * append_dead_role - [OPTIONAL] If TRUE, adds a ghost tag to the end of observer names and a dead tag to the end of any other mob which is not alive. + */ +/datum/controller/subsystem/points_of_interest/proc/get_mob_pois(datum/callback/poi_validation_override = null, append_dead_role = TRUE) + var/list/pois = list() + var/list/used_name_list = list() + + for(var/datum/point_of_interest/mob_poi/mob_poi as anything in mob_points_of_interest) + if(poi_validation_override) + if(!poi_validation_override.Invoke(mob_poi)) + continue + else if(!mob_poi.validate()) + continue + + var/mob/target_mob = mob_poi.target + var/name = avoid_assoc_duplicate_keys(target_mob.name, used_name_list) + target_mob.get_realname_string() + + // Add the ghost/dead tag to the end of dead mob POIs. + if(append_dead_role && target_mob.stat == DEAD) + if(isobserver(target_mob)) + name += " \[ghost\]" + else + name += " \[dead\]" + + pois[name] = target_mob + + return pois + +/** + * Returns a list of non-mob POIs with names as keys and atoms as values. + * + * If multiple POIs have the same name, then avoid_assoc_duplicate_keys is used alongside used_name_list to + * tag them as Object Name (1), Object Name (2), Object Name (3) etc. + * + * Arguments: + * * poi_validation_override - [OPTIONAL] Callback to a proc that takes a single argument for the POI and returns TRUE if this POI should be included. Overrides standard POI validation. + */ +/datum/controller/subsystem/points_of_interest/proc/get_other_pois(datum/callback/poi_validation_override = null) + var/list/pois = list() + var/list/used_name_list = list() + + for(var/datum/point_of_interest/other_poi as anything in other_points_of_interest) + if(poi_validation_override) + if(!poi_validation_override.Invoke(other_poi)) + continue + else if(!other_poi.validate()) + continue + + var/atom/target_poi = other_poi.target + + pois[avoid_assoc_duplicate_keys(target_poi.name, used_name_list)] = target_poi + + return pois + +/// Returns TRUE if potential_poi has an associated poi_datum that validates. +/datum/controller/subsystem/points_of_interest/proc/is_valid_poi(atom/potential_poi, datum/callback/poi_validation_override = null) + var/datum/point_of_interest/poi_datum = points_of_interest_by_target_ref[REF(potential_poi)] + + if(!poi_datum) + return FALSE + + if(poi_validation_override) + return poi_validation_override.Invoke(poi_datum) + + return poi_datum.validate() + +/// Simple helper datum for points of interest. +/datum/point_of_interest + /// The specific point of interest this datum references. This won't hard del as the POI element will be removed from the target when it qdels, which will clear this reference. + var/atom/target + /// The type of POI this datum references. + var/poi_type = /atom + +/datum/point_of_interest/New(poi_target) + if(!istype(poi_target, poi_type)) + CRASH("Incorrect target type provided to /datum/point_of_interest/New: Expected \[[poi_type]\]") + + target = poi_target + +/// Validates the POI. Returns TRUE if the POI has valid state, returns FALSE if the POI has invalid state. +/datum/point_of_interest/proc/validate() + // In nullspace, invalid as a POI. + if(!target.loc) + return FALSE + + return TRUE + +/// Comparison proc used to sort POIs. Override to implement logic used doing binary sort insertions. +/datum/point_of_interest/proc/compare_to(datum/point_of_interest/rhs) + return cmp_name_asc(target, rhs.target) + +/datum/point_of_interest/mob_poi + poi_type = /mob + +/// Validation for mobs is expanded to invalidate stealthmins and /mob/dead/new_player as POIs. +/datum/point_of_interest/mob_poi/validate() + . = ..() + + if(!.) + return + + var/mob/poi_mob = target + + // Stealthmin, invalid as a POI. + if(poi_mob.client?.holder?.fakekey) + return FALSE + + /* + // POI is a /mob/dead/new_player, players in the lobby are invalid as POIs. + if(isnewplayer(poi_mob)) + return FALSE + */ + + return TRUE + +/// Mob POIs are sorted by a simple priority list depending on their type. When their type priority is identical, they're sub-sorted by name. +/datum/point_of_interest/mob_poi/compare_to(datum/point_of_interest/mob_poi/rhs) + var/sort_difference = get_type_sort_priority() - rhs.get_type_sort_priority() + + // If they're equal in priority, call parent to sort by name. + if(sort_difference == 0) + return ..() + // Else sort by priority. + else + return sort_difference + +/// Priority list broadly stolen from /proc/sortmobs(). Lower numbers are higher priorities when sorted and appear closer to the top or start of lists. +/datum/point_of_interest/mob_poi/proc/get_type_sort_priority() + if(isAI(target)) + return 0 + if(iscameramob(target)) + return 1 + if(ispAI(target)) + return 2 + if(iscyborg(target)) + return 3 + if(ishuman(target)) + return 4 + if(isbrain(target)) + return 5 + if(isalien(target)) + return 6 + if(isobserver(target)) + return 7 + if(isnewplayer(target)) + return 8 + if(isslime(target)) + return 9 + if(isanimal(target)) + return 10 + return 11 diff --git a/code/controllers/subsystem/research.dm b/code/controllers/subsystem/research.dm index c8f3756c27cf..149df9bc9643 100644 --- a/code/controllers/subsystem/research.dm +++ b/code/controllers/subsystem/research.dm @@ -23,7 +23,6 @@ SUBSYSTEM_DEF(research) var/list/techweb_categories = list() //category name = list(node.id = TRUE) var/list/techweb_boost_items = list() //associative double-layer path = list(id = list(point_type = point_discount)) var/list/techweb_nodes_hidden = list() //Node ids that should be hidden by default. - var/list/techweb_nodes_experimental = list() //Node ids that are exclusive to the BEPIS. var/list/techweb_point_items = list( //path = list(point type = value) /obj/item/assembly/signaler/anomaly = list(TECHWEB_POINT_TYPE_GENERIC = 10000) @@ -217,8 +216,6 @@ SUBSYSTEM_DEF(research) D.unlocked_by += node.id if(node.hidden) techweb_nodes_hidden[node.id] = TRUE - if(node.experimental) - techweb_nodes_experimental[node.id] = TRUE CHECK_TICK generate_techweb_unlock_linking() diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index f56fd9e73ab9..552ce70453dd 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -150,7 +150,7 @@ SUBSYSTEM_DEF(shuttle) mapzone.parallax_movedir = travel_dir - var/area/shuttle/transit/transit_area = new() + var/area/hyperspace/transit_area = new() vlevel.fill_in(transit_path, transit_area) diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 6ae8b0e62409..5ca963c53472 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -300,8 +300,6 @@ SUBSYSTEM_DEF(ticker) /datum/controller/subsystem/ticker/proc/PostSetup() set waitfor = FALSE mode.post_setup() - GLOB.start_state = new /datum/station_state() - GLOB.start_state.count() var/list/adm = get_admin_counts() var/list/allmins = adm["present"] @@ -444,18 +442,6 @@ SUBSYSTEM_DEF(ticker) news_message = "[station_name()] has been evacuated after transmitting the following distress beacon:\n\n[emergency_reason]" else news_message = "The crew of [station_name()] has been evacuated amid unconfirmed reports of enemy activity." - if(BLOB_WIN) - news_message = "[station_name()] was overcome by an unknown biological outbreak, killing all crew on board. Don't let it happen to you! Remember, a clean work station is a safe work station." - if(BLOB_NUKE) - news_message = "[station_name()] is currently undergoing decontanimation after a controlled burst of radiation was used to remove a biological ooze. All employees were safely evacuated prior, and are enjoying a relaxing vacation." - if(BLOB_DESTROYED) - news_message = "[station_name()] is currently undergoing decontamination procedures after the destruction of a biological hazard. As a reminder, any crew members experiencing cramps or bloating should report immediately to security for incineration." - if(CULT_ESCAPE) - news_message = "Security Alert: A group of religious fanatics have escaped from [station_name()]." - if(CULT_FAILURE) - news_message = "Following the dismantling of a restricted cult aboard [station_name()], we would like to remind all employees that worship outside of the Chapel is strictly prohibited, and cause for termination." - if(CULT_SUMMON) - news_message = "Company officials would like to clarify that [station_name()] was scheduled to be decommissioned following meteor damage earlier this year. Earlier reports of an unknowable eldritch horror were made in error." if(NUKE_MISS) news_message = "The Syndicate have bungled a terrorist attack [station_name()], detonating a nuclear weapon in empty space nearby." if(OPERATIVES_KILLED) diff --git a/code/controllers/subsystem/traumas.dm b/code/controllers/subsystem/traumas.dm index 25ae750eb0d3..9688f008ffba 100644 --- a/code/controllers/subsystem/traumas.dm +++ b/code/controllers/subsystem/traumas.dm @@ -44,10 +44,9 @@ SUBSYSTEM_DEF(traumas) "skeletons" = typecacheof(list(/mob/living/simple_animal/hostile/human/skeleton)), "snakes" = typecacheof(list(/mob/living/simple_animal/hostile/retaliate/poison/snake)), "robots" = typecacheof(list(/mob/living/silicon/robot, /mob/living/silicon/ai, - /mob/living/simple_animal/drone, /mob/living/simple_animal/bot, /mob/living/simple_animal/hostile/swarmer)), + /mob/living/simple_animal/drone, /mob/living/simple_animal/bot)), "doctors" = typecacheof(list(/mob/living/simple_animal/bot/medbot)), - "the supernatural" = typecacheof(list(/mob/living/simple_animal/hostile/construct, - /mob/living/simple_animal/revenant, /mob/living/simple_animal/shade)), + "the supernatural" = typecacheof(list(/mob/living/simple_animal/revenant)), "aliens" = typecacheof(list(/mob/living/carbon/alien, /mob/living/simple_animal/slime, /mob/living/simple_animal/hostile/facehugger)), "conspiracies" = typecacheof(list(/mob/living/simple_animal/bot/secbot, /mob/living/simple_animal/drone, /mob/living/simple_animal/pet/penguin)), @@ -68,14 +67,14 @@ SUBSYSTEM_DEF(traumas) /obj/machinery/door/airlock/security, /obj/effect/hallucination/simple/securitron)), "clowns" = typecacheof(list( - /obj/item/clothing/under/rank/civilian/clown, /obj/item/clothing/shoes/clown_shoes, + /obj/item/clothing/under/rank/civilian/clown, /obj/item/clothing/mask/gas/clown_hat, /obj/item/instrument/bikehorn, /obj/item/pda/clown, /obj/item/grown/bananapeel, /obj/item/reagent_containers/food/snacks/cheesiehonkers, /obj/item/trash/cheesie)), "greytide" = typecacheof(list( /obj/item/clothing/under/color/grey, /obj/item/melee/baton/cattleprod, - /obj/item/spear, /obj/item/clothing/mask/gas)), + /obj/item/melee/spear, /obj/item/clothing/mask/gas)), "lizards" = typecacheof(list( /obj/item/toy/plush/lizardplushie, /obj/item/organ/tail/lizard, @@ -104,7 +103,7 @@ SUBSYSTEM_DEF(traumas) "robots" = typecacheof(list( /obj/machinery/computer/upload, /obj/item/aiModule/, /obj/machinery/recharge_station, - /obj/item/aicard, /obj/item/deactivated_swarmer, /obj/effect/mob_spawn/swarmer)), + /obj/item/aicard)), "doctors" = typecacheof(list( /obj/item/clothing/under/rank/medical, @@ -113,7 +112,7 @@ SUBSYSTEM_DEF(traumas) /obj/structure/sign/departments/medbay, /obj/machinery/door/airlock/medical, /obj/machinery/sleeper, /obj/machinery/stasis, /obj/machinery/dna_scannernew, /obj/machinery/atmospherics/components/unary/cryo_cell, /obj/item/retractor, /obj/item/hemostat, /obj/item/cautery, /obj/item/surgicaldrill, /obj/item/scalpel, /obj/item/circular_saw, - /obj/item/clothing/suit/bio_suit/plaguedoctorsuit, /obj/item/clothing/head/plaguedoctorhat, /obj/item/clothing/mask/gas/plaguedoctor)), + /obj/item/clothing/suit/bio_suit/plaguedoctorsuit, /obj/item/clothing/mask/gas/plaguedoctor)), "authority" = typecacheof(list( /obj/item/clothing/under/rank/command/captain, /obj/item/clothing/under/rank/command/head_of_personnel, @@ -124,15 +123,9 @@ SUBSYSTEM_DEF(traumas) /obj/item/card/id/captains_spare, /obj/item/card/id/centcom, /obj/machinery/door/airlock/command)), "the supernatural" = typecacheof(list( - /obj/structure/destructible/cult, /obj/item/tome, - /obj/item/melee/cultblade, /obj/item/cult_bastard, - /obj/item/restraints/legcuffs/bola/cult, /obj/item/clothing/suit/space/hardsuit/cult, - /obj/item/clothing/suit/hooded/cultrobes, /obj/item/clothing/head/hooded/cult_hoodie, /obj/effect/rune, - /obj/machinery/door/airlock/cult, /obj/singularity/narsie, - /obj/item/soulstone, /obj/item/clothing/suit/wizrobe, /obj/item/clothing/head/wizard, /obj/item/spellbook, /obj/item/staff, /obj/item/clothing/suit/space/hardsuit/shielded/wizard, /obj/item/clothing/suit/space/hardsuit/wizard, - /obj/item/nullrod, /obj/item/clothing/under/rank/civilian/chaplain)), + /obj/item/clothing/under/rank/civilian/chaplain)), "aliens" = typecacheof(list( /obj/item/clothing/mask/facehugger_item, /obj/item/organ/body_egg/alien_embryo, @@ -147,22 +140,21 @@ SUBSYSTEM_DEF(traumas) "birds" = typecacheof(list( /obj/item/clothing/mask/gas/plaguedoctor, /obj/item/reagent_containers/food/snacks/cracker, - /obj/item/clothing/suit/chickensuit, /obj/item/clothing/head/chicken, /obj/item/clothing/suit/toggle/owlwings, /obj/item/clothing/under/costume/owl, /obj/item/clothing/mask/gas/owl_mask)), "anime" = typecacheof(list( - /obj/item/clothing/under/costume/schoolgirl, /obj/item/katana, /obj/item/reagent_containers/food/snacks/sashimi, + /obj/item/clothing/under/costume/schoolgirl, /obj/item/reagent_containers/food/snacks/sashimi, /obj/item/reagent_containers/food/snacks/chawanmushi, /obj/item/reagent_containers/food/drinks/bottle/sake, /obj/item/throwing_star, /obj/item/clothing/suit/space/space_ninja, /obj/item/clothing/mask/gas/space_ninja, /obj/item/clothing/shoes/space_ninja, /obj/item/clothing/gloves/space_ninja, - /obj/item/vibro_weapon, /obj/item/nullrod/scythe/vibro, /obj/item/energy_katana, /obj/item/toy/katana, - /obj/item/nullrod/claymore/katana, /obj/structure/window/paperframe, /obj/structure/mineral_door/paperframe)) + /obj/item/melee/sword/vibro, /obj/item/melee/sword/energy_katana, /obj/item/toy/katana, + /obj/item/melee/sword/katana, /obj/structure/window/paperframe, /obj/structure/mineral_door/paperframe)) ) phobia_turfs = list( "space" = typecacheof(list(/turf/open/space, /turf/open/floor/holofloor/space, /turf/open/floor/fakespace)), - "the supernatural" = typecacheof(list(/turf/open/floor/plasteel/cult, /turf/closed/wall/mineral/cult)), + "the supernatural" = typecacheof(/turf/closed/wall/mineral/cult, /turf/open/floor/plasteel/cult), "aliens" = typecacheof(list( /turf/open/floor/plating/abductor, /turf/open/floor/plating/abductor2, /turf/open/floor/mineral/abductor, /turf/closed/wall/mineral/abductor)), diff --git a/code/datums/action.dm b/code/datums/action.dm index cdca8729984f..9bc58c399dd4 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -1,8 +1,3 @@ -#define AB_CHECK_HANDS_BLOCKED (1<<0) -#define AB_CHECK_IMMOBILE (1<<1) -#define AB_CHECK_LYING (1<<2) -#define AB_CHECK_CONSCIOUS (1<<3) - /datum/action var/name = "Generic Action" var/desc = null @@ -91,7 +86,7 @@ button.locked = FALSE button.id = null -/datum/action/proc/Trigger() +/datum/action/proc/Trigger(trigger_flags) if(!IsAvailable()) return FALSE if(SEND_SIGNAL(src, COMSIG_ACTION_TRIGGER, src) & COMPONENT_ACTION_BLOCK_TRIGGER) @@ -254,6 +249,9 @@ /datum/action/item_action/toggle_mister name = "Toggle Mister" +/datum/action/item_action/toggle_gear_handle + name = "Toggle Gear Handle" + /datum/action/item_action/activate_injector name = "Activate Injector" @@ -475,44 +473,6 @@ name = "Use [target.name]" button.name = name -/datum/action/item_action/cult_dagger - name = "Draw Blood Rune" - desc = "Use the ritual dagger to create a powerful blood rune" - icon_icon = 'icons/mob/actions/actions_cult.dmi' - button_icon_state = "draw" - buttontooltipstyle = "cult" - background_icon_state = "bg_demon" - -/datum/action/item_action/cult_dagger/Grant(mob/M) - if(iscultist(M)) - ..() - button.screen_loc = "6:157,4:-2" - button.moved = "6:157,4:-2" - else - Remove(owner) - - -/datum/action/item_action/cult_dagger/Trigger() - for(var/obj/item/H in owner.held_items) //In case we were already holding another dagger - if(istype(H, /obj/item/melee/cultblade/dagger)) - H.attack_self(owner) - return - var/obj/item/I = target - if(owner.can_equip(I, ITEM_SLOT_HANDS)) - owner.temporarilyRemoveItemFromInventory(I) - owner.put_in_hands(I) - I.attack_self(owner) - return - if(!isliving(owner)) - to_chat(owner, "You lack the necessary living force for this action.") - return - var/mob/living/living_owner = owner - if (living_owner.usable_hands <= 0) - to_chat(living_owner, "You dont have any usable hands!") - else - to_chat(living_owner, "Your hands are full!") - - ///MGS BOX! /datum/action/item_action/agent_box name = "Deploy Box" diff --git a/code/datums/actions/ninja.dm b/code/datums/actions/ninja.dm index b655078349dc..974e4cfa74bc 100644 --- a/code/datums/actions/ninja.dm +++ b/code/datums/actions/ninja.dm @@ -24,7 +24,7 @@ name = "Create Throwing Stars (1E)" desc = "Creates some throwing stars" button_icon_state = "throwingstar" - icon_icon = 'icons/obj/items_and_weapons.dmi' + icon_icon = 'icons/obj/items.dmi' /datum/action/item_action/ninjanet name = "Energy Net (20E)" @@ -36,7 +36,7 @@ name = "Recall Energy Katana (Variable Cost)" desc = "Teleports the Energy Katana linked to this suit to its wearer, cost based on distance." button_icon_state = "energy_katana" - icon_icon = 'icons/obj/items_and_weapons.dmi' + icon_icon = 'icons/obj/items.dmi' /datum/action/item_action/ninja_stealth name = "Toggle Stealth" diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm index d2b499de92ed..acaa03d3ff7a 100644 --- a/code/datums/ai_laws.dm +++ b/code/datums/ai_laws.dm @@ -1,4 +1,3 @@ -#define LAW_DEVIL "devil" #define LAW_ZEROTH "zeroth" #define LAW_INHERENT "inherent" #define LAW_SUPPLIED "supplied" @@ -15,7 +14,6 @@ var/list/ion = list() var/list/hacked = list() var/mob/living/silicon/owner - var/list/devillaws = list() var/id = DEFAULT_AI_LAWID /datum/ai_laws/Destroy(force, ...) @@ -281,8 +279,6 @@ /datum/ai_laws/proc/get_law_amount(groups) var/law_amount = 0 - if(devillaws && (LAW_DEVIL in groups)) - law_amount++ if(zeroth && (LAW_ZEROTH in groups)) law_amount++ if(ion.len && (LAW_ION in groups)) @@ -298,9 +294,6 @@ law_amount++ return law_amount -/datum/ai_laws/proc/set_law_sixsixsix(laws) - devillaws = laws - /datum/ai_laws/proc/set_zeroth_law(law, law_borg = null) zeroth = law if(law_borg) //Making it possible for slaved borgs to see a different law 0 than their AI. --NEO @@ -437,10 +430,6 @@ zeroth = null zeroth_borg = null -/datum/ai_laws/proc/clear_law_sixsixsix(force) - if(force || !is_devil(owner)) - devillaws = null - /datum/ai_laws/proc/associate(mob/living/silicon/M) if(!owner) owner = M @@ -456,10 +445,6 @@ /datum/ai_laws/proc/get_law_list(include_zeroth = FALSE, show_numbers = TRUE, render_html = TRUE) var/list/data = list() - if (include_zeroth && devillaws) - for(var/law in devillaws) - data += "[show_numbers ? "666:" : ""] [render_html ? "[law]" : law]" - if (include_zeroth && zeroth) data += "[show_numbers ? "0:" : ""] [render_html ? "[zeroth]" : zeroth]" diff --git a/code/datums/cinematic.dm b/code/datums/cinematic.dm index c36fb3961664..9529cd19567a 100644 --- a/code/datums/cinematic.dm +++ b/code/datums/cinematic.dm @@ -150,7 +150,6 @@ flick("station_intact_fade_red",screen) screen.icon_state = "summary_nukefail" -//Also used for blob /datum/cinematic/nuke_selfdestruct id = CINEMATIC_SELFDESTRUCT @@ -183,47 +182,6 @@ special() screen.icon_state = "summary_malf" -/datum/cinematic/cult - id = CINEMATIC_CULT - -/datum/cinematic/cult/content() - screen.icon_state = null - flick("intro_cult",screen) - sleep(25) - cinematic_sound(sound('sound/magic/enter_blood.ogg')) - sleep(28) - cinematic_sound(sound('sound/machines/terminal_off.ogg')) - sleep(20) - flick("station_corrupted",screen) - cinematic_sound(sound('sound/effects/ghost.ogg')) - sleep(70) - special() - -/datum/cinematic/cult_nuke - id = CINEMATIC_CULT_NUKE - -/datum/cinematic/cult_nuke/content() - flick("intro_nuke",screen) - sleep(35) - flick("station_explode_fade_red",screen) - cinematic_sound(sound('sound/effects/explosion_distant.ogg')) - special() - screen.icon_state = "summary_cult" - -/datum/cinematic/cult_fail - id = CINEMATIC_CULT_FAIL - -/datum/cinematic/cult_fail/content() - screen.icon_state = "station_intact" - sleep(20) - cinematic_sound(sound('sound/creatures/narsie_rises.ogg')) - sleep(60) - cinematic_sound(sound('sound/effects/explosion_distant.ogg')) - sleep(10) - cinematic_sound(sound('sound/magic/demon_dies.ogg')) - sleep(30) - special() - /datum/cinematic/nuke_annihilation id = CINEMATIC_ANNIHILATION @@ -275,14 +233,3 @@ cinematic_sound(sound('sound/items/airhorn.ogg')) flick("summary_selfdes",screen) //??? special() - -/* Intended usage. -Nuke.Explosion() - -> Cinematic(NUKE_BOOM,world) - -> ActualExplosion() - -> Mode.OnExplosion() - - -Narsie() - -> Cinematic(CULT,world) -*/ diff --git a/code/datums/components/_component.dm b/code/datums/components/_component.dm index d76504787b04..6c15d00869f2 100644 --- a/code/datums/components/_component.dm +++ b/code/datums/components/_component.dm @@ -204,6 +204,11 @@ else // Many other things have registered here lookup[sig_type][src] = TRUE +/// Registers multiple signals to the same proc. +/datum/proc/RegisterSignals(datum/target, list/signal_types, proctype, override = FALSE) + for (var/signal_type in signal_types) + RegisterSignal(target, signal_type, proctype, override) + /** * Stop listening to a given signal from target * diff --git a/code/datums/components/crafting/crafting.dm b/code/datums/components/crafting/crafting.dm index df5ae1319c2e..e7d0ebaace60 100644 --- a/code/datums/components/crafting/crafting.dm +++ b/code/datums/components/crafting/crafting.dm @@ -23,7 +23,6 @@ ), CAT_ROBOT = CAT_NONE, CAT_MISC = CAT_NONE, - CAT_PRIMAL = CAT_NONE, CAT_FOOD = list( CAT_BREAD, CAT_BURGER, diff --git a/code/datums/components/crafting/recipes/clothing.dm b/code/datums/components/crafting/recipes/clothing.dm index 95b37502bcaf..1aa1570df419 100644 --- a/code/datums/components/crafting/recipes/clothing.dm +++ b/code/datums/components/crafting/recipes/clothing.dm @@ -181,12 +181,35 @@ 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 diff --git a/code/datums/components/crafting/recipes/misc.dm b/code/datums/components/crafting/recipes/misc.dm index 0ed4acb5be78..fd89bd141ea8 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 @@ -141,7 +115,7 @@ name = "Improvised Pickaxe" reqs = list( /obj/item/crowbar = 1, - /obj/item/kitchen/knife = 1, + /obj/item/melee/knife/kitchen = 1, /obj/item/stack/tape = 1) result = /obj/item/pickaxe/improvised category = CAT_MISC @@ -204,17 +178,49 @@ /obj/item/aquarium_kit = 1) category = CAT_MISC -/datum/crafting_recipe/mothplush - name = "Moth Plushie" - result = /obj/item/toy/plush/moth - reqs = list(/obj/item/stack/sheet/animalhide/mothroach = 1, - /obj/item/organ/heart = 1, - /obj/item/stack/sheet/cotton/cloth = 3) - category = CAT_MISC - /datum/crafting_recipe/candorupgrade name = "Candor Upgrade" result = /obj/item/gun/ballistic/automatic/pistol/candor/phenex reqs = list(/obj/item/stack/sheet/mineral/hidden = 4, /obj/item/gun/ballistic/automatic/pistol/candor = 1) category = CAT_MISC + +/datum/crafting_recipe/bonfire + name = "Bonfire" + time = 60 + reqs = list(/obj/item/grown/log = 5) + parts = list(/obj/item/grown/log = 5) + blacklist = list(/obj/item/grown/log/steel) + result = /obj/structure/bonfire + category = CAT_MISC + +/datum/crafting_recipe/distiller + name = "Distiller" + result = /obj/structure/fermenting_barrel/distiller + reqs = list(/obj/item/stack/sheet/mineral/wood = 8, /obj/item/stack/sheet/metal = 5, /datum/reagent/srm_bacteria = 30) + time = 50 + category = CAT_MISC + +/datum/crafting_recipe/charcoal_stylus + name = "Charcoal Stylus" + result = /obj/item/pen/charcoal + reqs = list(/obj/item/stack/sheet/mineral/wood = 1, /datum/reagent/ash = 30) + time = 30 + category = CAT_MISC + +/datum/crafting_recipe/mushroom_bowl + name = "Mushroom Bowl" + result = /obj/item/reagent_containers/glass/bowl/mushroom_bowl + reqs = list(/obj/item/reagent_containers/food/snacks/grown/ash_flora/shavings = 5) + time = 30 + category = CAT_MISC + +/datum/crafting_recipe/chainsaw + name = "Chainsaw" + result = /obj/item/chainsaw + reqs = list(/obj/item/circular_saw = 1, + /obj/item/stack/cable_coil = 3, + /obj/item/stack/sheet/plasteel = 5) + tools = list(TOOL_WELDER) + time = 50 + category = CAT_MISC diff --git a/code/datums/components/crafting/recipes/robot.dm b/code/datums/components/crafting/recipes/robot.dm index a5558682e86b..cab33ef5f796 100644 --- a/code/datums/components/crafting/recipes/robot.dm +++ b/code/datums/components/crafting/recipes/robot.dm @@ -55,16 +55,6 @@ time = 40 category = CAT_ROBOT -/datum/crafting_recipe/honkbot - name = "Honkbot" - result = /mob/living/simple_animal/bot/honkbot - reqs = list(/obj/item/storage/box/clown = 1, - /obj/item/bodypart/r_arm/robot = 1, - /obj/item/assembly/prox_sensor = 1, - /obj/item/bikehorn/ = 1) - time = 40 - category = CAT_ROBOT - /datum/crafting_recipe/Firebot name = "Firebot" result = /mob/living/simple_animal/bot/firebot diff --git a/code/datums/components/crafting/recipes/tribal.dm b/code/datums/components/crafting/recipes/tribal.dm deleted file mode 100644 index c831b85d7878..000000000000 --- a/code/datums/components/crafting/recipes/tribal.dm +++ /dev/null @@ -1,234 +0,0 @@ -/datum/crafting_recipe/bonearmlet - name = "Bone Armlet" - result = /obj/item/clothing/accessory/bonearmlet - time = 20 - reqs = list(/obj/item/stack/sheet/bone = 2, - /obj/item/stack/sheet/sinew = 1) - category = CAT_PRIMAL - -/datum/crafting_recipe/fangnecklace - name = "Wolf Fang Necklace" - result = /obj/item/clothing/neck/fangnecklace - time = 20 - reqs = list(/obj/item/stack/sheet/sinew = 2, - /obj/item/mob_trophy/fang = 1) - category = CAT_PRIMAL - -/datum/crafting_recipe/bonecodpiece - name = "Skull Codpiece" - result = /obj/item/clothing/accessory/skullcodpiece - time = 20 - reqs = list(/obj/item/stack/sheet/bone = 2, - /obj/item/mob_trophy/legion_skull = 1, - /obj/item/stack/sheet/animalhide/goliath_hide = 1) - category = CAT_PRIMAL - -/datum/crafting_recipe/skilt - name = "Sinew Kilt" - result = /obj/item/clothing/accessory/skilt - time = 20 - reqs = list(/obj/item/stack/sheet/bone = 1, - /obj/item/stack/sheet/sinew = 2) - category = CAT_PRIMAL - -/datum/crafting_recipe/bracers - name = "Bone Bracers" - result = /obj/item/clothing/gloves/bracer - time = 20 - reqs = list(/obj/item/stack/sheet/bone = 2, - /obj/item/stack/sheet/sinew = 1) - category = CAT_PRIMAL - -/datum/crafting_recipe/goliathcloak - name = "Goliath Cloak" - result = /obj/item/clothing/suit/hooded/cloak/goliath - time = 50 - reqs = list(/obj/item/stack/sheet/leather = 2, - /obj/item/stack/sheet/sinew = 2, - /obj/item/stack/sheet/animalhide/goliath_hide = 2) //it takes 4 goliaths to make 1 cloak if the plates are skinned - category = CAT_PRIMAL - -/datum/crafting_recipe/drakecloak - name = "Ash Drake Armour" - result = /obj/item/clothing/suit/hooded/cloak/drake - time = 60 - reqs = list(/obj/item/stack/sheet/bone = 10, - /obj/item/stack/sheet/sinew = 2, - /obj/item/stack/sheet/animalhide/ashdrake = 5) - category = CAT_PRIMAL - -/datum/crafting_recipe/bonespear - name = "Bone Spear" - result = /obj/item/spear/bonespear - time = 30 - reqs = list(/obj/item/stack/sheet/bone = 4, - /obj/item/stack/sheet/sinew = 1) - category = CAT_PRIMAL - -/datum/crafting_recipe/boneaxe - name = "Bone Axe" - result = /obj/item/fireaxe/boneaxe - time = 50 - reqs = list(/obj/item/stack/sheet/bone = 6, - /obj/item/stack/sheet/sinew = 3) - category = CAT_PRIMAL - -/datum/crafting_recipe/bonfire - name = "Bonfire" - time = 60 - reqs = list(/obj/item/grown/log = 5) - parts = list(/obj/item/grown/log = 5) - blacklist = list(/obj/item/grown/log/steel) - result = /obj/structure/bonfire - category = CAT_PRIMAL - -/datum/crafting_recipe/headpike - name = "Spike Head (Glass Spear)" - time = 65 - reqs = list(/obj/item/spear = 1, - /obj/item/bodypart/head = 1) - parts = list(/obj/item/bodypart/head = 1, - /obj/item/spear = 1) - blacklist = list(/obj/item/spear/explosive, /obj/item/spear/bonespear) - result = /obj/structure/headpike - category = CAT_PRIMAL - -/datum/crafting_recipe/headpikebone - name = "Spike Head (Bone Spear)" - time = 65 - reqs = list(/obj/item/spear/bonespear = 1, - /obj/item/bodypart/head = 1) - parts = list(/obj/item/bodypart/head = 1, - /obj/item/spear/bonespear = 1) - result = /obj/structure/headpike/bone - category = CAT_PRIMAL - -/datum/crafting_recipe/lasso - name = "Bone Lasso" - reqs = list( - /obj/item/stack/sheet/bone = 1, - /obj/item/stack/sheet/sinew = 5) - result = /obj/item/key/lasso - category = CAT_PRIMAL - -/datum/crafting_recipe/heavybonearmor - name = "Heavy Bone Armor" - result = /obj/item/clothing/suit/hooded/cloak/bone - time = 60 - reqs = list(/obj/item/stack/sheet/bone = 8, - /obj/item/stack/sheet/sinew = 3) - category = CAT_PRIMAL - -/datum/crafting_recipe/watcherbola - name = "Watcher Bola" - result = /obj/item/restraints/legcuffs/bola/watcher - time = 30 - reqs = list(/obj/item/stack/sheet/animalhide/goliath_hide = 2, - /obj/item/restraints/handcuffs/cable/sinew = 1) - category = CAT_PRIMAL - -/datum/crafting_recipe/goliathshield - name = "Goliath shield" - result = /obj/item/shield/riot/goliath - time = 60 - reqs = list(/obj/item/stack/sheet/bone = 4, - /obj/item/stack/sheet/animalhide/goliath_hide = 3) - category = CAT_PRIMAL - -/datum/crafting_recipe/bonesword - name = "Bone Sword" - result = /obj/item/claymore/bone - time = 40 - reqs = list(/obj/item/stack/sheet/bone = 3, - /obj/item/stack/sheet/sinew = 2) - category = CAT_PRIMAL - -/datum/crafting_recipe/hunterbelt - name = "Hunters Belt" - result = /obj/item/storage/belt/mining/primitive - time = 20 - reqs = list(/obj/item/stack/sheet/sinew = 2, - /obj/item/stack/sheet/animalhide/goliath_hide = 2) - category = CAT_PRIMAL - -/datum/crafting_recipe/quiver - name = "Quiver" - result = /obj/item/storage/bag/quiver/empty - time = 80 - reqs = list(/obj/item/stack/sheet/leather = 3, - /obj/item/stack/sheet/sinew = 4) - category = CAT_PRIMAL - -/datum/crafting_recipe/bone_bow - name = "Bone Bow" - result = /obj/item/gun/ballistic/bow/ashen - time = 200 - reqs = list(/obj/item/stack/sheet/bone = 8, - /obj/item/stack/sheet/sinew = 4) - category = CAT_PRIMAL - -/datum/crafting_recipe/polarbearcloak - name = "Polar Cloak" - result = /obj/item/clothing/suit/hooded/cloak/goliath/polar - time = 50 - reqs = list(/obj/item/stack/sheet/leather = 2, - /obj/item/stack/sheet/sinew = 2, - /obj/item/stack/sheet/animalhide/goliath_hide/polar_bear_hide = 2) - blacklist = list(/obj/item/stack/sheet/animalhide/goliath_hide) - category = CAT_PRIMAL - -/datum/crafting_recipe/distiller - name = "Distiller" - result = /obj/structure/fermenting_barrel/distiller - reqs = list(/obj/item/stack/sheet/mineral/wood = 8, /obj/item/stack/sheet/metal = 5, /datum/reagent/srm_bacteria = 30) - time = 50 - category = CAT_PRIMAL - -/datum/crafting_recipe/crystalamulet - name = "Crystal Amulet" - result = /obj/item/clothing/neck/crystal_amulet - time = 4 SECONDS - reqs = list(/obj/item/strange_crystal = 3) - category = CAT_PRIMAL - -/datum/crafting_recipe/crystalspear - name = "Crystal Spear" - result = /obj/item/spear/crystal - time = 4 SECONDS - reqs = list(/obj/item/strange_crystal = 2) - category = CAT_PRIMAL - -/datum/crafting_recipe/mushroom_bowl - name = "Mushroom Bowl" - result = /obj/item/reagent_containers/glass/bowl/mushroom_bowl - reqs = list(/obj/item/reagent_containers/food/snacks/grown/ash_flora/shavings = 5) - time = 30 - category = CAT_PRIMAL - -/datum/crafting_recipe/charcoal_stylus - name = "Charcoal Stylus" - result = /obj/item/pen/charcoal - reqs = list(/obj/item/stack/sheet/mineral/wood = 1, /datum/reagent/ash = 30) - time = 30 - category = CAT_PRIMAL - -/datum/crafting_recipe/mushroom_mortar - name = "Mushroom Mortar" - result = /obj/item/reagent_containers/glass/mortar/mushroom - reqs = list(/obj/item/reagent_containers/food/snacks/grown/ash_flora/shavings = 5) - time = 30 - category = CAT_PRIMAL - -/datum/crafting_recipe/oar - name = "Goliath Bone Oar" - result = /obj/item/oar - reqs = list(/obj/item/stack/sheet/bone = 2) - time = 15 - category = CAT_PRIMAL - -/datum/crafting_recipe/boat - name = "Goliath Hide Boat" - result = /obj/vehicle/ridden/lavaboat - reqs = list(/obj/item/stack/sheet/animalhide/goliath_hide = 3) - time = 50 - category = CAT_PRIMAL diff --git a/code/datums/components/crafting/recipes/weapon.dm b/code/datums/components/crafting/recipes/weapon.dm index c1dde04b3650..6783c60c6c6b 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,20 +159,9 @@ 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 + result = /obj/item/melee/spear reqs = list(/obj/item/restraints/handcuffs/cable = 1, /obj/item/shard = 1, /obj/item/stack/rods = 1) @@ -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/melee/spear/bone + 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/melee/axe/bone + 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/melee/sword/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/edible.dm b/code/datums/components/edible.dm deleted file mode 100644 index b65a2d8b7e32..000000000000 --- a/code/datums/components/edible.dm +++ /dev/null @@ -1,259 +0,0 @@ -/*! - -This component makes it possible to make things edible. What this means is that you can take a bite or force someone to take a bite (in the case of items). -These items take a specific time to eat, and can do most of the things our original food items could. - -Behavior that's still missing from this component that original food items had that should either be put into seperate components or somewhere else: - Components: - Drying component (jerky etc) - Customizable component (custom pizzas etc) - Processable component (Slicing and cooking behavior essentialy, making it go from item A to B when conditions are met.) - Dunkable component (Dunking things into reagent containers to absorb a specific amount of reagents) - - Misc: - Something for cakes (You can store things inside) - -*/ -/datum/component/edible - ///Amount of reagents taken per bite - var/bite_consumption = 2 - ///Amount of bites taken so far - var/bitecount = 0 - ///Flags for food - var/food_flags = NONE - ///Bitfield of the types of this food - var/foodtypes = NONE - ///Amount of seconds it takes to eat this food - var/eat_time = 30 - ///Defines how much it lowers someones satiety (Need to eat, essentialy) - var/junkiness = 0 - ///Message to send when eating - var/list/eatverbs - ///Callback to be ran for when you take a bite of something - var/datum/callback/after_eat - ///Last time we checked for food likes - var/last_check_time - ///Color we use when stuffed in things - var/filling_color = "#FFFFFF" - -/datum/component/edible/Initialize(list/initial_reagents, food_flags = NONE, foodtypes = NONE, volume = 50, eat_time = 30, list/tastes, list/eatverbs = list("bite","chew","nibble","gnaw","gobble","chomp"), bite_consumption = 2, filling_color = "#FFFFFF", datum/callback/after_eat) - if(!isatom(parent)) - return COMPONENT_INCOMPATIBLE - - RegisterSignal(parent, COMSIG_PARENT_EXAMINE, PROC_REF(examine)) - RegisterSignal(parent, COMSIG_ATOM_ATTACK_ANIMAL, PROC_REF(UseByAnimal)) - if(isitem(parent)) - RegisterSignal(parent, COMSIG_ITEM_ATTACK, PROC_REF(UseFromHand)) - else if(isturf(parent)) - RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND, PROC_REF(TryToEatTurf)) - - src.bite_consumption = bite_consumption - src.food_flags = food_flags - src.foodtypes = foodtypes - src.eat_time = eat_time - src.eatverbs = eatverbs - src.junkiness = junkiness - src.after_eat = after_eat - src.filling_color = filling_color - - var/atom/owner = parent - - owner.create_reagents(volume, INJECTABLE) - - if(initial_reagents) - for(var/rid in initial_reagents) - var/amount = initial_reagents[rid] - if(tastes && tastes.len && (rid == /datum/reagent/consumable/nutriment || rid == /datum/reagent/consumable/nutriment/vitamin)) - owner.reagents.add_reagent(rid, amount, tastes.Copy()) - else - owner.reagents.add_reagent(rid, amount) - -/datum/component/edible/proc/examine(datum/source, mob/user, list/examine_list) - SIGNAL_HANDLER - - if(!(food_flags & FOOD_IN_CONTAINER)) - switch (bitecount) - if (0) - return - if(1) - examine_list += "[parent] was bitten by someone!" - if(2,3) - examine_list += "[parent] was bitten [bitecount] times!" - else - examine_list += "[parent] was bitten multiple times!" - -/datum/component/edible/proc/UseFromHand(obj/item/source, mob/living/M, mob/living/user) - SIGNAL_HANDLER - - return TryToEat(M, user) - -/datum/component/edible/proc/TryToEatTurf(datum/source, mob/user) - SIGNAL_HANDLER - - return TryToEat(user, user) - -///All the checks for the act of eating itself and -/datum/component/edible/proc/TryToEat(mob/living/eater, mob/living/feeder) - - set waitfor = FALSE - - var/atom/owner = parent - - if(feeder.a_intent == INTENT_HARM) - return - if(!owner.reagents.total_volume)//Shouldn't be needed but it checks to see if it has anything left in it. - to_chat(feeder, "None of [owner] left, oh no!") - if(isturf(parent)) - var/turf/T = parent - T.ScrapeAway(1, CHANGETURF_INHERIT_AIR) - else - qdel(parent) - return - if(!CanConsume(eater, feeder)) - return - var/fullness = eater.nutrition + 10 //The theoretical fullness of the person eating if they were to eat this - for(var/datum/reagent/consumable/C in eater.reagents.reagent_list) //we add the nutrition value of what we're currently digesting - fullness += C.nutriment_factor * C.volume / C.metabolization_rate - - . = COMPONENT_ITEM_NO_ATTACK //Point of no return I suppose - - if(eater == feeder)//If you're eating it yourself. - if(!do_after(feeder, eat_time, eater)) //Gotta pass the minimal eat time - return - var/eatverb = pick(eatverbs) - if(junkiness && eater.satiety < -150 && eater.nutrition > NUTRITION_LEVEL_STARVING + 50 && !HAS_TRAIT(eater, TRAIT_VORACIOUS)) - to_chat(eater, "You don't feel like eating any more junk food at the moment!") - return - else if(fullness <= 50) - eater.visible_message("[eater] hungrily [eatverb]s \the [parent], gobbling it down!", "You hungrily [eatverb] \the [parent], gobbling it down!") - else if(fullness > 50 && fullness < 150) - eater.visible_message("[eater] hungrily [eatverb]s \the [parent].", "You hungrily [eatverb] \the [parent].") - else if(fullness > 150 && fullness < 500) - eater.visible_message("[eater] [eatverb]s \the [parent].", "You [eatverb] \the [parent].") - else if(fullness > 500 && fullness < 600) - eater.visible_message("[eater] unwillingly [eatverb]s a bit of \the [parent].", "You unwillingly [eatverb] a bit of \the [parent].") - else if(fullness > (600 * (1 + eater.overeatduration / 2000))) // The more you eat - the more you can eat - eater.visible_message("[eater] cannot force any more of \the [parent] to go down [eater.p_their()] throat!", "You cannot force any more of \the [parent] to go down your throat!") - return - else //If you're feeding it to someone else. - if(isbrain(eater)) - to_chat(feeder, "[eater] doesn't seem to have a mouth!") - return - if(fullness <= (600 * (1 + eater.overeatduration / 1000))) - eater.visible_message("[feeder] attempts to feed [eater] [parent].", \ - "[feeder] attempts to feed you [parent].") - else - eater.visible_message("[feeder] cannot force any more of [parent] down [eater]'s throat!", \ - "[feeder] cannot force any more of [parent] down your throat!") - return - if(!do_after(feeder, target = eater)) //Wait 3 seconds before you can feed - return - - log_combat(feeder, eater, "fed", owner.reagents.log_list()) - eater.visible_message("[feeder] forces [eater] to eat [parent]!", \ - "[feeder] forces you to eat [parent]!") - - TakeBite(eater, feeder) - -///This function lets the eater take a bite and transfers the reagents to the eater. -/datum/component/edible/proc/TakeBite(mob/living/eater, mob/living/feeder) - - var/atom/owner = parent - - if(!owner?.reagents) - return FALSE - if(eater.satiety > -200) - eater.satiety -= junkiness - playsound(eater.loc,'sound/items/eatfood.ogg', rand(10,50), TRUE) - if(owner.reagents.total_volume) - SEND_SIGNAL(parent, COMSIG_FOOD_EATEN, eater, feeder) - var/fraction = min(bite_consumption / owner.reagents.total_volume, 1) - owner.reagents.trans_to(eater, bite_consumption, transfered_by = feeder, method = INGEST) - bitecount++ - On_Consume(eater) - checkLiked(fraction, eater) - - //Invoke our after eat callback if it is valid - if(after_eat) - after_eat.Invoke(eater, feeder) - - return TRUE - -///Checks whether or not the eater can actually consume the food -/datum/component/edible/proc/CanConsume(mob/living/eater, mob/living/feeder) - if(!iscarbon(eater)) - return FALSE - var/mob/living/carbon/C = eater - var/covered = "" - if(C.is_mouth_covered(head_only = 1)) - covered = "headgear" - else if(C.is_mouth_covered(mask_only = 1)) - covered = "mask" - if(covered) - var/who = (isnull(feeder) || eater == feeder) ? "your" : "[eater.p_their()]" - to_chat(feeder, "You have to remove [who] [covered] first!") - return FALSE - return TRUE - -///Check foodtypes to see if we should send a moodlet -/datum/component/edible/proc/checkLiked(fraction, mob/M) - if(last_check_time + 50 > world.time) - return FALSE - if(!ishuman(M)) - return FALSE - var/mob/living/carbon/human/H = M - if(HAS_TRAIT(H, TRAIT_AGEUSIA) && foodtypes & H.dna.species.toxic_food) - to_chat(H, "You don't feel so good...") - H.adjust_disgust(25 + 30 * fraction) - else - if(foodtypes & H.dna.species.toxic_food) - to_chat(H,"What the hell was that thing?!") - H.adjust_disgust(25 + 30 * fraction) - SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "toxic_food", /datum/mood_event/disgusting_food) - else if(foodtypes & H.dna.species.disliked_food) - to_chat(H,"That didn't taste very good...") - H.adjust_disgust(11 + 15 * fraction) - SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "gross_food", /datum/mood_event/gross_food) - else if(foodtypes & H.dna.species.liked_food) - to_chat(H,"I love this taste!") - H.adjust_disgust(-5 + -2.5 * fraction) - SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "fav_food", /datum/mood_event/favorite_food) - if((foodtypes & BREAKFAST) && world.time - SSticker.round_start_time < STOP_SERVING_BREAKFAST) - SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "breakfast", /datum/mood_event/breakfast) - last_check_time = world.time - -///Delete the item when it is fully eaten -/datum/component/edible/proc/On_Consume(mob/living/eater) - - var/atom/owner = parent - - if(!eater) - return - if(!owner.reagents.total_volume) - if(isturf(parent)) - var/turf/T = parent - T.ScrapeAway(1, CHANGETURF_INHERIT_AIR) - else - qdel(parent) - -///Ability to feed food to puppers -/datum/component/edible/proc/UseByAnimal(datum/source, mob/user) - - SIGNAL_HANDLER - - - var/atom/owner = parent - - if(!isdog(user)) - return - var/mob/living/L = user - if(bitecount == 0 || prob(50)) - L.manual_emote("nibbles away at \the [parent]") - bitecount++ - . = COMPONENT_ITEM_NO_ATTACK - L.taste(owner.reagents) // why should carbons get all the fun? - if(bitecount >= 5) - var/sattisfaction_text = pick("burps from enjoyment", "yaps for more", "woofs twice", "looks at the area where \the [parent] was") - if(sattisfaction_text) - L.manual_emote(sattisfaction_text) - qdel(parent) diff --git a/code/datums/components/food/edible.dm b/code/datums/components/food/edible.dm new file mode 100644 index 000000000000..cde77f969911 --- /dev/null +++ b/code/datums/components/food/edible.dm @@ -0,0 +1,494 @@ +/*! + +This component makes it possible to make things edible. What this means is that you can take a bite or force someone to take a bite (in the case of items). +These items take a specific time to eat, and can do most of the things our original food items could. + +Behavior that's still missing from this component that original food items had that should either be put into seperate components or somewhere else: + Components: + Drying component (jerky etc) + Customizable component (custom pizzas etc) + Processable component (Slicing and cooking behavior essentialy, making it go from item A to B when conditions are met.) + Microwavability component + Frying component + + Misc: + Something for cakes (You can store things inside) + +*/ +/datum/component/edible + dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS + ///Amount of reagents taken per bite + var/bite_consumption = 2 + ///Amount of bites taken so far + var/bitecount = 0 + ///Flags for food + var/food_flags = NONE + ///Bitfield of the types of this food + var/foodtypes = NONE + ///Amount of seconds it takes to eat this food + var/eat_time = 30 + ///Defines how much it lowers someones satiety (Need to eat, essentialy) + var/junkiness = 0 + ///Message to send when eating + var/list/eatverbs + ///Callback to be ran before you eat something, so you can check if someone *can* eat it. + var/datum/callback/pre_eat + ///Callback to be ran before composting something, in case you don't want a piece of food to be compostable for some reason. + var/datum/callback/on_compost + ///Callback to be ran for when you take a bite of something + var/datum/callback/after_eat + ///Callback to be ran for when you finish eating something + var/datum/callback/on_consume + ///Last time we checked for food likes + var/last_check_time + ///The initial reagents of this food when it is made + var/list/initial_reagents + ///The initial volume of the foods reagents + var/volume + ///The flavortext for taste + var/list/tastes + ///The type of atom this creates when the object is microwaved. + var/microwaved_type + + //TEMP VAR, filling is nonfunctional because newfood isnt customizable yet + var/filling_color + +/datum/component/edible/Initialize(list/initial_reagents, + food_flags = NONE, + foodtypes = NONE, + volume = 50, + eat_time = 10, + list/tastes, + list/eatverbs = list("bite","chew","nibble","gnaw","gobble","chomp"), + bite_consumption = 2, + microwaved_type, + junkiness, + filling_color = null, //Temp var + datum/callback/pre_eat, + datum/callback/on_compost, + datum/callback/after_eat, + datum/callback/on_consume +) + if(!isatom(parent)) + return COMPONENT_INCOMPATIBLE + + RegisterSignal(parent, COMSIG_PARENT_EXAMINE, PROC_REF(examine)) + RegisterSignal(parent, COMSIG_ATOM_ATTACK_ANIMAL, PROC_REF(use_by_animal)) + RegisterSignal(parent, COMSIG_ATOM_CHECKPARTS, PROC_REF(on_craft)) + RegisterSignal(parent, COMSIG_ATOM_CREATEDBY_PROCESSING, PROC_REF(on_processed)) + RegisterSignal(parent, COMSIG_ITEM_MICROWAVE_COOKED, PROC_REF(on_microwave_cooked)) + RegisterSignal(parent, COMSIG_EDIBLE_ON_COMPOST, PROC_REF(compost)) + + if(isitem(parent)) + RegisterSignal(parent, COMSIG_ITEM_ATTACK, PROC_REF(use_from_hand)) + RegisterSignal(parent, COMSIG_ITEM_FRIED, PROC_REF(on_fried)) + RegisterSignal(parent, COMSIG_ITEM_MICROWAVE_ACT, PROC_REF(on_microwaved)) + + var/obj/item/item = parent + if (!item.grind_results) + item.grind_results = list() //If this doesn't already exist, add it as an empty list. This is needed for the grinder to accept it. + + src.bite_consumption = bite_consumption + src.food_flags = food_flags + src.foodtypes = foodtypes + src.eat_time = eat_time + src.eatverbs = string_list(eatverbs) + src.junkiness = junkiness + src.pre_eat = pre_eat + src.on_compost = on_compost + src.after_eat = after_eat + src.on_consume = on_consume + src.initial_reagents = string_assoc_list(initial_reagents) + src.tastes = string_assoc_list(tastes) + src.microwaved_type = microwaved_type + + var/atom/owner = parent + + owner.create_reagents(volume, INJECTABLE) + + for(var/rid in initial_reagents) + var/amount = initial_reagents[rid] + if(length(tastes) && (rid == /datum/reagent/consumable/nutriment || rid == /datum/reagent/consumable/nutriment/vitamin)) + owner.reagents.add_reagent(rid, amount, tastes.Copy()) + else + owner.reagents.add_reagent(rid, amount) + +/datum/component/edible/InheritComponent(datum/component/C, + i_am_original, + list/initial_reagents, + food_flags = NONE, + foodtypes = NONE, + volume = 50, + eat_time = 30, + list/tastes, + list/eatverbs = list("bite","chew","nibble","gnaw","gobble","chomp"), + bite_consumption = 2, + filling_color = null, //Temp var + datum/callback/pre_eat, + datum/callback/on_compost, + datum/callback/after_eat, + datum/callback/on_consume + ) + + . = ..() + src.bite_consumption = bite_consumption + src.food_flags = food_flags + src.foodtypes = foodtypes + src.eat_time = eat_time + src.eatverbs = eatverbs + src.junkiness = junkiness + src.pre_eat = pre_eat + src.on_compost = on_compost + src.after_eat = after_eat + src.on_consume = on_consume + +/datum/component/edible/Destroy(force, silent) + QDEL_NULL(pre_eat) + QDEL_NULL(on_compost) + QDEL_NULL(after_eat) + QDEL_NULL(on_consume) + return ..() + +/datum/component/edible/proc/examine(datum/source, mob/user, list/examine_list) + SIGNAL_HANDLER + + if(!(food_flags & FOOD_IN_CONTAINER)) + switch (bitecount) + if (0) + return + if(1) + examine_list += "[parent] was bitten by someone!" + if(2,3) + examine_list += "[parent] was bitten [bitecount] times!" + else + examine_list += "[parent] was bitten multiple times!" + +/datum/component/edible/proc/use_from_hand(obj/item/source, mob/living/M, mob/living/user) + SIGNAL_HANDLER + + return TryToEat(M, user) + +/datum/component/edible/proc/on_fried(fry_object) + SIGNAL_HANDLER + var/atom/our_atom = parent + our_atom.reagents.trans_to(fry_object, our_atom.reagents.total_volume) + qdel(our_atom) + return COMSIG_FRYING_HANDLED + +///Called when food is created through processing (Usually this means it was sliced). We use this to pass the OG items reagents. +/datum/component/edible/proc/on_processed(datum/source, atom/original_atom, list/chosen_processing_option) + SIGNAL_HANDLER + + if(!original_atom.reagents) + return + + var/atom/this_food = parent + var/reagents_for_slice = chosen_processing_option[TOOL_PROCESSING_AMOUNT] + + this_food.create_reagents(volume) //Make sure we have a reagent container + + original_atom.reagents.trans_to(this_food, reagents_for_slice) + + if(original_atom.name != initial(original_atom.name)) + this_food.name = "slice of [original_atom.name]" + if(original_atom.desc != initial(original_atom.desc)) + this_food.desc = "[original_atom.desc]" + +///Called when food is crafted through a crafting recipe datum. +/datum/component/edible/proc/on_craft(datum/source, list/parts_list, datum/crafting_recipe/food/recipe) + SIGNAL_HANDLER + + var/atom/this_food = parent + + this_food.reagents.clear_reagents() + + for(var/obj/item/crafted_part in this_food.contents) + crafted_part.reagents?.trans_to(this_food.reagents, crafted_part.reagents.maximum_volume, CRAFTED_FOOD_INGREDIENT_REAGENT_MODIFIER) + + var/list/objects_to_delete = list() + + // Remove all non recipe objects from the contents + for(var/content_object in this_food.contents) + for(var/recipe_object in recipe.real_parts) + if(istype(content_object, recipe_object)) + continue + objects_to_delete += content_object + + QDEL_LIST(objects_to_delete) + + for(var/r_id in initial_reagents) + var/amount = initial_reagents[r_id] * CRAFTED_FOOD_BASE_REAGENT_MODIFIER + if(r_id == /datum/reagent/consumable/nutriment || r_id == /datum/reagent/consumable/nutriment/vitamin) + this_food.reagents.add_reagent(r_id, amount, tastes) + else + this_food.reagents.add_reagent(r_id, amount) + + SSblackbox.record_feedback("tally", "food_made", 1, type) + +/datum/component/edible/proc/on_microwaved(datum/source, obj/machinery/microwave/used_microwave) + SIGNAL_HANDLER + + var/turf/parent_turf = get_turf(parent) + + if(!microwaved_type) + new /obj/item/reagent_containers/food/snacks/badrecipe(parent_turf) + qdel(parent) + return + + var/obj/item/result + + result = new microwaved_type(parent_turf) + + var/efficiency = istype(used_microwave) ? used_microwave.efficiency : 1 + + SEND_SIGNAL(result, COMSIG_ITEM_MICROWAVE_COOKED, parent, efficiency) + + SSblackbox.record_feedback("tally", "food_made", 1, result.type) + qdel(parent) + return COMPONENT_SUCCESFUL_MICROWAVE + +///Corrects the reagents on the newly cooked food +/datum/component/edible/proc/on_microwave_cooked(datum/source, obj/item/source_item, cooking_efficiency = 1) + SIGNAL_HANDLER + + var/atom/this_food = parent + + this_food.reagents.clear_reagents() + + source_item.reagents?.trans_to(this_food, source_item.reagents.total_volume) + + for(var/r_id in initial_reagents) + var/amount = initial_reagents[r_id] * cooking_efficiency * CRAFTED_FOOD_BASE_REAGENT_MODIFIER + if(r_id == /datum/reagent/consumable/nutriment || r_id == /datum/reagent/consumable/nutriment/vitamin) + this_food.reagents.add_reagent(r_id, amount, tastes) + else + this_food.reagents.add_reagent(r_id, amount) + +///Makes sure the thing hasn't been destroyed or fully eaten to prevent eating phantom edibles +/datum/component/edible/proc/IsFoodGone(atom/owner, mob/living/feeder) + if(QDELETED(owner)|| !(IS_EDIBLE(owner))) + return TRUE + if(owner.reagents.total_volume) + return FALSE + return TRUE + +/// Normal time to forcefeed someone something +#define EAT_TIME_FORCE_FEED (3 SECONDS) + +///All the checks for the act of eating itself and +/datum/component/edible/proc/TryToEat(mob/living/eater, mob/living/feeder) + + set waitfor = FALSE // We might end up sleeping here, so we don't want to hold up anything + + var/atom/owner = parent + + if(feeder.a_intent == INTENT_HARM) + return + + . = COMPONENT_CANCEL_ATTACK_CHAIN //Point of no return I suppose + + if(IsFoodGone(owner, feeder)) + return + + if(!CanConsume(eater, feeder)) + return + var/fullness = eater.nutrition + 10 //The theoretical fullness of the person eating if they were to eat this + + var/time_to_eat = (eater = feeder) ? eat_time : EAT_TIME_FORCE_FEED + + if(eater == feeder)//If you're eating it yourself. + if(eat_time && !do_after(feeder, time_to_eat, eater, timed_action_flags = food_flags & FOOD_FINGER_FOOD ? IGNORE_USER_LOC_CHANGE | IGNORE_TARGET_LOC_CHANGE : NONE)) //Gotta pass the minimal eat time + return + if(IsFoodGone(owner, feeder)) + return + var/eatverb = pick(eatverbs) + + if(junkiness && eater.satiety < -150 && eater.nutrition > NUTRITION_LEVEL_STARVING + 50 && !HAS_TRAIT(eater, TRAIT_VORACIOUS)) + to_chat(eater, "You don't feel like eating any more junk food at the moment!") + return + else if(fullness <= 50) + eater.visible_message("[eater] hungrily [eatverb]s \the [parent], gobbling it down!", "You hungrily [eatverb] \the [parent], gobbling it down!") + else if(fullness > 50 && fullness < 150) + eater.visible_message("[eater] hungrily [eatverb]s \the [parent].", "You hungrily [eatverb] \the [parent].") + else if(fullness > 150 && fullness < 500) + eater.visible_message("[eater] [eatverb]s \the [parent].", "You [eatverb] \the [parent].") + else if(fullness > 500 && fullness < 600) + eater.visible_message("[eater] unwillingly [eatverb]s a bit of \the [parent].", "You unwillingly [eatverb] a bit of \the [parent].") + else if(fullness > (600 * (1 + eater.overeatduration / 2000))) // The more you eat - the more you can eat + eater.visible_message("[eater] cannot force any more of \the [parent] to go down [eater.p_their()] throat!", "You cannot force any more of \the [parent] to go down your throat!") + return + + + + + + else //If you're feeding it to someone else. + if(isbrain(eater)) + to_chat(feeder, "[eater] doesn't seem to have a mouth!") + return + if(fullness <= (600 * (1 + eater.overeatduration / 1000))) + eater.visible_message( + "[feeder] attempts to feed [eater] [parent].", \ + "[feeder] attempts to feed you [parent]." + ) + if(eater.is_blind()) + to_chat(eater, "You feel someone trying to feed you something!") + else + eater.visible_message( + "[feeder] cannot force any more of [parent] down [eater]'s throat!", \ + "[feeder] cannot force any more of [parent] down your throat!" + ) + if(eater.is_blind()) + to_chat(eater, "You're too full to eat what's being fed to you!") + return + if(!do_after(feeder, delay = time_to_eat, target = eater)) //Wait 3 seconds before you can feed + return + if(IsFoodGone(owner, feeder)) + return + log_combat(feeder, eater, "fed", owner.reagents.log_list()) + eater.visible_message( + "[feeder] forces [eater] to eat [parent]!", \ + "[feeder] forces you to eat [parent]!" + ) + if(eater.is_blind()) + to_chat(eater, "You're forced to eat something!") + + TakeBite(eater, feeder) + + //If we're not force-feeding, try take another bite + if(eater == feeder && eat_time) + INVOKE_ASYNC(src, PROC_REF(TryToEat), eater, feeder) + +#undef EAT_TIME_FORCE_FEED + +///This function lets the eater take a bite and transfers the reagents to the eater. +/datum/component/edible/proc/TakeBite(mob/living/eater, mob/living/feeder) + + var/atom/owner = parent + + if(!owner?.reagents) + return FALSE + if(eater.satiety > -200) + eater.satiety -= junkiness + playsound(eater.loc,'sound/items/eatfood.ogg', rand(10,50), TRUE) + if(!owner.reagents.total_volume) + return + SEND_SIGNAL(parent, COMSIG_FOOD_EATEN, eater, feeder, bitecount, bite_consumption) + var/fraction = min(bite_consumption / owner.reagents.total_volume, 1) + owner.reagents.trans_to(eater, bite_consumption, transfered_by = feeder, method = INGEST) + bitecount++ + check_liked(fraction, eater) + if(!owner.reagents.total_volume) + on_consume(eater, feeder) + + //Invoke our after eat callback if it is valid + if(after_eat) + after_eat.Invoke(eater, feeder, bitecount) + + return TRUE + +///Checks if we can compost something, and handles it +/datum/component/edible/proc/compost(mob/living/user) + SIGNAL_HANDLER + if(on_compost && !on_compost.Invoke(user)) + return COMPONENT_EDIBLE_BLOCK_COMPOST + +///Checks whether or not the eater can actually consume the food +/datum/component/edible/proc/CanConsume(mob/living/eater, mob/living/feeder) + if(!iscarbon(eater)) + return FALSE + if(pre_eat && !pre_eat.Invoke(eater, feeder)) + return FALSE + var/mob/living/carbon/C = eater + var/covered = "" + if(C.is_mouth_covered(head_only = 1)) + covered = "headgear" + else if(C.is_mouth_covered(mask_only = 1)) + covered = "mask" + if(covered) + var/who = (isnull(feeder) || eater == feeder) ? "your" : "[eater.p_their()]" + to_chat(feeder, "You have to remove [who] [covered] first!") + return FALSE + return TRUE + +///Check foodtypes to see if we should send a moodlet +/datum/component/edible/proc/check_liked(fraction, mob/eater) + if(last_check_time + 50 > world.time) + return FALSE + if(!ishuman(eater)) + return FALSE + var/mob/living/carbon/human/human_eater = eater + if((foodtypes & BREAKFAST) && world.time - SSticker.round_start_time < STOP_SERVING_BREAKFAST) + SEND_SIGNAL(human_eater, COMSIG_ADD_MOOD_EVENT, "breakfast", /datum/mood_event/breakfast) + if(HAS_TRAIT(human_eater, TRAIT_AGEUSIA)) + if(foodtypes & human_eater.dna.species.toxic_food) + to_chat(human_eater, "You don't feel so good...") + human_eater.adjust_disgust(25 + 30 * fraction) + else + if(foodtypes & human_eater.dna.species.toxic_food) + to_chat(human_eater,"What the hell was that thing?!") + human_eater.adjust_disgust(25 + 30 * fraction) + SEND_SIGNAL(human_eater, COMSIG_ADD_MOOD_EVENT, "toxic_food", /datum/mood_event/disgusting_food) + else if(foodtypes & human_eater.dna.species.disliked_food) + to_chat(human_eater,"That didn't taste very good...") + human_eater.adjust_disgust(11 + 15 * fraction) + SEND_SIGNAL(human_eater, COMSIG_ADD_MOOD_EVENT, "gross_food", /datum/mood_event/gross_food) + else if(foodtypes & human_eater.dna.species.liked_food) + to_chat(human_eater,"I love this taste!") + human_eater.adjust_disgust(-5 + -2.5 * fraction) + SEND_SIGNAL(human_eater, COMSIG_ADD_MOOD_EVENT, "fav_food", /datum/mood_event/favorite_food) + last_check_time = world.time + + /* Should shiptest ever want to move taste to tongues as Beestation & later TGstation did, rather than on species + var/obj/item/organ/tongue/tongue = human_eater.getorganslot(ORGAN_SLOT_TONGUE) + if((foodtypes & BREAKFAST) && world.time - SSticker.round_start_time < STOP_SERVING_BREAKFAST) + SEND_SIGNAL(human_eater, COMSIG_ADD_MOOD_EVENT, "breakfast", /datum/mood_event/breakfast) + if(HAS_TRAIT(human_eater, TRAIT_AGEUSIA)) + if(foodtypes & tongue.toxic_food) + to_chat(human_eater, "You don't feel so good...") + human_eater.adjust_disgust(25 + 30 * fraction) + else + if(foodtypes & tongue.toxic_food) + to_chat(human_eater,"What the hell was that thing?!") + human_eater.adjust_disgust(25 + 30 * fraction) + SEND_SIGNAL(human_eater, COMSIG_ADD_MOOD_EVENT, "toxic_food", /datum/mood_event/disgusting_food) + else if(foodtypes & tongue.disliked_food) + to_chat(human_eater,"That didn't taste very good...") + human_eater.adjust_disgust(11 + 15 * fraction) + SEND_SIGNAL(human_eater, COMSIG_ADD_MOOD_EVENT, "gross_food", /datum/mood_event/gross_food) + else if(foodtypes & tongue.liked_food) + to_chat(human_eater,"I love this taste!") + human_eater.adjust_disgust(-5 + -2.5 * fraction) + SEND_SIGNAL(human_eater, COMSIG_ADD_MOOD_EVENT, "fav_food", /datum/mood_event/favorite_food) + last_check_time = world.time + */ + +///Delete the item when it is fully eaten +/datum/component/edible/proc/on_consume(mob/living/eater, mob/living/feeder) + SEND_SIGNAL(parent, COMSIG_FOOD_CONSUMED, eater, feeder) + + on_consume?.Invoke(eater, feeder) + + if(isturf(parent)) + var/turf/T = parent + T.ScrapeAway(1, CHANGETURF_INHERIT_AIR) + else + qdel(parent) + +///Ability to feed food to puppers +/datum/component/edible/proc/use_by_animal(datum/source, mob/user) + SIGNAL_HANDLER + var/atom/owner = parent + + if(!isdog(user)) + return + var/mob/living/L = user + if(bitecount == 0 || prob(50)) + L.manual_emote("nibbles away at \the [parent].") + bitecount++ + . = COMPONENT_CANCEL_ATTACK_CHAIN + L.taste(owner.reagents) // why should carbons get all the fun? + if(bitecount >= 5) + var/satisfaction_text = pick("burps from enjoyment.", "yaps for more!", "woofs twice.", "looks at the area where \the [parent] was.") + L.manual_emote(satisfaction_text) + qdel(parent) diff --git a/code/datums/components/food/food_storage.dm b/code/datums/components/food/food_storage.dm new file mode 100644 index 000000000000..259ef4a8b6c6 --- /dev/null +++ b/code/datums/components/food/food_storage.dm @@ -0,0 +1,204 @@ +/// --Food storage component-- +/// This component lets you slide one item into large foods, such as bread, cheese wheels, or cakes. +/// Consuming food storages with an item inside can cause unique interactions, such as eating glass shards. + +/datum/component/food_storage + /// Reference to what we have in our food. + var/obj/item/stored_item + /// The amount of volume the food has on creation - Used for probabilities + var/initial_volume = 10 + /// Minimum size items that can be inserted + var/minimum_weight_class = WEIGHT_CLASS_SMALL + /// What are the odds we bite into the stored item? + var/bad_chance_of_discovery = 0 + /// What are the odds we see the stored item before we bite it? + var/good_chance_of_discovery = 100 + /// The stored item was found out somehow. + var/discovered = FALSE + +/datum/component/food_storage/Initialize(_minimum_weight_class = WEIGHT_CLASS_SMALL, _bad_chance = 0, _good_chance = 100) + + RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, PROC_REF(try_inserting_item)) + RegisterSignal(parent, COMSIG_ATOM_ATTACK_HAND, PROC_REF(try_removing_item)) + RegisterSignal(parent, COMSIG_FOOD_EATEN, PROC_REF(consume_food_storage)) + + var/atom/food = parent + initial_volume = food.reagents.total_volume + + minimum_weight_class = _minimum_weight_class + bad_chance_of_discovery = _bad_chance + good_chance_of_discovery = _good_chance + +/datum/component/food_storage/Destroy(force, silent) + if(stored_item) + stored_item.forceMove(stored_item.drop_location()) + stored_item.dropped() + stored_item = null + . = ..() + +/** Begins the process of inserted an item. + * + * Clicking on the food storage with an item will begin a do_after, which if successful inserts the item. + * + * Arguments + * inserted_item - the item being placed into the food + * user - the person inserting the item + */ +/datum/component/food_storage/proc/try_inserting_item(datum/source, obj/item/inserted_item, mob/user, params) + SIGNAL_HANDLER + + // No matryoshka-ing food storage + if(istype(inserted_item, /obj/item/storage) || IS_EDIBLE(inserted_item)) + return + + //Harm intent will bypass inserting for injecting food with syringes and such + if(user.a_intent == INTENT_HARM) + return + + if(inserted_item.w_class > minimum_weight_class) + to_chat(user, "\The [inserted_item.name] won't fit in \the [parent].") + return + + if(!QDELETED(stored_item)) + to_chat(user, "There's something in \the [parent].") + return + + if(HAS_TRAIT(inserted_item, TRAIT_NODROP)) + to_chat(user, "\the [inserted_item] is stuck to your hand, you can't put into \the [parent]!") + return + + user.visible_message("[user.name] begins inserting [inserted_item.name] into \the [parent].", \ + "You start to insert the [inserted_item.name] into \the [parent].") + + INVOKE_ASYNC(src, PROC_REF(insert_item), inserted_item, user) + return COMPONENT_CANCEL_ATTACK_CHAIN + +/** Begins the process of attempting to remove the stored item. + * + * Clicking on food storage on grab intent will begin a do_after, which if successful removes the stored_item. + * + * Arguments + * user - the person removing the item. + */ +/datum/component/food_storage/proc/try_removing_item(datum/source, mob/user) + SIGNAL_HANDLER + + var/atom/food = parent + + if(user.a_intent != INTENT_GRAB) + return + + if(QDELETED(stored_item)) + return + + if(!food.can_interact(user)) + return + + user.visible_message("[user.name] begins tearing at \the [parent].", \ + "You start to rip into \the [parent].") + + INVOKE_ASYNC(src, PROC_REF(begin_remove_item), user) + return COMPONENT_CANCEL_ATTACK_CHAIN + +/** Inserts the item into the food, after a do_after. + * + * Arguments + * inserted_item - The item being inserted. + * user - the person inserting the item. + */ +/datum/component/food_storage/proc/insert_item(obj/item/inserted_item, mob/user) + if(do_after(user, 1.5 SECONDS, target = parent)) + var/atom/food = parent + to_chat(user, "You slip [inserted_item.name] inside \the [parent].") + inserted_item.forceMove(food) + user.log_message("[key_name(user)] inserted [inserted_item] into [parent] at [AREACOORD(user)]", LOG_ATTACK) + food.add_fingerprint(user) + inserted_item.add_fingerprint(user) + + stored_item = inserted_item + +/** Removes the item from the food, after a do_after. + * + * Arguments + * user - person removing the item. + */ +/datum/component/food_storage/proc/begin_remove_item(mob/user) + if(do_after(user, 10 SECONDS, target = parent)) + remove_item(user) + +/** + * Removes the stored item, putting it in user's hands or on the ground, then updates the reference. + */ +/datum/component/food_storage/proc/remove_item(mob/user) + if(user.put_in_hands(stored_item)) + user.visible_message("[user.name] slowly pulls [stored_item.name] out of \the [parent].", \ + "You slowly pull [stored_item.name] out of \the [parent].") + else + stored_item.dropped() + stored_item.visible_message("[stored_item.name] falls out of \the [parent].") + + update_stored_item() + +/** Checks for stored items when the food is eaten. + * + * If the food is eaten while an item is stored in it, calculates the odds that the item will be found. + * Then, if the item is found before being bitten, the item is removed. + * If the item is found by biting into it, calls on_accidental_consumption on the stored item. + * Afterwards, removes the item from the food if it was discovered. + * + * Arguments + * target - person doing the eating (can be the same as user) + * user - person causing the eating to happen + * bitecount - how many times the current food has been bitten + * bitesize - how large bties are for this food + */ +/datum/component/food_storage/proc/consume_food_storage(datum/source, mob/living/target, mob/living/user, bitecount, bitesize) + SIGNAL_HANDLER + + if(QDELETED(stored_item)) //if the stored item was deleted/null... + if(!update_stored_item()) //check if there's a replacement item + return + + /// Chance of biting the held item = amount of bites / (intitial reagents / reagents per bite) * 100 + bad_chance_of_discovery = (bitecount / (initial_volume / bitesize))*100 + /// Chance of finding the held item = bad chance - 50 + good_chance_of_discovery = bad_chance_of_discovery - 50 + + if(prob(good_chance_of_discovery)) //finding the item, without biting it + discovered = TRUE + to_chat(target, "It feels like there's something in \the [parent]...!") + + else if(prob(bad_chance_of_discovery)) //finding the item, BY biting it + user.log_message("[key_name(user)] just fed [key_name(target)] a/an [stored_item] which was hidden in [parent] at [AREACOORD(target)]", LOG_ATTACK) + discovered = stored_item.on_accidental_consumption(target, user, parent) + update_stored_item() //make sure if the item was changed, the reference changes as well + + if(!QDELETED(stored_item) && discovered) + INVOKE_ASYNC(src, PROC_REF(remove_item), user) + +/** Updates the reference of the stored item. + * + * Checks the food's contents for if an alternate item was placed into the food. + * If there is an alternate item, updates the reference to the new item. + * If there isn't, updates the reference to null. + * + * Returns FALSE if the ref is nulled, or TRUE is another item replaced it. + */ +/datum/component/food_storage/proc/update_stored_item() + var/atom/food = parent + if(!food?.contents.len) //if there's no items in the food or food is deleted somehow + stored_item = null + return FALSE + + for(var/obj/item/i in food.contents) //search the food's contents for a replacement item + if(IS_EDIBLE(i)) + continue + if(QDELETED(i)) + continue + + stored_item = i //we found something to replace it + return TRUE + + //if there's nothing else in the food, or we found nothing valid + stored_item = null + return FALSE diff --git a/code/datums/components/jetpack.dm b/code/datums/components/jetpack.dm new file mode 100644 index 000000000000..3451a75538ad --- /dev/null +++ b/code/datums/components/jetpack.dm @@ -0,0 +1,149 @@ +// Welcome to the jetpack component +// Apply this to something when you want it to be "like a jetpack" +// So propulsion through space on move, that sort of thing +/datum/component/jetpack + dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS + var/datum/callback/check_on_move + var/datum/callback/get_mover + /// If we should stabilize ourselves when not drifting + var/stabilize = FALSE + /// The signal we listen for as an activation + var/activation_signal + /// The signal we listen for as a de-activation + var/deactivation_signal + /// The return flag our parent expects for a failed activation + var/return_flag + var/datum/effect_system/trail_follow/trail + /// The typepath to instansiate our trail as, when we need it + var/effect_type + +/** + * Arguments: + * * stabilize - If we should drift when we finish moving, or sit stable in space] + * * activation_signal - Signal we activate on + * * deactivation_signal - Signal we deactivate on + * * return_flag - Flag to return if activation fails + * * get_mover - Callback we use to get the "moving" thing, for trail purposes, alongside signal registration + * * check_on_move - Callback we call each time we attempt a move, we expect it to retun true if the move is ok, false otherwise. It expects an arg, TRUE if fuel should be consumed, FALSE othewise + * * effect_type - Type of trail_follow to spawn + */ +/datum/component/jetpack/Initialize(stabilize, activation_signal, deactivation_signal, return_flag, datum/callback/get_mover, datum/callback/check_on_move, datum/effect_system/trail_follow/effect_type) + . = ..() + if(!isatom(parent)) + return COMPONENT_INCOMPATIBLE + if(!activation_signal) // Can't activate? go away + return COMPONENT_INCOMPATIBLE + + RegisterSignal(parent, activation_signal, PROC_REF(activate)) + if(deactivation_signal) + RegisterSignal(parent, deactivation_signal, PROC_REF(deactivate)) + + src.check_on_move = check_on_move + src.get_mover = get_mover + src.stabilize = stabilize + src.return_flag = return_flag + src.activation_signal = activation_signal + src.deactivation_signal = deactivation_signal + src.effect_type = effect_type + +/datum/component/jetpack/InheritComponent(datum/component/component, original, stabilize, activation_signal, deactivation_signal, return_flag, datum/callback/get_mover, datum/callback/check_on_move, datum/effect_system/trail_follow/effect_type) + UnregisterSignal(parent, src.activation_signal) + if(src.deactivation_signal) + UnregisterSignal(parent, src.deactivation_signal) + RegisterSignal(parent, activation_signal, PROC_REF(activate)) + if(deactivation_signal) + RegisterSignal(parent, deactivation_signal, PROC_REF(deactivate)) + + src.check_on_move = check_on_move + src.get_mover = get_mover + src.stabilize = stabilize + src.activation_signal = activation_signal + src.deactivation_signal = deactivation_signal + src.effect_type = effect_type + + if(trail && effect_type != trail.type) + QDEL_NULL(trail) + setup_trail() + +/datum/component/jetpack/Destroy() + QDEL_NULL(trail) + QDEL_NULL(check_on_move) + return ..() + +/datum/component/jetpack/proc/setup_trail() + var/mob/moving = get_mover.Invoke() + if(!moving || trail) + return + trail = new effect_type + trail.auto_process = FALSE + trail.set_up(moving) + +/datum/component/jetpack/proc/activate(datum/source) + SIGNAL_HANDLER + var/mob/moving = get_mover.Invoke() + if(!thrust(moving)) + return return_flag + trail.start() + RegisterSignal(moving, COMSIG_MOVABLE_MOVED, PROC_REF(move_react)) + RegisterSignal(moving, COMSIG_MOVABLE_PRE_MOVE, PROC_REF(pre_move_react)) + RegisterSignal(moving, COMSIG_MOVABLE_SPACEMOVE, PROC_REF(spacemove_react)) + RegisterSignal(moving, COMSIG_MOVABLE_DRIFT_VISUAL_ATTEMPT, PROC_REF(block_starting_visuals)) + RegisterSignal(moving, COMSIG_MOVABLE_DRIFT_BLOCK_INPUT, PROC_REF(ignore_ending_block)) + +/datum/component/jetpack/proc/deactivate(datum/source) + SIGNAL_HANDLER + QDEL_NULL(trail) + var/mob/moving = get_mover.Invoke() + if(moving) + UnregisterSignal(moving, COMSIG_MOVABLE_MOVED) + UnregisterSignal(moving, COMSIG_MOVABLE_PRE_MOVE) + UnregisterSignal(moving, COMSIG_MOVABLE_SPACEMOVE) + UnregisterSignal(moving, COMSIG_MOVABLE_DRIFT_VISUAL_ATTEMPT) + UnregisterSignal(moving, COMSIG_MOVABLE_DRIFT_BLOCK_INPUT) + +/datum/component/jetpack/proc/move_react(mob/user) + SIGNAL_HANDLER + if(!user || !user.client)//Don't allow jet self using + return + if(!isturf(user.loc))//You can't use jet in nowhere or from mecha/closet + return + if(!(user.movement_type & FLOATING) || user.buckled)//You don't want use jet in gravity or while buckled. + return + if(user.pulledby)//You don't must use jet if someone pull you + return + if(user.throwing)//You don't must use jet if you thrown + return + if(length(user.client.keys_held & user.client.movement_keys))//You use jet when press keys. yes. + thrust() + +/datum/component/jetpack/proc/pre_move_react(mob/user) + SIGNAL_HANDLER + trail.oldposition = get_turf(user) + +/datum/component/jetpack/proc/spacemove_react(mob/user, movement_dir, continuous_move) + SIGNAL_HANDLER + if(!continuous_move && movement_dir) + return COMSIG_MOVABLE_STOP_SPACEMOVE + // Check if we have the fuel to stop this. Do NOT cosume any fuel, just check + // This is done because things other then us can use our fuel + if(stabilize && check_on_move.Invoke(FALSE)) + return COMSIG_MOVABLE_STOP_SPACEMOVE + +/// Returns true if the thrust went well, false otherwise +/datum/component/jetpack/proc/thrust() + if(!check_on_move.Invoke(TRUE)) + return FALSE + if(!trail) + setup_trail() + trail.generate_effect() + return TRUE + +/// Basically, tell the drift component not to do its starting visuals, because they look dumb for us +/datum/component/jetpack/proc/block_starting_visuals(datum/source) + SIGNAL_HANDLER + return DRIFT_VISUAL_FAILED + +/// If we're on, don't let the drift component block movements at the end since we can speed +/datum/component/jetpack/proc/ignore_ending_block(datum/source) + SIGNAL_HANDLER + return DRIFT_ALLOW_INPUT diff --git a/code/datums/components/riding.dm b/code/datums/components/riding.dm index 7d3bf028d796..f4ff07423c52 100644 --- a/code/datums/components/riding.dm +++ b/code/datums/components/riding.dm @@ -369,7 +369,7 @@ /obj/item/riding_offhand name = "offhand" - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "offhand" w_class = WEIGHT_CLASS_HUGE item_flags = ABSTRACT | DROPDEL | NOBLUDGEON diff --git a/code/datums/components/shielded.dm b/code/datums/components/shielded.dm new file mode 100644 index 000000000000..81cb0c2b4d40 --- /dev/null +++ b/code/datums/components/shielded.dm @@ -0,0 +1,186 @@ +/** + * The shielded component causes the parent item to nullify a certain number of attacks against the wearer, see: shielded vests. + */ + +/datum/component/shielded + /// The person currently wearing us + var/mob/living/wearer + /// How many charges we can have max, and how many we start with + var/max_charges + /// How many charges we currently have + var/current_charges + /// How long we have to avoid being hit to replenish charges. If set to 0, we never recharge lost charges + var/recharge_start_delay = 20 SECONDS + /// Once we go unhit long enough to recharge, we replenish charges this often. The floor is effectively 1 second, AKA how often SSdcs processes + var/charge_increment_delay = 1 SECONDS + /// How many charges we recover on each charge increment + var/charge_recovery = 1 + /// What .dmi we're pulling the shield icon from + var/shield_icon_file = 'icons/effects/effects.dmi' + /// What icon is used when someone has a functional shield up + var/shield_icon = "shield-old" + /// Do we still shield if we're being held in-hand? If FALSE, it needs to be equipped to a slot to work + var/shield_inhand = FALSE + /// Should the shield lose charges equal to the damage dealt by a hit? + var/lose_multiple_charges = FALSE + /// The cooldown tracking when we were last hit + COOLDOWN_DECLARE(recently_hit_cd) + /// The cooldown tracking when we last replenished a charge + COOLDOWN_DECLARE(charge_add_cd) + /// A callback for the sparks/message that play when a charge is used, see [/datum/component/shielded/proc/default_run_hit_callback] + var/datum/callback/on_hit_effects + +/datum/component/shielded/Initialize(max_charges = 3, recharge_start_delay = 20 SECONDS, charge_increment_delay = 1 SECONDS, charge_recovery = 1, lose_multiple_charges = FALSE, starting_charges = null, shield_icon_file = 'icons/effects/effects.dmi', shield_icon = "shield-old", shield_inhand = FALSE, run_hit_callback) + if(!isitem(parent) || max_charges <= 0) + return COMPONENT_INCOMPATIBLE + + src.max_charges = max_charges + src.recharge_start_delay = recharge_start_delay + src.charge_increment_delay = charge_increment_delay + src.charge_recovery = charge_recovery + src.lose_multiple_charges = lose_multiple_charges + src.shield_icon_file = shield_icon_file + src.shield_icon = shield_icon + src.shield_inhand = shield_inhand + src.on_hit_effects = run_hit_callback || CALLBACK(src, PROC_REF(default_run_hit_callback)) + if(isnull(starting_charges)) + current_charges = max_charges + else + current_charges = starting_charges + if(recharge_start_delay) + START_PROCESSING(SSdcs, src) + +/datum/component/shielded/Destroy(force, silent) + if(wearer) + shield_icon = "broken" + UnregisterSignal(wearer, COMSIG_ATOM_UPDATE_OVERLAYS) + wearer.update_appearance(UPDATE_ICON) + wearer = null + QDEL_NULL(on_hit_effects) + return ..() + +/datum/component/shielded/RegisterWithParent() + RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(on_equipped)) + RegisterSignal(parent, COMSIG_ITEM_DROPPED, PROC_REF(lost_wearer)) + RegisterSignal(parent, COMSIG_ITEM_HIT_REACT, PROC_REF(on_hit_react)) + RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, PROC_REF(check_recharge_rune)) + var/atom/shield = parent + if(ismob(shield.loc)) + var/mob/holder = shield.loc + if(holder.is_holding(parent) && !shield_inhand) + return + set_wearer(holder) + +/datum/component/shielded/UnregisterFromParent() + UnregisterSignal(parent, list(COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED, COMSIG_ITEM_HIT_REACT, COMSIG_PARENT_ATTACKBY)) + var/atom/shield = parent + if(shield.loc == wearer) + lost_wearer(src, wearer) + +// Handle recharging, if we want to +/datum/component/shielded/process(delta_time) + if(current_charges >= max_charges) + STOP_PROCESSING(SSdcs, src) + return + + if(!COOLDOWN_FINISHED(src, recently_hit_cd)) + return + if(!COOLDOWN_FINISHED(src, charge_add_cd)) + return + + var/obj/item/item_parent = parent + COOLDOWN_START(src, charge_add_cd, charge_increment_delay) + adjust_charge(charge_recovery) // set the number of charges to current + recovery per increment, clamped from zero to max_charges + playsound(item_parent, 'sound/magic/charge.ogg', 50, TRUE) + if(current_charges == max_charges) + playsound(item_parent, 'sound/machines/ding.ogg', 50, TRUE) + +/datum/component/shielded/proc/adjust_charge(change) + current_charges = clamp(current_charges + change, 0, max_charges) + if(wearer) + wearer.update_appearance(UPDATE_ICON) + +/// Check if we've been equipped to a valid slot to shield +/datum/component/shielded/proc/on_equipped(datum/source, mob/user, slot) + SIGNAL_HANDLER + + if(slot == ITEM_SLOT_HANDS && !shield_inhand) + lost_wearer(source, user) + return + set_wearer(source, user) + +/// Either we've been dropped or our wearer has been QDEL'd. Either way, they're no longer our problem +/datum/component/shielded/proc/lost_wearer(datum/source, mob/user) + SIGNAL_HANDLER + + if(wearer) + UnregisterSignal(wearer, list(COMSIG_ATOM_UPDATE_OVERLAYS, COMSIG_PARENT_QDELETING)) + wearer.update_appearance(UPDATE_ICON) + wearer = null + +/datum/component/shielded/proc/set_wearer(mob/user) + wearer = user + RegisterSignal(wearer, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(on_update_overlays)) + RegisterSignal(wearer, COMSIG_PARENT_QDELETING, PROC_REF(lost_wearer)) + if(current_charges) + wearer.update_appearance(UPDATE_ICON) + +/// Used to draw the shield overlay on the wearer +/datum/component/shielded/proc/on_update_overlays(atom/parent_atom, list/overlays) + SIGNAL_HANDLER + + overlays += mutable_appearance(shield_icon_file, (current_charges > 0 ? shield_icon : "broken"), ABOVE_MOB_LAYER) + +/** + * This proc fires when we're hit, and is responsible for checking if we're charged, then deducting one + returning that we're blocking if so. + * It then runs the callback in [/datum/component/shielded/var/on_hit_effects] which handles the messages/sparks (so the visuals) + */ +/datum/component/shielded/proc/on_hit_react(datum/source, mob/living/carbon/human/owner, atom/movable/hitby, attack_text, final_block_chance, damage, attack_type) + SIGNAL_HANDLER + + COOLDOWN_START(src, recently_hit_cd, recharge_start_delay) + + if(current_charges <= 0) + return + . = COMPONENT_HIT_REACTION_BLOCK + + var/charge_loss = 1 // how many charges do we lose + + if(lose_multiple_charges) // if the shield has health like damage we'll lose charges equal to the damage of the hit + charge_loss = damage + + adjust_charge(-charge_loss) + + INVOKE_ASYNC(src, PROC_REF(actually_run_hit_callback), owner, attack_text, current_charges) + + if(!recharge_start_delay) // if recharge_start_delay is 0, we don't recharge + if(!current_charges) // obviously if someone ever adds a manual way to replenish charges, change this + qdel(src) + return + + START_PROCESSING(SSdcs, src) // if we DO recharge, start processing so we can do that + +/// The wrapper to invoke the on_hit callback, so we don't have to worry about blocking in the signal handler +/datum/component/shielded/proc/actually_run_hit_callback(mob/living/owner, attack_text, current_charges) + on_hit_effects.Invoke(owner, attack_text, current_charges) + +/// Default on_hit proc, since cult robes are stupid and have different descriptions/sparks +/datum/component/shielded/proc/default_run_hit_callback(mob/living/owner, attack_text, current_charges) + do_sparks(2, TRUE, owner) + owner.visible_message(span_danger("Щит [owner] отражает [attack_text]!")) + if(current_charges <= 0) + owner.visible_message(span_warning("Щит [owner] перегружается!")) + +/datum/component/shielded/proc/check_recharge_rune(datum/source, obj/item/wizard_armour_charge/recharge_rune, mob/living/user) + /*SIGNAL_HANDLER + + if(!istype(recharge_rune)) + return + . = COMPONENT_NO_AFTERATTACK + if(!istype(parent, /obj/item/clothing/suit/space/hardsuit/shielded/wizard)) + to_chat(user, span_warning("Руна может быть использована только на броне боевого мага!")) + return + + current_charges += recharge_rune.restored_charges + to_chat(user, span_notice("Заряжаю [parent]. Теперь она сможет поглотить [current_charges] ударов.")) + qdel(recharge_rune)*/ diff --git a/code/datums/components/sizzle.dm b/code/datums/components/sizzle.dm index 88fadb377ceb..ecb45e448d84 100644 --- a/code/datums/components/sizzle.dm +++ b/code/datums/components/sizzle.dm @@ -3,9 +3,11 @@ var/sizzlealpha = 0 dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS -/datum/component/sizzle/Initialize() +/datum/component/sizzle/Initialize(_alpha) if(!isatom(parent)) return COMPONENT_INCOMPATIBLE + if(_alpha) + sizzlealpha = _alpha setup_sizzle() /datum/component/sizzle/InheritComponent(datum/component/C, i_am_original) diff --git a/code/datums/components/slippery.dm b/code/datums/components/slippery.dm index 5c2c88ccfee7..c31ba2bd50e5 100644 --- a/code/datums/components/slippery.dm +++ b/code/datums/components/slippery.dm @@ -93,14 +93,3 @@ /datum/component/slippery/proc/Slip_on_wearer(datum/source, atom/movable/arrived) SIGNAL_HANDLER - -/// Used for making the clown PDA only slip if the clown is wearing his shoes and the elusive banana-skin belt -/datum/component/slippery/clowning - -/datum/component/slippery/clowning/Slip_on_wearer(datum/source, atom/movable/AM) - var/obj/item/I = holder.get_item_by_slot(ITEM_SLOT_FEET) - if(holder.body_position == LYING_DOWN && !holder.buckled) - if(istype(I, /obj/item/clothing/shoes/clown_shoes)) - Slip(source, AM) - else - to_chat(AM,"[parent] failed to slip anyone. Perhaps I shouldn't have abandoned my legacy...") diff --git a/code/datums/components/soulstoned.dm b/code/datums/components/soulstoned.dm deleted file mode 100644 index 04e514062879..000000000000 --- a/code/datums/components/soulstoned.dm +++ /dev/null @@ -1,33 +0,0 @@ -//adds godmode while in the container, prevents moving, and clears these effects up after leaving the stone -/datum/component/soulstoned - var/atom/movable/container - -/datum/component/soulstoned/Initialize(atom/movable/container) - if(!isanimal(parent)) - return COMPONENT_INCOMPATIBLE - var/mob/living/simple_animal/S = parent - - src.container = container - - S.forceMove(container) - - S.status_flags |= GODMODE - ADD_TRAIT(S, TRAIT_IMMOBILIZED, SOULSTONE_TRAIT) - ADD_TRAIT(S, TRAIT_HANDS_BLOCKED, SOULSTONE_TRAIT) - S.health = S.maxHealth - S.bruteloss = 0 - - RegisterSignal(S, COMSIG_MOVABLE_MOVED, PROC_REF(free_prisoner)) - -/datum/component/soulstoned/proc/free_prisoner() - SIGNAL_HANDLER - - var/mob/living/simple_animal/S = parent - if(S.loc != container) - qdel(src) - -/datum/component/soulstoned/UnregisterFromParent() - var/mob/living/simple_animal/S = parent - S.status_flags &= ~GODMODE - REMOVE_TRAIT(S, TRAIT_IMMOBILIZED, SOULSTONE_TRAIT) - REMOVE_TRAIT(S, TRAIT_HANDS_BLOCKED, SOULSTONE_TRAIT) diff --git a/code/datums/components/squeak.dm b/code/datums/components/squeak.dm index 368b70b64c0c..1307d5d0ec8e 100644 --- a/code/datums/components/squeak.dm +++ b/code/datums/components/squeak.dm @@ -28,7 +28,7 @@ /datum/component/squeak/Initialize(custom_sounds, volume_override, chance_override, step_delay_override, use_delay_override, extrarange, falloff_exponent, fallof_distance) if(!isatom(parent)) return COMPONENT_INCOMPATIBLE - RegisterSignal(parent, list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_BLOB_ACT, COMSIG_ATOM_HULK_ATTACK, COMSIG_PARENT_ATTACKBY), PROC_REF(play_squeak)) + RegisterSignal(parent, list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_HULK_ATTACK, COMSIG_PARENT_ATTACKBY), PROC_REF(play_squeak)) if(ismovable(parent)) RegisterSignal(parent, list(COMSIG_MOVABLE_BUMP, COMSIG_MOVABLE_IMPACT), PROC_REF(play_squeak)) AddComponent(/datum/component/connect_loc_behalf, parent, item_connections) diff --git a/code/datums/components/storage/concrete/pockets.dm b/code/datums/components/storage/concrete/pockets.dm index 32a74c843b01..e00c40e116f8 100644 --- a/code/datums/components/storage/concrete/pockets.dm +++ b/code/datums/components/storage/concrete/pockets.dm @@ -35,8 +35,8 @@ /datum/component/storage/concrete/pockets/small/fedora/Initialize() . = ..() var/static/list/exception_cache = typecacheof(list( - /obj/item/katana, /obj/item/toy/katana, /obj/item/nullrod/claymore/katana, - /obj/item/energy_katana, /obj/item/gun/ballistic/automatic/smg/firestorm/pan + /obj/item/toy/katana, /obj/item/melee/sword/katana, + /obj/item/melee/sword/energy_katana, /obj/item/gun/ballistic/automatic/smg/firestorm/pan )) exception_hold = exception_cache @@ -91,6 +91,7 @@ /obj/item/clothing/glasses/hud/health/night, /obj/item/clothing/glasses/hud/security/night, /obj/item/clothing/glasses/hud/security/sunglasses/inteq, + /obj/item/clothing/glasses/sunglasses/ballistic, /obj/item/ammo_casing, /obj/item/ammo_box/magazine/illestren_a850r, )) @@ -143,7 +144,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/components/storage/storage.dm b/code/datums/components/storage/storage.dm index 89831dafab72..765e14e5db64 100644 --- a/code/datums/components/storage/storage.dm +++ b/code/datums/components/storage/storage.dm @@ -424,7 +424,7 @@ /datum/component/storage/proc/dump_content_at(atom/dest_object, mob/M) var/atom/A = parent var/atom/dump_destination = dest_object.get_dumping_location() - if(A.Adjacent(M) && dump_destination && M.Adjacent(dump_destination)) + if(M.CanReach(A) && dump_destination && M.CanReach(dump_destination)) if(locked) to_chat(M, "[parent] seems to be [locked_flavor]!") return FALSE @@ -433,6 +433,12 @@ return TRUE return FALSE +/datum/component/storage/proc/get_dumping_location(atom/dest_object) + var/datum/component/storage/storage = dest_object.GetComponent(/datum/component/storage) + if(storage) + return storage.real_location() + return dest_object.get_dumping_location() + //This proc is called when you want to place an item into the storage item. /datum/component/storage/proc/attackby(datum/source, obj/item/I, mob/M, params) SIGNAL_HANDLER diff --git a/code/datums/components/tackle.dm b/code/datums/components/tackle.dm index 68c74921b8b7..0d3d520c2b54 100644 --- a/code/datums/components/tackle.dm +++ b/code/datums/components/tackle.dm @@ -270,11 +270,10 @@ if(ishuman(target)) var/mob/living/carbon/human/T = target - var/suit_slot = T.get_item_by_slot(ITEM_SLOT_OCLOTHING) if(isnull(T.wear_suit) && isnull(T.w_uniform)) // who honestly puts all of their effort into tackling a naked guy? defense_mod += 2 - if(suit_slot && (istype(suit_slot,/obj/item/clothing/suit/space/hardsuit))) + if(T.mob_negates_gravity()) defense_mod += 1 if(T.is_shove_knockdown_blocked()) // riot armor and such defense_mod += 5 diff --git a/code/datums/components/twohanded.dm b/code/datums/components/twohanded.dm index 51c9268d13ab..4ede9a6fc168 100644 --- a/code/datums/components/twohanded.dm +++ b/code/datums/components/twohanded.dm @@ -4,12 +4,13 @@ * When applied to an item it will make it two handed * */ + /datum/component/two_handed dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS // Only one of the component can exist on an item var/wielded = FALSE /// Are we holding the two handed item properly var/force_multiplier = 0 /// The multiplier applied to force when wielded, does not work with force_wielded, and force_unwielded - var/force_wielded = 0 /// The force of the item when weilded - var/force_unwielded = 0 /// The force of the item when unweilded + var/force_wielded = 0 /// The force of the item when wielded + var/force_unwielded = 0 /// The force of the item when unwielded var/wieldsound = FALSE /// Play sound when wielded var/unwieldsound = FALSE /// Play sound when unwielded var/attacksound = FALSE /// Play sound on attack when wielded @@ -145,6 +146,7 @@ if(SEND_SIGNAL(parent, COMSIG_TWOHANDED_WIELD, user) & COMPONENT_TWOHANDED_BLOCK_WIELD) return // blocked wield from item wielded = TRUE + ADD_TRAIT(parent, TRAIT_WIELDED, REF(src)) RegisterSignal(user, COMSIG_MOB_SWAP_HANDS, PROC_REF(on_swap_hands)) // update item stats and name @@ -188,6 +190,7 @@ // wield update status wielded = FALSE + REMOVE_TRAIT(parent, TRAIT_WIELDED, REF(src)) UnregisterSignal(user, COMSIG_MOB_SWAP_HANDS) SEND_SIGNAL(parent, COMSIG_TWOHANDED_UNWIELD, user) @@ -303,7 +306,7 @@ sharpened_increase = min(amount, (max_amount - wielded_val)) return COMPONENT_BLOCK_SHARPEN_APPLIED -/** +/* * The offhand dummy item for two handed items * */ diff --git a/code/datums/diseases/gastrolisis.dm b/code/datums/diseases/gastrolisis.dm index 119ccc0c60e0..e2af13bd6742 100644 --- a/code/datums/diseases/gastrolisis.dm +++ b/code/datums/diseases/gastrolisis.dm @@ -38,23 +38,13 @@ "You scream in pain as your eyes are pushed out by your new snail eyes!") affected_mob.emote("scream") return - var/obj/item/shell = affected_mob.get_item_by_slot(ITEM_SLOT_BACK) - if(!istype(shell, /obj/item/storage/backpack/snail)) - shell = null - if(!shell && prob(5)) - if(affected_mob.dropItemToGround(affected_mob.get_item_by_slot(ITEM_SLOT_BACK))) - affected_mob.equip_to_slot_or_del(new /obj/item/storage/backpack/snail(affected_mob), ITEM_SLOT_BACK) - affected_mob.visible_message("[affected_mob] grows a grotesque shell on their back!", \ - "You scream in pain as a shell pushes itself out from under your skin!") - affected_mob.emote("scream") - return var/obj/item/organ/tongue/tongue = locate(/obj/item/organ/tongue/snail) in affected_mob.internal_organs if(!tongue && prob(5)) var/obj/item/organ/tongue/snail/new_tongue = new() new_tongue.Insert(affected_mob) to_chat(affected_mob, "You feel your speech slow down...") return - if(shell && eyes && tongue && prob(5)) + if(eyes && tongue && prob(5)) affected_mob.set_species(/datum/species/snail) affected_mob.client?.give_award(/datum/award/achievement/misc/snail, affected_mob) affected_mob.visible_message("[affected_mob] turns into a snail!", \ @@ -79,8 +69,3 @@ if(eyes) var/obj/item/organ/eyes/new_eyes = new H.dna.species.mutanteyes () new_eyes.Insert(H) - var/obj/item/storage/backpack/bag = H.get_item_by_slot(ITEM_SLOT_BACK) - if(istype(bag, /obj/item/storage/backpack/snail)) - bag.emptyStorage() - H.temporarilyRemoveItemFromInventory(bag, TRUE) - qdel(bag) diff --git a/code/datums/diseases/legionvirus.dm b/code/datums/diseases/legionvirus.dm index 22144a7b2a14..a6e1bdadcdd2 100644 --- a/code/datums/diseases/legionvirus.dm +++ b/code/datums/diseases/legionvirus.dm @@ -1,28 +1,29 @@ -/datum/disease/transformation/legionvirus - name = "Soulus Saturation" +/datum/disease/transformation/legionvirus //Diseases are a quick way to exposit a bunch of information onto players, most of the effects here are handled by the legion skull organ from /mob/living/simple_animal/hostile/mining_mobs/hivelord.dm + name = "Legion Infection" max_stages = 5 spread_flags = DISEASE_SPREAD_NON_CONTAGIOUS - cure_text = "System Cleaner" - cures = list(/datum/reagent/medicine/system_cleaner) - agent = "Soulus Dust" + cure_text = "Surgically removing the skull from the patient's chest; applications of spaceacillin or synaptizine can delay onset of the infection." + agent = "Legion skull" viable_mobtypes = list(/mob/living/carbon/human) visibility_flags = 0 - stage_prob = 5 - cure_chance = 20 - desc = "If left untreated, this disease will cause the infected to transform into a legion." + stage_prob = 0 // WOOOOOO SNOWFLAKE!!!!!!! WOOOOOO!!!! + desc = "If left untreated, the skull will slowly overtake its host's body, eventually growing into a legion." severity = DISEASE_SEVERITY_HARMFUL - disease_flags = CURABLE + disease_flags = NONE + visibility_flags = HIDDEN_PANDEMIC bypasses_immunity = TRUE - stage1 = list("Your joints itch.") - stage2 = list("Your head begins to ache.") - stage3 = list("Ash begins to flake off your skin.") - stage4 = list("You feel like your head is splitting in two!") - stage5 = list("You feel something growing inside your chest!") + stage1 = list(span_notice("You feel a dull pain in your chest.")) + stage2 = list(span_notice("Your head begins to ache.")) + stage3 = list(span_notice("Something moves underneath your skin.")) + stage4 = list(span_warning("You feel something pressing against your skin!")) + stage5 = list(span_warning("Your skin begins to tear apart-!")) new_form = /mob/living/simple_animal/hostile/asteroid/hivelord/legion /datum/disease/transformation/legionvirus/do_disease_transformation(mob/living/H) - H.visible_message("[H] transforms into a legion!") + if(stage5) + to_chat(affected_mob, pick(stage5)) + H.visible_message(span_warning("[H] suddenly collapses, a pallid grey mass bursting from their body!")) var/mob/living/simple_animal/hostile/asteroid/hivelord/legion/L if(HAS_TRAIT(H, TRAIT_DWARF)) //dwarf legions aren't just fluff! L = new /mob/living/simple_animal/hostile/asteroid/hivelord/legion/dwarf(H.loc) @@ -32,4 +33,3 @@ H.adjustBruteLoss(1000) L.stored_mob = H H.forceMove(L) - qdel(src) diff --git a/code/datums/elements/bed_tucking.dm b/code/datums/elements/bed_tucking.dm index c094e5a5b108..e505e6efdb5a 100644 --- a/code/datums/elements/bed_tucking.dm +++ b/code/datums/elements/bed_tucking.dm @@ -8,8 +8,13 @@ var/y_offset = 0 /// our rotation degree - how much the item turns when in bed (+degrees turns it more parallel) var/rotation_degree = 0 + /// Whether the item changes its dir to match the desired lying direction of the bed that it's tucked into. + var/change_dir = FALSE + /// Whether the item changes its layer to the layer suggested by the bed for tucked-in item. + /// When the item is untucked, it is returned to its initial() layer. + var/change_layer = FALSE -/datum/element/bed_tuckable/Attach(obj/target, x = 0, y = 0, rotation = 0) +/datum/element/bed_tuckable/Attach(obj/target, x = 0, y = 0, rotation = 0, _change_dir = FALSE, _change_layer = FALSE) . = ..() if(!isitem(target)) return ELEMENT_INCOMPATIBLE @@ -17,6 +22,8 @@ x_offset = x y_offset = y rotation_degree = rotation + change_dir = _change_dir + change_layer = _change_layer RegisterSignal(target, COMSIG_ITEM_ATTACK_OBJ, PROC_REF(tuck_into_bed)) /datum/element/bed_tuckable/Detach(obj/target) @@ -40,11 +47,20 @@ return to_chat(tucker, "You lay [tucked] out on [target_bed].") - tucked.pixel_x = x_offset - tucked.pixel_y = y_offset + tucked.pixel_x = x_offset + target_bed.tucked_x_shift + tucked.pixel_y = y_offset + target_bed.tucked_y_shift if(rotation_degree) tucked.transform = turn(tucked.transform, rotation_degree) RegisterSignal(tucked, COMSIG_ITEM_PICKUP, PROC_REF(untuck)) + // the buckle_lying value on the bed controls the direction that mobs lay down in when they're buckled into bed. + // some items (bedsheets) have different states to reflect those directions. + if(change_dir) + if(target_bed.buckle_lying == 270) + tucked.setDir(NORTH) + else + tucked.setDir(SOUTH) + if(target_bed.suggested_tuck_layer != null) + tucked.layer = target_bed.suggested_tuck_layer return COMPONENT_NO_AFTERATTACK @@ -57,4 +73,5 @@ SIGNAL_HANDLER tucked.transform = turn(tucked.transform, -rotation_degree) + tucked.layer = initial(tucked.layer) UnregisterSignal(tucked, COMSIG_ITEM_PICKUP) diff --git a/code/datums/elements/empprotection.dm b/code/datums/elements/empprotection.dm new file mode 100644 index 000000000000..8d5d798c3cb8 --- /dev/null +++ b/code/datums/elements/empprotection.dm @@ -0,0 +1,20 @@ +/datum/element/empprotection + element_flags = ELEMENT_DETACH | ELEMENT_BESPOKE + id_arg_index = 2 + var/flags = NONE + +/datum/element/empprotection/Attach(datum/target, _flags) + . = ..() + if(. == ELEMENT_INCOMPATIBLE || !isatom(target)) + return ELEMENT_INCOMPATIBLE + flags = _flags + RegisterSignal(target, COMSIG_ATOM_EMP_ACT, PROC_REF(getEmpFlags)) + +/datum/element/empprotection/Detach(atom/target) + UnregisterSignal(target, COMSIG_ATOM_EMP_ACT) + return ..() + +/datum/element/empprotection/proc/getEmpFlags(datum/source, severity) + SIGNAL_HANDLER + + return flags diff --git a/code/datums/elements/dunkable.dm b/code/datums/elements/food/dunkable.dm similarity index 99% rename from code/datums/elements/dunkable.dm rename to code/datums/elements/food/dunkable.dm index 1eaee1d8cbbc..80661d5c4ac0 100644 --- a/code/datums/elements/dunkable.dm +++ b/code/datums/elements/food/dunkable.dm @@ -17,8 +17,6 @@ UnregisterSignal(target, COMSIG_ITEM_AFTERATTACK) /datum/element/dunkable/proc/get_dunked(datum/source, atom/target, mob/user, proximity_flag) - SIGNAL_HANDLER - if(!proximity_flag) // if the user is not adjacent to the container return var/obj/item/reagent_containers/container = target // the container we're trying to dunk into diff --git a/code/datums/elements/food/edible.dm b/code/datums/elements/food/edible.dm new file mode 100644 index 000000000000..a06a5ec28b79 --- /dev/null +++ b/code/datums/elements/food/edible.dm @@ -0,0 +1,471 @@ +/*! + +This component makes it possible to make things edible. What this means is that you can take a bite or force someone to take a bite (in the case of items). +These items take a specific time to eat, and can do most of the things our original food items could. + +Behavior that's still missing from this component that original food items had that should either be put into seperate components or somewhere else: + Components: + Drying component (jerky etc) + Customizable component (custom pizzas etc) + Processable component (Slicing and cooking behavior essentialy, making it go from item A to B when conditions are met.) + Microwavability component + Frying component + + Misc: + Something for cakes (You can store things inside) + +*/ +/datum/component/edible + dupe_mode = COMPONENT_DUPE_UNIQUE_PASSARGS + ///Amount of reagents taken per bite + var/bite_consumption = 2 + ///Amount of bites taken so far + var/bitecount = 0 + ///Flags for food + var/food_flags = NONE + ///Bitfield of the types of this food + var/foodtypes = NONE + ///Amount of seconds it takes to eat this food + var/eat_time = 30 + ///Defines how much it lowers someones satiety (Need to eat, essentialy) + var/junkiness = 0 + ///Message to send when eating + var/list/eatverbs + ///Callback to be ran before you eat something, so you can check if someone *can* eat it. + var/datum/callback/pre_eat + ///Callback to be ran before composting something, in case you don't want a piece of food to be compostable for some reason. + var/datum/callback/on_compost + ///Callback to be ran for when you take a bite of something + var/datum/callback/after_eat + ///Callback to be ran for when you finish eating something + var/datum/callback/on_consume + ///Last time we checked for food likes + var/last_check_time + ///The initial reagents of this food when it is made + var/list/initial_reagents + ///The initial volume of the foods reagents + var/volume + ///The flavortext for taste + var/list/tastes + ///The type of atom this creates when the object is microwaved. + var/microwaved_type + + //TEMP VAR. To be phased out + var/filling_color = null + + +/datum/component/edible/Initialize(list/initial_reagents, + food_flags = NONE, + foodtypes = NONE, + volume = 50, + eat_time = 10, + list/tastes, + list/eatverbs = list("bite","chew","nibble","gnaw","gobble","chomp"), + bite_consumption = 2, + microwaved_type, + junkiness, + datum/callback/pre_eat, + datum/callback/on_compost, + datum/callback/after_eat, + datum/callback/on_consume +) + if(!isatom(parent)) + return COMPONENT_INCOMPATIBLE + + RegisterSignal(parent, COMSIG_PARENT_EXAMINE, PROC_REF(examine)) + RegisterSignal(parent, COMSIG_ATOM_ATTACK_ANIMAL, PROC_REF(use_by_animal)) + RegisterSignal(parent, COMSIG_ATOM_CHECKPARTS, PROC_REF(on_craft)) + RegisterSignal(parent, COMSIG_ATOM_CREATEDBY_PROCESSING, PROC_REF(on_processed)) + RegisterSignal(parent, COMSIG_ITEM_MICROWAVE_COOKED, PROC_REF(on_microwave_cooked)) + RegisterSignal(parent, COMSIG_EDIBLE_ON_COMPOST, PROC_REF(compost)) + + if(isitem(parent)) + RegisterSignal(parent, COMSIG_ITEM_ATTACK, PROC_REF(use_from_hand)) + RegisterSignal(parent, COMSIG_ITEM_FRIED, PROC_REF(on_fried)) + RegisterSignal(parent, COMSIG_ITEM_MICROWAVE_ACT, PROC_REF(on_microwaved)) + + var/obj/item/item = parent + if (!item.grind_results) + item.grind_results = list() //If this doesn't already exist, add it as an empty list. This is needed for the grinder to accept it. + + src.bite_consumption = bite_consumption + src.food_flags = food_flags + src.foodtypes = foodtypes + src.initial_reagents = initial_reagents + src.tastes = tastes + src.eat_time = eat_time + src.eatverbs = string_list(eatverbs) + src.junkiness = junkiness + src.pre_eat = pre_eat + src.on_compost = on_compost + src.after_eat = after_eat + src.on_consume = on_consume + src.initial_reagents = string_assoc_list(initial_reagents) + src.tastes = string_assoc_list(tastes) + src.microwaved_type = microwaved_type + + var/atom/owner = parent + + owner.create_reagents(volume, INJECTABLE) + + for(var/rid in initial_reagents) + var/amount = initial_reagents[rid] + if(length(tastes) && (rid == /datum/reagent/consumable/nutriment || rid == /datum/reagent/consumable/nutriment/vitamin)) + owner.reagents.add_reagent(rid, amount, tastes.Copy()) + else + owner.reagents.add_reagent(rid, amount) + +/datum/component/edible/InheritComponent(datum/component/C, + i_am_original, + list/initial_reagents, + food_flags = NONE, + foodtypes = NONE, + volume = 50, + eat_time = 30, + list/tastes, + list/eatverbs = list("bite","chew","nibble","gnaw","gobble","chomp"), + bite_consumption = 2, + datum/callback/pre_eat, + datum/callback/on_compost, + datum/callback/after_eat, + datum/callback/on_consume + ) + + . = ..() + src.bite_consumption = bite_consumption + src.food_flags = food_flags + src.foodtypes = foodtypes + src.eat_time = eat_time + src.eatverbs = eatverbs + src.junkiness = junkiness + src.pre_eat = pre_eat + src.on_compost = on_compost + src.after_eat = after_eat + src.on_consume = on_consume + +/datum/component/edible/Destroy(force, silent) + QDEL_NULL(pre_eat) + QDEL_NULL(on_compost) + QDEL_NULL(after_eat) + QDEL_NULL(on_consume) + return ..() + +/datum/component/edible/proc/examine(datum/source, mob/user, list/examine_list) + SIGNAL_HANDLER + + if(!(food_flags & FOOD_IN_CONTAINER)) + switch (bitecount) + if (0) + return + if(1) + examine_list += "[parent] was bitten by someone!" + if(2,3) + examine_list += "[parent] was bitten [bitecount] times!" + else + examine_list += "[parent] was bitten multiple times!" + +/datum/component/edible/proc/use_from_hand(obj/item/source, mob/living/M, mob/living/user) + SIGNAL_HANDLER + + return TryToEat(M, user) + +/datum/component/edible/proc/on_fried(fry_object) + SIGNAL_HANDLER + var/atom/our_atom = parent + our_atom.reagents.trans_to(fry_object, our_atom.reagents.total_volume) + qdel(our_atom) + return COMSIG_FRYING_HANDLED + +///Called when food is created through processing (Usually this means it was sliced). We use this to pass the OG items reagents. +/datum/component/edible/proc/on_processed(datum/source, atom/original_atom, list/chosen_processing_option) + SIGNAL_HANDLER + + if(!original_atom.reagents) + return + + var/atom/this_food = parent + var/reagents_for_slice = chosen_processing_option[TOOL_PROCESSING_AMOUNT] + + this_food.create_reagents(volume) //Make sure we have a reagent container + + original_atom.reagents.trans_to(this_food, reagents_for_slice) + + if(original_atom.name != initial(original_atom.name)) + this_food.name = "slice of [original_atom.name]" + if(original_atom.desc != initial(original_atom.desc)) + this_food.desc = "[original_atom.desc]" + +///Called when food is crafted through a crafting recipe datum. +/datum/component/edible/proc/on_craft(datum/source, list/parts_list, datum/crafting_recipe/food/recipe) + SIGNAL_HANDLER + + var/atom/this_food = parent + + this_food.reagents.clear_reagents() + + for(var/obj/item/crafted_part in this_food.contents) + crafted_part.reagents?.trans_to(this_food.reagents, crafted_part.reagents.maximum_volume, CRAFTED_FOOD_INGREDIENT_REAGENT_MODIFIER) + + var/list/objects_to_delete = list() + + // Remove all non recipe objects from the contents + for(var/content_object in this_food.contents) + for(var/recipe_object in recipe.real_parts) + if(istype(content_object, recipe_object)) + continue + objects_to_delete += content_object + + QDEL_LIST(objects_to_delete) + + for(var/r_id in initial_reagents) + var/amount = initial_reagents[r_id] * CRAFTED_FOOD_BASE_REAGENT_MODIFIER + if(r_id == /datum/reagent/consumable/nutriment || r_id == /datum/reagent/consumable/nutriment/vitamin) + this_food.reagents.add_reagent(r_id, amount, tastes) + else + this_food.reagents.add_reagent(r_id, amount) + + SSblackbox.record_feedback("tally", "food_made", 1, type) + +/datum/component/edible/proc/on_microwaved(datum/source, obj/machinery/microwave/used_microwave) + SIGNAL_HANDLER + + var/turf/parent_turf = get_turf(parent) + + if(!microwaved_type) + new /obj/item/reagent_containers/food/snacks/badrecipe(parent_turf) + qdel(src) + return + + + var/obj/item/result + + result = new microwaved_type(parent_turf) + + var/efficiency = istype(used_microwave) ? used_microwave.efficiency : 1 + + SEND_SIGNAL(result, COMSIG_ITEM_MICROWAVE_COOKED, parent, efficiency) + + SSblackbox.record_feedback("tally", "food_made", 1, result.type) + +///Corrects the reagents on the newly cooked food +/datum/component/edible/proc/on_microwave_cooked(datum/source, obj/item/source_item, cooking_efficiency = 1) + SIGNAL_HANDLER + + var/atom/this_food = parent + + this_food.reagents.clear_reagents() + + source_item.reagents?.trans_to(this_food, source_item.reagents.total_volume) + + for(var/r_id in initial_reagents) + var/amount = initial_reagents[r_id] * cooking_efficiency * CRAFTED_FOOD_BASE_REAGENT_MODIFIER + if(r_id == /datum/reagent/consumable/nutriment || r_id == /datum/reagent/consumable/nutriment/vitamin) + this_food.reagents.add_reagent(r_id, amount, tastes) + else + this_food.reagents.add_reagent(r_id, amount) + +///Makes sure the thing hasn't been destroyed or fully eaten to prevent eating phantom edibles +/datum/component/edible/proc/IsFoodGone(atom/owner, mob/living/feeder) + if(QDELETED(owner)|| !(IS_EDIBLE(owner))) + return TRUE + if(owner.reagents.total_volume) + return FALSE + return TRUE + +/// Normal time to forcefeed someone something +#define EAT_TIME_FORCE_FEED (3 SECONDS) + +///All the checks for the act of eating itself and +/datum/component/edible/proc/TryToEat(mob/living/eater, mob/living/feeder) + + set waitfor = FALSE // We might end up sleeping here, so we don't want to hold up anything + + var/atom/owner = parent + + if(feeder.a_intent == INTENT_HARM) + return + + . = COMPONENT_CANCEL_ATTACK_CHAIN //Point of no return I suppose + + if(IsFoodGone(owner, feeder)) + return + + if(!CanConsume(eater, feeder)) + return + var/fullness = eater.nutrition + 10 //The theoretical fullness of the person eating if they were to eat this + + var/time_to_eat = (eater = feeder) ? eat_time : EAT_TIME_FORCE_FEED + + if(eater == feeder)//If you're eating it yourself. + if(eat_time && !do_after(feeder, time_to_eat, eater, timed_action_flags = food_flags & FOOD_FINGER_FOOD ? IGNORE_USER_LOC_CHANGE | IGNORE_TARGET_LOC_CHANGE : NONE)) //Gotta pass the minimal eat time + return + if(IsFoodGone(owner, feeder)) + return + var/eatverb = pick(eatverbs) + + if(junkiness && eater.satiety < -150 && eater.nutrition > NUTRITION_LEVEL_STARVING + 50 && !HAS_TRAIT(eater, TRAIT_VORACIOUS)) + to_chat(eater, "You don't feel like eating any more junk food at the moment!") + return + else if(fullness <= 50) + eater.visible_message("[eater] hungrily [eatverb]s \the [parent], gobbling it down!", "You hungrily [eatverb] \the [parent], gobbling it down!") + else if(fullness > 50 && fullness < 150) + eater.visible_message("[eater] hungrily [eatverb]s \the [parent].", "You hungrily [eatverb] \the [parent].") + else if(fullness > 150 && fullness < 500) + eater.visible_message("[eater] [eatverb]s \the [parent].", "You [eatverb] \the [parent].") + else if(fullness > 500 && fullness < 600) + eater.visible_message("[eater] unwillingly [eatverb]s a bit of \the [parent].", "You unwillingly [eatverb] a bit of \the [parent].") + else if(fullness > (600 * (1 + eater.overeatduration / 2000))) // The more you eat - the more you can eat + eater.visible_message("[eater] cannot force any more of \the [parent] to go down [eater.p_their()] throat!", "You cannot force any more of \the [parent] to go down your throat!") + return + + + + + + else //If you're feeding it to someone else. + if(isbrain(eater)) + to_chat(feeder, "[eater] doesn't seem to have a mouth!") + return + if(fullness <= (600 * (1 + eater.overeatduration / 1000))) + eater.visible_message( + "[feeder] attempts to feed [eater] [parent].", \ + "[feeder] attempts to feed you [parent]." + ) + if(eater.is_blind()) + to_chat(eater, "You feel someone trying to feed you something!") + else + eater.visible_message( + "[feeder] cannot force any more of [parent] down [eater]'s throat!", \ + "[feeder] cannot force any more of [parent] down your throat!" + ) + if(eater.is_blind()) + to_chat(eater, "You're too full to eat what's being fed to you!") + return + if(!do_after(feeder, delay = time_to_eat, target = eater)) //Wait 3 seconds before you can feed + return + if(IsFoodGone(owner, feeder)) + return + log_combat(feeder, eater, "fed", owner.reagents.log_list()) + eater.visible_message( + "[feeder] forces [eater] to eat [parent]!", \ + "[feeder] forces you to eat [parent]!" + ) + if(eater.is_blind()) + to_chat(eater, "You're forced to eat something!") + + TakeBite(eater, feeder) + + //If we're not force-feeding, try take another bite + if(eater == feeder && eat_time) + INVOKE_ASYNC(src, PROC_REF(TryToEat), eater, feeder) + +#undef EAT_TIME_FORCE_FEED + +///This function lets the eater take a bite and transfers the reagents to the eater. +/datum/component/edible/proc/TakeBite(mob/living/eater, mob/living/feeder) + + var/atom/owner = parent + + if(!owner?.reagents) + return FALSE + if(eater.satiety > -200) + eater.satiety -= junkiness + playsound(eater.loc,'sound/items/eatfood.ogg', rand(10,50), TRUE) + if(!owner.reagents.total_volume) + return + SEND_SIGNAL(parent, COMSIG_FOOD_EATEN, eater, feeder, bitecount, bite_consumption) + var/fraction = min(bite_consumption / owner.reagents.total_volume, 1) + owner.reagents.trans_to(eater, bite_consumption, transfered_by = feeder, method = INGEST) + bitecount++ + check_liked(fraction, eater) + if(!owner.reagents.total_volume) + on_consume(eater, feeder) + + //Invoke our after eat callback if it is valid + if(after_eat) + after_eat.Invoke(eater, feeder, bitecount) + + return TRUE + +///Checks if we can compost something, and handles it +/datum/component/edible/proc/compost(mob/living/user) + SIGNAL_HANDLER + if(on_compost && !on_compost.Invoke(user)) + return COMPONENT_EDIBLE_BLOCK_COMPOST + +///Checks whether or not the eater can actually consume the food +/datum/component/edible/proc/CanConsume(mob/living/eater, mob/living/feeder) + if(!iscarbon(eater)) + return FALSE + if(pre_eat && !pre_eat.Invoke(eater, feeder)) + return FALSE + var/mob/living/carbon/C = eater + var/covered = "" + if(C.is_mouth_covered(head_only = 1)) + covered = "headgear" + else if(C.is_mouth_covered(mask_only = 1)) + covered = "mask" + if(covered) + var/who = (isnull(feeder) || eater == feeder) ? "your" : "[eater.p_their()]" + to_chat(feeder, "You have to remove [who] [covered] first!") + return FALSE + return TRUE + +///Check foodtypes to see if we should send a moodlet +/datum/component/edible/proc/check_liked(fraction, mob/eater) + if(last_check_time + 50 > world.time) + return FALSE + if(!ishuman(eater)) + return FALSE + var/mob/living/carbon/human/human_eater = eater + var/obj/item/organ/tongue/tongue = human_eater.getorganslot(ORGAN_SLOT_TONGUE) + if((foodtypes & BREAKFAST) && world.time - SSticker.round_start_time < STOP_SERVING_BREAKFAST) + SEND_SIGNAL(human_eater, COMSIG_ADD_MOOD_EVENT, "breakfast", /datum/mood_event/breakfast) + if(HAS_TRAIT(human_eater, TRAIT_AGEUSIA)) + if(foodtypes & tongue.toxic_food) + to_chat(human_eater, "You don't feel so good...") + human_eater.adjust_disgust(25 + 30 * fraction) + else + if(foodtypes & tongue.toxic_food) + to_chat(human_eater,"What the hell was that thing?!") + human_eater.adjust_disgust(25 + 30 * fraction) + SEND_SIGNAL(human_eater, COMSIG_ADD_MOOD_EVENT, "toxic_food", /datum/mood_event/disgusting_food) + else if(foodtypes & tongue.disliked_food) + to_chat(human_eater,"That didn't taste very good...") + human_eater.adjust_disgust(11 + 15 * fraction) + SEND_SIGNAL(human_eater, COMSIG_ADD_MOOD_EVENT, "gross_food", /datum/mood_event/gross_food) + else if(foodtypes & tongue.liked_food) + to_chat(human_eater,"I love this taste!") + human_eater.adjust_disgust(-5 + -2.5 * fraction) + SEND_SIGNAL(human_eater, COMSIG_ADD_MOOD_EVENT, "fav_food", /datum/mood_event/favorite_food) + last_check_time = world.time + +///Delete the item when it is fully eaten +/datum/component/edible/proc/on_consume(mob/living/eater, mob/living/feeder) + SEND_SIGNAL(parent, COMSIG_FOOD_CONSUMED, eater, feeder) + + on_consume?.Invoke(eater, feeder) + + if(isturf(parent)) + var/turf/T = parent + T.ScrapeAway(1, CHANGETURF_INHERIT_AIR) + else + qdel(parent) + +///Ability to feed food to puppers +/datum/component/edible/proc/use_by_animal(datum/source, mob/user) + SIGNAL_HANDLER + var/atom/owner = parent + + if(!isdog(user)) + return + var/mob/living/L = user + if(bitecount == 0 || prob(50)) + L.manual_emote("nibbles away at \the [parent].") + bitecount++ + . = COMPONENT_CANCEL_ATTACK_CHAIN + L.taste(owner.reagents) // why should carbons get all the fun? + if(bitecount >= 5) + var/satisfaction_text = pick("burps from enjoyment.", "yaps for more!", "woofs twice.", "looks at the area where \the [parent] was.") + L.manual_emote(satisfaction_text) + qdel(parent) diff --git a/code/datums/elements/food/food_trash.dm b/code/datums/elements/food/food_trash.dm new file mode 100644 index 000000000000..6c484c414a07 --- /dev/null +++ b/code/datums/elements/food/food_trash.dm @@ -0,0 +1,40 @@ +// If an item has the food_trash element it will drop an item when it is consumed. +/datum/element/food_trash + element_flags = ELEMENT_BESPOKE + id_arg_index = 2 + /// The type of trash that is spawned by this element + var/trash + ///Flags of the trash element that change its behavior UNUSED UNTIL PART 2 + //var/flags + ///Generate trash proc path + var/generate_trash_procpath + +/datum/element/food_trash/Attach(datum/target, atom/trash, flags, generate_trash_proc) + . = ..() + if(!isatom(target)) + return ELEMENT_INCOMPATIBLE + src.trash = trash + //src.flags = flags + RegisterSignal(target, COMSIG_FOOD_CONSUMED, PROC_REF(generate_trash)) + if(!generate_trash_procpath && generate_trash_proc) + generate_trash_procpath = generate_trash_proc + +/datum/element/food_trash/Detach(datum/target) + . = ..() + UnregisterSignal(target, COMSIG_FOOD_CONSUMED) + +/datum/element/food_trash/proc/generate_trash(datum/source, mob/living/eater, mob/living/feeder) + SIGNAL_HANDLER + + ///cringy signal_handler shouldnt be needed if you dont want to return but oh well + INVOKE_ASYNC(src, PROC_REF(async_generate_trash), source) + +/datum/element/food_trash/proc/async_generate_trash(datum/source) + var/atom/edible_object = source + + var/obj/item/trash_item = generate_trash_procpath ? call(source, generate_trash_procpath)() : new trash(edible_object.drop_location()) + + if(isliving(edible_object.loc)) + var/mob/living/food_holding_mob = edible_object.loc + food_holding_mob.dropItemToGround(edible_object) + food_holding_mob.put_in_hands(trash_item) diff --git a/code/datums/elements/food/processable.dm b/code/datums/elements/food/processable.dm new file mode 100644 index 000000000000..503e5169c877 --- /dev/null +++ b/code/datums/elements/food/processable.dm @@ -0,0 +1,47 @@ +// If an item has the processable item, it can be processed into another item with a specific tool. This adds generic behavior for those actions to make it easier to set-up generically. +/datum/element/processable + element_flags = ELEMENT_BESPOKE + id_arg_index = 2 + ///The type of atom this creates when the processing recipe is used. + var/result_atom_type + ///The tool behaviour for this processing recipe + var/tool_behaviour + ///Time to process the atom + var/time_to_process + ///Amount of the resulting actor this will create + var/amount_created + ///Whether or not the atom being processed has to be on a table or tray to process it + var/table_required + +/datum/element/processable/Attach(datum/target, tool_behaviour, result_atom_type, amount_created = 3, time_to_process = 20, table_required = FALSE) + . = ..() + if(!isatom(target)) + return ELEMENT_INCOMPATIBLE + + src.tool_behaviour = tool_behaviour + src.amount_created = amount_created + src.time_to_process = time_to_process + src.result_atom_type = result_atom_type + src.table_required = table_required + + RegisterSignal(target, COMSIG_ATOM_TOOL_ACT(tool_behaviour), PROC_REF(try_process)) + +/datum/element/processable/Detach(datum/target) + . = ..() + UnregisterSignal(target, COMSIG_ATOM_TOOL_ACT(tool_behaviour)) + +/datum/element/processable/proc/try_process(datum/source, mob/living/user, obj/item/I, list/mutable_recipes) + SIGNAL_HANDLER + + if(table_required) + var/obj/item/found_item = source + var/found_location = found_item.loc + var/found_turf = isturf(found_location) + var/found_table = locate(/obj/structure/table) in found_location + var/found_tray = locate(/obj/item/storage/bag/tray) in found_location + if(!found_turf && !istype(found_location, /obj/item/storage/bag/tray) || found_turf && !(found_table || found_tray)) + to_chat(user, "You cannot make that here! You need a table or at least a tray.") + return + + mutable_recipes += list(list(TOOL_PROCESSING_RESULT = result_atom_type, TOOL_PROCESSING_AMOUNT = amount_created, TOOL_PROCESSING_TIME = time_to_process)) + return COMPONENT_NO_AFTERATTACK diff --git a/code/datums/elements/plant_backfire.dm b/code/datums/elements/plant_backfire.dm new file mode 100644 index 000000000000..47cd1de51fe9 --- /dev/null +++ b/code/datums/elements/plant_backfire.dm @@ -0,0 +1,125 @@ +/// -- Plant backfire element -- +/// Certain high-danger plants, like death-nettles, will backfire and harm the holder if they're not properly protected. +/// If a user is protected with something like leather gloves, they can handle them normally. +/// If they're not protected properly, we invoke a callback on the user, harming or inconveniencing them. +/datum/element/plant_backfire + element_flags = ELEMENT_BESPOKE + id_arg_index = 2 + /// Whether we stop the current action if backfire is triggered (EX: returning CANCEL_ATTACK_CHAIN) + var/cancel_action = FALSE + /// Any extra traits we want to check in addition to TRAIT_PLANT_SAFE. Mobs with a trait in this list will be considered safe. List of traits. + var/extra_traits + /// Any plant genes we want to check that are required for our plant to be dangerous. Plants without a gene in this list will be considered safe. List of typepaths. + var/extra_genes + +/datum/element/plant_backfire/Attach(datum/target, cancel_action = FALSE, extra_traits, extra_genes) + . = ..() + if(!isitem(target)) + return ELEMENT_INCOMPATIBLE + + src.cancel_action = cancel_action + src.extra_traits = extra_traits + src.extra_genes = extra_genes + + RegisterSignal(target, COMSIG_ITEM_PRE_ATTACK, PROC_REF(attack_safety_check)) + RegisterSignal(target, COMSIG_ITEM_PICKUP, PROC_REF(pickup_safety_check)) + RegisterSignal(target, COMSIG_MOVABLE_PRE_THROW, PROC_REF(throw_safety_check)) + +/datum/element/plant_backfire/Detach(datum/target) + . = ..() + UnregisterSignal(target, list(COMSIG_ITEM_PRE_ATTACK, COMSIG_ITEM_PICKUP, COMSIG_MOVABLE_PRE_THROW)) + +/** + * Checks before we attack if we're okay to continue. + * + * source - our plant + * user - the mob wielding our [source] + */ +/datum/element/plant_backfire/proc/attack_safety_check(obj/item/source, atom/target, mob/user) + SIGNAL_HANDLER + + // Covers stuff like tk, since we aren't actually touching the plant. + if(!user.is_holding(source)) + return + if(!backfire(source, user)) + return + + return //cancel_action ? COMPONENT_CANCEL_ATTACK_CHAIN : NONE + +/** + * Checks before we pick up the plant if we're okay to continue. + * + * source - our plant + * user - the mob picking our [source] + */ +/datum/element/plant_backfire/proc/pickup_safety_check(obj/item/source, mob/user) + SIGNAL_HANDLER + + backfire(source, user) + +/** + * Checks before we throw the plant if we're okay to continue. + * + * source - our plant + * thrower - the mob throwing our [source] + */ +/datum/element/plant_backfire/proc/throw_safety_check(obj/item/source, list/arguments) + SIGNAL_HANDLER + + var/mob/living/thrower = arguments[4] // the 4th arg = the mob throwing our item + if(!istype(thrower) || !thrower.is_holding(source)) + return + if(!backfire(source, thrower)) + return + + return //cancel_action ? COMPONENT_CANCEL_ATTACK_CHAIN : NONE + +/** + * The actual backfire occurs here. + * Checks if the user is able to safely handle the plant. + * If not, sends the backfire signal (meaning backfire will occur and be handled by one or multiple genes). + * + * Returns FALSE if the user was safe and no backfire occured. + * Returns TRUE if the user was not safe and a backfire actually happened. + */ +/datum/element/plant_backfire/proc/backfire(obj/item/plant, mob/user) + if(plant_safety_check(plant, user)) + return FALSE + + SEND_SIGNAL(plant, COMSIG_PLANT_ON_BACKFIRE, user) + return TRUE + +/** + * Actually checks if our user is safely handling our plant. + * + * Checks for TRAIT_PLANT_SAFE, and returns TRUE if we have it. + * Then, any extra traits we need to check (Like TRAIT_PIERCEIMMUNE for nettles) and returns TRUE if we have one of them. + * Then, any extra genes we need to check (Like liquid contents for bluespace tomatos) and returns TRUE if we don't have the gene. + * + * source - our plant + * user - the carbon handling our [source] + * + * returns FALSE if none of the checks are successful. + */ +/datum/element/plant_backfire/proc/plant_safety_check(obj/item/plant, mob/living/carbon/user) + if(!istype(user)) + return TRUE + + if(HAS_TRAIT(user, TRAIT_PLANT_SAFE)) + return TRUE + + for(var/checked_trait in extra_traits) + if(HAS_TRAIT(user, checked_trait)) + return TRUE + + var/obj/item/seeds/our_seed = plant.get_plant_seed() + if(our_seed) + for(var/checked_gene in extra_genes) + if(!our_seed.get_gene(checked_gene)) + return TRUE + + for(var/obj/item/clothing/worn_item in user.get_equipped_items()) + if((worn_item.body_parts_covered & HANDS) && (worn_item.clothing_flags & THICKMATERIAL)) + return TRUE + + return FALSE diff --git a/code/datums/elements/point_of_interest.dm b/code/datums/elements/point_of_interest.dm new file mode 100644 index 000000000000..d64ee5466ace --- /dev/null +++ b/code/datums/elements/point_of_interest.dm @@ -0,0 +1,22 @@ +/// Designates the atom as a "point of interest", meaning it can be directly orbited +/datum/element/point_of_interest + element_flags = ELEMENT_DETACH + +/datum/element/point_of_interest/Attach(datum/target) + if (!isatom(target)) + return ELEMENT_INCOMPATIBLE + + /* + // New players are abstract mobs assigned to people who are still in the lobby screen. + // As a result, they are not a valid POI and should never be a valid POI. If they + // somehow get this element attached to them, there's something we need to debug. + if(isnewplayer(target)) + return ELEMENT_INCOMPATIBLE + */ + + SSpoints_of_interest.on_poi_element_added(target) + return ..() + +/datum/element/point_of_interest/Detach(datum/target) + SSpoints_of_interest.on_poi_element_removed(target) + return ..() diff --git a/code/datums/elements/tool_bang.dm b/code/datums/elements/tool_bang.dm new file mode 100644 index 000000000000..bc002e936de4 --- /dev/null +++ b/code/datums/elements/tool_bang.dm @@ -0,0 +1,40 @@ +/** + * Tool bang bespoke element + * + * Bang the user when using this tool + */ +/datum/element/tool_bang + element_flags = ELEMENT_BESPOKE + id_arg_index = 2 + /// Strength of the bang + var/bang_strength + +/datum/element/tool_bang/Attach(datum/target, bang_strength) + . = ..() + if(!isitem(target)) + return ELEMENT_INCOMPATIBLE + + src.bang_strength = bang_strength + + RegisterSignal(target, COMSIG_TOOL_IN_USE, PROC_REF(prob_bang)) + RegisterSignal(target, COMSIG_TOOL_START_USE, PROC_REF(bang)) + +/datum/element/tool_bang/Detach(datum/source, force) + . = ..() + UnregisterSignal(source, list(COMSIG_TOOL_IN_USE, COMSIG_TOOL_START_USE)) + +/datum/element/tool_bang/proc/prob_bang(datum/source, mob/living/user) + SIGNAL_HANDLER + + if(prob(90)) + return + bang(source, user) + +/datum/element/tool_bang/proc/bang(datum/source, mob/living/user) + SIGNAL_HANDLER + + if(user && get_dist(get_turf(source), get_turf(user)) <= 1) + if(istype(user, /mob/living/carbon)) + var/mob/living/carbon/carbon = user + carbon.soundbang_act(min(bang_strength,1), 0, 1, 5) + diff --git a/code/datums/guestbook.dm b/code/datums/guestbook.dm index 99104f09d715..ecb7087ed08e 100644 --- a/code/datums/guestbook.dm +++ b/code/datums/guestbook.dm @@ -67,7 +67,7 @@ given_name = reject_bad_name(given_name) if(!given_name) if(!silent) - to_chat(user, span_warning("That's a pretty terrible name. You can do better.")) + to_chat(user, span_warning("That's a pretty terrible name.")) return FALSE if(!visibility_checks(user, guest, silent)) return FALSE diff --git a/code/datums/hud.dm b/code/datums/hud.dm index 24865387794a..4703a31ea0f8 100644 --- a/code/datums/hud.dm +++ b/code/datums/hud.dm @@ -14,7 +14,6 @@ GLOBAL_LIST_INIT(huds, list( DATA_HUD_SENTIENT_DISEASE = new/datum/atom_hud/sentient_disease(), DATA_HUD_AI_DETECT = new/datum/atom_hud/ai_detector(), DATA_HUD_FAN = new/datum/atom_hud/data/human/fan_hud(), - ANTAG_HUD_CULT = new/datum/atom_hud/antag(), ANTAG_HUD_REV = new/datum/atom_hud/antag(), ANTAG_HUD_OPS = new/datum/atom_hud/antag(), ANTAG_HUD_WIZ = new/datum/atom_hud/antag(), @@ -23,9 +22,6 @@ GLOBAL_LIST_INIT(huds, list( ANTAG_HUD_NINJA = new/datum/atom_hud/antag/hidden(), ANTAG_HUD_CHANGELING = new/datum/atom_hud/antag/hidden(), ANTAG_HUD_ABDUCTOR = new/datum/atom_hud/antag/hidden(), - ANTAG_HUD_DEVIL = new/datum/atom_hud/antag(), - ANTAG_HUD_SINTOUCHED = new/datum/atom_hud/antag/hidden(), - ANTAG_HUD_SOULLESS = new/datum/atom_hud/antag/hidden(), ANTAG_HUD_BROTHER = new/datum/atom_hud/antag/hidden(), ANTAG_HUD_OBSESSED = new/datum/atom_hud/antag/hidden(), ANTAG_HUD_FUGITIVE = new/datum/atom_hud/antag(), diff --git a/code/datums/looping_sounds/item_sounds.dm b/code/datums/looping_sounds/item_sounds.dm index 96c2ec7533c3..7eeabf513b8e 100644 --- a/code/datums/looping_sounds/item_sounds.dm +++ b/code/datums/looping_sounds/item_sounds.dm @@ -36,17 +36,6 @@ #undef RAD_GEIGER_MEDIUM #undef RAD_GEIGER_HIGH -/datum/looping_sound/reverse_bear_trap - mid_sounds = list('sound/effects/clock_tick.ogg') - mid_length = 3.5 - volume = 25 - - -/datum/looping_sound/reverse_bear_trap_beep - mid_sounds = list('sound/machines/beep.ogg') - mid_length = 60 - volume = 10 - /datum/looping_sound/siren mid_sounds = list('sound/items/weeoo1.ogg' = 1) mid_length = 15 diff --git a/code/datums/looping_sounds/weather.dm b/code/datums/looping_sounds/weather.dm index 4398e7d5b1b2..0e26b4592eb0 100644 --- a/code/datums/looping_sounds/weather.dm +++ b/code/datums/looping_sounds/weather.dm @@ -74,3 +74,20 @@ /datum/looping_sound/weather/rain/indoors volume = 30 + +/datum/looping_sound/weather/rain/storm + mid_sounds = list( + 'sound/ambience/storm_outdoors.ogg' = 1 + ) + mid_length = 20.03 SECONDS // The lengths for the files vary, but the longest is ten seconds, so this will make it sound like intermittent wind. + start_sound = 'sound/ambience/acidrain_start.ogg' + start_length = null + end_sound = null + volume = 50 + +/datum/looping_sound/weather/rain/storm/indoors + volume = 30 + mid_sounds = list( + 'sound/ambience/storm_indoors.ogg' = 1 + ) + mid_length = 20.03 SECONDS // The lengths for the files vary, but the longest is ten seconds, so this will make it sound like intermittent wind. diff --git a/code/datums/map_zones.dm b/code/datums/map_zones.dm index c50b93cb2dd7..bf103242c8db 100644 --- a/code/datums/map_zones.dm +++ b/code/datums/map_zones.dm @@ -533,6 +533,9 @@ /datum/virtual_level/proc/get_block() return block(locate(low_x,low_y,z_value), locate(high_x,high_y,z_value)) +/datum/virtual_level/proc/get_block_portion(lower_x, lower_y, higher_x, higher_y) + return block(locate(lower_x,lower_y,z_value), locate(higher_x,higher_y,z_value)) + /datum/virtual_level/proc/get_unreserved_block() return block(locate(low_x + reserved_margin, low_y + reserved_margin, z_value), locate(high_x - reserved_margin,high_y - reserved_margin,z_value)) @@ -542,6 +545,9 @@ /datum/virtual_level/proc/get_random_position() return locate(rand(low_x, high_x), rand(low_y, high_y), z_value) +/datum/virtual_level/proc/get_random_position_in_margin() + return locate(rand(low_x + reserved_margin, high_x - reserved_margin), rand(low_y + reserved_margin, high_y - reserved_margin), z_value) + /datum/virtual_level/proc/get_below_turf(turf/Turf) if(!down_linkage) return @@ -631,7 +637,7 @@ var/ty = destination_y var/turf/DT = locate(tx, ty, destination_z) var/itercount = 0 - while(DT.density || istype(DT.loc,/area/shuttle)) // Extend towards the center of the map, trying to look for a better place to arrive + while(DT.density) // Extend towards the center of the map, trying to look for a better place to arrive if (itercount++ >= 100) log_game("SPACE Z-TRANSIT ERROR: Could not find a safe place to land [arrived] within 100 iterations.") break diff --git a/code/datums/mapgen/planetary/SandGenerator.dm b/code/datums/mapgen/planetary/SandGenerator.dm index 1431ab53c6b9..e285f5b1ac6c 100644 --- a/code/datums/mapgen/planetary/SandGenerator.dm +++ b/code/datums/mapgen/planetary/SandGenerator.dm @@ -173,10 +173,10 @@ ) /datum/biome/sand/acid //plains - open_turf_types = list(/turf/open/floor/plating/asteroid/whitesands/lit = 10, /turf/open/acid/whitesands = 1) + open_turf_types = list(/turf/open/floor/plating/asteroid/whitesands/lit = 10, /turf/open/water/acid/whitesands = 1) /datum/biome/sand/acid/total - open_turf_types = list(/turf/open/acid/whitesands = 1) + open_turf_types = list(/turf/open/water/acid/whitesands = 1) flora_spawn_chance = 0 feature_spawn_chance = 0 mob_spawn_chance = 0 @@ -228,4 +228,4 @@ open_turf_types = list(/turf/open/floor/plating/asteroid/whitesands/dried = 7, /turf/open/lava = 1) /datum/biome/cave/sand/volcanic/acidic - open_turf_types = list(/turf/open/floor/plating/asteroid/whitesands/dried = 8, /turf/open/acid/whitesands = 1) + open_turf_types = list(/turf/open/floor/plating/asteroid/whitesands/dried = 8, /turf/open/water/acid/whitesands = 1) diff --git a/code/datums/mapgen/planetary/WasteGenerator.dm b/code/datums/mapgen/planetary/WasteGenerator.dm index 9b100412a391..67a9e5649a8c 100644 --- a/code/datums/mapgen/planetary/WasteGenerator.dm +++ b/code/datums/mapgen/planetary/WasteGenerator.dm @@ -66,9 +66,9 @@ BIOME_COLD_CAVE = list( BIOME_LOWEST_HUMIDITY = /datum/biome/cave/waste, BIOME_LOW_HUMIDITY = /datum/biome/cave/waste/rad, - BIOME_MEDIUM_HUMIDITY = /datum/biome/cave/waste, - BIOME_HIGH_HUMIDITY = /datum/biome/cave/waste/rad, - BIOME_HIGHEST_HUMIDITY = /datum/biome/cave/waste + BIOME_MEDIUM_HUMIDITY = /datum/biome/cave/waste/conc, + BIOME_HIGH_HUMIDITY = /datum/biome/cave/waste/conc, + BIOME_HIGHEST_HUMIDITY = /datum/biome/cave/waste/conc ), BIOME_WARM_CAVE = list( BIOME_LOWEST_HUMIDITY = /datum/biome/cave/waste, @@ -284,10 +284,10 @@ closed_turf_types = list( /turf/closed/mineral/random/wasteplanet = 40, - /turf/closed/wall/r_wall = 1, - /turf/closed/wall/r_wall/rust = 3, - /turf/closed/wall = 2, - /turf/closed/wall/rust = 6 + /turf/closed/wall/r_wall/wasteplanet = 1, + /turf/closed/wall/r_wall/rust/wasteplanet = 3, + /turf/closed/wall/wasteplanet = 2, + /turf/closed/wall/rust/wasteplanet = 6 ) flora_spawn_list = list( @@ -381,10 +381,10 @@ /turf/open/floor/plating/wasteplanet = 4 ) closed_turf_types = list( - /turf/closed/wall/r_wall = 1, - /turf/closed/wall/r_wall/rust = 1, - /turf/closed/wall = 5, - /turf/closed/wall/rust = 10 + /turf/closed/wall/r_wall/wasteplanet = 1, + /turf/closed/wall/r_wall/rust/wasteplanet = 1, + /turf/closed/wall/wasteplanet = 5, + /turf/closed/wall/rust/wasteplanet = 10 ) flora_spawn_list = list( /obj/effect/spawner/lootdrop/waste/mechwreck = 40, @@ -450,3 +450,46 @@ /obj/effect/spawner/minefield/manhack = 2 ) feature_spawn_chance = 2 //hivebot biomes should have their dongles + +/datum/biome/cave/waste/conc //da concrete jungle baybee + open_turf_types = list( + /turf/open/floor/concrete/wasteplanet = 10, + /turf/open/floor/concrete/reinforced/wasteplanet = 4, + /turf/open/floor/concrete/pavement/wasteplanet = 4 + ) + closed_turf_types = list( + /turf/closed/wall/concrete/wasteplanet = 15, + /turf/closed/wall/concrete/reinforced/wasteplanet = 3 + ) + + flora_spawn_list = list( + /obj/effect/spawner/lootdrop/waste/mechwreck = 20, + /obj/effect/spawner/lootdrop/waste/trash = 90, + /obj/effect/spawner/lootdrop/waste/radiation = 16, + /obj/structure/reagent_dispensers/fueltank = 10, + /obj/structure/reagent_dispensers/watertank = 20, + /obj/item/stack/cable_coil/cut = 50, + /obj/structure/closet/crate/secure/loot = 3, + /obj/effect/spawner/lootdrop/waste/atmos_can = 5, + /obj/effect/spawner/lootdrop/waste/atmos_can/rare = 1, + /obj/effect/spawner/lootdrop/waste/salvageable = 30, + /obj/effect/spawner/lootdrop/maintenance = 2, + /obj/effect/spawner/lootdrop/maintenance/two = 5, + /obj/effect/spawner/lootdrop/maintenance/three = 10, + /obj/effect/spawner/lootdrop/waste/salvageable = 40, + ) + mob_spawn_list = list( + /mob/living/simple_animal/hostile/hivebot/wasteplanet/strong = 80, + /mob/living/simple_animal/hostile/hivebot/wasteplanet/ranged = 50, + /mob/living/simple_animal/hostile/hivebot/wasteplanet/ranged/rapid = 50, + /mob/living/simple_animal/bot/firebot/rockplanet = 15, + /mob/living/simple_animal/bot/secbot/ed209/rockplanet = 3, + /mob/living/simple_animal/hostile/abandoned_minebot = 15, + /mob/living/simple_animal/bot/floorbot/rockplanet = 15, + /obj/structure/spawner/hivebot = 35 + ) + + flora_spawn_chance = 30 + feature_spawn_chance = 8 + mob_spawn_chance = 5 + diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index ab3a76d2ddff..d834a03b02a9 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -211,9 +211,9 @@ /obj/item/clothing/gloves/krav_maga/combatglovesplus name = "combat gloves plus" - desc = "These tactical gloves are fireproof and electrically insulated, and through the use of nanochip technology will teach you the martial art of krav maga." + desc = "These tactical gloves are fireproof, and through the use of nanochip technology will teach you the martial art of krav maga." icon_state = "black" - siemens_coefficient = 0 + siemens_coefficient = 0.5 permeability_coefficient = 0.05 strip_delay = 80 cold_protection = HANDS diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index 72d26cf74367..e4e3ef90ebc7 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -169,96 +169,3 @@ to_chat(usr, "Crashing Wave Kick: Harm Disarm. Launch people brutally across rooms, and away from you.") to_chat(usr, "Keelhaul: Harm Grab. Kick opponents to the floor. Against prone targets, deal additional stamina damage and disarm them.") to_chat(usr, "In addition, your body has become incredibly resilient to most forms of attack. Weapons cannot readily pierce your hardened skin, and you are highly resistant to stuns and knockdowns, and can block all projectiles in Throw Mode. However, you are not invincible, and sustained damage will take it's toll. Avoid heat at all costs!") - -/obj/item/staff/bostaff - name = "bo staff" - desc = "A long, tall staff made of polished wood. Traditionally used in ancient old-Earth martial arts. Can be wielded to both kill and incapacitate." - force = 10 - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - throwforce = 20 - throw_speed = 2 - attack_verb = list("smashed", "slammed", "whacked", "thwacked") - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "bostaff0" - base_icon_state = "bostaff" - lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' - block_chance = 50 - var/wielded = FALSE // track wielded status on item - -/obj/item/staff/bostaff/Initialize() - . = ..() - RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(on_wield)) - RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(on_unwield)) - -/obj/item/staff/bostaff/ComponentInitialize() - . = ..() - AddComponent(/datum/component/two_handed, force_unwielded=10, force_wielded=24, icon_wielded="[base_icon_state]1") - -/// triggered on wield of two handed item -/obj/item/staff/bostaff/proc/on_wield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = TRUE - -/// triggered on unwield of two handed item -/obj/item/staff/bostaff/proc/on_unwield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = FALSE - -/obj/item/staff/bostaff/update_icon_state() - icon_state = "[base_icon_state]0" - return ..() - -/obj/item/staff/bostaff/attack(mob/target, mob/living/user) - add_fingerprint(user) - if((HAS_TRAIT(user, TRAIT_CLUMSY)) && prob(50)) - to_chat(user, "You club yourself over the head with [src].") - user.Paralyze(60) - if(ishuman(user)) - var/mob/living/carbon/human/H = user - H.apply_damage(2*force, BRUTE, BODY_ZONE_HEAD) - else - user.take_bodypart_damage(2*force) - return - if(iscyborg(target)) - return ..() - if(!isliving(target)) - return ..() - var/mob/living/carbon/C = target - if(C.stat) - to_chat(user, "It would be dishonorable to attack a foe while they cannot retaliate.") - return - if(user.a_intent == INTENT_DISARM) - if(!wielded) - return ..() - if(!ishuman(target)) - return ..() - var/mob/living/carbon/human/H = target - var/list/fluffmessages = list("club", "smack", "broadside", "beat", "slam") - H.visible_message("[user] [pick(fluffmessages)]s [H] with [src]!", \ - "[user] [pick(fluffmessages)]s you with [src]!", "You hear a sickening sound of flesh hitting flesh!", null, user) - to_chat(user, "You [pick(fluffmessages)] [H] with [src]!") - playsound(get_turf(user), 'sound/effects/woodhit.ogg', 75, TRUE, -1) - H.adjustStaminaLoss(rand(13,20)) - if(prob(10)) - H.visible_message("[H] collapses!", \ - "Your legs give out!") - H.Paralyze(80) - if(H.staminaloss && !H.IsSleeping()) - var/total_health = (H.health - H.staminaloss) - if(total_health <= HEALTH_THRESHOLD_CRIT && !H.stat) - H.visible_message("[user] delivers a heavy hit to [H]'s head, knocking [H.p_them()] out cold!", \ - "You're knocked unconscious by [user]!", "You hear a sickening sound of flesh hitting flesh!", null, user) - to_chat(user, "You deliver a heavy hit to [H]'s head, knocking [H.p_them()] out cold!") - H.SetSleeping(600) - H.adjustOrganLoss(ORGAN_SLOT_BRAIN, 15, 150) - else - return ..() - -/obj/item/staff/bostaff/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(!wielded) - return ..() - return FALSE diff --git a/code/datums/materials/_material.dm b/code/datums/materials/_material.dm index 4f505cb2a3e7..1b05f7d7ef95 100644 --- a/code/datums/materials/_material.dm +++ b/code/datums/materials/_material.dm @@ -79,6 +79,16 @@ Simple datum which is instanced once per type and is used for every object of sa /atom/proc/mat_update_desc(/datum/material/mat) return + +/** + * This proc is called when the mat is found in an item that's consumed by accident. see /obj/item/proc/on_accidental_consumption. + * Arguments + * * M - person consuming the mat + * * S - (optional) item the mat is contained in (NOT the item with the mat itself) + */ +/datum/material/proc/on_accidental_mat_consumption(mob/living/carbon/M, obj/item/S) + return FALSE + ///This proc is called when the material is added to an object specifically. /datum/material/proc/on_applied_obj(obj/o, amount, material_flags) if(material_flags & MATERIAL_AFFECT_STATISTICS) diff --git a/code/datums/materials/meat.dm b/code/datums/materials/meat.dm index 9539b2847774..8512753a22af 100644 --- a/code/datums/materials/meat.dm +++ b/code/datums/materials/meat.dm @@ -5,7 +5,6 @@ desc = "Meat" color = rgb(214, 67, 67) categories = list(MAT_CATEGORY_RIGID = TRUE) - sheet_type = /obj/item/stack/sheet/meat value_per_unit = 0.05 beauty_modifier = -0.3 strength_modifier = 0.7 @@ -13,22 +12,3 @@ item_sound_override = 'sound/effects/meatslap.ogg' turf_sound_override = FOOTSTEP_MEAT texture_layer_icon_state = "meat" - -/datum/material/meat/on_removed(atom/source, amount, material_flags) - . = ..() - qdel(source.GetComponent(/datum/component/edible)) - -/datum/material/meat/on_applied_obj(obj/O, amount, material_flags) - . = ..() - O.obj_flags |= UNIQUE_RENAME //So you can name it after the person its made from, a depressing comprimise. - make_edible(O, amount, material_flags) - -/datum/material/meat/on_applied_turf(turf/T, amount, material_flags) - . = ..() - make_edible(T, amount, material_flags) - -/datum/material/meat/proc/make_edible(atom/source, amount, material_flags) - var/nutriment_count = 3 * (amount / MINERAL_MATERIAL_AMOUNT) - var/oil_count = 2 * (amount / MINERAL_MATERIAL_AMOUNT) - source.AddComponent(/datum/component/edible, list(/datum/reagent/consumable/nutriment = nutriment_count, /datum/reagent/consumable/cooking_oil = oil_count), null, RAW | MEAT | GROSS, null, 30, list("Fleshy")) - diff --git a/code/datums/materials/pizza.dm b/code/datums/materials/pizza.dm deleted file mode 100644 index 62479d90e0d3..000000000000 --- a/code/datums/materials/pizza.dm +++ /dev/null @@ -1,31 +0,0 @@ -/datum/material/pizza - name = "pizza" - id = "pizza" - desc = "~Jamme, jamme, n'coppa, jamme ja! Jamme, jamme, n'coppa jamme ja, funi-culi funi-cala funi-culi funi-cala!! Jamme jamme ja funiculi funicula!~" - color = "#FF9F23" - categories = list(MAT_CATEGORY_RIGID = TRUE) - sheet_type = /obj/item/stack/sheet/pizza - value_per_unit = 0.05 - beauty_modifier = 0.1 - strength_modifier = 0.7 - armor_modifiers = list("melee" = 0.3, "bullet" = 0.3, "laser" = 1.2, "energy" = 1.2, "bomb" = 0.3, "bio" = 0, "rad" = 0.7, "fire" = 1, "acid" = 1) - item_sound_override = 'sound/effects/meatslap.ogg' - turf_sound_override = FOOTSTEP_MEAT - texture_layer_icon_state = "pizza" - -/datum/material/pizza/on_removed(atom/source, amount, material_flags) - . = ..() - qdel(source.GetComponent(/datum/component/edible)) - -/datum/material/pizza/on_applied_obj(obj/O, amount, material_flags) - . = ..() - make_edible(O, amount, material_flags) - -/datum/material/pizza/on_applied_turf(turf/T, amount, material_flags) - . = ..() - make_edible(T, amount, material_flags) - -/datum/material/pizza/proc/make_edible(atom/source, amount, material_flags) - var/nutriment_count = 3 * (amount / MINERAL_MATERIAL_AMOUNT) - var/oil_count = 2 * (amount / MINERAL_MATERIAL_AMOUNT) - source.AddComponent(/datum/component/edible, list(/datum/reagent/consumable/nutriment = nutriment_count, /datum/reagent/consumable/cooking_oil = oil_count), null, GRAIN | MEAT | DAIRY | VEGETABLES, null, 30, list("crust", "tomato", "cheese", "meat"), filling_color = COLOR_YELLOW) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 96ca4b12d8b4..ea9f6918706b 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -345,12 +345,6 @@ remove_antag_datum(/datum/antagonist/wizard) special_role = null -/datum/mind/proc/remove_cultist() - if(src in SSticker.mode.cult) - SSticker.mode.remove_cultist(src, 0, 0) - special_role = null - remove_antag_equip() - /datum/mind/proc/remove_antag_equip() var/list/Mob_Contents = current.get_contents() for(var/obj/item/I in Mob_Contents) @@ -363,7 +357,6 @@ remove_traitor() remove_nukeop() remove_wizard() - remove_cultist() /datum/mind/proc/equip_traitor(employer = "The Syndicate", silent = FALSE, datum/antagonist/uplink_owner) if(!current) @@ -436,10 +429,7 @@ //Link a new mobs mind to the creator of said mob. They will join any team they are currently on, and will only switch teams when their creator does. /datum/mind/proc/enslave_mind_to_creator(mob/living/creator) - if(iscultist(creator)) - SSticker.mode.add_cultist(src) - - else if(is_nuclear_operative(creator)) + if(is_nuclear_operative(creator)) var/datum/antagonist/nukeop/converter = creator.mind.has_antag_datum(/datum/antagonist/nukeop,TRUE) var/datum/antagonist/nukeop/N = new() N.send_to_spawnpoint = FALSE @@ -708,14 +698,6 @@ assigned_role = ROLE_WIZARD add_antag_datum(/datum/antagonist/wizard) - -/datum/mind/proc/make_Cultist() - if(!has_antag_datum(/datum/antagonist/cult,TRUE)) - SSticker.mode.add_cultist(src,FALSE,equip=TRUE) - special_role = ROLE_CULTIST - to_chat(current, "You catch a glimpse of the Realm of Nar'Sie, The Geometer of Blood. You now see how flimsy your world is, you see that it should be open to the knowledge of Nar'Sie.") - to_chat(current, "Assist your new brethren in their dark dealings. Their goal is yours, and yours is theirs. You serve the Dark One above all else. Bring It back.") - /datum/mind/proc/AddSpell(obj/effect/proc_holder/spell/S) spell_list += S S.action.Grant(current) diff --git a/code/datums/mood_events/generic_positive_events.dm b/code/datums/mood_events/generic_positive_events.dm index f9e339c3c081..1ab201bc0186 100644 --- a/code/datums/mood_events/generic_positive_events.dm +++ b/code/datums/mood_events/generic_positive_events.dm @@ -96,11 +96,6 @@ mood_change = 3 hidden = TRUE -/datum/mood_event/cult - description = "I have seen the truth, praise the almighty one!\n" - mood_change = 10 //maybe being a cultist isnt that bad after all - hidden = TRUE - /datum/mood_event/family_heirloom description = "My family heirloom is safe with me.\n" mood_change = 1 diff --git a/code/datums/ruins.dm b/code/datums/ruins.dm index 9b7c86c22b0e..3554faf3e2ca 100644 --- a/code/datums/ruins.dm +++ b/code/datums/ruins.dm @@ -16,6 +16,7 @@ var/suffix = null var/ruin_type + var/ruin_tags = list() /datum/map_template/ruin/New() if(!name && id) diff --git a/code/datums/ruins/beachplanet.dm b/code/datums/ruins/beachplanet.dm index b258ef45f0e8..3b048ab940c1 100644 --- a/code/datums/ruins/beachplanet.dm +++ b/code/datums/ruins/beachplanet.dm @@ -9,39 +9,46 @@ id = "fishinghut" description = "A small fishing hut floating on the ocean." suffix = "beach_fishing_hut.dmm" + ruin_tags = list(RUIN_TAG_HARD_COMBAT, RUIN_TAG_MAJOR_LOOT, RUIN_TAG_HAZARDOUS) /datum/map_template/ruin/beachplanet/ancient name = "Ancient Danger" id = "beach_ancient" description = "As you draw near the ancient wall, a sense of foreboding overcomes you. You aren't sure why, but you feel this dusty structure may contain great dangers." suffix = "beach_ancient_ruin.dmm" + ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_LIVEABLE) /datum/map_template/ruin/beachplanet/town name = "Beachside Town" id = "beach_town" description = "A fresh town on a lovely coast, where its inhabitants are is unknown." suffix = "beach_ocean_town.dmm" + ruin_tags = list(RUIN_TAG_NO_COMBAT, RUIN_TAG_MINOR_LOOT, RUIN_TAG_LIVEABLE) /datum/map_template/ruin/beachplanet/scrapvillage name = "Pirate Village" id = "beach_pirate" description = "A small pirate outpost formed from the remains of a wrecked shuttle." suffix = "beach_pirate_crash.dmm" + ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_LIVEABLE) /datum/map_template/ruin/beachplanet/treasurecove name = "Treasure Cove" id = "beach_treasure_cove" description = "A abandoned colony. It seems that this colony was abandoned, for a reason or another" suffix = "beach_treasure_cove.dmm" + ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_LIVEABLE) /datum/map_template/ruin/beachplanet/crashedengie name = "Crashed Engineer Ship" id = "beach_crashed_engineer" description = "An abandoned camp built by a crashed engineer" suffix = "beach_crashed_engineer.dmm" + ruin_tags = list(RUIN_TAG_MINOR_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_HAZARDOUS) /datum/map_template/ruin/beachplanet/floatresort name = "Floating Beach Resort" id = "beach_float_resort" description = "A hidden paradise on the beach" suffix = "beach_float_resort.dmm" + ruin_tags = list(RUIN_TAG_NO_COMBAT, RUIN_TAG_MINOR_LOOT, RUIN_TAG_LIVEABLE) diff --git a/code/datums/ruins/icemoon.dm b/code/datums/ruins/icemoon.dm index 60304e86f6f0..81b7aea8582c 100644 --- a/code/datums/ruins/icemoon.dm +++ b/code/datums/ruins/icemoon.dm @@ -9,21 +9,25 @@ id = "hydroponicslab" description = "An abandoned hydroponics research facility containing hostile plant fauna." suffix = "icemoon_hydroponics_lab.dmm" + ruin_tags = list(RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_SHELTER) /datum/map_template/ruin/icemoon/abandonedvillage name = "Abandoned Village" id = "abandonedvillage" description = "Who knows what lies within?" suffix = "icemoon_underground_abandoned_village.dmm" + ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_MINOR_LOOT, RUIN_TAG_INHOSPITABLE) /datum/map_template/ruin/icemoon/brazillian_lab name = "Barricaded Compound" id = "brazillian-lab" description = "A conspicuous compound in the middle of the cold wasteland. What goodies are inside?" suffix = "icemoon_underground_brazillianlab.dmm" + ruin_tags = list(RUIN_TAG_BOSS_COMBAT, RUIN_TAG_MAJOR_LOOT, RUIN_TAG_INHOSPITABLE) /datum/map_template/ruin/icemoon/crashed_holemaker name = "Crashed Holemaker" id = "crashed_holemaker" description = "Safety records for early Nanotrasen Spaceworks vessels were, and always have been, top of their class. Absolutely no multi-billion credit projects have been painstakingly erased from history. (Citation Needed)" suffix = "icemoon_crashed_holemaker.dmm" + ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_MINOR_LOOT, RUIN_TAG_SHELTER) diff --git a/code/datums/ruins/jungle.dm b/code/datums/ruins/jungle.dm index f1e2e16bfec8..faaefea4fd8b 100644 --- a/code/datums/ruins/jungle.dm +++ b/code/datums/ruins/jungle.dm @@ -9,39 +9,46 @@ id = "syndicatebunkerjungle" description = "A small bunker owned by the Syndicate." suffix = "jungle_syndicate.dmm" + ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_LIVEABLE) /datum/map_template/ruin/jungle/interceptor name = "Old Crashed Interceptor" id = "crashedcondor" description = "An overgrown crashed Condor Class, a forgotten remnant of the Corporate Wars." suffix = "jungle_interceptor.dmm" + ruin_tags = list(RUIN_TAG_NO_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_LIVEABLE) /datum/map_template/ruin/jungle/paradise name = "Hidden paradise" id = "paradise" description = "a crashed shuttle, and a hidden beautiful lake." suffix = "jungle_paradise.dmm" + ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_LIVEABLE, RUIN_TAG_HAZARDOUS) /datum/map_template/ruin/jungle/airbase name = "Bombed Airbase" id = "airbase" description = "A bombed out airbase from the ICW, taken back over by nature" suffix = "jungle_bombed_starport.dmm" + ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_MAJOR_LOOT, RUIN_TAG_HAZARDOUS, RUIN_TAG_LIVEABLE) /datum/map_template/ruin/jungle/medtech name = "MedTech facility" id = "medtech-facility" description = "A MedTech pharmaceutical manufacturing plant where something went terribly wrong." suffix = "jungle_medtech_outbreak.dmm" + ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_LIVEABLE) /datum/map_template/ruin/jungle/cavecrew name = "Frontiersmen Cave" id = "cavecrew" description = "A frontiersmen base, hidden within a cave. They don't seem friendly" suffix = "jungle_cavecrew.dmm" + ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_HAZARDOUS, RUIN_TAG_LIVEABLE, RUIN_TAG_MAJOR_LOOT) /datum/map_template/ruin/jungle/library name = "Abandoned Library" id = "abandoned-library" description = "A forgotten library, with a few angry monkeys." suffix = "jungle_abandoned_library.dmm" + ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_LIVEABLE) diff --git a/code/datums/ruins/lavaland.dm b/code/datums/ruins/lavaland.dm index 816ffd685c14..f94d75bd71f9 100644 --- a/code/datums/ruins/lavaland.dm +++ b/code/datums/ruins/lavaland.dm @@ -10,14 +10,7 @@ description = "A Solarian frontier research facility created by the Pionierskompanien \ This one seems to simulate the wintery climate of the northern provinces, including a sauna!" suffix = "lavaland_surface_biodome_winter.dmm" - -/datum/map_template/ruin/lavaland/elephant_graveyard - name = "Elephant Graveyard" - id = "Graveyard" - description = "An abandoned graveyard, calling to those unable to continue." - suffix = "lavaland_surface_elephant_graveyard.dmm" - allow_duplicates = FALSE - cost = 10 + ruin_tags = list(RUIN_TAG_MINOR_COMBAT, RUIN_TAG_MINOR_LOOT, RUIN_TAG_SHELTER) /datum/map_template/ruin/lavaland/buried_shrine name = "Buried Shrine" @@ -42,3 +35,9 @@ id = "crashed_star" description = "A crashed pirate ship. It would seem that it's crew died a while ago." suffix = "lavaland_crashed_starwalker.dmm" + +/datum/map_template/ruin/lavaland/abandonedlisteningpost + name = "Abandoned Listening Post" + id = "abandonedlistening" + description = "An abandoned Cybersun listening post. Seems like the Ramzi Clique has an interest in the site." + suffix = "lavaland_abandonedlisteningpost.dmm" diff --git a/code/datums/ruins/reebe.dm b/code/datums/ruins/reebe.dm index fa89ada7788c..d1a9de3e024f 100644 --- a/code/datums/ruins/reebe.dm +++ b/code/datums/ruins/reebe.dm @@ -9,21 +9,18 @@ id = "clockcultarena" description = "A abandoned base, once belonging to clock cultists." suffix = "reebe_arena.dmm" - -/datum/map_template/ruin/reebe/swarmers - name = "Swarmer Island" - id = "swarmers" - description = "Looks like someone has occupied Reebe in the cultists' absence." - suffix = "reebe_swarmers.dmm" + ruin_tags = list(RUIN_TAG_BOSS_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_LIVEABLE) /datum/map_template/ruin/reebe/island name = "Island Cache" id = "islandcache" description = "Reebe is full of these things. Something is hidden within here." suffix = "reebe_floating_island.dmm" + ruin_tags = list(RUIN_TAG_BOSS_COMBAT, RUIN_TAG_MINOR_LOOT, RUIN_TAG_LIVEABLE) /datum/map_template/ruin/reebe/sm name = "Decayed Supermatter" id = "smdecay" description = "It seems whoever left here was so nice they left very vauluable items behind. How thoughtful." suffix = "reebe_decayed_sm.dmm" + ruin_tags = list(RUIN_TAG_NO_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_LIVEABLE, RUIN_TAG_HAZARDOUS) diff --git a/code/datums/ruins/rockplanet.dm b/code/datums/ruins/rockplanet.dm index f576f1a93464..7382b2c5768a 100644 --- a/code/datums/ruins/rockplanet.dm +++ b/code/datums/ruins/rockplanet.dm @@ -10,12 +10,14 @@ description = "A factory made for HARM and AGONY." id = "rockplanet_harmfactory" suffix = "rockplanet_harmfactory.dmm" + ruin_tags = list(RUIN_TAG_BOSS_COMBAT, RUIN_TAG_MAJOR_LOOT, RUIN_TAG_SHELTER, RUIN_TAG_HAZARDOUS) /datum/map_template/ruin/rockplanet/budgetcuts name = "Budgetcuts" description = "Nanotrasen's gotta lay off some personnel, and this facility hasn't been worth the effort so far" id = "rockplanet_budgetcuts" suffix = "rockplanet_budgetcuts.dmm" + ruin_tags = list(RUIN_TAG_HARD_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_LIVEABLE) /datum/map_template/ruin/rockplanet/shippingdock name = "Abandoned Shipping Dock" @@ -29,3 +31,8 @@ id = "rockplanet_nomadcrash" suffix = "rockplanet_nomadcrash.dmm" +/datum/map_template/ruin/rockplanet/distillery + name = "Frontiersman Distillery" + description = "A former pre-ICW era Nanotrasen outpost converted into a moonshine distillery by Frontiersman bootleggers." + id = "rockplanet_distillery" + suffix = "rockplanet_distillery.dmm" diff --git a/code/datums/ruins/space.dm b/code/datums/ruins/space.dm index 1aedb0b9be82..f8cda3a84426 100644 --- a/code/datums/ruins/space.dm +++ b/code/datums/ruins/space.dm @@ -11,6 +11,7 @@ suffix = "corporate_mining.dmm" name = "Corporate Mining Module" description = "An old and rusty mining facility, with big ore potential." + ruin_tags = list(RUIN_TAG_NO_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_SHELTER) /datum/map_template/ruin/space/bigderelict1 id = "bigderelict1" @@ -18,12 +19,14 @@ name = "Derelict Tradepost" description = "A once-bustling tradestation that handled imports and exports from nearby stations now lays eerily dormant. \ The last received message was a distress call from one of the on-board officers, but we had no success in making contact again." + ruin_tags = list(RUIN_TAG_MINOR_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_SHELTER) /datum/map_template/ruin/space/onehalf id = "onehalf" suffix = "onehalf.dmm" name = "DK Excavator 453" description = "Formerly a thriving planetary mining outpost, now a bit of an exploded mess. One has to wonder how it got here" + ruin_tags = list(RUIN_TAG_MINOR_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_INHOSPITABLE) /datum/map_template/ruin/space/power_puzzle id = "power_puzzle" @@ -31,21 +34,25 @@ name = "Power Puzzle" description = "an abandoned secure storage location. there is no power left in the batteries and the former ocupants locked it pretty tight before leaving.\ You will have to power areas to raise the bolts on the doors. look out for secrets." + ruin_tags = list(RUIN_TAG_MINOR_COMBAT, RUIN_TAG_MAJOR_LOOT, RUIN_TAG_SHELTER, RUIN_TAG_HAZARDOUS) /datum/map_template/ruin/space/astraeus id = "astraeus" suffix = "astraeus.dmm" name = "Astraeus Ruin" description = "This vessel served a lengthy period in the Nanotrasen fleet, before an accident in the munitions bay caused to to be destroyed while in active combat." + ruin_tags = list(RUIN_TAG_MINOR_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_INHOSPITABLE) /datum/map_template/ruin/space/singularitylab id = "singularitylab" suffix = "singularity_lab.dmm" name = "Singularity Lab" description = "An overgrown facility, home to an unstarted singularity and many plants" + ruin_tags = list(RUIN_TAG_BOSS_COMBAT, RUIN_TAG_MAJOR_LOOT, RUIN_TAG_SHELTER) /datum/map_template/ruin/space/spacemall id = "spacemall" suffix = "spacemall.dmm" name = "Space Mall" description = "An old shopping centre, owned by a former member of Nanotrasen's board of directors.." + ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_MAJOR_LOOT, RUIN_TAG_SHELTER) diff --git a/code/datums/ruins/wasteplanet.dm b/code/datums/ruins/wasteplanet.dm index 8083567a7c68..a4a054a7f1a2 100644 --- a/code/datums/ruins/wasteplanet.dm +++ b/code/datums/ruins/wasteplanet.dm @@ -9,21 +9,32 @@ id = "guntested" description = "A abandoned Nanotrasen weapons facility, presumably the place where the X-01 was manufactured." suffix = "wasteplanet_lab.dmm" + ruin_tags = list(RUIN_TAG_NO_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_SHELTER, RUIN_TAG_HAZARDOUS, RUIN_TAG_LIVEABLE) /datum/map_template/ruin/wasteplanet/pandora id = "pandora_arena" suffix = "wasteplanet_pandora.dmm" name = "Pandora Arena" description = "Some... thing has settled here." + ruin_tags = list(RUIN_TAG_BOSS_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_MEGAFAUNA, RUIN_TAG_LIVEABLE) /datum/map_template/ruin/wasteplanet/radiation name = "Honorable deeds storage" id = "wasteplanet_radiation" description = "A dumping ground for nuclear waste." suffix = "wasteplanet_unhonorable.dmm" + ruin_tags = list(RUIN_TAG_MINOR_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_SHELTER, RUIN_TAG_HAZARDOUS) /datum/map_template/ruin/wasteplanet/abandoned_mechbay - name = "Abandoned Mech Bay" - description = "A military base formerly used for staging 4 mechs and crew. God knows what's in it now." + name = "Abandoned Exosuit Bay" + description = "A military base formerly used for staging 4 exosuits and crew. God knows what's in it now." id = "abandoned_mechbay" suffix = "wasteplanet_abandoned_mechbay.dmm" + ruin_tags = list(RUIN_TAG_BOSS_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_SHELTER, RUIN_TAG_HAZARDOUS) + +/datum/map_template/ruin/wasteplanet/yard + name = "Abandoned Miskilamo salvage yard" + description = "An abandonded shipbreaking yard." + id = "wasteplanet_yard" + suffix = "wasteplanet_yard.dmm" + ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_SHELTER, RUIN_TAG_HAZARDOUS) diff --git a/code/datums/ruins/whitesands.dm b/code/datums/ruins/whitesands.dm index b3e0cb13adcc..4731adeddf41 100644 --- a/code/datums/ruins/whitesands.dm +++ b/code/datums/ruins/whitesands.dm @@ -9,12 +9,14 @@ id = "medipenplant" description = "A once prosperous autoinjector manufacturing plant." suffix = "whitesands_surface_medipen_plant.dmm" + ruin_tags = list(RUIN_TAG_NO_COMBAT, RUIN_TAG_MAJOR_LOOT, RUIN_TAG_SHELTER) /datum/map_template/ruin/whitesands/pubbyslopcrash name = "Pubby Slop Crash" id = "ws-pubbyslopcrash" description = "A failed attempt of the Nanotrasen nutrional replacement program" suffix = "whitesands_surface_pubbyslopcrash.dmm" + ruin_tags = list(RUIN_TAG_MINOR_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_SHELTER) //////////OUTSIDE SETTLEMENTS/RUINS////////// /datum/map_template/ruin/whitesands/survivors/saloon @@ -22,6 +24,7 @@ id = "ws-saloon" description = "A western style saloon, most popular spot for the hermits to gather planetside" suffix = "whitesands_surface_camp_saloon.dmm" + ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_INHOSPITABLE) /datum/map_template/ruin/whitesands/survivors/combination //combined extra large ruin of several other whitesands survivor ruins name = "Wasteland Survivor Village" @@ -29,4 +32,5 @@ description = "A small encampment of nomadic survivors of the First Colony, and their descendants. By all accounts, feral and without allegance to anyone but themselves." suffix = "whitesands_surface_camp_combination.dmm" allow_duplicates = FALSE + ruin_tags = list(RUIN_TAG_MEDIUM_COMBAT, RUIN_TAG_MEDIUM_LOOT, RUIN_TAG_INHOSPITABLE, RUIN_TAG_HAZARDOUS) diff --git a/code/datums/saymode.dm b/code/datums/saymode.dm index 848940d4e9d9..708a81107313 100644 --- a/code/datums/saymode.dm +++ b/code/datums/saymode.dm @@ -95,15 +95,11 @@ return FALSE -/datum/saymode/binary //everything that uses .b (silicons, drones, swarmers) +/datum/saymode/binary //everything that uses .b (silicons, drones) key = MODE_KEY_BINARY mode = MODE_BINARY /datum/saymode/binary/handle_message(mob/living/user, message, datum/language/language) - if(isswarmer(user)) - var/mob/living/simple_animal/hostile/swarmer/S = user - S.swarmer_chat(message) - return FALSE if(isdrone(user)) var/mob/living/simple_animal/drone/D = user D.drone_chat(message) diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm index d7b60476d977..91a3fbe884c0 100644 --- a/code/datums/shuttles.dm +++ b/code/datums/shuttles.dm @@ -21,6 +21,8 @@ var/prefix = "ISV" /// The full name of the ship's faction. var/faction_name = "Independent" + var/faction_path = /datum/faction/independent + var/datum/faction/faction_datum /// Whether or not players from other ships can open airlocks. var/unique_ship_access = TRUE /// Set by config JSON. If true, the template's ships' "default" spawn location (when bought by a player or loaded at roundstart) @@ -358,7 +360,7 @@ name = "Sugarcube Transport" prefix = "ISV" -//your subshuttle here +//your subshuttle here //why is my subshuttle here /datum/map_template/shuttle/subshuttles/heron file_name = "nanotrasen_falcon" name = "Falcon Dropship" @@ -402,6 +404,11 @@ name = "Nail-class Boarding Vessel" prefix = "PGF" +/datum/map_template/shuttle/subshuttles/tanto + file_name = "independent_tanto" + name = "Tanto-class Drop Pod" + prefix = "SV" + /datum/map_template/shuttle/subshuttles/brawler file_name = "frontiersmen_brawler" name = "Brawler-class Dropship" diff --git a/code/datums/spawners_menu.dm b/code/datums/spawners_menu.dm index 9e7e4b334ddc..01709a00c1a1 100644 --- a/code/datums/spawners_menu.dm +++ b/code/datums/spawners_menu.dm @@ -53,7 +53,7 @@ if(!spawnerlist.len) return var/obj/effect/mob_spawn/MS = pick(spawnerlist) - if(!istype(MS) || !(MS in GLOB.poi_list)) + if(!istype(MS) || !(MS in SSpoints_of_interest.other_points_of_interest)) return switch(action) if("jump") diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index 43c7bd3ab2ec..62b5a1827de7 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -85,35 +85,6 @@ desc = "You are being resurrected!" icon_state = "wish_granter" -/datum/status_effect/cult_master - id = "The Cult Master" - duration = -1 - alert_type = null - on_remove_on_mob_delete = TRUE - var/alive = TRUE - -/datum/status_effect/cult_master/proc/deathrattle() - if(!QDELETED(GLOB.cult_narsie)) - return //if Nar'Sie is alive, don't even worry about it - var/area/A = get_area(owner) - for(var/datum/mind/B in SSticker.mode.cult) - if(isliving(B.current)) - var/mob/living/M = B.current - SEND_SOUND(M, sound('sound/hallucinations/veryfar_noise.ogg')) - to_chat(M, "The Cult's Master, [owner], has fallen in \the [A]!") - -/datum/status_effect/cult_master/tick() - if(owner.stat != DEAD && !alive) - alive = TRUE - return - if(owner.stat == DEAD && alive) - alive = FALSE - deathrattle() - -/datum/status_effect/cult_master/on_remove() - deathrattle() - . = ..() - /datum/status_effect/blooddrunk id = "blooddrunk" duration = 10 diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index 02b96c1b81de..6d803d98ec47 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)) @@ -251,19 +253,6 @@ /datum/status_effect/pacify/on_remove() REMOVE_TRAIT(owner, TRAIT_PACIFISM, "status_effect") -/datum/status_effect/cultghost //is a cult ghost and can't use manifest runes - id = "cult_ghost" - duration = -1 - alert_type = null - -/datum/status_effect/cultghost/on_apply() - owner.see_invisible = SEE_INVISIBLE_OBSERVER - owner.see_in_dark = 2 - -/datum/status_effect/cultghost/tick() - if(owner.reagents) - owner.reagents.del_reagent(/datum/reagent/water/holywater) //can't be deconverted - /datum/status_effect/crusher_mark id = "crusher_mark" duration = 300 //if you leave for 30 seconds you lose the mark, deal with it diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm index d1a8fd6acaa5..e504bfee31d5 100644 --- a/code/datums/traits/negative.dm +++ b/code/datums/traits/negative.dm @@ -105,11 +105,11 @@ if("Clown") heirloom_type = /obj/item/bikehorn/golden if("Mime") - heirloom_type = /obj/item/reagent_containers/food/snacks/baguette + heirloom_type = /obj/item/food/baguette if("Janitor") heirloom_type = pick(/obj/item/mop, /obj/item/clothing/suit/caution, /obj/item/reagent_containers/glass/bucket, /obj/item/paper/fluff/stations/soap) if("Cook") - heirloom_type = pick(/obj/item/reagent_containers/food/condiment/saltshaker, /obj/item/kitchen/rollingpin, /obj/item/clothing/head/chefhat) + heirloom_type = pick(/obj/item/reagent_containers/condiment/saltshaker, /obj/item/kitchen/rollingpin, /obj/item/clothing/head/chefhat) if("Botanist") heirloom_type = pick(/obj/item/cultivator, /obj/item/reagent_containers/glass/bucket, /obj/item/toy/plush/beeplushie) if("Bartender") @@ -451,20 +451,19 @@ /datum/quirk/social_anxiety/on_process() var/nearby_people = 0 + if(HAS_TRAIT(quirk_holder, TRAIT_FEARLESS)) + return for(var/mob/living/carbon/human/H in oview(3, quirk_holder)) if(H.client) nearby_people++ var/mob/living/carbon/human/H = quirk_holder if(prob(2 + nearby_people)) - H.stuttering = max(3, H.stuttering) - else if(prob(min(3, nearby_people)) && !H.silent) - to_chat(H, "You retreat into yourself. You really don't feel up to talking.") - H.silent = max(10, H.silent) + H.stuttering = max(4, H.stuttering) else if(prob(0.5) && dumb_thing) to_chat(H, "You think of a dumb thing you said a long time ago and scream internally.") dumb_thing = FALSE //only once per life if(prob(1)) - new/obj/item/reagent_containers/food/snacks/spaghetti/pastatomato(get_turf(H)) //now that's what I call spaghetti code + new/obj/item/food/spaghetti/pastatomato(get_turf(H)) //now that's what I call spaghetti code // small chance to make eye contact with inanimate objects/mindless mobs because of nerves /datum/quirk/social_anxiety/proc/looks_at_floor(datum/source, atom/A) @@ -479,6 +478,8 @@ /datum/quirk/social_anxiety/proc/eye_contact(datum/source, mob/living/other_mob, triggering_examiner) SIGNAL_HANDLER + if(HAS_TRAIT(quirk_holder, TRAIT_FEARLESS)) + return if(prob(75)) return var/msg diff --git a/code/datums/weather/weather_types/rain.dm b/code/datums/weather/weather_types/rain.dm index fbbb0269ed2a..591a569b19ec 100644 --- a/code/datums/weather/weather_types/rain.dm +++ b/code/datums/weather/weather_types/rain.dm @@ -47,3 +47,17 @@ desc = "Storm with rain and lightning." weather_message = "The clouds blacken and the sky starts to flash as thunder strikes down!" thunder_chance = 10 + +/datum/weather/rain/heavy/storm_intense + name = "storm" + desc = "Storm with rain and lightning." + weather_overlay = "storm_very" + thunder_chance = 20 + weather_color = "#a3daf7" + weather_duration_lower = 420690 + weather_duration_upper = 420690 + + sound_active_outside = /datum/looping_sound/weather/rain/storm/indoors + sound_active_inside = /datum/looping_sound/weather/rain/storm + sound_weak_outside = /datum/looping_sound/weather/rain/storm/indoors + sound_weak_inside = /datum/looping_sound/weather/rain/storm diff --git a/code/datums/wires/mod.dm b/code/datums/wires/mod.dm new file mode 100644 index 000000000000..b5805557eafa --- /dev/null +++ b/code/datums/wires/mod.dm @@ -0,0 +1,57 @@ +/datum/wires/mod + holder_type = /obj/item/mod/control + proper_name = "MOD control unit" + +/datum/wires/mod/New(atom/holder) + wires = list(WIRE_HACK, WIRE_DISABLE, WIRE_SHOCK, WIRE_INTERFACE) + add_duds(2) + ..() + +/datum/wires/mod/interactable(mob/user) + if(!..()) + return FALSE + var/obj/item/mod/control/mod = holder + return mod.open + +/datum/wires/mod/get_status() + var/obj/item/mod/control/mod = holder + var/list/status = list() + status += "The orange light is [mod.seconds_electrified ? "on" : "off"]." + status += "The red light is [mod.malfunctioning ? "off" : "blinking"]." + status += "The green light is [mod.locked ? "on" : "off"]." + status += "The yellow light is [mod.interface_break ? "off" : "on"]." + return status + +/datum/wires/mod/on_pulse(wire) + var/obj/item/mod/control/mod = holder + switch(wire) + if(WIRE_HACK) + mod.locked = !mod.locked + if(WIRE_DISABLE) + mod.malfunctioning = TRUE + if(WIRE_SHOCK) + mod.seconds_electrified = MACHINE_DEFAULT_ELECTRIFY_TIME + if(WIRE_INTERFACE) + mod.interface_break = !mod.interface_break + +/datum/wires/mod/on_cut(wire, mend) + var/obj/item/mod/control/mod = holder + switch(wire) + if(WIRE_HACK) + if(!mend) + mod.req_access = list() + if(WIRE_DISABLE) + mod.malfunctioning = !mend + if(WIRE_SHOCK) + if(mend) + mod.seconds_electrified = MACHINE_NOT_ELECTRIFIED + else + mod.seconds_electrified = MACHINE_ELECTRIFIED_PERMANENT + if(WIRE_INTERFACE) + mod.interface_break = !mend + +/datum/wires/mod/ui_act(action, params) + var/obj/item/mod/control/mod = holder + if(!issilicon(usr) && mod.seconds_electrified && mod.shock(usr)) + return FALSE + return ..() diff --git a/code/game/MapData/shuttles/nanotrasen_ranger.dm b/code/game/MapData/shuttles/nanotrasen_ranger.dm index 1766cd11ee0c..08f1a7c670d2 100644 --- a/code/game/MapData/shuttles/nanotrasen_ranger.dm +++ b/code/game/MapData/shuttles/nanotrasen_ranger.dm @@ -101,7 +101,7 @@ helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/lp resistance_flags = null max_heat_protection_temperature = null - slowdown = 1.2 + supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION /obj/item/clothing/head/helmet/space/hardsuit/ert/lp armor = list("melee" = 50, "bullet" = 40, "laser" = 30, "energy" = 40, "bomb" = 35, "bio" = 100, "rad" = 60, "fire" = 50, "acid" = 80) @@ -111,7 +111,7 @@ max_heat_protection_temperature = null /obj/item/clothing/suit/space/hardsuit/ert/lp/sec - armor = list("melee" = 35, "bullet" = 15, "laser" = 30, "energy" = 40, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 75, "acid" = 75) + armor = list("melee" = 40, "bullet" = 40, "laser" = 20, "energy" = 20, "bomb" = 20, "bio" = 100, "rad" = 50, "fire" = 40, "acid" = 40) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/lp/sec name = "Loss Prevention Security Hardsuit" desc = "The best of the best security staff get assigned to the ERT. Second best are given this Hardsuit as a part of the LP Team." @@ -119,7 +119,7 @@ item_state = "ert_security" /obj/item/clothing/head/helmet/space/hardsuit/ert/lp/sec - armor = list("melee" = 35, "bullet" = 20, "laser" = 30,"energy" = 40, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 75, "acid" = 75) + armor = list("melee" = 40, "bullet" = 40, "laser" = 20,"energy" = 20, "bomb" = 20, "bio" = 100, "rad" = 50, "fire" = 40, "acid" = 40) hardsuit_type = "ert_security" name = "Loss Prevention Security Hardsuit Helmet" desc = "The helmet that comes attached to the LP Team Security Hardsuit." @@ -127,7 +127,7 @@ item_state = "hardsuit0-ert_security" /obj/item/clothing/suit/space/hardsuit/ert/lp/engi - armor = list("melee" = 30, "bullet" = 15, "laser" = 15, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 100, "acid" = 75) + armor = list("melee" = 30, "bullet" = 20, "laser" = 30, "energy" = 30, "bomb" = 25, "bio" = 100, "rad" = 75, "fire" = 90, "acid" = 75) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/lp/engi name = "Loss Prevention Engineering Hardsuit" desc = "The best of the best engineering staff get assigned to the ERT. Second best are given this Hardsuit as a part of the LP Team." @@ -135,7 +135,7 @@ item_state = "ert_engineer" /obj/item/clothing/head/helmet/space/hardsuit/ert/lp/engi - armor = list("melee" = 30, "bullet" = 15, "laser" = 15, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 100, "acid" = 75) + armor = list("melee" = 38, "bullet" = 20, "laser" = 30, "energy" = 30, "bomb" = 25, "bio" = 100, "rad" = 75, "fire" = 90, "acid" = 75) name = "Loss Prevention Engineering Hardsuit Helmet" desc = "The helmet that comes attached to the LP Team Engineering Hardsuit." icon_state = "hardsuit0-ert_engineer" @@ -143,32 +143,34 @@ hardsuit_type = "ert_engineer" /obj/item/clothing/suit/space/hardsuit/ert/lp/med - armor = list("melee" = 30, "bullet" = 15, "laser" = 15, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 75) + armor = list("melee" = 25, "bullet" = 25, "laser" = 25, "energy" = 25, "bomb" = 25, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 60) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/lp/med name = "Loss Prevention Medical Hardsuit" desc = "The best of the best medical staff get assigned to the ERT. Second best are given this Hardsuit as a part of the LP Team." icon_state = "ert_medical" item_state = "ert_medical" + slowdown = 0.5 /obj/item/clothing/head/helmet/space/hardsuit/ert/lp/med - armor = list("melee" = 30, "bullet" = 15, "laser" = 15, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 75) + armor = list("melee" = 25, "bullet" = 25, "laser" = 25, "energy" = 25, "bomb" = 25, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 60) name = "Loss Prevention Medical Hardsuit Helmet" desc = "The helmet that comes attached to the LP Team Medical Hardsuit." icon_state = "hardsuit0-ert_medical" item_state = "hardsuit0-ert_medical" hardsuit_type = "ert_medical" + clothing_flags = SCAN_REAGENTS | STOPSPRESSUREDAMAGE | THICKMATERIAL | SNUG_FIT | BLOCK_GAS_SMOKE_EFFECT | ALLOWINTERNALS /obj/item/clothing/head/helmet/space/hardsuit/lp name = "RIG heatsuit helmet" desc = "The helmet to the RIG heat suit. It's packed with heat diverting materials, coolant pipes, and a two inch thick face screen." - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 75) + armor = list("melee" = 5, "bullet" = 5, "laser" = 1, "energy" = 1, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 75) heat_protection = HEAD max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = ACID_PROOF | FIRE_PROOF /obj/item/clothing/suit/space/hardsuit/ancient/lp name = "RIG heat suit" - desc = "A fully heat resistance suit based on an early RIG hardsuit prototype. It sacrifices armor of any kind for intricate heatsinks. It remains rather bulky as a result." + desc = "A fully heat-resistant suit based on an early RIG hardsuit prototype. It sacrifices armor of any kind for intricate heatsinks. It remains rather bulky as a result." armor = list("melee" = 5, "bullet" = 5, "laser" = 1, "energy" = 1, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 75) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/lp heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS @@ -177,116 +179,8 @@ //holotapes -/obj/item/disk/holodisk/lp/combat/syndicate1 - name = "Combat Mission Eliminate Force" - desc = "A holodisk containing a combat mission for the LP." - preset_image_type = /datum/preset_holoimage/commissioner - preset_record_text = {" - NAME Commissioner Gorre Donn - SAY This mission, should you choose to accept it, revolves around a combat objective. The LP will have to get their hands dirty for this one. - DELAY 25 - SAY The LP is to respond to a hostile threat from a Syndicate vessel. In such action they are to kill or otherwise subdue the primary fighting force. - DELAY 25 - "} - -/obj/item/disk/holodisk/lp/combat/syndicate2 - name = "Combat Mission Capture" - desc = "A holodisk containing a combat mission for the LP." - preset_image_type = /datum/preset_holoimage/commissioner - preset_record_text = {" - NAME Commissioner Gorre Donn - SAY This mission, should you choose to accept it, revolves around a combat objective. The LP will have to get their hands dirty for this one. - DELAY 25 - SAY The LP is to respond to a hostile threat from a Syndicate vessel. In such action they are to subdue and capture one of the armed members of the crew. They should be stripped of gear, interrogated, and converted to NT if possible. If not possible, release them to whatever ship they belonged to or will accept them. - DELAY 25 - "} - -/obj/item/disk/holodisk/lp/combat/syndicate3 - name = "Combat Mission Capture Commander" - desc = "A holodisk containing a combat mission for the LP." - preset_image_type = /datum/preset_holoimage/commissioner - preset_record_text = {" - NAME Commissioner Gorre Donn - SAY This mission, should you choose to accept it, revolves around a combat objective. The LP will have to get their hands dirty for this one. - DELAY 25 - SAY The LP is to respond to a hostile threat from a Syndicate vessel. In such action they are to eliminate whatever leader or captain of such vession and bring their body back in a bodybag. The Medical Specialist has been given a box of them for such an occasion. - DELAY 25 - "} - -/obj/item/disk/holodisk/lp/combat/syndicate4 - name = "Combat Mission Secret Documents" - desc = "A holodisk containing a combat mission for the LP." - preset_image_type = /datum/preset_holoimage/commissioner - preset_record_text = {" - NAME Commissioner Gorre Donn - SAY This mission, should you choose to accept it, revolves around a combat objective. The LP will have to get their hands dirty for this one. - DELAY 25 - SAY The LP is to respond to a hostile threat from a Syndicate vessel. In such action they are to retrieve a set of secret documents from the syndicate vessel. This will likely require a boarding operation. Good luck. - DELAY 25 - "} - -/obj/item/disk/holodisk/lp/combat/megafauna - name = "Combat Mission Megafauna" - desc = "A holodisk containing a combat mission for the LP." - preset_image_type = /datum/preset_holoimage/commissioner - preset_record_text = {" - NAME Commissioner Gorre Donn - SAY This mission, should you choose to accept it, revolves around a combat objective. The LP will have to get their hands dirty for this one. - DELAY 25 - SAY This mission is very simple. The LP is to seek out a megafauna specimen and slay it. - DELAY 25 - "} - -/obj/item/disk/holodisk/lp/combat/bdm - name = "Combat Mission Blood Drunk" - desc = "A holodisk containing a combat mission for the LP." - preset_image_type = /datum/preset_holoimage/commissioner - preset_record_text = {" - NAME Commissioner Gorre Donn - SAY This mission, should you choose to accept it, revolves around a combat objective. The LP will have to get their hands dirty for this one. - DELAY 25 - SAY This mission is straightforward. The LP team is to seek out two blood drunk mines and termninate them. Bring back whatever weapons they wield and recover the bodies for the vault. - DELAY 25 - "} - -/obj/item/disk/holodisk/lp/combat/tumor - name = "Combat Mission Tumor" - desc = "A holodisk containing a combat mission for the LP." - preset_image_type = /datum/preset_holoimage/commissioner - preset_record_text = {" - NAME Commissioner Gorre Donn - SAY This mission, should you choose to accept it, revolves around a combat objective. The LP will have to get their hands dirty for this one. - DELAY 25 - SAY This mission is rather straightforward. Seak out 2 pulsing tumors and elimate the threat they produce. Return the body of the threat to the vault. - DELAY 25 - "} - -/obj/item/disk/holodisk/lp/combat/bloodred - name = "Combat Mission Blood Red" - desc = "A holodisk containing a combat mission for the LP." - preset_image_type = /datum/preset_holoimage/commissioner - preset_record_text = {" - NAME Commissioner Gorre Donn - SAY This mission, should you choose to accept it, revolves around a combat objective. The LP will have to get their hands dirty for this one. - DELAY 25 - SAY This mission overlaps with the retrieval missions. The LP is simply to obtain a Blood Red Hardsuit. This may include responding to a hostile syndicate vessel to take it by force. - DELAY 25 - "} - -/obj/item/disk/holodisk/lp/retrieval/supersuit - name = "Retrieval Mission Lost Hardsuit" - desc = "A holodisk containing a retrieval mission for the LP." - preset_image_type = /datum/preset_holoimage/commissioner - preset_record_text = {" - NAME Commissioner Gorre Donn - SAY This mission, should you choose to accept it, revolves around a retrieval objective. The LP will need to obtain or create something. - DELAY 25 - SAY This one is a bit difficult but completing it is extremely rewarding. Our sources show that two of our experimental hardsuits have been lost to the necropolis. Retrieve a Champion's Hardsuit or an Inquisitor's Hardsuit. These are often found in necropolis chests or held by certain megafauna. - DELAY 25 - "} - /obj/item/disk/holodisk/lp/retrieval/phazon - name = "Retrieval Mission Secret Mecha" + name = "Retrieval Mission Secret Exosuit" desc = "A holodisk containing a retrieval mission for the LP." preset_image_type = /datum/preset_holoimage/commissioner preset_record_text = {" @@ -321,18 +215,6 @@ DELAY 25 "} -/obj/item/disk/holodisk/lp/retrieval/artifact - name = "Retrieval Mission Artifact" - desc = "A holodisk containing a retrieval mission for the LP." - preset_image_type = /datum/preset_holoimage/commissioner - preset_record_text = {" - NAME Commissioner Gorre Donn - SAY This mission, should you choose to accept it, revolves around a retrieval objective. The LP will need to obtain or create something. - DELAY 25 - SAY For this mission the LP is to find three artifacts. These include but are not limited to, anything stored in a necropolis chest, most megafauna loot, anything befitting someone magical or otherwise special. - DELAY 25 - "} - /obj/item/disk/holodisk/lp/retrieval/materials name = "Retrieval Mission Materials" desc = "A holodisk containing a retrieval mission for the LP." @@ -345,18 +227,6 @@ DELAY 25 "} -/obj/item/disk/holodisk/lp/aid/recruits - name = "Aid Mission Recruitment Drive" - desc = "A holodisk containing an aid mission for the LP." - preset_image_type = /datum/preset_holoimage/commissioner - preset_record_text = {" - NAME Commissioner Gorre Donn - SAY This mission, should you choose to accept it, revolves around an aid objective. The LP will need to provide aid to local vessels not hostile or syndicate. - DELAY 25 - SAY Less providing aid and more networking. The LP will need to convince 4 independent vessels to switch to NTSV flight tags. - DELAY 25 - "} - /obj/item/disk/holodisk/lp/aid/repairs name = "Aid Mission Repair" desc = "A holodisk containing an aid mission for the LP." @@ -370,7 +240,7 @@ "} /obj/item/disk/holodisk/lp/aid/rescue - name = "Aid Mission Rescure" + name = "Aid Mission Rescue" desc = "A holodisk containing an aid mission for the LP." preset_image_type = /datum/preset_holoimage/commissioner preset_record_text = {" @@ -413,33 +283,14 @@ //lootdrop -/obj/effect/spawner/lootdrop/lpcombat - name = "LP Combat Missions" - lootdoubles = FALSE - - loot = list( - /obj/item/disk/holodisk/lp/combat/syndicate1 = 1, - /obj/item/disk/holodisk/lp/combat/syndicate2 = 1, - /obj/item/disk/holodisk/lp/combat/syndicate3 = 1, - /obj/item/disk/holodisk/lp/combat/syndicate4 = 1, - /obj/item/disk/holodisk/lp/combat/megafauna = 5, - /obj/item/disk/holodisk/lp/combat/bdm = 5, - /obj/item/disk/holodisk/lp/combat/tumor = 5, - /obj/item/disk/holodisk/lp/combat/bloodred = 5 - ) - - lootcount = 2 - /obj/effect/spawner/lootdrop/lpretrieval name = "LP Retrieval Missions" lootdoubles = FALSE loot = list( - /obj/item/disk/holodisk/lp/retrieval/supersuit = 1, /obj/item/disk/holodisk/lp/retrieval/phazon = 1, /obj/item/disk/holodisk/lp/retrieval/durand = 1, /obj/item/disk/holodisk/lp/retrieval/gunstock = 1, - /obj/item/disk/holodisk/lp/retrieval/artifact = 1, /obj/item/disk/holodisk/lp/retrieval/materials = 1 ) @@ -450,11 +301,10 @@ lootdoubles = FALSE loot = list( - /obj/item/disk/holodisk/lp/aid/recruits = 1, /obj/item/disk/holodisk/lp/aid/repairs = 1, /obj/item/disk/holodisk/lp/aid/rescue = 1, /obj/item/disk/holodisk/lp/aid/guard = 1, ) - lootcount = 2 + lootcount = 4 diff --git a/code/game/MapData/shuttles/pgf_crying_sun.dm b/code/game/MapData/shuttles/pgf_crying_sun.dm index 6df40aa0efdd..2851518e669a 100644 --- a/code/game/MapData/shuttles/pgf_crying_sun.dm +++ b/code/game/MapData/shuttles/pgf_crying_sun.dm @@ -2,7 +2,7 @@ name = "The UCWLWM" desc = "It's looks old and worn out." icon_state = "book3" - author = "Welds-the-Steel" + author = "Senior Engineer Wihlz-Saai" title = "The Universal Colossal Warship Linear Weapon Mount" dat = {" diff --git a/code/game/alternate_appearance.dm b/code/game/alternate_appearance.dm index 96f09636fec3..873828d2c260 100644 --- a/code/game/alternate_appearance.dm +++ b/code/game/alternate_appearance.dm @@ -130,32 +130,6 @@ GLOBAL_LIST_EMPTY(active_alternate_appearances) /datum/atom_hud/alternate_appearance/basic/observers/mobShouldSee(mob/M) return isobserver(M) -/datum/atom_hud/alternate_appearance/basic/noncult - -/datum/atom_hud/alternate_appearance/basic/noncult/New() - ..() - for(var/mob in GLOB.player_list) - if(mobShouldSee(mob)) - add_hud_to(mob) - -/datum/atom_hud/alternate_appearance/basic/noncult/mobShouldSee(mob/M) - if(!iscultist(M)) - return TRUE - return FALSE - -/datum/atom_hud/alternate_appearance/basic/cult - -/datum/atom_hud/alternate_appearance/basic/cult/New() - ..() - for(var/mob in GLOB.player_list) - if(mobShouldSee(mob)) - add_hud_to(mob) - -/datum/atom_hud/alternate_appearance/basic/cult/mobShouldSee(mob/M) - if(iscultist(M)) - return TRUE - return FALSE - /datum/atom_hud/alternate_appearance/basic/blessedAware /datum/atom_hud/alternate_appearance/basic/blessedAware/New() @@ -167,8 +141,6 @@ GLOBAL_LIST_EMPTY(active_alternate_appearances) /datum/atom_hud/alternate_appearance/basic/blessedAware/mobShouldSee(mob/M) if(M.mind && (M.mind.assigned_role == "Chaplain")) return TRUE - if (istype(M, /mob/living/simple_animal/hostile/construct/wraith)) - return TRUE if(isrevenant(M) || iswizard(M)) return TRUE return FALSE diff --git a/code/game/area/Space_Station_13_areas.dm b/code/game/area/Space_Station_13_areas.dm deleted file mode 100644 index 366f9127cd55..000000000000 --- a/code/game/area/Space_Station_13_areas.dm +++ /dev/null @@ -1,1350 +0,0 @@ -/* - -### This file contains a list of all the areas in your station. Format is as follows: - -/area/CATEGORY/OR/DESCRIPTOR/NAME (you can make as many subdivisions as you want) - name = "NICE NAME" (not required but makes things really nice) - icon = 'ICON FILENAME' (defaults to 'icons/turf/areas.dmi') - icon_state = "NAME OF ICON" (defaults to "unknown" (blank)) - requires_power = FALSE (defaults to true) - ambientsounds = list() (defaults to GENERIC from sound.dm. override it as "ambientsounds = list('sound/ambience/signal.ogg')" or using another define. - -NOTE: there are two lists of areas in the end of this file: centcom and station itself. Please maintain these lists valid. --rastaf0 - -*/ - - -/*-----------------------------------------------------------------------------*/ - -/* Shiptest Begin - -/area/ai_monitored //stub defined ai_monitored.dm - -/area/ai_monitored/turret_protected - -/area/space - icon_state = "space" - requires_power = TRUE - always_unpowered = TRUE - dynamic_lighting = DYNAMIC_LIGHTING_DISABLED - power_light = FALSE - power_equip = FALSE - power_environ = FALSE - area_flags = UNIQUE_AREA | CAVES_ALLOWED | MOB_SPAWN_ALLOWED - outdoors = TRUE - ambientsounds = SPACE - flags_1 = CAN_BE_DIRTY_1 - sound_environment = SOUND_AREA_SPACE - -/area/space/nearstation - icon_state = "space_near" - dynamic_lighting = DYNAMIC_LIGHTING_IFSTARLIGHT - -/area/start - name = "start area" - icon_state = "start" - requires_power = FALSE - dynamic_lighting = DYNAMIC_LIGHTING_DISABLED - has_gravity = STANDARD_GRAVITY - - -/area/testroom - requires_power = FALSE - name = "Test Room" - icon_state = "storage" - -//EXTRA - -/area/asteroid - name = "Asteroid" - icon_state = "asteroid" - requires_power = FALSE - has_gravity = STANDARD_GRAVITY - area_flags = UNIQUE_AREA | CAVES_ALLOWED | MOB_SPAWN_ALLOWED - ambientsounds = MINING - flags_1 = CAN_BE_DIRTY_1 - sound_environment = SOUND_AREA_ASTEROID - -/area/asteroid/nearstation - dynamic_lighting = DYNAMIC_LIGHTING_FORCED - ambientsounds = RUINS - always_unpowered = FALSE - requires_power = TRUE - area_flags = UNIQUE_AREA | BLOBS_ALLOWED - -/area/asteroid/nearstation/bomb_site - name = "Bomb Testing Asteroid" - -//STATION13 - -//Maintenance - -/area/maintenance - ambientsounds = MAINTENANCE - lighting_colour_tube = "#ffe5cb" - lighting_colour_bulb = "#ffdbb4" - area_flags = BLOBS_ALLOWED | UNIQUE_AREA - sound_environment = SOUND_AREA_TUNNEL_ENCLOSED - -//Departments - -/area/maintenance/department/chapel - name = "Chapel Maintenance" - icon_state = "maint_chapel" - -/area/maintenance/department/chapel/monastery - name = "Monastery Maintenance" - icon_state = "maint_monastery" - -/area/maintenance/department/crew_quarters/bar - name = "Bar Maintenance" - icon_state = "maint_bar" - sound_environment = SOUND_AREA_WOODFLOOR - -/area/maintenance/department/crew_quarters/dorms - name = "Dormitory Maintenance" - icon_state = "maint_dorms" - -/area/maintenance/department/eva - name = "EVA Maintenance" - icon_state = "maint_eva" - -/area/maintenance/department/electrical - name = "Electrical Maintenance" - icon_state = "maint_electrical" - -/area/maintenance/department/engine/atmos - name = "Atmospherics Maintenance" - icon_state = "maint_atmos" - -/area/maintenance/department/security - name = "Security Maintenance" - icon_state = "maint_sec" - -/area/maintenance/department/security/upper - name = "Upper Security Maintenance" - -/area/maintenance/department/security/brig - name = "Brig Maintenance" - icon_state = "maint_brig" - -/area/maintenance/department/medical - name = "Medbay Maintenance" - icon_state = "medbay_maint" - -/area/maintenance/department/medical/central - name = "Central Medbay Maintenance" - icon_state = "medbay_maint_central" - -/area/maintenance/department/medical/morgue - name = "Morgue Maintenance" - icon_state = "morgue_maint" - -/area/maintenance/department/science - name = "Science Maintenance" - icon_state = "maint_sci" - -/area/maintenance/department/science/central - name = "Central Science Maintenance" - icon_state = "maint_sci_central" - -/area/maintenance/department/cargo - name = "Cargo Maintenance" - icon_state = "maint_cargo" - -/area/maintenance/department/bridge - name = "Bridge Maintenance" - icon_state = "maint_bridge" - -/area/maintenance/department/engine - name = "Engineering Maintenance" - icon_state = "maint_engi" - -/area/maintenance/department/science/xenobiology - name = "Xenobiology Maintenance" - icon_state = "xenomaint" - area_flags = VALID_TERRITORY | BLOBS_ALLOWED | UNIQUE_AREA | XENOBIOLOGY_COMPATIBLE - - -//Maintenance - Generic - -/area/maintenance/aft - name = "Aft Maintenance" - icon_state = "amaint" - -/area/maintenance/aft/upper - name = "Upper Aft Maintenance" - -/area/maintenance/aft/secondary - name = "Aft Maintenance" - icon_state = "amaint_2" - -/area/maintenance/central - name = "Central Maintenance" - icon_state = "maintcentral" - -/area/maintenance/central/secondary - name = "Central Maintenance" - icon_state = "maintcentral" - -/area/maintenance/fore - name = "Fore Maintenance" - icon_state = "fmaint" - -/area/maintenance/fore/upper - name = "Upper Fore Maintenance" - -/area/maintenance/fore/secondary - name = "Fore Maintenance" - icon_state = "fmaint_2" - -/area/maintenance/starboard - name = "Starboard Maintenance" - icon_state = "smaint" - -/area/maintenance/starboard/upper - name = "Upper Starboard Maintenance" - -/area/maintenance/starboard/central - name = "Central Starboard Maintenance" - icon_state = "smaint" - -/area/maintenance/starboard/secondary - name = "Secondary Starboard Maintenance" - icon_state = "smaint_2" - -/area/maintenance/starboard/aft - name = "Starboard Quarter Maintenance" - icon_state = "asmaint" - -/area/maintenance/starboard/aft/secondary - name = "Secondary Starboard Quarter Maintenance" - icon_state = "asmaint_2" - -/area/maintenance/starboard/fore - name = "Starboard Bow Maintenance" - icon_state = "fsmaint" - -/area/maintenance/port - name = "Port Maintenance" - icon_state = "pmaint" - -/area/maintenance/port/central - name = "Central Port Maintenance" - icon_state = "maintcentral" - -/area/maintenance/port/aft - name = "Port Quarter Maintenance" - icon_state = "apmaint" - -/area/maintenance/port/fore - name = "Port Bow Maintenance" - icon_state = "fpmaint" - -/area/maintenance/disposal - name = "Waste Disposal" - icon_state = "disposal" - -/area/maintenance/disposal/incinerator - name = "Incinerator" - icon_state = "disposal" - - -//Hallway -/area/hallway - sound_environment = SOUND_AREA_STANDARD_STATION - -/area/hallway - lighting_colour_tube = "#ffce99" - lighting_colour_bulb = "#ffdbb4" - lighting_brightness_tube = 7 - - -/area/hallway/primary/aft - name = "Aft Primary Hallway" - icon_state = "hallA" - -/area/hallway/primary/fore - name = "Fore Primary Hallway" - icon_state = "hallF" - -/area/hallway/primary/starboard - name = "Starboard Primary Hallway" - icon_state = "hallS" - -/area/hallway/primary/port - name = "Port Primary Hallway" - icon_state = "hallP" - -/area/hallway/primary/central - name = "Central Primary Hallway" - icon_state = "hallC" - -/area/hallway/primary/upper - name = "Upper Central Primary Hallway" - icon_state = "hallC" - - -/area/hallway/secondary/command - name = "Command Hallway" - icon_state = "bridge_hallway" - -/area/hallway/secondary/construction - name = "Construction Area" - icon_state = "construction" - -/area/hallway/secondary/exit - name = "Escape Shuttle Hallway" - icon_state = "escape" - -/area/hallway/secondary/exit/departure_lounge - name = "Departure Lounge" - icon_state = "escape_lounge" - -/area/hallway/secondary/entry - name = "Arrival Shuttle Hallway" - icon_state = "entry" - -/area/hallway/secondary/service - name = "Service Hallway" - icon_state = "hall_service" - -//Command - -/area/bridge - name = "Bridge" - icon_state = "bridge" - ambientsounds = list('sound/ambience/signal.ogg') - lighting_colour_tube = "#ffce99" - lighting_colour_bulb = "#ffdbb4" - lighting_brightness_tube = 6 - sound_environment = SOUND_AREA_STANDARD_STATION - -/area/bridge/meeting_room - name = "Heads of Staff Meeting Room" - icon_state = "meeting" - sound_environment = SOUND_AREA_MEDIUM_SOFTFLOOR - -/area/bridge/meeting_room/council - name = "Council Chamber" - icon_state = "meeting" - sound_environment = SOUND_AREA_MEDIUM_SOFTFLOOR - -/area/bridge/showroom/corporate - name = "Corporate Showroom" - icon_state = "showroom" - sound_environment = SOUND_AREA_MEDIUM_SOFTFLOOR - -/area/crew_quarters/heads/captain - name = "Captain's Office" - icon_state = "captain" - sound_environment = SOUND_AREA_WOODFLOOR - -/area/crew_quarters/heads/captain/private - name = "Captain's Quarters" - icon_state = "captain" - sound_environment = SOUND_AREA_WOODFLOOR - -/area/crew_quarters/heads/chief - name = "Chief Engineer's Office" - icon_state = "ce_office" - -/area/crew_quarters/heads/cmo - name = "Chief Medical Officer's Office" - icon_state = "cmo_office" - -/area/crew_quarters/heads/head_of_personnel - name = "Head of Personnel's Office" - icon_state = "hop_office" - -/area/crew_quarters/heads/hos - name = "Head of Security's Office" - icon_state = "hos_office" - -/area/crew_quarters/heads/hor - name = "Research Director's Office" - icon_state = "rd_office" - -/area/comms - name = "Communications Relay" - icon_state = "tcomsatcham" - lighting_colour_tube = "#e2feff" - lighting_colour_bulb = "#d5fcff" - sound_environment = SOUND_AREA_STANDARD_STATION - -/area/server - name = "Messaging Server Room" - icon_state = "server" - sound_environment = SOUND_AREA_STANDARD_STATION - -//Crew - -/area/crew_quarters - lighting_colour_tube = "#ffce99" - lighting_colour_bulb = "#ffdbb4" - lighting_brightness_tube = 6 - sound_environment = SOUND_AREA_STANDARD_STATION - -/area/crew_quarters/dorms - name = "Dormitories" - icon_state = "Sleep" - area_flags = VALID_TERRITORY | BLOBS_ALLOWED | UNIQUE_AREA - -/area/crew_quarters/dorms/barracks - name = "Sleep Barracks" - -/area/crew_quarters/dorms/barracks/male - name = "Male Sleep Barracks" - -/area/crew_quarters/dorms/barracks/female - name = "Female Sleep Barracks" - -/area/crew_quarters/toilet - name = "Dormitory Toilets" - icon_state = "toilet" - lighting_colour_tube = "#e3ffff" - lighting_colour_bulb = "#d5ffff" - sound_environment = SOUND_AREA_SMALL_ENCLOSED - -/area/crew_quarters/toilet/auxiliary - name = "Auxiliary Restrooms" - icon_state = "toilet" - -/area/crew_quarters/toilet/locker - name = "Locker Toilets" - icon_state = "toilet" - -/area/crew_quarters/toilet/restrooms - name = "Restrooms" - icon_state = "toilet" - -/area/crew_quarters/locker - name = "Locker Room" - icon_state = "locker" - -/area/crew_quarters/lounge - name = "Lounge" - icon_state = "yellow" - sound_environment = SOUND_AREA_SMALL_SOFTFLOOR - -/area/crew_quarters/fitness - name = "Fitness Room" - icon_state = "fitness" - -/area/crew_quarters/fitness/locker_room - name = "Unisex Locker Room" - icon_state = "fitness" - -/area/crew_quarters/fitness/locker_room/male - name = "Male Locker Room" - -/area/crew_quarters/fitness/locker_room/female - name = "Female Locker Room" - - -/area/crew_quarters/fitness/recreation - name = "Recreation Area" - icon_state = "fitness" - -/area/crew_quarters/cafeteria - name = "Cafeteria" - icon_state = "cafeteria" - -/area/crew_quarters/kitchen - name = "Kitchen" - icon_state = "kitchen" - lighting_colour_tube = "#e3ffff" - lighting_colour_bulb = "#d5ffff" - -/area/crew_quarters/kitchen/coldroom - name = "Kitchen Cold Room" - icon_state = "kitchen_cold" - sound_environment = SOUND_AREA_SMALL_ENCLOSED - -/area/crew_quarters/bar - name = "Bar" - icon_state = "bar" - mood_bonus = 5 - mood_message = "I love being in the bar!\n" - lighting_colour_tube = "#fff4d6" - lighting_colour_bulb = "#ffebc1" - sound_environment = SOUND_AREA_WOODFLOOR - -/area/crew_quarters/bar/atrium - name = "Atrium" - icon_state = "bar" - sound_environment = SOUND_AREA_WOODFLOOR - -/area/crew_quarters/electronic_marketing_den - name = "Electronic Marketing Den" - icon_state = "bar" - -/area/crew_quarters/abandoned_gambling_den - name = "Abandoned Gambling Den" - icon_state = "abandoned_g_den" - -/area/crew_quarters/abandoned_gambling_den/secondary - icon_state = "abandoned_g_den_2" - -/area/crew_quarters/theatre - name = "Theatre" - icon_state = "Theatre" - sound_environment = SOUND_AREA_WOODFLOOR - -/area/crew_quarters/theatre/abandoned - name = "Abandoned Theatre" - icon_state = "Theatre" - -/area/library - name = "Library" - icon_state = "library" - flags_1 = CULT_PERMITTED_1 - lighting_colour_tube = "#ffce99" - lighting_colour_bulb = "#ffdbb4" - sound_environment = SOUND_AREA_LARGE_SOFTFLOOR - -/area/library/lounge - name = "Library Lounge" - icon_state = "library" - sound_environment = SOUND_AREA_LARGE_SOFTFLOOR - -/area/library/artgallery - name = " Art Gallery" - icon_state = "library" - -/area/library/private - name = "Library Private Study" - icon_state = "library" - -/area/library/upper - name = "Library Upper Floor" - icon_state = "library" - -/area/library/printer - name = "Library Printer Room" - icon_state = "library" - -/area/library/abandoned - name = "Abandoned Library" - icon_state = "library" - flags_1 = CULT_PERMITTED_1 - -/area/chapel - icon_state = "chapel" - ambientsounds = HOLY - flags_1 = NONE - sound_environment = SOUND_AREA_LARGE_ENCLOSED - -/area/chapel/main - name = "Chapel" - -/area/chapel/main/monastery - name = "Monastery" - -/area/chapel/office - name = "Chapel Office" - icon_state = "chapeloffice" - -/area/chapel/asteroid - name = "Chapel Asteroid" - icon_state = "explored" - sound_environment = SOUND_AREA_ASTEROID - -/area/chapel/asteroid/monastery - name = "Monastery Asteroid" - -/area/chapel/dock - name = "Chapel Dock" - icon_state = "construction" - -/area/lawoffice - name = "Law Office" - icon_state = "law" - sound_environment = SOUND_AREA_SMALL_SOFTFLOOR - - -//Engineering - -/area/engine - ambientsounds = ENGINEERING - lighting_colour_tube = "#ffce93" - lighting_colour_bulb = "#ffbc6f" - sound_environment = SOUND_AREA_LARGE_ENCLOSED - -/area/engine/engine_smes - name = "Engineering SMES" - icon_state = "engine_smes" - -/area/engine/engineering - name = "Engineering" - icon_state = "engine" - -/area/engine/atmos - name = "Atmospherics" - icon_state = "atmos" - flags_1 = CULT_PERMITTED_1 - -/area/engine/atmos/upper - name = "Upper Atmospherics" - -/area/engine/atmospherics_engine - name = "Atmospherics Engine" - icon_state = "atmos_engine" - area_flags = BLOBS_ALLOWED | UNIQUE_AREA - sound_environment = SOUND_AREA_LARGE_ENCLOSED - -/area/engine/engine_room //donut station specific - name = "Engine Room" - icon_state = "atmos_engine" - -/area/engine/lobby - name = "Engineering Lobby" - icon_state = "engi_lobby" - -/area/engine/engine_room/external - name = "Supermatter External Access" - icon_state = "engine_foyer" - -/area/engine/supermatter - name = "Supermatter Engine" - icon_state = "engine_sm" - area_flags = BLOBS_ALLOWED | UNIQUE_AREA - sound_environment = SOUND_AREA_SMALL_ENCLOSED - -/area/engine/break_room - name = "Engineering Foyer" - icon_state = "engine_foyer" - sound_environment = SOUND_AREA_SMALL_ENCLOSED - -/area/engine/gravity_generator - name = "Gravity Generator Room" - icon_state = "grav_gen" - -/area/engine/storage - name = "Engineering Storage" - icon_state = "engi_storage" - sound_environment = SOUND_AREA_SMALL_ENCLOSED - -/area/engine/storage_shared - name = "Shared Engineering Storage" - icon_state = "engi_storage" - -/area/engine/transit_tube - name = "Transit Tube" - icon_state = "transit_tube" - - -//Solars - -/area/solar - requires_power = FALSE - dynamic_lighting = DYNAMIC_LIGHTING_IFSTARLIGHT - area_flags = UNIQUE_AREA - flags_1 = NONE - ambientsounds = ENGINEERING - sound_environment = SOUND_AREA_SPACE - -/area/solar/fore - name = "Fore Solar Array" - icon_state = "yellow" - sound_environment = SOUND_AREA_STANDARD_STATION - -/area/solar/aft - name = "Aft Solar Array" - icon_state = "yellow" - -/area/solar/aux/port - name = "Port Bow Auxiliary Solar Array" - icon_state = "panelsA" - -/area/solar/aux/starboard - name = "Starboard Bow Auxiliary Solar Array" - icon_state = "panelsA" - -/area/solar/starboard - name = "Starboard Solar Array" - icon_state = "panelsS" - -/area/solar/starboard/aft - name = "Starboard Quarter Solar Array" - icon_state = "panelsAS" - -/area/solar/starboard/fore - name = "Starboard Bow Solar Array" - icon_state = "panelsFS" - -/area/solar/port - name = "Port Solar Array" - icon_state = "panelsP" - -/area/solar/port/aft - name = "Port Quarter Solar Array" - icon_state = "panelsAP" - -/area/solar/port/fore - name = "Port Bow Solar Array" - icon_state = "panelsFP" - -/area/solar/aisat - name = "AI Satellite Solars" - icon_state = "yellow" - - -//Solar Maint - -/area/maintenance/solars - name = "Solar Maintenance" - icon_state = "yellow" - -/area/maintenance/solars/port - name = "Port Solar Maintenance" - icon_state = "SolarcontrolP" - -/area/maintenance/solars/port/aft - name = "Port Quarter Solar Maintenance" - icon_state = "SolarcontrolAP" - -/area/maintenance/solars/port/fore - name = "Port Bow Solar Maintenance" - icon_state = "SolarcontrolFP" - -/area/maintenance/solars/starboard - name = "Starboard Solar Maintenance" - icon_state = "SolarcontrolS" - -/area/maintenance/solars/starboard/aft - name = "Starboard Quarter Solar Maintenance" - icon_state = "SolarcontrolAS" - -/area/maintenance/solars/starboard/fore - name = "Starboard Bow Solar Maintenance" - icon_state = "SolarcontrolFS" - -//Teleporter - -/area/teleporter - name = "Teleporter Room" - icon_state = "teleporter" - ambientsounds = ENGINEERING - -/area/gateway - name = "Gateway" - icon_state = "gateway" - ambientsounds = ENGINEERING - sound_environment = SOUND_AREA_STANDARD_STATION - -//MedBay - -/area/medical - name = "Medical" - icon_state = "medbay3" - ambientsounds = MEDICAL - lighting_colour_tube = "#e7f8ff" - lighting_colour_bulb = "#d5f2ff" - sound_environment = SOUND_AREA_STANDARD_STATION - -/area/medical/abandoned - name = "Abandoned Medbay" - icon_state = "medbay3" - ambientsounds = list('sound/ambience/signal.ogg') - sound_environment = SOUND_AREA_SMALL_ENCLOSED - -/area/medical/medbay/central - name = "Medbay Central" - icon_state = "medbay" - -/area/medical/medbay/lobby - name = "Medbay Lobby" - icon_state = "medbay" - - //Medbay is a large area, these additional areas help level out APC load. - -/area/medical/medbay/zone2 - name = "Medbay" - icon_state = "medbay2" - -/area/medical/medbay/aft - name = "Medbay Aft" - icon_state = "medbay3" - -/area/medical/storage - name = "Medbay Storage" - icon_state = "medbay2" - -/area/medical/paramedic - name = "Paramedic Dispatch" - icon_state = "medbay2" - -/area/medical/office - name = "Medical Office" - icon_state = "medoffice" - -/area/medical/surgery/room_c - name = "Surgery C" - icon_state = "surgery" - -/area/medical/surgery/room_d - name = "Surgery D" - icon_state = "surgery" - -/area/medical/break_room - name = "Medical Break Room" - icon_state = "medbay2" - -/area/medical/coldroom - name = "Medical Cold Room" - icon_state = "kitchen_cold" - -/area/medical/patients_rooms - name = "Patients' Rooms" - icon_state = "patients" - sound_environment = SOUND_AREA_SMALL_SOFTFLOOR - -/area/medical/patients_rooms/room_a - name = "Patient Room A" - icon_state = "patients" - -/area/medical/patients_rooms/room_b - name = "Patient Room B" - icon_state = "patients" - -/area/medical/virology - name = "Virology" - icon_state = "virology" - flags_1 = CULT_PERMITTED_1 - -/area/medical/morgue - name = "Morgue" - icon_state = "morgue" - ambientsounds = SPOOKY - sound_environment = SOUND_AREA_SMALL_ENCLOSED - -/area/medical/chemistry - name = "Chemistry" - icon_state = "chem" - -/area/medical/pharmacy - name = "Pharmacy" - icon_state = "pharmacy" - -/area/medical/surgery - name = "Surgery" - icon_state = "surgery" - -/area/medical/surgery/room_b - name = "Surgery B" - icon_state = "surgery" - -/area/medical/cryo - name = "Cryogenics" - icon_state = "cryo" - -/area/medical/exam_room - name = "Exam Room" - icon_state = "exam_room" - -/area/medical/genetics - name = "Genetics Lab" - icon_state = "genetics" - -/area/medical/sleeper - name = "Medbay Treatment Center" - icon_state = "exam_room" - -/area/medical/psychology - name = "Psychology Office" - icon_state = "psychology" - mood_bonus = 3 - mood_message = "I feel at ease here.\n" - ambientsounds = list('sound/ambience/aurora_caelus_short.ogg') - -//Security - -/area/security - name = "Security" - icon_state = "security" - ambientsounds = HIGHSEC - lighting_colour_tube = "#ffeee2" - lighting_colour_bulb = "#ffdfca" - sound_environment = SOUND_AREA_STANDARD_STATION - -/area/security/main - name = "Security Office" - icon_state = "security" - -/area/security/brig - name = "Brig" - icon_state = "brig" - -/area/security/brig/upper - name = "Brig Overlook" - -/area/security/courtroom - name = "Courtroom" - icon_state = "courtroom" - sound_environment = SOUND_AREA_LARGE_ENCLOSED - -/area/security/prison - name = "Prison Wing" - icon_state = "sec_prison" - -/area/security/prison/toilet //radproof - name = "Prison Toilet" - icon_state = "sec_prison_safe" - -/area/security/prison/safe //radproof - name = "Prison Wing Cells" - icon_state = "sec_prison_safe" - -/area/security/prison/upper - name = "Upper Prison Wing" - icon_state = "prison_upper" - -/area/security/prison/visit - name = "Prison Visitation Area" - icon_state = "prison_visit" - -/area/security/prison/rec - name = "Prison Rec Room" - icon_state = "prison_rec" - -/area/security/prison/mess - name = "Prison Mess Hall" - icon_state = "prison_mess" - -/area/security/prison/work - name = "Prison Work Room" - icon_state = "prison_work" - -/area/security/prison/shower - name = "Prison Shower" - icon_state = "prison_shower" - -/area/security/prison/workout - name = "Prison Gym" - icon_state = "prison_workout" - -/area/security/prison/garden - name = "Prison Garden" - icon_state = "prison_garden" - -/area/security/processing - name = "Labor Shuttle Dock" - icon_state = "sec_prison" - -/area/security/processing/cremation - name = "Security Crematorium" - icon_state = "sec_prison" - sound_environment = SOUND_AREA_SMALL_ENCLOSED - -/area/security/warden - name = "Brig Control" - icon_state = "Warden" - sound_environment = SOUND_AREA_SMALL_SOFTFLOOR - -/area/security/detectives_office - name = "Detective's Office" - icon_state = "detective" - ambientsounds = list('sound/ambience/ambidet1.ogg','sound/ambience/ambidet2.ogg') - -/area/security/detectives_office/private_investigators_office - name = "Private Investigator's Office" - icon_state = "detective" - sound_environment = SOUND_AREA_SMALL_SOFTFLOOR - -/area/security/range - name = "Firing Range" - icon_state = "firingrange" - -/area/security/execution - icon_state = "execution_room" - -/area/security/execution/transfer - name = "Transfer Centre" - -/area/security/execution/education - name = "Prisoner Education Chamber" - -/area/security/nuke_storage - name = "Vault" - icon_state = "nuke_storage" - -/area/ai_monitored/nuke_storage - name = "Vault" - icon_state = "nuke_storage" - -/area/security/checkpoint - name = "Security Checkpoint" - icon_state = "checkpoint1" - -/area/security/checkpoint/auxiliary - icon_state = "checkpoint_aux" - -/area/security/checkpoint/escape - icon_state = "checkpoint_esc" - -/area/security/checkpoint/supply - name = "Security Post - Cargo Bay" - icon_state = "checkpoint_supp" - -/area/security/checkpoint/engineering - name = "Security Post - Engineering" - icon_state = "checkpoint_engi" - -/area/security/checkpoint/medical - name = "Security Post - Medbay" - icon_state = "checkpoint_med" - -/area/security/checkpoint/science - name = "Security Post - Science" - icon_state = "checkpoint_sci" - -/area/security/checkpoint/science/research - name = "Security Post - Research Division" - icon_state = "checkpoint_res" - -/area/security/checkpoint/customs - name = "Customs" - icon_state = "customs_point" - -/area/security/checkpoint/customs/auxiliary - icon_state = "customs_point_aux" - - -//Service - -/area/quartermaster - name = "Quartermasters" - icon_state = "quart" - lighting_colour_tube = "#ffe3cc" - lighting_colour_bulb = "#ffdbb8" - sound_environment = SOUND_AREA_STANDARD_STATION - -/area/quartermaster/sorting - name = "Delivery Office" - icon_state = "cargo_delivery" - sound_environment = SOUND_AREA_STANDARD_STATION - -/area/quartermaster/warehouse - name = "Warehouse" - icon_state = "cargo_warehouse" - sound_environment = SOUND_AREA_LARGE_ENCLOSED - -/area/quartermaster/warehouse/upper - name = "Upper Warehouse" - -/area/quartermaster/office - name = "Cargo Office" - icon_state = "quartoffice" - -/area/quartermaster/storage - name = "Cargo Bay" - icon_state = "cargo_bay" - sound_environment = SOUND_AREA_LARGE_ENCLOSED - -/area/quartermaster/qm - name = "Quartermaster's Office" - icon_state = "quart" - -/area/quartermaster/qm/perch - name = "Quartermaster's Perch" - icon_state = "quartperch" - -/area/quartermaster/miningdock - name = "Mining Dock" - icon_state = "mining" - -/area/quartermaster/miningoffice - name = "Mining Office" - icon_state = "mining" - -/area/janitor - name = "Custodial Closet" - icon_state = "janitor" - flags_1 = CULT_PERMITTED_1 - sound_environment = SOUND_AREA_SMALL_ENCLOSED - -/area/hydroponics - name = "Hydroponics" - icon_state = "hydro" - sound_environment = SOUND_AREA_STANDARD_STATION - -/area/hydroponics/upper - name = "Upper Hydroponics" - icon_state = "hydro" - -/area/hydroponics/garden - name = "Garden" - icon_state = "garden" - -/area/hydroponics/garden/abandoned - name = "Abandoned Garden" - icon_state = "abandoned_garden" - sound_environment = SOUND_AREA_SMALL_ENCLOSED - -/area/hydroponics/garden/monastery - name = "Monastery Garden" - icon_state = "hydro" - - -//Science - -/area/science - name = "Science Division" - icon_state = "toxlab" - lighting_colour_tube = "#f0fbff" - lighting_colour_bulb = "#e4f7ff" - sound_environment = SOUND_AREA_STANDARD_STATION - -/area/science/lab - name = "Research and Development" - icon_state = "toxlab" - -/area/science/xenobiology - name = "Xenobiology Lab" - icon_state = "toxlab" - -/area/science/storage - name = "Toxins Storage" - icon_state = "toxstorage" - -/area/science/test_area - name = "Toxins Test Area" - icon_state = "toxtest" - area_flags = BLOBS_ALLOWED | UNIQUE_AREA - -/area/science/mixing - name = "Toxins Mixing Lab" - icon_state = "toxmix" - -/area/science/mixing/chamber - name = "Toxins Mixing Chamber" - icon_state = "toxmix" - area_flags = BLOBS_ALLOWED | UNIQUE_AREA - -/area/science/misc_lab - name = "Testing Lab" - icon_state = "toxmisc" - -/area/science/misc_lab/range - name = "Research Testing Range" - icon_state = "toxmisc" - -/area/science/server - name = "Research Division Server Room" - icon_state = "server" - -/area/science/explab - name = "Experimentation Lab" - icon_state = "toxmisc" - -/area/science/robotics - name = "Robotics" - icon_state = "medresearch" - -/area/science/robotics/mechbay - name = "Mech Bay" - icon_state = "mechbay" - -/area/science/robotics/lab - name = "Robotics Lab" - icon_state = "ass_line" - -/area/science/research - name = "Research Division" - icon_state = "medresearch" - -/area/science/research/abandoned - name = "Abandoned Research Lab" - icon_state = "medresearch" - sound_environment = SOUND_AREA_SMALL_ENCLOSED - -/area/science/nanite - name = "Nanite Lab" - icon_state = "toxmisc" - -//Storage -/area/storage - sound_environment = SOUND_AREA_STANDARD_STATION - -/area/storage/tools - name = "Auxiliary Tool Storage" - icon_state = "storage" - -/area/storage/primary - name = "Primary Tool Storage" - icon_state = "primarystorage" - -/area/storage/art - name = "Art Supply Storage" - icon_state = "storage" - -/area/storage/tcom - name = "Telecomms Storage" - icon_state = "green" - area_flags = BLOBS_ALLOWED | UNIQUE_AREA - -/area/storage/eva - name = "EVA Storage" - icon_state = "eva" - -/area/storage/emergency/starboard - name = "Starboard Emergency Storage" - icon_state = "emergencystorage" - -/area/storage/emergency/port - name = "Port Emergency Storage" - icon_state = "emergencystorage" - -/area/storage/tech - name = "Technical Storage" - icon_state = "auxstorage" - -//Construction - -/area/construction - name = "Construction Area" - icon_state = "yellow" - ambientsounds = ENGINEERING - sound_environment = SOUND_AREA_STANDARD_STATION - -/area/construction/mining/aux_base - name = "Auxiliary Base Construction" - icon_state = "aux_base_construction" - sound_environment = SOUND_AREA_MEDIUM_SOFTFLOOR - -/area/construction/storage_wing - name = "Storage Wing" - icon_state = "storage_wing" - -// Vacant Rooms -/area/vacant_room - name = "Vacant Room" - icon_state = "vacant_room" - ambientsounds = MAINTENANCE - -/area/vacant_room/office - name = "Vacant Office" - icon_state = "vacant_office" - -/area/vacant_room/commissary - name = "Vacant Commissary" - icon_state = "vacant_commissary" - -//AI - -/area/ai_monitored - sound_environment = SOUND_AREA_STANDARD_STATION - -/area/ai_monitored/security/armory - name = "Armory" - icon_state = "armory" - ambientsounds = HIGHSEC - -/area/ai_monitored/security/armory/upper - name = "Upper Armory" - -/area/ai_monitored/storage/eva - name = "EVA Storage" - icon_state = "eva" - ambientsounds = HIGHSEC - -/area/ai_monitored/storage/eva/upper - name = "Upper EVA Storage" - -/area/ai_monitored/storage/satellite - name = "AI Satellite Maint" - icon_state = "storage" - ambientsounds = HIGHSEC - - //Turret_protected - -/area/ai_monitored/turret_protected - ambientsounds = list('sound/ambience/ambimalf.ogg', 'sound/ambience/ambitech.ogg', 'sound/ambience/ambitech2.ogg', 'sound/ambience/ambiatmos.ogg', 'sound/ambience/ambiatmos2.ogg') - -/area/ai_monitored/turret_protected/ai_upload - name = "AI Upload Chamber" - icon_state = "ai_upload" - sound_environment = SOUND_AREA_SMALL_ENCLOSED - -/area/ai_monitored/turret_protected/ai_upload_foyer - name = "AI Upload Access" - icon_state = "ai_foyer" - sound_environment = SOUND_AREA_SMALL_ENCLOSED - -/area/ai_monitored/turret_protected/ai - name = "AI Chamber" - icon_state = "ai_chamber" - -/area/ai_monitored/turret_protected/aisat - name = "AI Satellite" - icon_state = "ai" - sound_environment = SOUND_ENVIRONMENT_ROOM - -/area/ai_monitored/turret_protected/aisat/atmos - name = "AI Satellite Atmos" - icon_state = "ai" - -/area/ai_monitored/turret_protected/aisat/foyer - name = "AI Satellite Foyer" - icon_state = "ai" - -/area/ai_monitored/turret_protected/aisat/service - name = "AI Satellite Service" - icon_state = "ai" - -/area/ai_monitored/turret_protected/aisat/hallway - name = "AI Satellite Hallway" - icon_state = "ai" - -/area/aisat - name = "AI Satellite Exterior" - icon_state = "yellow" - -/area/ai_monitored/turret_protected/aisat_interior - name = "AI Satellite Antechamber" - icon_state = "ai" - sound_environment = SOUND_AREA_LARGE_ENCLOSED - -/area/ai_monitored/turret_protected/AIsatextAS - name = "AI Sat Ext" - icon_state = "storage" - -/area/ai_monitored/turret_protected/AIsatextAP - name = "AI Sat Ext" - icon_state = "storage" - - -// Telecommunications Satellite - -/area/tcommsat - ambientsounds = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg', 'sound/ambience/ambitech.ogg',\ - 'sound/ambience/ambitech2.ogg', 'sound/ambience/ambitech3.ogg', 'sound/ambience/ambimystery.ogg') - -/area/tcommsat/computer - name = "Telecomms Control Room" - icon_state = "tcomsatcomp" - sound_environment = SOUND_AREA_MEDIUM_SOFTFLOOR - -/area/tcommsat/server - name = "Telecomms Server Room" - icon_state = "tcomsatcham" - -/area/tcommsat/server/upper - name = "Upper Telecomms Server Room" - -//External Hull Access -/area/maintenance/external - name = "External Hull Access" - icon_state = "amaint" - -/area/maintenance/external/aft - name = "Aft External Hull Access" - -/area/maintenance/external/port - name = "Port External Hull Access" - -/area/maintenance/external/port/bow - name = "Port Bow External Hull Access" - -Shiptest End */ diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index e8bdb66c1898..2798158eda0b 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -13,7 +13,7 @@ mouse_opacity = MOUSE_OPACITY_TRANSPARENT invisibility = INVISIBILITY_LIGHTING - var/area_flags = VALID_TERRITORY | BLOBS_ALLOWED | UNIQUE_AREA + var/area_flags = VALID_TERRITORY | UNIQUE_AREA var/fire = null ///Whether there is an atmos alarm in this area @@ -110,7 +110,7 @@ GLOBAL_LIST_EMPTY(teleportlocs) /proc/process_teleport_locs() for(var/V in GLOB.sortedAreas) var/area/AR = V - if(istype(AR, /area/shuttle) || AR.area_flags & NOTELEPORT) + if(AR.area_flags & NOTELEPORT) continue if(GLOB.teleportlocs[AR.name]) continue @@ -633,7 +633,6 @@ GLOBAL_LIST_EMPTY(teleportlocs) power_environ = FALSE always_unpowered = FALSE area_flags &= ~VALID_TERRITORY - area_flags &= ~BLOBS_ALLOWED addSorted() /** * Set the area size of the area diff --git a/code/game/area/areas/outpost.dm b/code/game/area/areas/outpost.dm index f50b7655a119..d7dd90688230 100644 --- a/code/game/area/areas/outpost.dm +++ b/code/game/area/areas/outpost.dm @@ -3,7 +3,7 @@ /area/outpost dynamic_lighting = DYNAMIC_LIGHTING_FORCED has_gravity = STANDARD_GRAVITY - area_flags = VALID_TERRITORY | BLOBS_ALLOWED | NOTELEPORT // not unique, in case multiple outposts get loaded. all derivatives should also be NOTELEPORT + area_flags = VALID_TERRITORY | NOTELEPORT // not unique, in case multiple outposts get loaded. all derivatives should also be NOTELEPORT flags_1 = CAN_BE_DIRTY_1 sound_environment = SOUND_AREA_STANDARD_STATION lighting_colour_tube = "#ffce99" diff --git a/code/game/area/areas/ruins/_ruins.dm b/code/game/area/areas/ruins/_ruins.dm index 1ba5d0e18ec6..766ec66392b5 100644 --- a/code/game/area/areas/ruins/_ruins.dm +++ b/code/game/area/areas/ruins/_ruins.dm @@ -4,7 +4,7 @@ name = "unexplored location" icon_state = "away" has_gravity = STANDARD_GRAVITY - area_flags = HIDDEN_AREA | BLOBS_ALLOWED + area_flags = HIDDEN_AREA dynamic_lighting = DYNAMIC_LIGHTING_FORCED ambientsounds = RUINS flags_1 = CAN_BE_DIRTY_1 diff --git a/code/game/area/areas/ruins/lavaland.dm b/code/game/area/areas/ruins/lavaland.dm index f7cbb414bc00..298f996ea43d 100644 --- a/code/game/area/areas/ruins/lavaland.dm +++ b/code/game/area/areas/ruins/lavaland.dm @@ -27,17 +27,6 @@ name = "Hierophant's Arena" icon_state = "dk_yellow" - -//Elephant Graveyard - -/area/ruin/unpowered/elephant_graveyard - name = "Elephant Graveyard" - icon_state = "dk_yellow" - -/area/ruin/powered/graveyard_shuttle - name = "Elephant Graveyard" - icon_state = "green" - //Lava Canyon /area/ruin/unpowered/scorched_hut @@ -85,3 +74,24 @@ /area/ruin/unpowered/crashed_starwalker name = "Crashed Pirate Ship" +// Abandoned Listening Post + +/area/ruin/unpowered/listening_post + name = "Listening Post Lobby" + icon_state = "yellow" + +/area/ruin/unpowered/listening_post/commons + name = "Listening Post Commons" + icon_state = "green" + +/area/ruin/unpowered/listening_post/canteen + name = "Listening Post Canteen" + icon_state = "purple" + +/area/ruin/unpowered/listening_post/operations + name = "Listening Post Operations" + icon_state = "hallC" + +/area/ruin/unpowered/listening_post/engineering + name = "Listening Post Engineering" + icon_state = "dk_yellow" diff --git a/code/game/area/areas/ruins/rockplanet.dm b/code/game/area/areas/ruins/rockplanet.dm index 43516a72376a..1b9f89a46ff8 100644 --- a/code/game/area/areas/ruins/rockplanet.dm +++ b/code/game/area/areas/ruins/rockplanet.dm @@ -32,3 +32,29 @@ name = "Abandoned Crash Site" always_unpowered = FALSE icon_state = "red" + +//distillery + +/area/ruin/rockplanet/distillery + name = "Distillery" + icon_state = "red" + +/area/ruin/rockplanet/distillery/saloon + name = "Saloon" + icon_state = "bar" + +/area/ruin/rockplanet/distillery/shuttle + name = "Frontiersman Pod" + icon_state = "shuttle" + +/area/ruin/rockplanet/distillery/crew + name = "Crew Area" + icon_state = "crew_quarters" + +/area/ruin/rockplanet/distillery/engineering + name = "Engineering" + icon_state = "engine" + +/area/ruin/rockplanet/distillery/office + name = "Office" + icon_state = "vacant_office" diff --git a/code/game/area/areas/ruins/wasteplanet.dm b/code/game/area/areas/ruins/wasteplanet.dm index 4b1e69b456d2..5f069d3e055b 100644 --- a/code/game/area/areas/ruins/wasteplanet.dm +++ b/code/game/area/areas/ruins/wasteplanet.dm @@ -3,31 +3,31 @@ //Abandoned Mechbay Ruin /area/ruin/wasteplanet/abandoned_mechbay/mainhall - name = "Abandoned Mechbay Main Corridor" + name = "Abandoned Exosuit Bay Main Corridor" icon_state = "hallC" /area/ruin/wasteplanet/abandoned_mechbay/commandcontrol - name = "Abandoned Mechbay Command and Control" + name = "Abandoned Exosuit Bay Command and Control" icon_state = "bridge" /area/ruin/wasteplanet/abandoned_mechbay/bay1 - name = "Abandoned Mechbay Upper Hangar" + name = "Abandoned Exosuit Bay Upper Hangar" icon_state = "mechbay" /area/ruin/wasteplanet/abandoned_mechbay/bay2 - name = "Abandoned Mechbay Lower Hangar" + name = "Abandoned Exosuit Bay Lower Hangar" icon_state = "mechbay" /area/ruin/wasteplanet/abandoned_mechbay/crewquarters - name = "Abandoned Mechbay Crew Quarters" + name = "Abandoned Exosuit Bay Crew Quarters" icon_state = "green" /area/ruin/wasteplanet/abandoned_mechbay/mechlab - name = "Abandoned Mech Lab" + name = "Abandoned Exosuit Lab" icon_state = "mechbay" /area/ruin/wasteplanet/abandoned_mechbay/engineering - name = "Abandoned Mechbay Engineering" + name = "Abandoned Exosuit Bay Engineering" icon_state = "engine" //Abandoned Waste Site @@ -43,3 +43,25 @@ /area/ruin/wasteplanet/wasteplanet_radiation/containment name = "Abandoned Waste Containment Vault" icon_state = "disposal" + +//Abandonded shipbreaking yard + +/area/ruin/wasteplanet/wasteplanet_shipbreaking + name = "Abandoned Shipbreaking Yard" + icon_state = "green" + +/area/ruin/wasteplanet/wasteplanet_shipbreaking/bay + name = "Miskilamo Shipbreaking Yard Bay" + icon_state = "engine" + +/area/ruin/wasteplanet/wasteplanet_shipbreaking/canteen + name = "Miskilamo Shipbreaking Yard Canteen" + icon_state = "hallC" + +/area/ruin/wasteplanet/wasteplanet_shipbreaking/dorms + name = "Miskilamo Shipbreaking Yard Dormatory" + icon_state = "bridge" + +/area/ruin/wasteplanet/wasteplanet_shipbreaking/ship + name = "Abandoned Shipbreaking Yard" + icon_state = "red" diff --git a/code/game/area/areas/shuttles.dm b/code/game/area/areas/shuttles.dm deleted file mode 100644 index 6060367ca51b..000000000000 --- a/code/game/area/areas/shuttles.dm +++ /dev/null @@ -1,191 +0,0 @@ - -//These are shuttle areas; all subtypes are only used as teleportation markers, they have no actual function beyond that. -//Multi area shuttles are a thing now, use subtypes! ~ninjanomnom - -/area/shuttle - name = "Shuttle" - requires_power = FALSE - dynamic_lighting = DYNAMIC_LIGHTING_FORCED - has_gravity = STANDARD_GRAVITY - always_unpowered = FALSE - // Loading the same shuttle map at a different time will produce distinct area instances. - area_flags = NONE - icon_state = "shuttle" - flags_1 = CAN_BE_DIRTY_1 - lighting_colour_tube = "#fff0dd" - lighting_colour_bulb = "#ffe1c1" - area_limited_icon_smoothing = TRUE - sound_environment = SOUND_ENVIRONMENT_ROOM - //The mobile port attached to this area - var/obj/docking_port/mobile/mobile_port - - -/area/shuttle/Destroy() - mobile_port = null - . = ..() - -/area/shuttle/PlaceOnTopReact(turf/T, list/new_baseturfs, turf/fake_turf_type, flags) - . = ..() - if(length(new_baseturfs) > 1 || fake_turf_type) - return // More complicated larger changes indicate this isn't a player - if(ispath(new_baseturfs[1], /turf/open/floor/plating) && !(/turf/baseturf_skipover/shuttle in new_baseturfs)) - new_baseturfs.Insert(1, /turf/baseturf_skipover/shuttle) - -/area/shuttle/proc/link_to_shuttle(obj/docking_port/mobile/M) - mobile_port = M - -////////////////////////////Multi-area shuttles//////////////////////////// - -////////////////////////////Syndicate infiltrator//////////////////////////// - -/area/shuttle/syndicate - name = "Syndicate Infiltrator" - ambientsounds = HIGHSEC - -/area/shuttle/syndicate/bridge - name = "Syndicate Infiltrator Control" - -/area/shuttle/syndicate/medical - name = "Syndicate Infiltrator Medbay" - -/area/shuttle/syndicate/armory - name = "Syndicate Infiltrator Armory" - -/area/shuttle/syndicate/eva - name = "Syndicate Infiltrator EVA" - -/area/shuttle/syndicate/hallway - -/area/shuttle/syndicate/airlock - name = "Syndicate Infiltrator Airlock" - -////////////////////////////Pirate Shuttle//////////////////////////// - -/area/shuttle/pirate - name = "Pirate Shuttle" - requires_power = TRUE - -////////////////////////////Bounty Hunter Shuttles//////////////////////////// - -/area/shuttle/hunter - name = "Hunter Shuttle" - dynamic_lighting = DYNAMIC_LIGHTING_DISABLED - -////////////////////////////White Ship//////////////////////////// - -/area/shuttle/abandoned - name = "Abandoned Ship" - requires_power = TRUE - -/area/shuttle/abandoned/bridge - name = "Abandoned Ship Bridge" - -/area/shuttle/abandoned/engine - name = "Abandoned Ship Engine" - -/area/shuttle/abandoned/bar - name = "Abandoned Ship Bar" - -/area/shuttle/abandoned/crew - name = "Abandoned Ship Crew Quarters" - -/area/shuttle/abandoned/cargo - name = "Abandoned Ship Cargo Bay" - -/area/shuttle/abandoned/medbay - name = "Abandoned Ship Medbay" - -/area/shuttle/abandoned/pod - name = "Abandoned Ship Pod" - -/area/shuttle/abandoned/atmospherics - name = "Abandoned Ship atmospherics"//WS station edit - -/area/shuttle/abandoned/coridor - name = "Abandoned Ship coridor"//WS station edit -////////////////////////////Single-area shuttles//////////////////////////// - -/area/shuttle/transit - name = "Hyperspace" - desc = "Weeeeee" - dynamic_lighting = DYNAMIC_LIGHTING_DISABLED - -/area/shuttle/custom - name = "Custom player shuttle" - area_flags = BLOBS_ALLOWED - flags_1 = CAN_BE_DIRTY_1 - -/area/shuttle/custom/powered - name = "Custom Powered player shuttle" - requires_power = FALSE - -/area/shuttle/arrival - name = "Arrival Shuttle" - area_flags = UNIQUE_AREA// SSjob refers to this area for latejoiners - -/area/shuttle/pod_1 - name = "Escape Pod One" - area_flags = BLOBS_ALLOWED - -/area/shuttle/pod_2 - name = "Escape Pod Two" - area_flags = BLOBS_ALLOWED - -/area/shuttle/pod_3 - name = "Escape Pod Three" - area_flags = BLOBS_ALLOWED - -/area/shuttle/pod_4 - name = "Escape Pod Four" - area_flags = BLOBS_ALLOWED - -/area/shuttle/mining - name = "Mining Shuttle" - -/area/shuttle/mining/large - name = "Mining Shuttle" - requires_power = TRUE - -/area/shuttle/labor - name = "Labor Camp Shuttle" - -/area/shuttle/supply - name = "Supply Shuttle" - area_flags = NOTELEPORT - -/area/shuttle/escape - name = "Emergency Shuttle" - area_flags = BLOBS_ALLOWED - flags_1 = CAN_BE_DIRTY_1 - -/area/shuttle/escape/backup - name = "Backup Emergency Shuttle" - -/area/shuttle/escape/luxury - name = "Luxurious Emergency Shuttle" - area_flags = NOTELEPORT - -/area/shuttle/escape/arena - name = "The Arena" - area_flags = NOTELEPORT - -/area/shuttle/escape/meteor - name = "\proper a meteor with engines strapped to it" - -/area/shuttle/transport - name = "Transport Shuttle" - -/area/shuttle/sbc_starfury - name = "SBC Starfury" - -/area/shuttle/sbc_fighter1 - name = "SBC Fighter 1" - -/area/shuttle/sbc_fighter2 - name = "SBC Fighter 2" - -/area/shuttle/sbc_corvette - name = "SBC corvette" - -/area/shuttle/syndicate_scout - name = "Syndicate Scout" diff --git a/code/game/area/ship_areas.dm b/code/game/area/ship_areas.dm index 9732893523b7..b1d47670aa2d 100644 --- a/code/game/area/ship_areas.dm +++ b/code/game/area/ship_areas.dm @@ -46,6 +46,20 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "Test Room" icon_state = "storage" +/area/hyperspace + icon_state = "space" + requires_power = TRUE + always_unpowered = TRUE + dynamic_lighting = DYNAMIC_LIGHTING_DISABLED + power_light = FALSE + power_equip = FALSE + power_environ = FALSE + area_flags = UNIQUE_AREA | CAVES_ALLOWED | MOB_SPAWN_ALLOWED + outdoors = TRUE + ambientsounds = SPACE + flags_1 = CAN_BE_DIRTY_1 + sound_environment = SOUND_AREA_SPACE + //EXTRA /area/asteroid @@ -69,7 +83,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/ship dynamic_lighting = DYNAMIC_LIGHTING_FORCED always_unpowered = FALSE - area_flags = VALID_TERRITORY | BLOBS_ALLOWED // Loading the same shuttle map at a different time will produce distinct area instances. + area_flags = VALID_TERRITORY // Loading the same shuttle map at a different time will produce distinct area instances. icon_state = "shuttle" flags_1 = CAN_BE_DIRTY_1 lighting_colour_tube = "#fff0dd" @@ -474,6 +488,9 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "EVA Storage" icon_state = "eva" +/area/ship/storage/equip + name = "Equipment Room" + /// External Areas /// /area/ship/external name = "External" diff --git a/code/game/atom/atom_orbit.dm b/code/game/atom/atom_orbit.dm new file mode 100644 index 000000000000..2294293bd8b7 --- /dev/null +++ b/code/game/atom/atom_orbit.dm @@ -0,0 +1,33 @@ +/atom + ///Reference to atom being orbited + var/atom/orbit_target + ///The orbiter component, if there's anything orbiting this atom + var/datum/component/orbiter/orbiters + +/** + * Recursive getter method to return a list of all ghosts orbitting this atom + * + * This will work fine without manually passing arguments. + * * processed - The list of atoms we've already convered + * * source - Is this the atom for who we're counting up all the orbiters? + * * ignored_stealthed_admins - If TRUE, don't count admins who are stealthmoded and orbiting this + */ +/atom/proc/get_all_orbiters(list/processed, source = TRUE, ignore_stealthed_admins = TRUE) + var/list/output = list() + if(!processed) + processed = list() + else if(src in processed) + return output + + if(!source) + output += src + + processed += src + for(var/atom/atom_orbiter as anything in orbiters?.orbiters) + output += atom_orbiter.get_all_orbiters(processed, source = FALSE) + return output + +/mob/get_all_orbiters(list/processed, source = TRUE, ignore_stealthed_admins = TRUE) + if(!source && ignore_stealthed_admins && client?.holder?.fakekey) + return list() + return ..() diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 6d9f0df9f2ec..e7c9c19325a6 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -44,6 +44,14 @@ */ var/list/atom_colours + /// Lazylist of all images (hopefully attached to us) to update when we change z levels + /// You will need to manage adding/removing from this yourself, but I'll do the updating for you + var/list/image/update_on_z + + /// Lazylist of all overlays attached to us to update when we change z levels + /// You will need to manage adding/removing from this yourself, but I'll do the updating for you + /// Oh and note, if order of addition is important this WILL break that. so mind yourself + var/list/image/update_overlays_on_z /// a very temporary list of overlays to remove var/list/remove_overlays @@ -67,9 +75,6 @@ ///Economy cost of item in premium vendor var/custom_premium_price - //List of datums orbiting this atom - var/datum/component/orbiter/orbiters - /// Radiation insulation types var/rad_insulation = RAD_NO_INSULATION @@ -146,8 +151,6 @@ /// The current connector overlay appearance. Saved so that it can be cut when necessary. var/connector_overlay - ///Reference to atom being orbited - var/atom/orbit_target ///Default X pixel offset var/base_pixel_x ///Default Y pixel offset @@ -350,66 +353,6 @@ return TRUE return !density -/** - * Is this atom currently located on centcom - * - * Specifically, is it on the z level and within the centcom areas - * - * You can also be in a shuttleshuttle during endgame transit - * - * Used in gamemode to identify mobs who have escaped and for some other areas of the code - * who don't want atoms where they shouldn't be - */ -/atom/proc/onCentCom() - var/turf/T = get_turf(src) - if(!T) - return FALSE - - if(is_reserved_level(T)) - for(var/A in SSshuttle.mobile) - var/obj/docking_port/mobile/M = A - if(M.launch_status == ENDGAME_TRANSIT) - for(var/place in M.shuttle_areas) - var/area/shuttle/shuttle_area = place - if(T in shuttle_area) - return TRUE - - if(!is_centcom_level(T))//if not, don't bother - return FALSE - - //Check for centcom itself - if(istype(T.loc, /area/centcom)) - return TRUE - - //Check for centcom shuttles - for(var/A in SSshuttle.mobile) - var/obj/docking_port/mobile/M = A - if(M.launch_status == ENDGAME_LAUNCHED) - for(var/place in M.shuttle_areas) - var/area/shuttle/shuttle_area = place - if(T in shuttle_area) - return TRUE - -/** - * Is the atom in any of the centcom syndicate areas - * - * Either in the syndie base on centcom, or any of their shuttles - * - * Also used in gamemode code for win conditions - */ -/atom/proc/onSyndieBase() - var/turf/T = get_turf(src) - if(!T) - return FALSE - - if(!is_centcom_level(T))//if not, don't bother - return FALSE - - if(istype(T.loc, /area/shuttle/syndicate) || istype(T.loc, /area/syndicate_mothership)) - return TRUE - - return FALSE - /** * Is the atom in an away mission * @@ -779,15 +722,6 @@ contents_explosion(severity, target) SEND_SIGNAL(src, COMSIG_ATOM_EX_ACT, severity, target) -/** - * React to a hit by a blob objecd - * - * default behaviour is to send the [COMSIG_ATOM_BLOB_ACT] signal - */ -/atom/proc/blob_act(obj/structure/blob/B) - SEND_SIGNAL(src, COMSIG_ATOM_BLOB_ACT, B) - return - /atom/proc/fire_act(exposed_temperature, exposed_volume) SEND_SIGNAL(src, COMSIG_ATOM_FIRE_ACT, exposed_temperature, exposed_volume) return @@ -977,7 +911,7 @@ return TRUE ///Get the best place to dump the items contained in the source storage item? -/atom/proc/get_dumping_location(obj/item/storage/source,mob/user) +/atom/proc/get_dumping_location() return null /** @@ -1265,25 +1199,73 @@ * Must return parent proc ..() in the end if overridden */ /atom/proc/tool_act(mob/living/user, obj/item/I, tool_type) + var/signal_result + + var/list/processing_recipes = list() //List of recipes that can be mutated by sending the signal + signal_result = SEND_SIGNAL(src, COMSIG_ATOM_TOOL_ACT(tool_type), user, I, processing_recipes) + if(processing_recipes.len) + process_recipes(user, I, processing_recipes) + if(QDELETED(I)) + return TRUE switch(tool_type) if(TOOL_CROWBAR) - . |= crowbar_act(user, I) + . = crowbar_act(user, I) if(TOOL_MULTITOOL) - . |= multitool_act(user, I) + . = multitool_act(user, I) if(TOOL_SCREWDRIVER) - . |= screwdriver_act(user, I) + . = screwdriver_act(user, I) if(TOOL_WRENCH) - . |= wrench_act(user, I) + . = wrench_act(user, I) if(TOOL_WIRECUTTER) - . |= wirecutter_act(user, I) + . = wirecutter_act(user, I) if(TOOL_WELDER) - . |= welder_act(user, I) + . = welder_act(user, I) if(TOOL_ANALYZER) - . |= analyzer_act(user, I) - if(. & COMPONENT_BLOCK_TOOL_ATTACK) + . = analyzer_act(user, I) + if(TOOL_DECONSTRUCT) + . |= deconstruct_act(user, I) + if(. || signal_result & COMPONENT_BLOCK_TOOL_ATTACK) //Either the proc or the signal handled the tool's events in some way. return TRUE -//! Tool-specific behavior procs. They send signals, so try to call ..() +/atom/proc/process_recipes(mob/living/user, obj/item/I, list/processing_recipes) + //Only one recipe? use the first + if(processing_recipes.len == 1) + StartProcessingAtom(user, I, processing_recipes[1]) + return + //Otherwise, select one with a radial + ShowProcessingGui(user, I, processing_recipes) + +///Creates the radial and processes the selected option +/atom/proc/ShowProcessingGui(mob/living/user, obj/item/I, list/possible_options) + var/list/choices_to_options = list() //Dict of object name | dict of object processing settings + var/list/choices = list() + + for(var/i in possible_options) + var/list/current_option = i + var/atom/current_option_type = current_option[TOOL_PROCESSING_RESULT] + choices_to_options[initial(current_option_type.name)] = current_option + var/image/option_image = image(icon = initial(current_option_type.icon), icon_state = initial(current_option_type.icon_state)) + choices += list("[initial(current_option_type.name)]" = option_image) + + var/pick = show_radial_menu(user, src, choices, radius = 36, require_near = TRUE) + + StartProcessingAtom(user, I, choices_to_options[pick]) + + +/atom/proc/StartProcessingAtom(mob/living/user, obj/item/I, list/chosen_option) + to_chat(user, "You start working on [src]") + if(I.use_tool(src, user, chosen_option[TOOL_PROCESSING_TIME], volume=50)) + var/atom/atom_to_create = chosen_option[TOOL_PROCESSING_RESULT] + for(var/i = 1 to chosen_option[TOOL_PROCESSING_AMOUNT]) + new atom_to_create(loc) + to_chat(user, "You manage to create [chosen_option[TOOL_PROCESSING_AMOUNT]] [initial(atom_to_create.name)] from [src]") + qdel(src) + return + +/atom/proc/OnCreatedFromProcessing(mob/living/user, obj/item/I, list/chosen_option, atom/original_atom) + return + +//! Tool-specific behavior procs. /// ///Crowbar act @@ -1322,6 +1304,10 @@ /atom/proc/analyzer_act(mob/living/user, obj/item/I) return SEND_SIGNAL(src, COMSIG_ATOM_ANALYSER_ACT, user, I) +///Deconstruct act +/atom/proc/deconstruct_act(mob/living/user, obj/item/I) + return SEND_SIGNAL(src, COMSIG_ATOM_DECONSTRUCT_ACT, user, I) + ///Generate a tag for this atom /atom/proc/GenerateTag() return @@ -1687,7 +1673,20 @@ /// Returns the atom name that should be used on screentip /atom/proc/get_screentip_name(client/hovering_client) - return name + if(ishuman(src)) + var/mob/living/carbon/human/guy = src + var/mob/client_mob = hovering_client.mob + var/datum/guestbook/guestbook = client_mob.mind?.guestbook + if(guestbook) + var/known_name = guestbook.get_known_name(client_mob, guy) + if(known_name) + return known_name + else + return guy.get_visible_name() + else + return guy.real_name + else + return name ///Called whenever a player is spawned on the same turf as this atom. /atom/proc/join_player_here(mob/M) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index beb7cef2718f..79326ab9e2ad 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -772,6 +772,44 @@ . = movement_type movement_type = newval +/** + * Called when a movable changes z-levels. + * + * Arguments: + * * old_turf - The previous turf they were on before. + * * new_turf - The turf they have now entered. + * * same_z_layer - If their old and new z levels are on the same level of plane offsets or not + * * notify_contents - Whether or not to notify the movable's contents that their z-level has changed. NOTE, IF YOU SET THIS, YOU NEED TO MANUALLY SET PLANE OF THE CONTENTS LATER + */ +/atom/movable/proc/on_changed_z_level(turf/old_turf, turf/new_turf, same_z_layer, notify_contents = TRUE) + SHOULD_CALL_PARENT(TRUE) + SEND_SIGNAL(src, COMSIG_MOVABLE_Z_CHANGED, old_turf, new_turf, same_z_layer) + + // If our turfs are on different z "layers", recalc our planes + if(!same_z_layer && !QDELETED(src)) + SET_PLANE(src, PLANE_TO_TRUE(src.plane), new_turf) + // a TON of overlays use planes, and thus require offsets + // so we do this. sucks to suck + update_appearance() + + if(update_on_z) + // I so much wish this could be somewhere else. alas, no. + for(var/image/update in update_on_z) + SET_PLANE(update, PLANE_TO_TRUE(update.plane), new_turf) + if(update_overlays_on_z) + // This EVEN more so + cut_overlay(update_overlays_on_z) + // This even more so + for(var/mutable_appearance/update in update_overlays_on_z) + SET_PLANE(update, PLANE_TO_TRUE(update.plane), new_turf) + add_overlay(update_overlays_on_z) + + if(!notify_contents) + return + + for (var/atom/movable/content as anything in src) // Notify contents of Z-transition. + content.on_changed_z_level(old_turf, new_turf, same_z_layer) + /** * Called whenever an object moves and by mobs when they attempt to move themselves through space * And when an object or action applies a force on src, see [newtonian_move][/atom/movable/proc/newtonian_move] @@ -784,6 +822,9 @@ * * movement_dir - 0 when stopping or any dir when trying to move */ /atom/movable/proc/Process_Spacemove(movement_dir = 0) + if(SEND_SIGNAL(src, COMSIG_MOVABLE_SPACEMOVE, movement_dir) & COMSIG_MOVABLE_STOP_SPACEMOVE) + return TRUE + if(has_gravity(src)) return 1 diff --git a/code/game/gamemodes/clown_ops/bananium_bomb.dm b/code/game/gamemodes/clown_ops/bananium_bomb.dm index 01c270895360..74178f248436 100644 --- a/code/game/gamemodes/clown_ops/bananium_bomb.dm +++ b/code/game/gamemodes/clown_ops/bananium_bomb.dm @@ -43,11 +43,6 @@ ADD_TRAIT(C, TRAIT_NODROP, CLOWN_NUKE_TRAIT) H.equip_to_slot_or_del(C, ITEM_SLOT_ICLOTHING) - if(!H.shoes || H.dropItemToGround(H.shoes)) - C = new /obj/item/clothing/shoes/clown_shoes(H) - ADD_TRAIT(C, TRAIT_NODROP, CLOWN_NUKE_TRAIT) - H.equip_to_slot_or_del(C, ITEM_SLOT_FEET) - if(!H.wear_mask || H.dropItemToGround(H.wear_mask)) C = new /obj/item/clothing/mask/gas/clown_hat(H) ADD_TRAIT(C, TRAIT_NODROP, CLOWN_NUKE_TRAIT) diff --git a/code/game/gamemodes/clown_ops/clown_ops.dm b/code/game/gamemodes/clown_ops/clown_ops.dm index 74e391ef5510..e3f7eea12c52 100644 --- a/code/game/gamemodes/clown_ops/clown_ops.dm +++ b/code/game/gamemodes/clown_ops/clown_ops.dm @@ -29,16 +29,14 @@ /datum/outfit/syndicate/clownop name = "Clown Operative - Basic" uniform = /obj/item/clothing/under/syndicate - shoes = /obj/item/clothing/shoes/clown_shoes/combat mask = /obj/item/clothing/mask/gas/clown_hat gloves = /obj/item/clothing/gloves/combat - back = /obj/item/storage/backpack/clown ears = /obj/item/radio/headset/syndicate/alt l_pocket = /obj/item/pinpointer/nuke/syndicate r_pocket = /obj/item/bikehorn id = /obj/item/card/id/syndicate backpack_contents = list(/obj/item/storage/box/survival/syndie=1,\ - /obj/item/kitchen/knife/combat/survival, + /obj/item/melee/knife/survival, /obj/item/dnainjector/clumsymut, //in case you want to be clumsy for the memes /obj/item/reagent_containers/spray/waterflower/lube) implants = list(/obj/item/implant/sad_trombone) diff --git a/code/game/gamemodes/clown_ops/clown_weapons.dm b/code/game/gamemodes/clown_ops/clown_weapons.dm index 3064a52a48ad..a3226e864aa7 100644 --- a/code/game/gamemodes/clown_ops/clown_weapons.dm +++ b/code/game/gamemodes/clown_ops/clown_weapons.dm @@ -10,48 +10,6 @@ volume = 30 list_reagents = list(/datum/reagent/lube = 30) -//COMBAT CLOWN SHOES -//Clown shoes with combat stats and noslip. Of course they still squeak. -/obj/item/clothing/shoes/clown_shoes/combat - name = "combat clown shoes" - desc = "advanced clown shoes that protect the wearer and render them nearly immune to slipping on their own peels. They also squeak at 100% capacity." - clothing_flags = NOSLIP - slowdown = SHOES_SLOWDOWN - armor = list("melee" = 25, "bullet" = 25, "laser" = 25, "energy" = 25, "bomb" = 50, "bio" = 10, "rad" = 0, "fire" = 70, "acid" = 50) - strip_delay = 70 - resistance_flags = NONE - permeability_coefficient = 0.05 - pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes - -//The super annoying version -/obj/item/clothing/shoes/clown_shoes/banana_shoes/combat - name = "mk-honk combat shoes" - desc = "The culmination of years of clown combat research, these shoes leave a trail of chaos in their wake. They will slowly recharge themselves over time, or can be manually charged with bananium." - slowdown = SHOES_SLOWDOWN - armor = list("melee" = 25, "bullet" = 25, "laser" = 25, "energy" = 25, "bomb" = 50, "bio" = 10, "rad" = 0, "fire" = 70, "acid" = 50) - strip_delay = 70 - resistance_flags = NONE - permeability_coefficient = 0.05 - pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes - always_noslip = TRUE - var/max_recharge = 3000 //30 peels worth - var/recharge_rate = 34 //about 1/3 of a peel per tick - -/obj/item/clothing/shoes/clown_shoes/banana_shoes/combat/Initialize() - . = ..() - var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container) - bananium.insert_amount_mat(max_recharge, /datum/material/hellstone) - START_PROCESSING(SSobj, src) - -/obj/item/clothing/shoes/clown_shoes/banana_shoes/combat/process() - var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container) - var/bananium_amount = bananium.get_material_amount(/datum/material/hellstone) - if(bananium_amount < max_recharge) - bananium.insert_amount_mat(min(recharge_rate, max_recharge - bananium_amount), /datum/material/hellstone) - -/obj/item/clothing/shoes/clown_shoes/banana_shoes/combat/attack_self(mob/user) - ui_action_click(user) - //BANANIUM SWORD /obj/item/melee/transforming/energy/sword/bananium diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm deleted file mode 100644 index f7ce7b036eb5..000000000000 --- a/code/game/gamemodes/cult/cult.dm +++ /dev/null @@ -1,182 +0,0 @@ -#define CULT_SCALING_COEFFICIENT 9.3 //Roughly one new cultist at roundstart per this many players - -/datum/game_mode - var/list/datum/mind/cult = list() - -/proc/iscultist(mob/living/M) - return M.mind?.has_antag_datum(/datum/antagonist/cult) - -/datum/team/cult/proc/is_sacrifice_target(datum/mind/mind) - for(var/datum/objective/sacrifice/sac_objective in objectives) - if(mind == sac_objective.target) - return TRUE - return FALSE - -/proc/is_convertable_to_cult(mob/living/M,datum/team/cult/specific_cult) - if(!istype(M)) - return FALSE - if(M.mind) - if(specific_cult && specific_cult.is_sacrifice_target(M.mind)) - return FALSE - if(M.mind.enslaved_to && !iscultist(M.mind.enslaved_to)) - return FALSE - if(M.mind.unconvertable) - return FALSE - else - return FALSE - if(HAS_TRAIT(M, TRAIT_MINDSHIELD) || issilicon(M) || isbot(M) || isdrone(M) || !M.client) - return FALSE //can't convert machines, shielded, or braindead - return TRUE - -/datum/game_mode/cult - name = "cult" - config_tag = "cult" - report_type = "cult" - antag_flag = ROLE_CULTIST - false_report_weight = 10 - restricted_jobs = list("Chaplain","AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Brig Physician", "SolGov Representative", "Prisoner") //WS edit - Brig Physicians, SolGov Rep - protected_jobs = list() - required_players = 29 - required_enemies = 4 - recommended_enemies = 4 - enemy_minimum_age = 14 - - announce_span = "cult" - announce_text = "Some crew members are trying to start a cult to Nar'Sie!\n\ - Cultists: Carry out Nar'Sie's will.\n\ - Crew: Prevent the cult from expanding and drive it out." - - title_icon = "cult" - - var/finished = 0 - - var/acolytes_needed = 10 //for the survive objective - var/acolytes_survived = 0 - - var/list/cultists_to_cult = list() //the cultists we'll convert - - var/datum/team/cult/main_cult - - -/datum/game_mode/cult/pre_setup() - if(CONFIG_GET(flag/protect_roles_from_antagonist)) - restricted_jobs += protected_jobs - - if(CONFIG_GET(flag/protect_assistant_from_antagonist)) - restricted_jobs += "Assistant" - - //cult scaling goes here - recommended_enemies = 1 + round(num_players()/CULT_SCALING_COEFFICIENT) - var/remaining = (num_players() % CULT_SCALING_COEFFICIENT) * 10 //Basically the % of how close the population is toward adding another cultis - if(prob(remaining)) - recommended_enemies++ - - - for(var/cultists_number = 1 to recommended_enemies) - if(!antag_candidates.len) - break - var/datum/mind/cultist = antag_pick(antag_candidates) - antag_candidates -= cultist - cultists_to_cult += cultist - cultist.special_role = ROLE_CULTIST - cultist.restricted_roles = restricted_jobs - log_game("[key_name(cultist)] has been selected as a cultist") - - if(cultists_to_cult.len>=required_enemies) - for(var/antag in cultists_to_cult) - GLOB.pre_setup_antags += antag - return TRUE - else - setup_error = "Not enough cultist candidates" - return FALSE - - -/datum/game_mode/cult/post_setup() - main_cult = new - - for(var/datum/mind/cult_mind in cultists_to_cult) - add_cultist(cult_mind, 0, equip=TRUE, cult_team = main_cult) - GLOB.pre_setup_antags -= cult_mind - - main_cult.setup_objectives() //Wait until all cultists are assigned to make sure none will be chosen as sacrifice. - - . = ..() - -/datum/game_mode/proc/add_cultist(datum/mind/cult_mind, stun , equip = FALSE, datum/team/cult/cult_team = null) - if (!istype(cult_mind)) - return FALSE - - var/datum/antagonist/cult/new_cultist = new() - new_cultist.give_equipment = equip - - if(cult_mind.add_antag_datum(new_cultist,cult_team)) - if(stun) - cult_mind.current.Unconscious(100) - return TRUE - -/datum/game_mode/proc/remove_cultist(datum/mind/cult_mind, silent, stun) - if(cult_mind.current) - var/datum/antagonist/cult/cult_datum = cult_mind.has_antag_datum(/datum/antagonist/cult) - if(!cult_datum) - return FALSE - cult_datum.silent = silent - cult_mind.remove_antag_datum(cult_datum) - if(stun) - cult_mind.current.Unconscious(100) - return TRUE - -/datum/game_mode/cult/proc/check_cult_victory() - return main_cult.check_cult_victory() - - -/datum/game_mode/cult/set_round_result() - ..() - if(check_cult_victory()) - SSticker.mode_result = "win - cult win" - SSticker.news_report = CULT_SUMMON - else - SSticker.mode_result = "loss - staff stopped the cult" - SSticker.news_report = CULT_FAILURE - -/datum/game_mode/cult/proc/check_survive() - var/acolytes_survived = 0 - for(var/datum/mind/cult_mind in cult) - if (cult_mind.current && cult_mind.current.stat != DEAD) - if(cult_mind.current.onCentCom() || cult_mind.current.onSyndieBase()) - acolytes_survived++ - if(acolytes_survived>=acolytes_needed) - return 0 - else - return 1 - - -/datum/game_mode/cult/generate_report() - return "Some stations in your sector have reported evidence of blood sacrifice and strange magic. Ties to the Wizards' Federation have been proven not to exist, and many employees \ - have disappeared; even Central Command employees light-years away have felt strange presences and at times hysterical compulsions. Interrogations point towards this being the work of \ - the cult of Nar'Sie. If evidence of this cult is discovered aboard your station, extreme caution and extreme vigilance must be taken going forward, and all resources should be \ - devoted to stopping this cult. Note that holy water seems to weaken and eventually return the minds of cultists that ingest it, and mindshield implants will prevent conversion \ - altogether." - - - -/datum/game_mode/cult/generate_credit_text() - var/list/round_credits = list() - var/len_before_addition - - round_credits += "

The Cult of Nar'Sie:

" - len_before_addition = round_credits.len - for(var/datum/mind/cultist in cult) - round_credits += "

[cultist.name] as a cult fanatic

" - - var/datum/objective/eldergod/summon_objective = locate() in main_cult.objectives - if(summon_objective && summon_objective.summoned) - round_credits += "

Nar'Sie as the eldritch abomination

" - - if(len_before_addition == round_credits.len) - round_credits += list("

The cultists have learned the danger of eldritch magic!

", "

They all disappeared!

") - round_credits += "
" - - round_credits += ..() - return round_credits - -#undef CULT_SCALING_COEFFICIENT diff --git a/code/game/gamemodes/devil/devil_agent/devil_agent.dm b/code/game/gamemodes/devil/devil_agent/devil_agent.dm deleted file mode 100644 index c8fb62faba09..000000000000 --- a/code/game/gamemodes/devil/devil_agent/devil_agent.dm +++ /dev/null @@ -1,44 +0,0 @@ -/datum/game_mode/devil/devil_agents - name = "Devil Agents" - config_tag = "devil_agents" - required_players = 25 - required_enemies = 3 - recommended_enemies = 8 - reroll_friendly = 0 - - traitors_possible = 10 //hard limit on traitors if scaling is turned off - num_modifier = 4 - objective_count = 2 - - var/list/devil_target_list = list() //will update to be a child of internal affairs when bothered - var/list/devil_late_joining_list = list() - minimum_devils = 3 - - announce_text = "There are devil agents onboard the station, trying to outbid each other!\n\ - + Devils: Purchase souls and interfere with your rivals!\n\ - + Crew: Resist the lure of sin and remain pure!" - -/datum/game_mode/devil/devil_agents/post_setup() - var/i = 0 - for(var/datum/mind/devil in devils) - i++ - if(i + 1 > devils.len) - i = 0 - devil_target_list[devil] = devils[i + 1] - ..() - -/datum/game_mode/devil/devil_agents/add_devil_objectives(datum/mind/devil_mind, quantity) - ..(devil_mind, quantity - give_outsell_objective(devil_mind)) - -/datum/game_mode/devil/devil_agents/proc/give_outsell_objective(datum/mind/devil) - //If you override this method, have it return the number of objectives added. - if(devil_target_list.len && devil_target_list[devil]) // Is a double agent - var/datum/mind/target_mind = devil_target_list[devil] - var/datum/antagonist/devil/D = target_mind.has_antag_datum(/datum/antagonist/devil) - var/datum/objective/devil/outsell/outsellobjective = new - outsellobjective.owner = devil - outsellobjective.target = target_mind - outsellobjective.update_explanation_text() - D.objectives += outsellobjective - return 1 - return 0 diff --git a/code/game/gamemodes/devil/devil_game_mode.dm b/code/game/gamemodes/devil/devil_game_mode.dm deleted file mode 100644 index 9d002f4a029d..000000000000 --- a/code/game/gamemodes/devil/devil_game_mode.dm +++ /dev/null @@ -1,106 +0,0 @@ -/datum/game_mode/devil - name = "devil" - config_tag = "devil" - report_type = "devil" - antag_flag = ROLE_DEVIL - false_report_weight = 1 - protected_jobs = list("Prisoner", "Lawyer", "Curator", "Chaplain", "Head of Security", "Captain", "AI") - required_players = 0 - required_enemies = 1 - recommended_enemies = 4 - reroll_friendly = 1 - enemy_minimum_age = 0 - title_icon = "devil" - - var/traitors_possible = 4 //hard limit on devils if scaling is turned off - var/num_modifier = 0 // Used for gamemodes, that are a child of traitor, that need more than the usual. - var/objective_count = 2 - var/minimum_devils = 1 - - announce_text = "There are devils onboard the station!\n\ - + Devils: Purchase souls and tempt the crew to sin!\n\ - + Crew: Resist the lure of sin and remain pure!" - -/datum/game_mode/devil/pre_setup() - if(CONFIG_GET(flag/protect_roles_from_antagonist)) - restricted_jobs += protected_jobs - if(CONFIG_GET(flag/protect_assistant_from_antagonist)) - restricted_jobs += "Assistant" - - var/num_devils = 1 - - var/tsc = CONFIG_GET(number/traitor_scaling_coeff) - if(tsc) - num_devils = max(minimum_devils, min(round(num_players() / (tsc * 3))+ 2 + num_modifier, round(num_players() / (tsc * 1.5)) + num_modifier)) - else - num_devils = max(minimum_devils, min(num_players(), traitors_possible)) - - for(var/j = 0, j < num_devils, j++) - if (!antag_candidates.len) - break - var/datum/mind/devil = antag_pick(antag_candidates) - devils += devil - devil.special_role = traitor_name - devil.restricted_roles = restricted_jobs - - log_game("[key_name(devil)] has been selected as a [traitor_name]") - antag_candidates.Remove(devil) - - if(devils.len < required_enemies) - setup_error = "Not enough devil candidates" - return FALSE - for(var/antag in devils) - GLOB.pre_setup_antags += antag - return TRUE - - -/datum/game_mode/devil/post_setup() - for(var/datum/mind/devil in devils) - post_setup_finalize(devil) - ..() - return TRUE - -/datum/game_mode/devil/generate_report() - return "Infernal creatures have been seen nearby offering great boons in exchange for souls. This is considered theft against Nanotrasen, as all employment contracts contain a lien on the \ - employee's soul. If anyone sells their soul in error, contact an attorney to overrule the sale. Be warned that if the devil purchases enough souls, a gateway to hell may open." - -/datum/game_mode/devil/proc/post_setup_finalize(datum/mind/devil) - add_devil(devil.current, ascendable = TRUE) //Devil gamemode devils are ascendable. - GLOB.pre_setup_antags -= devil - add_devil_objectives(devil,2) - -/proc/is_devil(mob/living/M) - return M.mind?.has_antag_datum(/datum/antagonist/devil) - -/proc/add_devil(mob/living/L, ascendable = FALSE) - if(!L || !L.mind) - return FALSE - var/datum/antagonist/devil/devil_datum = L.mind.add_antag_datum(/datum/antagonist/devil) - devil_datum.ascendable = ascendable - return devil_datum - -/proc/remove_devil(mob/living/L) - if(!L || !L.mind) - return FALSE - var/datum/antagonist/devil_datum = L.mind.has_antag_datum(/datum/antagonist/devil) - devil_datum.on_removal() - return TRUE - -/datum/game_mode/devil/generate_credit_text() - var/list/round_credits = list() - var/len_before_addition - - round_credits += "

The Tempting Devils:

" - len_before_addition = round_credits.len - var/datum/antagonist/devil/devil_info - for(var/datum/mind/devil in devils) - devil_info = devil.has_antag_datum(/datum/antagonist/devil) - if(devil_info) // This should never fail, but better to be sure - round_credits += "

[devil_info.truename] in the form of [devil.name]

" - devil_info = null - if(len_before_addition == round_credits.len) - round_credits += list("

The devils were all utterly destroyed!

", "

The love of Space Jesus shines through!

") - round_credits += "
" - - round_credits += ..() - return round_credits diff --git a/code/game/gamemodes/devil/game_mode.dm b/code/game/gamemodes/devil/game_mode.dm deleted file mode 100644 index f91b863483c5..000000000000 --- a/code/game/gamemodes/devil/game_mode.dm +++ /dev/null @@ -1,26 +0,0 @@ -/datum/game_mode - var/list/datum/mind/devils = list() - var/devil_ascended = 0 // Number of arch devils on station - -/datum/game_mode/proc/add_devil_objectives(datum/mind/devil_mind, quantity) - var/list/validtypes = list(/datum/objective/devil/soulquantity, /datum/objective/devil/soulquality, /datum/objective/devil/sintouch, /datum/objective/devil/buy_target) - var/datum/antagonist/devil/D = devil_mind.has_antag_datum(/datum/antagonist/devil) - for(var/i = 1 to quantity) - var/type = pick(validtypes) - var/datum/objective/devil/objective = new type(null) - objective.owner = devil_mind - D.objectives += objective - if(!istype(objective, /datum/objective/devil/buy_target)) - validtypes -= type //prevent duplicate objectives, EXCEPT for buy_target. - else - objective.find_target() - -/datum/game_mode/proc/update_soulless_icons_added(datum/mind/soulless_mind) - var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_SOULLESS] - hud.join_hud(soulless_mind.current) - set_antag_hud(soulless_mind.current, "soulless") - -/datum/game_mode/proc/update_soulless_icons_removed(datum/mind/soulless_mind) - var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_SOULLESS] - hud.leave_hud(soulless_mind.current) - set_antag_hud(soulless_mind.current, null) diff --git a/code/game/gamemodes/devil/objectives.dm b/code/game/gamemodes/devil/objectives.dm deleted file mode 100644 index f3d5ce575f85..000000000000 --- a/code/game/gamemodes/devil/objectives.dm +++ /dev/null @@ -1,113 +0,0 @@ -/datum/objective/devil - -/datum/objective/devil/soulquantity - explanation_text = "You shouldn't see this text. Error:DEVIL1" - target_amount = 4 - -/datum/objective/devil/soulquantity/New() - target_amount = pick(6,7,8) - update_explanation_text() - -/datum/objective/devil/soulquantity/update_explanation_text() - explanation_text = "Purchase, and retain control over at least [target_amount] souls." - -/datum/objective/devil/soulquantity/check_completion() - var/count = 0 - var/datum/antagonist/devil/devilDatum = owner.has_antag_datum(/datum/antagonist/devil) - var/list/souls = devilDatum.soulsOwned - for(var/S in souls) //Just a sanity check. - var/datum/mind/L = S - if(L.soulOwner == owner) - count++ - return count >= target_amount - - - -/datum/objective/devil/soulquality - explanation_text = "You shouldn't see this text. Error:DEVIL2" - var/contractType - var/contractName - -/datum/objective/devil/soulquality/New() - contractType = pick(CONTRACT_POWER, CONTRACT_WEALTH, CONTRACT_PRESTIGE, CONTRACT_MAGIC, CONTRACT_REVIVE, CONTRACT_KNOWLEDGE/*, CONTRACT_UNWILLING*/) - target_amount = pick(1,2) - switch(contractType) - if(CONTRACT_POWER) - contractName = "for power" - if(CONTRACT_WEALTH) - contractName = "for wealth" - if(CONTRACT_PRESTIGE) - contractName = "for prestige" - if(CONTRACT_MAGIC) - contractName = "for magic" - if(CONTRACT_REVIVE) - contractName = "of revival" - if(CONTRACT_KNOWLEDGE) - contractName = "for knowledge" - update_explanation_text() - -/datum/objective/devil/soulquality/update_explanation_text() - explanation_text = "Have mortals sign at least [target_amount] contracts [contractName]" - -/datum/objective/devil/soulquality/check_completion() - var/count = 0 - var/datum/antagonist/devil/devilDatum = owner.has_antag_datum(/datum/antagonist/devil) - var/list/souls = devilDatum.soulsOwned - for(var/S in souls) - var/datum/mind/L = S - if(!L.owns_soul() && L.damnation_type == contractType) - count++ - return count>=target_amount - - - -/datum/objective/devil/sintouch - explanation_text = "You shouldn't see this text. Error:DEVIL3" - -/datum/objective/devil/sintouch/New() - target_amount = pick(4,5) - explanation_text = "Ensure at least [target_amount] mortals are sintouched." - -/datum/objective/devil/sintouch/check_completion() - var/list/touched = get_antag_minds(/datum/antagonist/sintouched) - return touched.len >= target_amount - - -/datum/objective/devil/buy_target - explanation_text = "You shouldn't see this text. Error:DEVIL4" - -/datum/objective/devil/buy_target/update_explanation_text() - if(target) - explanation_text = "Purchase and retain the soul of [target.name], the [target.assigned_role]." - else - explanation_text = "Free objective." - -/datum/objective/devil/buy_target/check_completion() - return target.soulOwner == owner - - -/datum/objective/devil/outsell - explanation_text = "You shouldn't see this text. Error:DEVIL5" - -/datum/objective/devil/outsell/New() - -/datum/objective/devil/outsell/update_explanation_text() - var/datum/antagonist/devil/opponent = target.has_antag_datum(/datum/antagonist/devil) - explanation_text = "Purchase and retain control over more souls than [opponent.truename], known to mortals as [target.name], the [target.assigned_role]." - -/datum/objective/devil/outsell/check_completion() - var/selfcount = 0 - var/datum/antagonist/devil/devilDatum = owner.has_antag_datum(/datum/antagonist/devil) - var/list/souls = devilDatum.soulsOwned - for(var/S in souls) - var/datum/mind/L = S - if(L.soulOwner == owner) - selfcount++ - var/targetcount = 0 - devilDatum = target.has_antag_datum(/datum/antagonist/devil) - souls = devilDatum.soulsOwned - for(var/S in souls) - var/datum/mind/L = S - if(L.soulOwner == target) - targetcount++ - return selfcount > targetcount diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets.dm b/code/game/gamemodes/dynamic/dynamic_rulesets.dm index 1e6a2da4d867..7163dd0ca54e 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets.dm @@ -35,7 +35,7 @@ var/list/enemy_roles = list() /// If enemy_roles was set, this is the amount of enemy job workers needed per threat_level range (0-10,10-20,etc) IMPORTANT: DOES NOT WORK ON ROUNDSTART RULESETS. var/required_enemies = list(1,1,0,0,0,0,0,0,0,0) - /// The rule needs this many candidates (post-trimming) to be executed (example: Cult needs 4 players at round start) + /// The rule needs this many candidates (post-trimming) to be executed var/required_candidates = 0 /// 1 -> 9, probability for this rule to be picked against other rules var/weight = 5 diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm index 613182cea211..a0166efb556c 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm @@ -335,29 +335,6 @@ else return ..() -////////////////////////////////////////////// -// // -// BLOB (GHOST) // -// // -////////////////////////////////////////////// - -/datum/dynamic_ruleset/midround/from_ghosts/blob - name = "Blob" - antag_datum = /datum/antagonist/blob - antag_flag = ROLE_BLOB - enemy_roles = list("Security Officer", "Detective", "Head of Security", "Captain") - required_enemies = list(2,2,1,1,1,1,1,0,0,0) - required_candidates = 1 - weight = 4 - cost = 10 - requirements = list(101,101,101,80,60,50,30,20,10,10) - high_population_requirement = 50 - repeatable = TRUE - -/datum/dynamic_ruleset/midround/from_ghosts/blob/generate_ruleset_body(mob/applicant) - var/body = applicant.become_overmind() - return body - ////////////////////////////////////////////// // // // XENOMORPH (GHOST) // diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm index 8c8fe19d0a97..70d9c8405204 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm @@ -191,65 +191,6 @@ M.add_antag_datum(new antag_datum()) return TRUE -////////////////////////////////////////////// -// // -// BLOOD CULT // -// // -////////////////////////////////////////////// - -/datum/dynamic_ruleset/roundstart/bloodcult - name = "Blood Cult" - antag_flag = ROLE_CULTIST - antag_datum = /datum/antagonist/cult - minimum_required_age = 14 - restricted_roles = list("AI", "Cyborg", "Prisoner", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Chaplain", "Head of Personnel", "Research Director", "Chief Medical Officer", "Chief Engineer", "SolGov Representative") - required_candidates = 2 - weight = 3 - cost = 35 - requirements = list(100,90,80,60,40,30,10,10,10,10) - high_population_requirement = 10 - flags = HIGHLANDER_RULESET - antag_cap = list(2,2,2,3,3,4,4,4,4,4) - var/datum/team/cult/main_cult - -/datum/dynamic_ruleset/roundstart/bloodcult/ready(forced = FALSE) - required_candidates = antag_cap[indice_pop] - . = ..() - -/datum/dynamic_ruleset/roundstart/bloodcult/pre_execute() - . = ..() - var/cultists = antag_cap[indice_pop] - mode.antags_rolled += cultists - for(var/cultists_number = 1 to cultists) - if(candidates.len <= 0) - break - var/mob/M = pick_n_take(candidates) - assigned += M.mind - M.mind.special_role = ROLE_CULTIST - M.mind.restricted_roles = restricted_roles - GLOB.pre_setup_antags += M.mind - return TRUE - -/datum/dynamic_ruleset/roundstart/bloodcult/execute() - main_cult = new - for(var/datum/mind/M in assigned) - var/datum/antagonist/cult/new_cultist = new antag_datum() - new_cultist.cult_team = main_cult - new_cultist.give_equipment = TRUE - M.add_antag_datum(new_cultist) - GLOB.pre_setup_antags -= M - main_cult.setup_objectives() - return TRUE - -/datum/dynamic_ruleset/roundstart/bloodcult/round_result() - ..() - if(main_cult.check_cult_victory()) - SSticker.mode_result = "win - cult win" - SSticker.news_report = CULT_SUMMON - else - SSticker.mode_result = "loss - staff stopped the cult" - SSticker.news_report = CULT_FAILURE - ////////////////////////////////////////////// // // // NUCLEAR OPERATIVES // @@ -382,93 +323,3 @@ for(var/datum/mind/V in assigned) V.assigned_role = "Clown Operative" V.special_role = "Clown Operative" - -////////////////////////////////////////////// -// // -// DEVIL // -// // -////////////////////////////////////////////// - -/datum/dynamic_ruleset/roundstart/devil - name = "Devil" - antag_flag = ROLE_DEVIL - antag_datum = /datum/antagonist/devil - restricted_roles = list("Lawyer", "Curator", "Chaplain", "Prisoner", "Head of Security", "Captain", "AI") - required_candidates = 1 - weight = 3 - cost = 0 - requirements = list(101,101,101,101,101,101,101,101,101,101) - high_population_requirement = 101 - antag_cap = list(1,1,1,2,2,2,3,3,3,4) - -/datum/dynamic_ruleset/roundstart/devil/pre_execute() - . = ..() - var/num_devils = antag_cap[indice_pop] - mode.antags_rolled += num_devils - - for(var/j = 0, j < num_devils, j++) - if (!candidates.len) - break - var/mob/devil = pick_n_take(candidates) - assigned += devil.mind - devil.mind.special_role = ROLE_DEVIL - devil.mind.restricted_roles = restricted_roles - GLOB.pre_setup_antags += devil.mind - - log_game("[key_name(devil)] has been selected as a devil") - return TRUE - -/datum/dynamic_ruleset/roundstart/devil/execute() - for(var/datum/mind/devil in assigned) - add_devil(devil.current, ascendable = TRUE) - GLOB.pre_setup_antags -= devil - add_devil_objectives(devil,2) - return TRUE - -/datum/dynamic_ruleset/roundstart/devil/proc/add_devil_objectives(datum/mind/devil_mind, quantity) - var/list/validtypes = list(/datum/objective/devil/soulquantity, /datum/objective/devil/soulquality, /datum/objective/devil/sintouch, /datum/objective/devil/buy_target) - var/datum/antagonist/devil/D = devil_mind.has_antag_datum(/datum/antagonist/devil) - for(var/i = 1 to quantity) - var/type = pick(validtypes) - var/datum/objective/devil/objective = new type(null) - objective.owner = devil_mind - D.objectives += objective - if(!istype(objective, /datum/objective/devil/buy_target)) - validtypes -= type - else - objective.find_target() - -////////////////////////////////////////////// -// // -// METEOR // -// // -////////////////////////////////////////////// - -/datum/dynamic_ruleset/roundstart/meteor - name = "Meteor" - persistent = TRUE - required_candidates = 0 - weight = 3 - cost = 0 - requirements = list(101,101,101,101,101,101,101,101,101,101) - high_population_requirement = 101 - var/meteordelay = 2000 - var/nometeors = 0 - var/rampupdelta = 5 - -/datum/dynamic_ruleset/roundstart/meteor/rule_process() - if(nometeors || meteordelay > world.time - SSticker.round_start_time) - return - - var/list/wavetype = GLOB.meteors_normal - var/meteorminutes = (world.time - SSticker.round_start_time - meteordelay) / 10 / 60 - - if (prob(meteorminutes)) - wavetype = GLOB.meteors_threatening - - if (prob(meteorminutes/2)) - wavetype = GLOB.meteors_catastrophic - - var/ramp_up_final = clamp(round(meteorminutes/rampupdelta), 1, 10) - - spawn_meteors(ramp_up_final, wavetype) diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index 56f873a50bd1..7db8207c9d71 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -47,11 +47,10 @@ for(var/area/A in GLOB.sortedAreas) if(!A.requires_power || A.always_unpowered) continue - if(!istype(A, /area/shuttle)) - A.power_light = TRUE - A.power_equip = TRUE - A.power_environ = TRUE - A.power_change() + A.power_light = TRUE + A.power_equip = TRUE + A.power_environ = TRUE + A.power_change() /proc/power_restore_quick() priority_announce("All SMESs have been recharged. We apologize for the inconvenience.", "Power Systems Nominal", 'sound/ai/poweron.ogg') diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 391ad852664f..00bc1bc95e13 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -418,9 +418,6 @@ return max(0, enemy_minimum_age - C.player_age) -/datum/game_mode/proc/remove_antag_for_borging(datum/mind/newborgie) - SSticker.mode.remove_cultist(newborgie, 0, 0) - /datum/game_mode/proc/generate_station_goals() var/list/possible = list() for(var/T in subtypesof(/datum/station_goal)) diff --git a/code/game/gamemodes/meteor/meteor.dm b/code/game/gamemodes/meteor/meteor.dm deleted file mode 100644 index 9149f5da35f6..000000000000 --- a/code/game/gamemodes/meteor/meteor.dm +++ /dev/null @@ -1,61 +0,0 @@ -/datum/game_mode/meteor - name = "meteor" - config_tag = "meteor" - report_type = "meteor" - false_report_weight = 1 - var/meteordelay = 2000 - var/nometeors = 0 - var/rampupdelta = 5 - required_players = 0 - - announce_span = "danger" - announce_text = "A major meteor shower is bombarding the station! The crew needs to evacuate or survive the onslaught." - - title_icon = "meteor" - -/datum/game_mode/meteor/process() - if(nometeors || meteordelay > world.time - SSticker.round_start_time) - return - - var/list/wavetype = GLOB.meteors_normal - var/meteorminutes = (world.time - SSticker.round_start_time - meteordelay) / 10 / 60 - - - if (prob(meteorminutes)) - wavetype = GLOB.meteors_threatening - - if (prob(meteorminutes/2)) - wavetype = GLOB.meteors_catastrophic - - var/ramp_up_final = clamp(round(meteorminutes/rampupdelta), 1, 10) - - spawn_meteors(ramp_up_final, wavetype) - - -/datum/game_mode/meteor/special_report() - var/survivors = 0 - var/list/survivor_list = list() - - for(var/mob/living/player in GLOB.player_list) - if(player.stat != DEAD) - ++survivors - - if(player.onCentCom()) - survivor_list += "[player.real_name] escaped to the safety of CentCom." - else if(player.onSyndieBase()) - survivor_list += "[player.real_name] escaped to the (relative) safety of Syndicate Space." - else - survivor_list += "[player.real_name] survived but is stranded without any hope of rescue." - - if(survivors) - return "
The following survived the meteor storm:
[survivor_list.Join("
")]
" - else - return "
Nobody survived the meteor storm!
" - -/datum/game_mode/meteor/set_round_result() - ..() - SSticker.mode_result = "end - evacuation" - -/datum/game_mode/meteor/generate_report() - return "[pick("Asteroids have", "Meteors have", "Large rocks have", "Stellar minerals have", "Space hail has", "Debris has")] been detected near your station, and a collision is possible, \ - though unlikely. Be prepared for largescale impacts and destruction. Please note that the debris will prevent the escape shuttle from arriving quickly." diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 85ab6ee64a14..db73b7b797b9 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -118,9 +118,9 @@ 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) + /obj/item/melee/knife/survival) var/tc = 25 var/command_radio = FALSE @@ -165,11 +165,11 @@ 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/kitchen/knife/combat/survival) + /obj/item/gun/ballistic/automatic/pistol/ringneck=1,\ + /obj/item/melee/knife/survival) /datum/game_mode/nuclear/generate_credit_text() diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 65e161f2176b..ec74c51acc95 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -58,18 +58,11 @@ GLOBAL_LIST_EMPTY(objectives) /datum/objective/proc/considered_escaped(datum/mind/M) if(!considered_alive(M)) return FALSE - if(considered_exiled(M)) - return FALSE - if(M.force_escaped) - return TRUE - if(SSticker.force_ending || SSticker.mode.station_was_nuked) // Just let them win. + if(SSticker.force_ending) // Just let them win. return TRUE if(SSshuttle.jump_mode != BS_JUMP_COMPLETED) return FALSE - var/turf/location = get_turf(M.current) - if(!location || istype(location, /turf/open/floor/mineral/plastitanium/red/brig)) // Fails if they are in the shuttle brig - return FALSE - return location.onCentCom() || location.onSyndieBase() + return TRUE /datum/objective/proc/check_completion() return completed @@ -233,7 +226,7 @@ GLOBAL_LIST_EMPTY(objectives) ..() /datum/objective/maroon/check_completion() - return !target || !considered_alive(target) || (!target.current.onCentCom() && !target.current.onSyndieBase()) + return !target || !considered_alive(target) /datum/objective/maroon/update_explanation_text() if(target && target.current) @@ -334,7 +327,7 @@ GLOBAL_LIST_EMPTY(objectives) name = "detain" /datum/objective/jailbreak/detain/check_completion() - return completed || (!considered_escaped(target) && (considered_alive(target) && target.current.onCentCom())) + return completed || (!considered_escaped(target) && (considered_alive(target))) /datum/objective/jailbreak/detain/update_explanation_text() ..() diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index c3895f302279..83d7a32d1fd9 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -56,7 +56,7 @@ if(isliving(wizard.current) && wizard.current.stat!=DEAD) return FALSE - for(var/obj/item/phylactery/P in GLOB.poi_list) //TODO : IsProperlyDead() + for(var/obj/item/phylactery/P in SSpoints_of_interest.other_points_of_interest) //TODO : IsProperlyDead() if(P.mind && P.mind.has_antag_datum(/datum/antagonist/wizard)) return FALSE diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index d7f80fc45680..96fbbd8254d1 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -1,7 +1,6 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list( /obj/item/storage/box/snappops = 2, /obj/item/toy/talking/AI = 2, - /obj/item/toy/talking/codex_gigas = 2, /obj/item/clothing/under/syndicate/tacticool = 2, /obj/item/toy/sword = 2, /obj/item/toy/gun = 2, @@ -17,7 +16,7 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list( /obj/item/toy/prize/honk = 1, /obj/item/toy/prize/marauder = 1, /obj/item/toy/prize/seraph = 1, - /obj/item/toy/prize/mauler = 1, + /obj/item/toy/prize/touro = 1, /obj/item/toy/prize/odysseus = 1, /obj/item/toy/prize/phazon = 1, /obj/item/toy/prize/reticence = 1, @@ -44,7 +43,6 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list( /obj/item/extendohand/acme = 1, /obj/item/hot_potato/harmless/toy = 1, /obj/item/card/emagfake = 1, - /obj/item/clothing/shoes/wheelys = 2, /obj/item/clothing/shoes/kindleKicks = 2, /obj/item/toy/plush/goatplushie/angry/realgoat = 2, /obj/item/toy/plush/moth = 2, @@ -295,7 +293,6 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list( if(obj_flags & EMAGGED) new /obj/effect/spawner/newbomb/timer/syndicate(loc) - new /obj/item/clothing/head/collectable/petehat(loc) message_admins("[ADMIN_LOOKUPFLW(usr)] has outbombed Cuban Pete and been awarded a bomb.") log_game("[key_name(usr)] has outbombed Cuban Pete and been awarded a bomb.") Reset() diff --git a/code/game/machinery/computer/atmos_control.dm b/code/game/machinery/computer/atmos_control.dm index 81d2860473c7..6e8b1b447cf2 100644 --- a/code/game/machinery/computer/atmos_control.dm +++ b/code/game/machinery/computer/atmos_control.dm @@ -42,6 +42,9 @@ /obj/machinery/air_sensor/atmos/incinerator_tank name = "incinerator chamber gas sensor" id_tag = ATMOS_GAS_MONITOR_SENSOR_INCINERATOR +/obj/machinery/air_sensor/external + name = "external atmosphere sensor" + id_tag = GAS_MONITOR_SENSOR_EXTERNAL /obj/machinery/air_sensor/update_icon_state() icon_state = "gsensor[on]" @@ -306,7 +309,11 @@ GLOBAL_LIST_EMPTY(atmos_air_controllers) icon_state = "computer-solgov" deconpath = /obj/structure/frame/computer/solgov -// This hacky madness is the evidence of the fact that a lot of machines were never meant to be constructable, im so sorry you had to see this +/obj/machinery/computer/atmos_control/external + sensors = list(GAS_MONITOR_SENSOR_EXTERNAL = "External Atmospherics Monitoring") + name = "External Atmospherics Monitoring" +//tbh I would love it if someone could make this like. Unique like ship camera networks & etc. +//This hacky madness is the evidence of the fact that a lot of machines were never meant to be constructable, im so sorry you had to see this /obj/machinery/computer/atmos_control/tank/proc/reconnect(mob/user) var/list/IO = list() var/datum/radio_frequency/freq = SSradio.return_frequency(frequency) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index f196fc6dc770..a62780aad05a 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -13,14 +13,22 @@ . += "It has \a [circuit] installed." -/obj/structure/frame/deconstruct(disassembled = TRUE) +/obj/structure/frame/deconstruct(disassembled = TRUE, scrapped = FALSE) if(!(flags_1 & NODECONSTRUCT_1)) new /obj/item/stack/sheet/metal(loc, 5) - if(circuit) + if(circuit && !scrapped) circuit.forceMove(loc) circuit = null qdel(src) +/obj/structure/frame/deconstruct_act(mob/living/user, obj/item/I) + . = ..() + if(!I.tool_start_check(user, amount=0)) + return FALSE + if(I.use_tool(src, user, 3 SECONDS, volume=0)) + to_chat(user, "You cut apart \the [src].", "You cut apart \the [src].") + deconstruct() + return TRUE /obj/structure/frame/machine name = "machine frame" diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 6b63a3ae83b8..9bad37507a35 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -151,7 +151,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/cryopod/retro, 17) /obj/item/reagent_containers/hypospray/CMO, /obj/item/clothing/accessory/medal/gold/captain, /obj/item/clothing/gloves/krav_maga, - /obj/item/nullrod, /obj/item/tank/jetpack, /obj/item/documents, /obj/item/nuke_core_container diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index 589393479ff5..3dedf5887d0c 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -79,6 +79,14 @@ return return ..() +/obj/structure/barricade/wooden/deconstruct_act(mob/living/user, obj/item/I) + . = ..() + if(!I.tool_start_check(user, amount=0)) + return FALSE + if (I.use_tool(src, user, 2 SECONDS, volume=0)) + to_chat(user, "You cut apart [src].") + deconstruct() + return TRUE /obj/structure/barricade/wooden/crude name = "crude plank barricade" @@ -111,6 +119,24 @@ smoothing_groups = list(SMOOTH_GROUP_SANDBAGS) canSmoothWith = list(SMOOTH_GROUP_SANDBAGS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_SECURITY_BARRICADE) +/obj/structure/barricade/sandbags/MouseDrop(over_object, src_location, over_location) + . = ..() + if(over_object == usr && Adjacent(usr)) + if(src.flags_1 & NODECONSTRUCT_1) + return + if(!usr.canUseTopic(src, BE_CLOSE, ismonkey(usr))) + return + usr.visible_message(span_notice("[usr] begins pulling apart \the [src.name]..."), span_notice("You begin pulling apart \the [src.name]...")) + if(do_after(usr, 30, usr)) + deconstruct() + +/obj/structure/barricade/sandbags/make_debris() + new /obj/item/stack/sheet/mineral/sandbags(get_turf(src), 1) + +/obj/structure/barricade/sandbags/examine(mob/user) + . = ..() + . += span_notice("You could probably pull the [src.name] by dragging it onto yourself.") + /obj/structure/barricade/security name = "security barrier" desc = "A deployable barrier. Provides good cover in fire fights." diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 121c93a07353..2d76d7ecb351 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -370,26 +370,6 @@ audible_message("You hear a click from the bottom of the door.", null, 1) update_appearance() -/obj/machinery/door/airlock/narsie_act() - var/turf/T = get_turf(src) - var/obj/machinery/door/airlock/cult/A - if(GLOB.cult_narsie) - var/runed = prob(20) - if(glass) - if(runed) - A = new/obj/machinery/door/airlock/cult/glass(T) - else - A = new/obj/machinery/door/airlock/cult/unruned/glass(T) - else - if(runed) - A = new/obj/machinery/door/airlock/cult(T) - else - A = new/obj/machinery/door/airlock/cult/unruned(T) - A.name = name - else - A = new /obj/machinery/door/airlock/cult/weak(T) - qdel(src) - /obj/machinery/door/airlock/Destroy() QDEL_NULL(wires) QDEL_NULL(electronics) @@ -1236,13 +1216,28 @@ return if(!operating) - if(istype(I, /obj/item/fireaxe)) //being fireaxe'd - var/obj/item/fireaxe/axe = I - if(axe && !axe.wielded) + if(istype(I, /obj/item/melee/axe/fire)) //being fireaxe'd + var/obj/item/melee/axe/fire/axe = I + if(axe && !HAS_TRAIT(axe, TRAIT_WIELDED)) to_chat(user, "You need to be wielding \the [axe] to do that!") return INVOKE_ASYNC(src, (density ? PROC_REF(open) : PROC_REF(close)), 2) +/obj/machinery/door/airlock/deconstruct_act(mob/living/user, obj/item/I) + . = ..() + if(!I.tool_start_check(user, amount=0)) + return FALSE + var/decon_time = 5 SECONDS + if(welded) + decon_time += 5 SECONDS + if(locked) + decon_time += 5 SECONDS + if(seal) + decon_time += 15 SECONDS + if (I.use_tool(src, user, decon_time, volume=100)) + to_chat(user, "You cut open the [src].") + deconstruct(FALSE, user) + return TRUE /obj/machinery/door/airlock/open(forced=0) if(operating || welded || locked || seal || !wires) diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm index 492ce30f6ac4..f6e6840f552b 100644 --- a/code/game/machinery/doors/airlock_types.dm +++ b/code/game/machinery/doors/airlock_types.dm @@ -461,115 +461,6 @@ security_level = 1 has_hatch = FALSE -////////////////////////////////// -/* - Cult Airlocks -*/ - -/obj/machinery/door/airlock/cult - name = "cult airlock" - icon = 'icons/obj/doors/airlocks/cult/runed/cult.dmi' - overlays_file = 'icons/obj/doors/airlocks/cult/runed/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_cult - hackProof = TRUE - aiControlDisabled = AI_WIRE_DISABLED - req_access = list(ACCESS_BLOODCULT) - damage_deflection = 10 - has_hatch = FALSE - var/openingoverlaytype = /obj/effect/temp_visual/cult/door - var/friendly = FALSE - var/stealthy = FALSE - -/obj/machinery/door/airlock/cult/Initialize() - . = ..() - new openingoverlaytype(loc) - -/obj/machinery/door/airlock/cult/canAIControl(mob/user) - return (iscultist(user) && !isAllPowerCut()) - -/obj/machinery/door/airlock/cult/on_break() - if(!panel_open) - panel_open = TRUE - -/obj/machinery/door/airlock/cult/isElectrified() - return FALSE - -/obj/machinery/door/airlock/cult/hasPower() - return TRUE - -/obj/machinery/door/airlock/cult/allowed(mob/living/L) - if(!density) - return 1 - if(friendly || iscultist(L) || istype(L, /mob/living/simple_animal/shade) || isconstruct(L)) - if(!stealthy) - new openingoverlaytype(loc) - return 1 - else - if(!stealthy) - new /obj/effect/temp_visual/cult/sac(loc) - var/atom/throwtarget - throwtarget = get_edge_target_turf(src, get_dir(src, get_step_away(L, src))) - SEND_SOUND(L, sound(pick('sound/hallucinations/turn_around1.ogg','sound/hallucinations/turn_around2.ogg'),0,1,50)) - flash_color(L, flash_color="#960000", flash_time=20) - L.Paralyze(40) - L.throw_at(throwtarget, 5, 1) - return 0 - -/obj/machinery/door/airlock/cult/proc/conceal() - icon = 'icons/obj/doors/airlocks/station/maintenance.dmi' - overlays_file = 'icons/obj/doors/airlocks/station/overlays.dmi' - name = "airlock" - desc = "It opens and closes." - stealthy = TRUE - update_appearance() - -/obj/machinery/door/airlock/cult/proc/reveal() - icon = initial(icon) - overlays_file = initial(overlays_file) - name = initial(name) - desc = initial(desc) - stealthy = initial(stealthy) - update_appearance() - -/obj/machinery/door/airlock/cult/narsie_act() - return - -/obj/machinery/door/airlock/cult/emp_act(severity) - return - -/obj/machinery/door/airlock/cult/friendly - friendly = TRUE - -/obj/machinery/door/airlock/cult/glass - glass = TRUE - opacity = FALSE - -/obj/machinery/door/airlock/cult/glass/friendly - friendly = TRUE - -/obj/machinery/door/airlock/cult/unruned - icon = 'icons/obj/doors/airlocks/cult/unruned/cult.dmi' - overlays_file = 'icons/obj/doors/airlocks/cult/unruned/overlays.dmi' - assemblytype = /obj/structure/door_assembly/door_assembly_cult/unruned - openingoverlaytype = /obj/effect/temp_visual/cult/door/unruned - -/obj/machinery/door/airlock/cult/unruned/friendly - friendly = TRUE - -/obj/machinery/door/airlock/cult/unruned/glass - glass = TRUE - opacity = FALSE - -/obj/machinery/door/airlock/cult/unruned/glass/friendly - friendly = TRUE - -/obj/machinery/door/airlock/cult/weak - name = "brittle cult airlock" - desc = "An airlock hastily corrupted by blood magic, it is unusually brittle in this state." - normal_integrity = 150 - damage_deflection = 5 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - ////////////////////////////////// /* Misc Airlocks diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index eb23f1060be3..737bacbb650f 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -253,7 +253,7 @@ return max_moles - min_moles > 20 /obj/machinery/door/attackby(obj/item/I, mob/user, params) - if(user.a_intent != INTENT_HARM && (I.tool_behaviour == TOOL_CROWBAR || istype(I, /obj/item/fireaxe))) + if(user.a_intent != INTENT_HARM && (I.tool_behaviour == TOOL_CROWBAR || istype(I, /obj/item/melee/axe/fire))) var/forced_open = FALSE if(istype(I, /obj/item/crowbar)) var/obj/item/crowbar/C = I diff --git a/code/game/machinery/drone_dispenser.dm b/code/game/machinery/drone_dispenser.dm index 4603044ab285..bb79d5f7e46e 100644 --- a/code/game/machinery/drone_dispenser.dm +++ b/code/game/machinery/drone_dispenser.dm @@ -108,28 +108,6 @@ recharge_sound = null recharge_message = null -/obj/machinery/droneDispenser/swarmer - name = "swarmer fabricator" - desc = "An alien machine of unknown origin. It whirs and hums with green-blue light, the air above it shimmering." - icon = 'icons/obj/objects.dmi' - icon_state = "hivebot_fab" - icon_off = "hivebot_fab" - icon_on = "hivebot_fab" - icon_recharging = "hivebot_fab" - icon_creating = "hivebot_fab_on" - metal_cost = 0 - glass_cost = 0 - cooldownTime = 300 //30 seconds - maximum_idle = 0 // Swarmers have no restraint - dispense_type = /obj/effect/mob_spawn/swarmer - begin_create_message = "hums softly as an interface appears above it, scrolling by at unreadable speed." - end_create_message = "materializes a strange shell, which drops to the ground." - recharging_text = "Its lights are slowly increasing in brightness." - work_sound = 'sound/effects/empulse.ogg' - create_sound = 'sound/effects/phasein.ogg' - break_sound = 'sound/effects/empulse.ogg' - break_message = "slowly falls dark, lights stuttering." - /obj/machinery/droneDispenser/examine(mob/user) . = ..() if((mode == DRONE_RECHARGING) && !machine_stat && recharging_text) diff --git a/code/game/machinery/outpost_electrolyzer.dm b/code/game/machinery/outpost_electrolyzer.dm index 29a37c4f95e8..b91160c7e1c8 100644 --- a/code/game/machinery/outpost_electrolyzer.dm +++ b/code/game/machinery/outpost_electrolyzer.dm @@ -38,16 +38,6 @@ var/obj/machinery/mineral/electrolyzer/linked_electrolyzer -/obj/machinery/computer/electrolyzer_console/Initialize() - . = ..() - find_electrolyzer() - -/obj/machinery/computer/electrolyzer_console/proc/find_electrolyzer() - for(var/obj/machinery/mineral/electrolyzer/potential in oview(3,src)) - if(linked_electrolyzer == null) - linked_electrolyzer = potential - potential.linked_console = src - /obj/machinery/computer/electrolyzer_console/proc/electrolyze_item(obj/item/I) var/obj/item/stack/ore/ice/S = I var/meritval = round(S.get_amount() * MERITS_PER_ICE * OUTPOST_HYDROGEN_CUT,1) // causes a bit of surplus in the "outpost" supply, even if they use all of these merits for hydrogen. @@ -61,6 +51,7 @@ var/obj/item/multitool/multi = item if(istype(multi.buffer, /obj/machinery/mineral/electrolyzer)) linked_electrolyzer = multi.buffer + linked_electrolyzer.linked_console = src visible_message("Linked to [linked_electrolyzer]!") return return ..() @@ -88,7 +79,17 @@ ) AddElement(/datum/element/connect_loc, loc_connections) -/obj/machinery/computer/electrolyzer_console/attackby(item,mob/user) +/obj/machinery/mineral/electrolyzer/proc/find_electrolyzer() + if(linked_console) + return TRUE + for(var/obj/machinery/computer/electrolyzer_console/potential in oview(3,src)) + if(linked_console == null) + linked_console = potential + potential.linked_electrolyzer = src + return TRUE + return FALSE + +/obj/machinery/mineral/electrolyzer/attackby(item,mob/user) if(istype(item, /obj/item/multitool)) var/obj/item/multitool/multi = item multi.buffer = src @@ -108,6 +109,10 @@ INVOKE_ASYNC(src, PROC_REF(electrolyze), AM) /obj/machinery/mineral/electrolyzer/proc/electrolyze(atom/movable/electrolyze_target, sound=TRUE) + if(!find_electrolyzer()) + visible_message("[src] doesn't have a linked console!") + playsound(src, 'sound/machines/buzz-sigh.ogg', 50, FALSE, 1) + return if(istype(electrolyze_target, /obj/effect) || !linked_console || !isturf(electrolyze_target.loc) || (machine_stat & (BROKEN|NOPOWER))) return if(!istype(electrolyze_target, /obj/item/stack/ore/ice)) @@ -448,15 +453,15 @@ return ..() /obj/item/merit/bundle/attack_self(mob/user) + if(!Adjacent(user)) + to_chat(user, "You need to be in arm's reach for that!") + return + var/cashamount = input(user, "How many merits do you want to take? (0 to [value])", "Take Merits", 20) as num cashamount = round(clamp(cashamount, 0, value)) if(!cashamount) return - if(!Adjacent(user)) - to_chat(user, "You need to be in arm's reach for that!") - return - value -= cashamount if(!value) user.dropItemToGround(src) @@ -464,18 +469,20 @@ var/obj/item/merit/bundle/bundle = new (user.loc) bundle.value = cashamount + bundle.update_appearance() + user.put_in_hands(bundle) update_appearance() /obj/item/merit/bundle/AltClick(mob/living/user) + if(!Adjacent(user)) + to_chat(user, "You need to be in arm's reach for that!") + return + var/cashamount = input(user, "How many merits do you want to take? (0 to [value])", "Take Merits", 20) as num cashamount = round(clamp(cashamount, 0, value)) if(!cashamount) return - else if(!Adjacent(user)) - to_chat(user, "You need to be in arm's reach for that!") - return - value -= cashamount if(!value) user.dropItemToGround(src) diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index 0772e483a536..f21b7a59e035 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -1,65 +1,120 @@ +#define ATMOS_CATEGORY 0 +#define DISPOSALS_CATEGORY 1 +#define TRANSIT_CATEGORY 2 + + /obj/machinery/pipedispenser name = "pipe dispenser" icon = 'icons/obj/stationobjs.dmi' icon_state = "pipe_d" desc = "Dispenses countless types of pipes. Very useful if you need pipes." + layer = GATEWAY_UNDERLAY_LAYER //so it renders underneath dispensed disposals density = TRUE circuit = /obj/item/circuitboard/machine/pipedispenser interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_OFFLINE - var/wait = 0 + var/delay = 0 + var/busy = FALSE + var/p_dir = NORTH + var/p_flipped = FALSE + var/category = ATMOS_CATEGORY var/piping_layer = PIPING_LAYER_DEFAULT + var/ducting_layer = DUCT_LAYER_DEFAULT + var/datum/pipe_info/recipe + var/paint_color = "grey" + var/static/datum/pipe_info/first_atmos + var/static/datum/pipe_info/first_disposal + var/static/datum/pipe_info/first_transit + +/obj/machinery/pipedispenser/Initialize() + . = ..() + if(!first_atmos) + first_atmos = GLOB.atmos_pipe_recipes[GLOB.atmos_pipe_recipes[1]][1] + if(!first_disposal) + first_disposal = GLOB.disposal_pipe_recipes[GLOB.disposal_pipe_recipes[1]][1] + if(!first_transit) + first_transit = GLOB.transit_tube_recipes[GLOB.transit_tube_recipes[1]][1] + + recipe = first_atmos + +/obj/machinery/pipedispenser/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/spritesheet/pipes), + ) /obj/machinery/pipedispenser/attack_paw(mob/user) return attack_hand(user) -/obj/machinery/pipedispenser/ui_interact(mob/user) +/obj/machinery/pipedispenser/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "PipeDispenser", name) + ui.open() + +/obj/machinery/pipedispenser/ui_data(mob/user) + var/list/data = list( + "category" = category, + "piping_layer" = piping_layer, + "ducting_layer" = ducting_layer, + "preview_rows" = recipe.get_preview(p_dir), + "categories" = list(), + "selected_color" = paint_color, + "paint_colors" = GLOB.pipe_paint_colors + ) + + var/list/recipes + switch(category) + if(ATMOS_CATEGORY) + recipes = GLOB.atmos_pipe_recipes + if(DISPOSALS_CATEGORY) + recipes = GLOB.disposal_pipe_recipes + if(TRANSIT_CATEGORY) + recipes = GLOB.transit_tube_recipes + for(var/c in recipes) + var/list/cat = recipes[c] + var/list/r = list() + for(var/i in 1 to cat.len) + var/datum/pipe_info/info = cat[i] + r += list(list("pipe_name" = info.name, "pipe_index" = i, "selected" = (info == recipe), "all_layers" = info.all_layers)) + data["categories"] += list(list("cat_name" = c, "recipes" = r)) + + return data + +/obj/machinery/pipedispenser/ui_act(action, params) . = ..() - var/dat = "PIPING LAYER: --[piping_layer]++
" - - var/recipes = GLOB.atmos_pipe_recipes - - for(var/category in recipes) - var/list/cat_recipes = recipes[category] - dat += "[category]:
    " - - for(var/i in cat_recipes) - var/datum/pipe_info/I = i - dat += I.Render(src) - - dat += "
" - - user << browse("[src][dat]", "window=pipedispenser") - onclose(user, "pipedispenser") - return - -/obj/machinery/pipedispenser/Topic(href, href_list) - if(..()) - return 1 - var/mob/living/L = usr - if(!anchored || (istype(L) && !(L.mobility_flags & MOBILITY_UI)) || usr.stat != CONSCIOUS || HAS_TRAIT(usr, TRAIT_HANDS_BLOCKED) || !in_range(loc, usr)) - usr << browse(null, "window=pipedispenser") - return 1 - usr.set_machine(src) - add_fingerprint(usr) - if(href_list["makepipe"]) - if(wait < world.time) - var/p_type = text2path(href_list["makepipe"]) - if (!verify_recipe(GLOB.atmos_pipe_recipes, p_type)) - return - var/p_dir = text2num(href_list["dir"]) - var/obj/item/pipe/P = new (loc, p_type, p_dir) - P.setPipingLayer(piping_layer) - P.add_fingerprint(usr) - wait = world.time + 10 - if(href_list["makemeter"]) - if(wait < world.time) - new /obj/item/pipe_meter(loc) - wait = world.time + 15 - if(href_list["layer_up"]) - piping_layer = clamp(++piping_layer, PIPING_LAYER_MIN, PIPING_LAYER_MAX) - if(href_list["layer_down"]) - piping_layer = clamp(--piping_layer, PIPING_LAYER_MIN, PIPING_LAYER_MAX) - return + if(.) + return + + if(!usr.canUseTopic(src, BE_CLOSE)) + return + switch(action) + if("color") + paint_color = params["paint_color"] + if("category") + category = text2num(params["category"]) + switch(category) + if(DISPOSALS_CATEGORY) + recipe = first_disposal + if(ATMOS_CATEGORY) + recipe = first_atmos + if(TRANSIT_CATEGORY) + recipe = first_transit + p_dir = NORTH + if("print") + make_pipe() + if("piping_layer") + piping_layer = text2num(params["piping_layer"]) + if("ducting_layer") + ducting_layer = text2num(params["ducting_layer"]) + if("pipe_type") + var/static/list/recipes + if(!recipes) + recipes = GLOB.disposal_pipe_recipes + GLOB.atmos_pipe_recipes + GLOB.transit_tube_recipes + recipe = recipes[params["category"]][text2num(params["pipe_type"])] + p_dir = NORTH + if("setdir") + p_dir = text2dir(params["dir"]) + p_flipped = text2num(params["flipped"]) + return TRUE /obj/machinery/pipedispenser/attackby(obj/item/W, mob/user, params) add_fingerprint(user) @@ -70,15 +125,6 @@ else return ..() -/obj/machinery/pipedispenser/proc/verify_recipe(recipes, path) - for(var/category in recipes) - var/list/cat_recipes = recipes[category] - for(var/i in cat_recipes) - var/datum/pipe_info/info = i - if (path == info.id) - return TRUE - return FALSE - /obj/machinery/pipedispenser/wrench_act(mob/living/user, obj/item/I) ..() if(default_unfasten_wrench(user, I, 40)) @@ -96,129 +142,77 @@ default_deconstruction_crowbar(I) return TRUE -/obj/machinery/pipedispenser/disposal - name = "disposal pipe dispenser" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "pipe_d" - desc = "Dispenses pipes that will ultimately be used to move trash around." - density = TRUE - - //Allow you to drag-drop disposal pipes and transit tubes into it -/obj/machinery/pipedispenser/disposal/MouseDrop_T(obj/structure/pipe, mob/usr) - if(!usr.incapacitated()) +/obj/machinery/pipedispenser/MouseDrop_T(obj/structure/pipe, mob/usr) + if(usr.incapacitated()) return - if (!istype(pipe, /obj/structure/disposalconstruct) && !istype(pipe, /obj/structure/c_transit_tube) && !istype(pipe, /obj/structure/c_transit_tube_pod)) + if(!istype(pipe, /obj/structure/disposalconstruct) && !istype(pipe, /obj/structure/c_transit_tube) && !istype(pipe, /obj/structure/c_transit_tube_pod)) return - if (get_dist(usr, src) > 1 || get_dist(src,pipe) > 1) + if(get_dist(usr, src) > 1 || get_dist(src,pipe) > 1) return - if (pipe.anchored) + if(pipe.anchored) return qdel(pipe) -/obj/machinery/pipedispenser/disposal/interact(mob/user) - - var/dat = "" - var/recipes = GLOB.disposal_pipe_recipes - - for(var/category in recipes) - var/list/cat_recipes = recipes[category] - dat += "[category]:
    " - - for(var/i in cat_recipes) - var/datum/pipe_info/I = i - dat += I.Render(src) - - dat += "
" - - user << browse("[src][dat]", "window=pipedispenser") - return - - -/obj/machinery/pipedispenser/disposal/Topic(href, href_list) - if(..()) - return 1 - usr.set_machine(src) - add_fingerprint(usr) - if(href_list["dmake"]) - if(wait < world.time) - var/p_type = text2path(href_list["dmake"]) - if (!verify_recipe(GLOB.disposal_pipe_recipes, p_type)) - return - var/obj/structure/disposalconstruct/C = new (loc, p_type) - - if(!C.can_place()) - to_chat(usr, "There's not enough room to build that here!") - qdel(C) - return - if(href_list["dir"]) - C.setDir(text2num(href_list["dir"])) - C.add_fingerprint(usr) - C.update_appearance() - wait = world.time + 15 - return - -//transit tube dispenser -//inherit disposal for the dragging proc -/obj/machinery/pipedispenser/disposal/transit_tube - name = "transit tube dispenser" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "pipe_d" - density = TRUE - desc = "Dispenses pipes that will move beings around." - -/obj/machinery/pipedispenser/disposal/transit_tube/interact(mob/user) - - var/dat = {"Transit Tubes:
-Straight Tube
-Straight Tube with Crossing
-Curved Tube
-Diagonal Tube
-Diagonal Tube with Crossing
-Junction
-Station Equipment:
-Through Tube Station
-Terminus Tube Station
-Transit Tube Pod
-"} - - user << browse("[src][dat]", "window=pipedispenser") - return - - -/obj/machinery/pipedispenser/disposal/transit_tube/Topic(href, href_list) - if(..()) - return 1 - usr.set_machine(src) - add_fingerprint(usr) - if(wait < world.time) - if(href_list["tube"]) - var/tube_type = text2num(href_list["tube"]) - var/obj/structure/C - switch(tube_type) - if(TRANSIT_TUBE_STRAIGHT) - C = new /obj/structure/c_transit_tube(loc) - if(TRANSIT_TUBE_STRAIGHT_CROSSING) - C = new /obj/structure/c_transit_tube/crossing(loc) - if(TRANSIT_TUBE_CURVED) - C = new /obj/structure/c_transit_tube/curved(loc) - if(TRANSIT_TUBE_DIAGONAL) - C = new /obj/structure/c_transit_tube/diagonal(loc) - if(TRANSIT_TUBE_DIAGONAL_CROSSING) - C = new /obj/structure/c_transit_tube/diagonal/crossing(loc) - if(TRANSIT_TUBE_JUNCTION) - C = new /obj/structure/c_transit_tube/junction(loc) - if(TRANSIT_TUBE_STATION) - C = new /obj/structure/c_transit_tube/station(loc) - if(TRANSIT_TUBE_TERMINUS) - C = new /obj/structure/c_transit_tube/station/reverse(loc) - if(TRANSIT_TUBE_POD) - C = new /obj/structure/c_transit_tube_pod(loc) - if(C) - C.add_fingerprint(usr) - wait = world.time + 15 - return +/obj/machinery/pipedispenser/proc/make_pipe(mob/user) + if(busy) + src.visible_message(span_warning("[src] is busy.")) + return + var/queued_p_type = recipe.id + var/queued_p_dir = p_dir + var/queued_p_flipped = p_flipped + switch(category) + if(ATMOS_CATEGORY) + if(recipe.type == /datum/pipe_info/meter) + new /obj/item/pipe_meter(loc) + on_make_pipe() + else + if(recipe.all_layers == FALSE && (piping_layer == 1 || piping_layer == 5)) + src.visible_message(span_warning("[src] can't print this object on the layer...")) + return + var/obj/machinery/atmospherics/path = queued_p_type + var/pipe_item_type = initial(path.construction_type) || /obj/item/pipe + var/obj/item/pipe/P = new pipe_item_type(loc, queued_p_type, queued_p_dir) + on_make_pipe() + + if(queued_p_flipped && istype(P, /obj/item/pipe/trinary/flippable)) + var/obj/item/pipe/trinary/flippable/F = P + F.flipped = queued_p_flipped + + P.update() + P.setPipingLayer(piping_layer) + if(ispath(path, /obj/machinery/atmospherics/pipe) && !findtext("[queued_p_type]", "layer_manifold")) + P.add_atom_colour(GLOB.pipe_paint_colors[paint_color], FIXED_COLOUR_PRIORITY) + + if(DISPOSALS_CATEGORY) //Making disposals pipes + new /obj/structure/disposalconstruct(loc, queued_p_type, queued_p_dir, queued_p_flipped) + on_make_pipe() + return + + if(TRANSIT_CATEGORY) //Making transit tubes + if(istype(queued_p_type, /obj/structure/c_transit_tube_pod)) + new /obj/structure/c_transit_tube_pod(loc) + on_make_pipe() + else + var/obj/structure/c_transit_tube/tube = new queued_p_type(loc) + on_make_pipe() + tube.setDir(queued_p_dir) + + if(queued_p_flipped) + tube.setDir(turn(queued_p_dir, 45)) + tube.simple_rotate_flip() + +/obj/machinery/pipedispenser/proc/on_make_pipe() + busy = TRUE + delay = addtimer(CALLBACK(src, PROC_REF(reset_busy)), 5) + +/obj/machinery/pipedispenser/proc/reset_busy() + busy = FALSE + +#undef ATMOS_CATEGORY +#undef DISPOSALS_CATEGORY +#undef TRANSIT_CATEGORY diff --git a/code/game/machinery/porta_turret/portable_turret.dm b/code/game/machinery/porta_turret/portable_turret.dm index 5891898ef6dc..5c592c7409dd 100644 --- a/code/game/machinery/porta_turret/portable_turret.dm +++ b/code/game/machinery/porta_turret/portable_turret.dm @@ -77,8 +77,6 @@ DEFINE_BITFIELD(turret_flags, list( var/has_cover = TRUE /// The cover that is covering this turret var/obj/machinery/porta_turret_cover/cover = null - /// World.time the turret last fired - var/last_fired = 0 /// Ticks until next shot (1.5 ?) var/shot_delay = 15 /// Turret flags about who is turret allowed to shoot @@ -101,6 +99,11 @@ DEFINE_BITFIELD(turret_flags, list( var/datum/action/turret_toggle/toggle_action /// Mob that is remotely controlling the turret var/mob/remote_controller + //our cooldowns + COOLDOWN_DECLARE(fire_cooldown) + /// For connecting to additional turrets + var/id = "" + /obj/machinery/porta_turret/Initialize() . = ..() @@ -122,6 +125,13 @@ DEFINE_BITFIELD(turret_flags, list( if(!has_cover) INVOKE_ASYNC(src, PROC_REF(popUp)) +/obj/machinery/porta_turret/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock) + id = "[REF(port)][id]" + port.turret_list |= WEAKREF(src) + +/obj/machinery/porta_turret/disconnect_from_shuttle(obj/docking_port/mobile/port) + port.turret_list -= WEAKREF(src) + /obj/machinery/porta_turret/proc/toggle_on(set_to) var/current = on if (!isnull(set_to)) @@ -484,10 +494,6 @@ DEFINE_BITFIELD(turret_flags, list( if(assess_perp(Mech.occupant) >= 4) targets += Mech - if((turret_flags & TURRET_FLAG_SHOOT_ANOMALOUS) && GLOB.blobs.len && (mode == TURRET_LETHAL)) - for(var/obj/structure/blob/B in view(scan_range, base)) - targets += B - if(targets.len) tryToShootAt(targets) else if(!always_up) @@ -593,9 +599,9 @@ DEFINE_BITFIELD(turret_flags, list( return if(!(obj_flags & EMAGGED)) //if it hasn't been emagged, cooldown before shooting again - if(last_fired + shot_delay > world.time) + if(!COOLDOWN_FINISHED(src, fire_cooldown)) return - last_fired = world.time + COOLDOWN_START(src, fire_cooldown, shot_delay) var/turf/T = get_turf(src) var/turf/U = get_turf(target) @@ -836,8 +842,46 @@ DEFINE_BITFIELD(turret_flags, list( stun_projectile_sound = 'sound/weapons/gun/smg/shot.ogg' desc = "A ballistic machine gun auto-turret." -/obj/machinery/porta_turret/ship/solgov - faction = list("playerSolgov", "turret") +//high rof, range, faster projectile speed +/* 'Nanotrasen' turrets */ + +/obj/machinery/porta_turret/ship/nt + name = "Sharplite Defense Turret" + desc = "A cheap and effective turret designed by Sharplite and purchased and installed on most Nanotrasen Vessels." + faction = list(FACTION_PLAYER_NANOTRASEN, "turret") + icon_state = "standard_lethal" + base_icon_state = "standard" + stun_projectile = /obj/projectile/beam/disabler/sharplite + lethal_projectile = /obj/projectile/beam/laser/sharplite + lethal_projectile_sound = 'sound/weapons/gun/laser/nt-fire.ogg' + stun_projectile_sound = 'sound/weapons/taser2.ogg' + shot_delay = 10 + scan_range = 10 + +/obj/machinery/porta_turret/ship/nt/light + name = "Sharplite LDS" + desc = "A cheap and effective 'defensive system' designed by Sharplite for installation on Nanotrasen vessels." + stun_projectile = /obj/projectile/beam/disabler/weak/sharplite + lethal_projectile = /obj/projectile/beam/laser/light/sharplite + lethal_projectile_sound = 'sound/weapons/gun/laser/nt-fire.ogg' + stun_projectile_sound = 'sound/weapons/taser2.ogg' + + +/obj/machinery/porta_turret/ship/nt/heavy + name = "Sharplite Defense Cannon" + desc = "A heavy laser mounting designed by Sharplite for usage on Nanotrasen vessels." + lethal_projectile = /obj/projectile/beam/laser/heavylaser/sharplite + lethal_projectile_sound = 'sound/weapons/lasercannonfire.ogg' + +/obj/machinery/porta_turret/ship/nt/pulse + name = "Sharplite Pulse Cannon" + desc = "A pulse cannon mounting designed by Sharplite. Not sold to any purchasers and exclusively used on Nanotrasen Vessels." + lethal_projectile = /obj/projectile/beam/pulse/sharplite_turret + lethal_projectile_sound = 'sound/weapons/gun/laser/heavy_laser.ogg' + + + +/* Syndicate Turrets */ /obj/machinery/porta_turret/ship/syndicate faction = list(FACTION_PLAYER_SYNDICATE, "turret") @@ -860,6 +904,73 @@ DEFINE_BITFIELD(turret_flags, list( lethal_projectile = /obj/projectile/beam/laser/heavylaser lethal_projectile_sound = 'sound/weapons/lasercannonfire.ogg' +/* Inteq Turrets */ + +/obj/machinery/porta_turret/ship/inteq + name = "Vanguard Turret" + desc = "A turret designed by IRMG engineers for defending ships from hostile flora, fauna, and people (and Elzousa, which count as flora and people)." + stun_projectile = /obj/projectile/bullet/a762_40/rubber + stun_projectile_sound = 'sound/weapons/gun/rifle/skm.ogg' + lethal_projectile = /obj/projectile/bullet/a762_40 + lethal_projectile_sound = 'sound/weapons/gun/rifle/skm.ogg' + scan_range = 8 + shot_delay = 20 + faction = list(FACTION_PLAYER_INTEQ, "turret") + +/obj/machinery/porta_turret/ship/inteq/light + name = "Close-In Vanguard Turret" + desc = "A light turret designed by IRMG engineers for the the task of defending from close-in encounters. Low power, high speed." + stun_projectile = /obj/projectile/bullet/c10mm/rubber + stun_projectile_sound = 'sound/weapons/gun/smg/vector_fire.ogg' + lethal_projectile = /obj/projectile/bullet/c10mm + lethal_projectile_sound = 'sound/weapons/gun/smg/vector_fire.ogg' + subsystem_type = /datum/controller/subsystem/processing/fastprocess //turns out if you have a shot delay below what SSmachines fires at you need to use a different subsystem + scan_range = 4 + shot_delay = 5 + +/obj/machinery/porta_turret/ship/inteq/heavy + name = "Vanguard Overwatch Turret" + desc = "A turret designed by IRMG engineers to provide long range defensive fire on their installations. Has a habit of leaving big holes." + stun_projectile = /obj/projectile/bullet/a308/rubber + stun_projectile_sound = 'sound/weapons/gun/rifle/f4.ogg' + lethal_projectile = /obj/projectile/bullet/a308 + lethal_projectile_sound = 'sound/weapons/gun/rifle/f4.ogg' + scan_range = 12 + shot_delay = 20 + +/* Solcon Turrets */ + +/obj/machinery/porta_turret/ship/solgov + faction = list(FACTION_PLAYER_SOLCON, "turret") + +/* Pan Gezena Federation Turrets */ + +/obj/machinery/porta_turret/ship/pgf + name = "Etherbor Defensive Mount" + desc = "A less portable Etherbor offering, the EDM is a self-directed linkage of energy weapons, designed to keep intruders away from Gezenan vessels." + faction = list(FACTION_PLAYER_GEZENA, "Turret") + stun_projectile = /obj/projectile/beam/hitscan/disabler + stun_projectile_sound = 'sound/weapons/gun/energy/kalixpistol.ogg' + lethal_projectile = /obj/projectile/beam/hitscan/kalix/pgf/assault + lethal_projectile_sound = 'sound/weapons/gun/energy/kalixsmg.ogg' + icon_state = "standard_lethal" + base_icon_state = "standard" + +/obj/machinery/porta_turret/ship/pgf/light + name = "Etherbor Deterrent System" + desc = "A light turret manufactured by Etherbor. It offers a lightweight assembly of energy weapons to accost nearby foes." + lethal_projectile = /obj/projectile/beam/hitscan/kalix/pgf + lethal_projectile_sound = 'sound/weapons/gun/energy/kalixsmg.ogg' + +/obj/machinery/porta_turret/ship/pgf/heavy + name = "Etherbor Point-Defense System" + desc = "A high-powered defensive turret manufactured by Etherbor. The EPDS contains heavy energy weapons linked in tandem." + scan_range = 10 + stun_projectile = /obj/projectile/beam/hitscan/disabler/heavy + stun_projectile_sound = 'sound/weapons/gun/energy/kalixpistol.ogg' + lethal_projectile = /obj/projectile/beam/hitscan/kalix/pgf/sniper //fwoom + lethal_projectile_sound = 'sound/weapons/gun/laser/heavy_laser.ogg' + //////////////////////// //Turret Control Panel// //////////////////////// @@ -872,7 +983,7 @@ DEFINE_BITFIELD(turret_flags, list( base_icon_state = "control" density = FALSE req_access = list(ACCESS_AI_UPLOAD) - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF /// Variable dictating if linked turrets are active and will shoot targets var/enabled = TRUE /// Variable dictating if linked turrets will shoot lethal projectiles @@ -887,6 +998,8 @@ DEFINE_BITFIELD(turret_flags, list( var/shoot_cyborgs = FALSE /// List of all linked turrets var/list/turrets = list() + ///id for connecting to additional turrets + var/id = "" /obj/machinery/turretid/Initialize(mapload, ndir = 0, built = 0) . = ..() @@ -906,17 +1019,21 @@ DEFINE_BITFIELD(turret_flags, list( if(!mapload) return - if(control_area) - control_area = get_area_instance_from_text(control_area) - if(control_area == null) - control_area = get_area(src) - stack_trace("Bad control_area path for [src], [src.control_area]") - else if(!control_area) - control_area = get_area(src) +/obj/machinery/turretid/connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock) + id = "[REF(port)][id]" + RegisterSignal(port, COMSIG_SHIP_DONE_CONNECTING, PROC_REF(late_connect_to_shuttle)) + +/obj/machinery/turretid/disconnect_from_shuttle(obj/docking_port/mobile/port) + UnregisterSignal(port, COMSIG_SHIP_DONE_CONNECTING) + +/obj/machinery/turretid/proc/late_connect_to_shuttle(obj/docking_port/mobile/port, obj/docking_port/stationary/dock) + SIGNAL_HANDLER - for(var/obj/machinery/porta_turret/T in control_area) - turrets |= T - T.cp = src + for(var/datum/weakref/ship_guns in port.turret_list) + var/obj/machinery/porta_turret/turret_gun = ship_guns.resolve() + if(turret_gun.id == id) + turrets |= turret_gun + turret_gun.cp = src /obj/machinery/turretid/examine(mob/user) . += ..() @@ -941,7 +1058,8 @@ DEFINE_BITFIELD(turret_flags, list( if (issilicon(user)) return attack_hand(user) - if (get_dist(src, user) == 0) // trying to unlock the interface + // trying to unlock the interface + if (in_range(src, user)) if (allowed(usr)) if(obj_flags & EMAGGED) to_chat(user, "The turret control is unresponsive!") @@ -1040,6 +1158,10 @@ DEFINE_BITFIELD(turret_flags, list( /obj/machinery/turretid/lethal lethal = TRUE +/obj/machinery/turretid/ship + req_ship_access = TRUE + + /obj/item/wallframe/turret_control name = "turret control frame" desc = "Used for building turret control panels." @@ -1085,3 +1207,4 @@ DEFINE_BITFIELD(turret_flags, list( /obj/item/gun/energy/e_gun/turret/get_turret_properties() . = ..() + diff --git a/code/game/machinery/quantum_pad.dm b/code/game/machinery/quantum_pad.dm index 7d0455ab82f0..a3fc7082f1be 100644 --- a/code/game/machinery/quantum_pad.dm +++ b/code/game/machinery/quantum_pad.dm @@ -14,6 +14,7 @@ var/teleporting = FALSE //if it's in the process of teleporting var/power_efficiency = 1 var/obj/machinery/quantumpad/linked_pad + var/restrain_vlevel = TRUE //mapping var/static/list/mapped_quantum_pads = list() @@ -177,7 +178,7 @@ else if(!isobserver(ROI)) continue - do_teleport(ROI, get_turf(target_pad),null,null,null,null,null,TRUE, channel = TELEPORT_CHANNEL_QUANTUM) + do_teleport(ROI, get_turf(target_pad),null,null,null,null,null,TRUE, channel = TELEPORT_CHANNEL_QUANTUM, restrain_vlevel = restrain_vlevel) CHECK_TICK /obj/machinery/quantumpad/proc/initMappedLink() diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index b0e030206a0f..1e1718623816 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -22,6 +22,7 @@ /obj/item/modular_computer, /obj/item/gun/ballistic/automatic/powered, /obj/item/gun/ballistic/automatic/assault/e40, + /obj/item/stock_parts/cell/gun )) /obj/machinery/recharger/RefreshParts() @@ -31,19 +32,22 @@ /obj/machinery/recharger/examine(mob/user) . = ..() if(!in_range(user, src) && !issilicon(user) && !isobserver(user)) - . += "You're too far away to examine [src]'s contents and display!" + . += span_warning("You're too far away to examine [src]'s contents and display!") return if(charging) - . += {"\The [src] contains: - - \A [charging]."} + . += span_notice("\The [src] contains:") + . += span_notice("- \A [charging].") if(!(machine_stat & (NOPOWER|BROKEN))) - . += "The status display reads:" - . += "- Recharging [recharge_coeff*10]% cell charge per cycle." + . += span_notice("The status display reads:") + . += span_notice("- Recharging [recharge_coeff*10]% cell charge per cycle.") if(charging) var/obj/item/stock_parts/cell/C = charging.get_cell() - . += "- \The [charging]'s cell is at [C.percent()]%." + if(istype(charging, /obj/item/stock_parts/cell)) + . += span_notice("- \The [charging]'s charge is at [C.percent()]%.") + else + . += span_notice("- \The [charging]'s cell is at [C.percent()]%.") /obj/machinery/recharger/proc/setCharging(new_charging) @@ -62,11 +66,11 @@ /obj/machinery/recharger/attackby(obj/item/G, mob/user, params) if(G.tool_behaviour == TOOL_WRENCH) if(charging) - to_chat(user, "Remove the charging item first!") + to_chat(user, span_notice("Remove the charging item first!")) return set_anchored(!anchored) power_change() - to_chat(user, "You [anchored ? "attached" : "detached"] [src].") + to_chat(user, span_notice("You [anchored ? "attached" : "detached"] [src].")) G.play_tool_sound(src) return @@ -80,13 +84,13 @@ //Checks to make sure he's not in space doing it, and that the area got proper power. var/area/a = get_area(src) if(!isarea(a) || a.power_equip == 0) - to_chat(user, "[src] blinks red as you try to insert [G].") + to_chat(user, span_notice("[src] blinks red as you try to insert [G].")) return TRUE if (istype(G, /obj/item/gun/energy)) var/obj/item/gun/energy/E = G if(!E.can_charge) - to_chat(user, "Your gun has no external power connector.") + to_chat(user, span_notice("Your gun has no external power connector.")) return TRUE if(!user.transferItemToLoc(G, src)) @@ -94,7 +98,7 @@ setCharging(G) else - to_chat(user, "[src] isn't connected to anything!") + to_chat(user, span_notice("[src] isn't connected to anything!")) return TRUE if(anchored && !charging) diff --git a/code/game/machinery/sheetifier.dm b/code/game/machinery/sheetifier.dm deleted file mode 100644 index ec9f0f5ff5a3..000000000000 --- a/code/game/machinery/sheetifier.dm +++ /dev/null @@ -1,55 +0,0 @@ -/obj/machinery/sheetifier - name = "Sheet-meister 2000" - desc = "A very sheety machine" - icon = 'icons/obj/machines/sheetifier.dmi' - icon_state = "base_machine" - density = TRUE - use_power = IDLE_POWER_USE - idle_power_usage = IDLE_DRAW_MINIMAL - active_power_usage = ACTIVE_DRAW_LOW - circuit = /obj/item/circuitboard/machine/sheetifier - layer = BELOW_OBJ_LAYER - var/busy_processing = FALSE - -/obj/machinery/sheetifier/Initialize() - . = ..() - AddComponent(/datum/component/material_container, list(/datum/material/meat), MINERAL_MATERIAL_AMOUNT * MAX_STACK_SIZE * 2, TRUE, /obj/item/reagent_containers/food/snacks/meat/slab, CALLBACK(src, PROC_REF(CanInsertMaterials)), CALLBACK(src, PROC_REF(AfterInsertMaterials))) - -/obj/machinery/sheetifier/update_overlays() - . = ..() - if(machine_stat & (BROKEN|NOPOWER)) - return - var/mutable_appearance/on_overlay = mutable_appearance(icon, "buttons_on") - . += on_overlay - -/obj/machinery/sheetifier/update_icon_state() - icon_state = "base_machine[busy_processing ? "_processing" : ""]" - return ..() - -/obj/machinery/sheetifier/proc/CanInsertMaterials() - return !busy_processing - -/obj/machinery/sheetifier/proc/AfterInsertMaterials(item_inserted, id_inserted, amount_inserted) - busy_processing = TRUE - update_appearance() - var/datum/material/last_inserted_material = id_inserted - var/mutable_appearance/processing_overlay = mutable_appearance(icon, "processing") - processing_overlay.color = last_inserted_material.color - flick_overlay_static(processing_overlay, src, 64) - addtimer(CALLBACK(src, PROC_REF(finish_processing)), 64) - -/obj/machinery/sheetifier/proc/finish_processing() - busy_processing = FALSE - update_appearance() - var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - materials.retrieve_all() //Returns all as sheets - -/obj/machinery/sheetifier/attackby(obj/item/I, mob/user, params) - if(default_unfasten_wrench(user, I)) - return - if(default_deconstruction_screwdriver(user, I)) - update_appearance() - return - if(default_deconstruction_crowbar(I)) - return - return ..() diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index df865aee82e5..e6e754c4b807 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -43,27 +43,6 @@ if(.) //damage was dealt new /obj/effect/temp_visual/impact_effect/ion(loc) -/obj/structure/emergency_shield/sanguine - name = "sanguine barrier" - desc = "A potent shield summoned by cultists to defend their rites." - icon_state = "shield-red" - max_integrity = 60 - -/obj/structure/emergency_shield/sanguine/emp_act(severity) - return - -/obj/structure/emergency_shield/invoker - name = "Invoker's Shield" - desc = "A weak shield summoned by cultists to protect them while they carry out delicate rituals." - color = "#FF0000" - max_integrity = 20 - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - layer = ABOVE_MOB_LAYER - -/obj/structure/emergency_shield/invoker/emp_act(severity) - return - - /obj/machinery/shieldgen name = "anti-breach shielding projector" desc = "Used to seal minor hull breaches." @@ -418,7 +397,7 @@ active = FALSE log_game("[src] was deactivated by [key_name(user)] at [AREACOORD(src)]") else - user.visible_message(span_notice("[user] turned \the [src] on."), span_notice("ou turn on \the [src]."), span_hear("ou hear heavy droning.")) + user.visible_message(span_notice("[user] turned \the [src] on."), span_notice("You turn on \the [src]."), span_hear("You hear heavy droning.")) active = ACTIVE_SETUPFIELDS log_game("[src] was activated by [key_name(user)] at [AREACOORD(src)]") add_fingerprint(user) diff --git a/code/game/machinery/shuttle/shuttle_heater.dm b/code/game/machinery/shuttle/shuttle_heater.dm index 2b440f926c32..f8fa1d1ef786 100644 --- a/code/game/machinery/shuttle/shuttle_heater.dm +++ b/code/game/machinery/shuttle/shuttle_heater.dm @@ -5,13 +5,14 @@ //it for the engine. //----------------------------------------------- +#define CHLORINE_OXIDATION_VALUE 0.5 #define O2_OXIDATION_VALUE 1 #define NITRYL_OXIDATION_VALUE 1 #define NITROUS_OXIDATION_VALUE 3 +#define HYDROGEN_THRUSTER_VALUE 0.5 #define PLASMA_THRUSTER_VALUE 1 #define TRITRIUM_THRUSTER_VALUE 3 -#define HYDROGEN_THRUSTER_VALUE 0.5 #define NITROUS_COOLING_MULTIPIER 500 #define NITROUS_COOLING_MIN 173 diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 107c5656c034..f6be0b0a036e 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -16,6 +16,7 @@ var/obj/item/clothing/suit/space/suit = null var/obj/item/clothing/head/helmet/space/helmet = null var/obj/item/clothing/mask/mask = null + var/obj/item/mod/control/mod = null var/obj/item/storage = null // if you add more storage slots, update cook() to clear their radiation too. @@ -27,6 +28,8 @@ var/mask_type = null /// What type of additional item the unit starts with when spawned. var/storage_type = null + /// What type of MOD the unit starts with when spawned. + var/mod_type = null state_open = FALSE /// If the SSU's doors are locked closed. Can be toggled manually via the UI, but is also locked automatically when the UV decontamination sequence is running. @@ -194,6 +197,8 @@ helmet = new helmet_type(src) if(mask_type) mask = new mask_type(src) + if(mod_type) + mod = new mod_type(src) if(storage_type) storage = new storage_type(src) update_appearance() @@ -215,6 +220,7 @@ QDEL_NULL(suit) QDEL_NULL(helmet) QDEL_NULL(mask) + QDEL_NULL(mod) QDEL_NULL(storage) return ..() @@ -225,19 +231,19 @@ . += "[base_icon_state]_panel" if(state_open) . += "[base_icon_state]_open" - if(suit) + if(suit || mod) . += "[base_icon_state]_suit" if(helmet) . += "[base_icon_state]_helm" if(storage) . += "[base_icon_state]_storage" - if(uv && uv_super) - . += "[base_icon_state]_super" if(!(machine_stat & BROKEN || machine_stat & NOPOWER)) if(state_open) . += "[base_icon_state]_lights_open" else if(uv) + if(uv_super) + . += "[base_icon_state]_super" . += "[base_icon_state]_lights_red" else . += "[base_icon_state]_lights_closed" @@ -247,6 +253,8 @@ . += "[base_icon_state]_uvstrong" else . += "[base_icon_state]_uv" + else if(locked) + . += "[base_icon_state]_locked" else . += "[base_icon_state]_ready" @@ -263,6 +271,7 @@ helmet = null suit = null mask = null + mod = null storage = null occupant = null @@ -289,6 +298,7 @@ "suit" = create_silhouette_of(/obj/item/clothing/suit/space/eva), "helmet" = create_silhouette_of(/obj/item/clothing/head/helmet/space/eva), "mask" = create_silhouette_of(/obj/item/clothing/mask/breath), + "mod" = create_silhouette_of(/obj/item/mod/control), "storage" = create_silhouette_of(/obj/item/tank/internals/oxygen), ) @@ -340,8 +350,10 @@ close_machine() if ("disinfect") if (occupant && safeties) + say("Alert: safeties triggered, occupant detected!") return else if (!helmet && !mask && !suit && !storage && !occupant) + to_chat(user, span_notice("There's nothing inside [src] to disinfect!")) return else if (occupant) @@ -351,6 +363,7 @@ if ("lock", "unlock") if (!state_open) locked = !locked + update_icon() else var/obj/item/item_to_dispense = vars[choice] if (item_to_dispense) @@ -397,7 +410,7 @@ if(!is_operational) to_chat(user, span_warning("The unit is not operational!")) return - if(occupant || helmet || suit || storage) + if(occupant || helmet || suit || mod || storage) to_chat(user, span_warning("It's too cluttered inside to fit in!")) return @@ -407,7 +420,7 @@ target.visible_message(span_warning("[user] starts shoving [target] into [src]!"), span_userdanger("[user] starts shoving you into [src]!")) if(do_after(user, 30, target)) - if(occupant || helmet || suit || storage) + if(occupant || helmet || suit || mod || storage) return if(target == user) user.visible_message(span_warning("[user] slips into [src] and closes the door behind [user.p_them()]!"), span_notice("You slip into [src]'s cramped space and shut its door.")) @@ -452,6 +465,8 @@ qdel(suit) // Delete everything but the occupant. mask = null qdel(mask) + mod = null + qdel(mod) storage = null qdel(storage) // The wires get damaged too. @@ -479,6 +494,9 @@ if(mask) things_to_clear += mask things_to_clear += mask.GetAllContents() + if(mod) + things_to_clear += mod + things_to_clear += mod.GetAllContents() if(storage) things_to_clear += storage things_to_clear += storage.GetAllContents() @@ -565,6 +583,13 @@ if(!user.transferItemToLoc(I, src)) return mask = I + else if(istype(I, /obj/item/mod/control)) + if(mod) + to_chat(user, span_warning("The unit already contains a MOD!")) + return + if(!user.transferItemToLoc(I, src)) + return + mod = I else if(storage) to_chat(user, span_warning("The auxiliary storage compartment is full!")) @@ -631,6 +656,9 @@ else if(istype(AM, /obj/item/clothing/mask) && !mask) AM.forceMove(src) mask = AM + else if(istype(AM, /obj/item/mod/control) && !storage) + AM.forceMove(src) + mod = AM else if(istype(AM, /obj/item) && !storage) AM.forceMove(src) storage = AM diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index 12085b7d62d4..b46ccaca9f60 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -148,7 +148,3 @@ /obj/item/sbeacondrop/penetratorturret desc = "A label on it reads: Warning: Activating this device will send a penetrator turret to your location." droptype = /obj/machinery/porta_turret/syndicate/shuttle - -/obj/item/sbeacondrop/constructshell - desc = "A label on it reads: Warning: Activating this device will send a Nar'sian construct shell to your location." - droptype = /obj/structure/constructshell diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index 1d6a9e3845b8..4f32fe1d2d3d 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -233,10 +233,6 @@ GLOBAL_LIST_INIT(dye_registry, list( new /obj/item/stack/sheet/wethide(drop_location(), amount) qdel(src) -/obj/item/clothing/suit/hooded/ian_costume/machine_wash(obj/machinery/washing_machine/WM) - new /obj/item/reagent_containers/food/snacks/meat/slab/corgi(loc) - qdel(src) - /mob/living/simple_animal/pet/machine_wash(obj/machinery/washing_machine/WM) WM.bloody_mess = TRUE gib() diff --git a/code/game/mecha/combat/durand.dm b/code/game/mecha/combat/durand.dm index cf89811d5f09..a42e1e29f7ee 100644 --- a/code/game/mecha/combat/durand.dm +++ b/code/game/mecha/combat/durand.dm @@ -12,22 +12,24 @@ force = 40 wreckage = /obj/structure/mecha_wreckage/durand var/obj/durand_shield/shield + var/shield_type = /obj/durand_shield + var/shield_passive_drain = 300 + /obj/mecha/combat/durand/clip - desc = "An aging combat exosuit appropriated from abandoned Nanotrasen facilities, now supplied to the CMM-BARD anti-xenofauna division." + desc = "An aging combat exosuit appropriated from abandoned Nanotrasen facilities, now supplied to the CMM-BARD anti-xenofauna division. The defence grid has been modified to disperse controlled electric shocks on contact, at the cost of its ability to block ranged projectiles." name = "\improper Paladin" icon_state = "clipdurand" wreckage = /obj/structure/mecha_wreckage/durand/clip armor = list("melee" = 40, "bullet" = 35, "laser" = 15, "energy" = 10, "bomb" = 20, "bio" = 0, "rad" = 50, "fire" = 100, "acid" = 100) - - //TODO: Custom melee backlash shield with no projectile protection + shield_passive_drain = 0 + shield_type = /obj/durand_shield/clip /obj/mecha/combat/durand/Initialize() . = ..() - shield = new /obj/durand_shield(loc, src, layer, dir) + shield = new shield_type(loc, src, layer, dir) RegisterSignal(src, COMSIG_MECHA_ACTION_ACTIVATE, PROC_REF(relay)) - RegisterSignal(src, COMSIG_PROJECTILE_PREHIT, PROC_REF(prehit)) /obj/mecha/combat/durand/Destroy() @@ -46,7 +48,7 @@ /obj/mecha/combat/durand/process() . = ..() - if(defense_mode && !use_power(100)) + if(defense_mode && !use_power(max(0, shield_passive_drain - (scanmod.rating * 10)))) defense_action.Activate(forced_state = TRUE) /obj/mecha/combat/durand/domove(direction) @@ -70,22 +72,21 @@ if(!shield) //if the shield somehow got deleted stack_trace("Durand triggered relay without a shield") - shield = new /obj/durand_shield(loc, src, layer) + shield = new shield_type(loc, src, layer) shield.setDir(dir) SEND_SIGNAL(shield, COMSIG_MECHA_ACTION_ACTIVATE, source, signal_args) //Redirects projectiles to the shield if defense_check decides they should be blocked and returns true. -/obj/mecha/combat/durand/proc/prehit(obj/projectile/source, list/signal_args) - SIGNAL_HANDLER - - if(defense_check(source.loc) && shield) - signal_args[2] = shield - +/obj/mecha/combat/durand/bullet_act(obj/projectile/source) + if(defense_check(source.loc, shield.ranged_pass)) + shield.bullet_act(source) + else + . = ..() /**Checks if defense mode is enabled, and if the attacker is standing in an area covered by the shield. -Expects a turf. Returns true if the attack should be blocked, false if not.*/ -/obj/mecha/combat/durand/proc/defense_check(turf/aloc) - if (!defense_mode || !shield || shield.switching) +Expects a turf. Returns true if the attack should be blocked, false if not. Skip defence will make the proc return false and the attack will go through*/ +/obj/mecha/combat/durand/proc/defense_check(turf/aloc, skip_defence = FALSE) + if (!defense_mode || !shield || shield.switching || skip_defence) return FALSE . = FALSE switch(dir) @@ -104,34 +105,38 @@ Expects a turf. Returns true if the attack should be blocked, false if not.*/ return /obj/mecha/combat/durand/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, armor_penetration = 0) - if(defense_check(user.loc)) + if(defense_check(user.loc, shield.melee_pass)) log_message("Attack absorbed by defense field. Attacker - [user].", LOG_MECHA, color="orange") shield.attack_generic(user, damage_amount, damage_type, damage_flag, sound_effect, armor_penetration) else . = ..() -/obj/mecha/combat/durand/blob_act(obj/structure/blob/B) - if(defense_check(B.loc)) - log_message("Attack by blob. Attacker - [B].", LOG_MECHA, color="red") - log_message("Attack absorbed by defense field.", LOG_MECHA, color="orange") - shield.blob_act(B) - else - . = ..() - /obj/mecha/combat/durand/attackby(obj/item/W as obj, mob/user as mob, params) - if(defense_check(user.loc)) + if(defense_check(user.loc, shield.melee_pass)) log_message("Attack absorbed by defense field. Attacker - [user], with [W]", LOG_MECHA, color="orange") shield.attackby(W, user, params) else . = ..() /obj/mecha/combat/durand/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) - if(defense_check(AM.loc)) + if(defense_check(AM.loc, shield.ranged_pass)) log_message("Impact with [AM] absorbed by defense field.", LOG_MECHA, color="orange") shield.hitby(AM, skipcatch, hitpush, blocked, throwingdatum) else . = ..() +// Walking into the Paladin's shield shocks you. + +/obj/mecha/combat/durand/clip/Bump(atom/obstacle) + . = ..() + if(defense_check(obstacle.loc) && isliving(obstacle)) + shield.contact(obstacle) + +/obj/mecha/combat/durand/clip/Bumped(atom/movable/AM) + . = ..() + if(defense_check(AM.loc) && isliving(AM)) + shield.contact(AM) + //////////////////////////// ///// Shield processing //// //////////////////////////// @@ -158,7 +163,14 @@ own integrity back to max. Shield is automatically dropped if we run out of powe light_on = FALSE var/obj/mecha/combat/durand/chassis ///Our link back to the durand var/switching = FALSE ///To keep track of things during the animation + /// if this shield lets melee attacks pass and hit the mech directly + var/melee_pass = FALSE + /// if this shield lets projectiles pass and hit the mech directly + var/ranged_pass = FALSE +/obj/durand_shield/clip + name = "electric repulsion grid" + ranged_pass = TRUE /obj/durand_shield/Initialize(mapload, _chassis, _layer, _dir) . = ..() @@ -226,7 +238,7 @@ the shield is disabled by means other than the action button (like running out o return . = ..() flick("shield_impact", src) - if(!chassis.use_power((max_integrity - obj_integrity) * 100)) + if(!chassis.use_power(max(1, (max_integrity - obj_integrity + 15) * (10 - chassis.capacitor.rating)))) chassis.cell?.charge = 0 chassis.defense_action.Activate(forced_state = TRUE) obj_integrity = 10000 @@ -237,3 +249,35 @@ the shield is disabled by means other than the action button (like running out o /obj/durand_shield/bullet_act() play_attack_sound() . = ..() + +/// a mob has bumped into the shield +/obj/durand_shield/proc/contact(mob/living/contactor) + return + +/// Clippy shield +/obj/durand_shield/clip/attack_generic(mob/user, damage_amount, damage_type, damage_flag, sound_effect, armor_penetration) + . = ..() + apply_shock(user) + +/obj/durand_shield/clip/attackby(obj/item/I, mob/living/user, params) + . = ..() + apply_shock(user) + +/obj/durand_shield/clip/contact(mob/living/contactor) + . = ..() + apply_shock(contactor) + +/obj/durand_shield/clip/proc/apply_shock(mob/attacker) + var/did_shock = FALSE + if(iscarbon(attacker)) + var/mob/living/carbon/victim = attacker + if(electrocute_mob(victim, chassis.cell, src, 1, FALSE, FALSE)) + did_shock = TRUE + else if(isliving(attacker)) + var/mob/living/victim = attacker + if(victim.apply_damage_type(20,BURN)) + to_chat(victim,span_userdanger("You're shocked by \the [src]!")) + did_shock = TRUE + if(did_shock) + visible_message(span_bolddanger("\The [src] repels \the [attacker] on contact, shocking [attacker.p_them()].")) + do_sparks(5,TRUE,src) diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm index 5774716fca71..02f66b54236a 100644 --- a/code/game/mecha/combat/gygax.dm +++ b/code/game/mecha/combat/gygax.dm @@ -14,7 +14,7 @@ wreckage = /obj/structure/mecha_wreckage/gygax internal_damage_threshold = 35 max_equip = 3 - step_energy_drain = 3 + base_step_energy_drain = 8 /obj/mecha/combat/gygax/mechturn(direction) . = ..() @@ -58,6 +58,13 @@ return cell = new /obj/item/stock_parts/cell/bluespace(src) +/obj/mecha/combat/gygax/inteq + name = "\improper Basenji" + desc = "A lightweight security exosuit, modified to IRMG standards. The leg actuators have been maxed out, allowing for powerful short ranged charges." + icon_state = "inteqgygax" + charge_break_walls = TRUE + charge_toss_structures = TRUE + charge_toss_mobs = TRUE /obj/mecha/combat/gygax/GrantActions(mob/living/user, human_occupant = 0) ..() @@ -67,3 +74,12 @@ /obj/mecha/combat/gygax/RemoveActions(mob/living/user, human_occupant = 0) ..() overload_action.Remove(user) + +/obj/mecha/combat/gygax/inteq/GrantActions(mob/living/user, human_occupant = 0) + ..() + overload_action.Remove(user) + charge_action.Grant(user,src) + +/obj/mecha/combat/gygax/inteq/RemoveActions(mob/living/user, human_occupant) + . = ..() + charge_action.Remove(user) diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index d1d4bfc1ea48..825d5e24a1b8 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -71,22 +71,22 @@ ME.attach(src) max_ammo() -/obj/mecha/combat/marauder/mauler - desc = "Heavy-duty, combat exosuit, developed off of the existing Marauder model." - name = "\improper Mauler" - icon_state = "mauler" +/obj/mecha/combat/marauder/touro + desc = "A powerful ICW-era combat exosuit, developed off of Nanotrasen's Marauder model by Cybersun Biodynamics." + name = "\improper Touro" + icon_state = "touro" operation_req_access = list(ACCESS_SYNDICATE) internals_req_access = list(ACCESS_SYNDICATE) - wreckage = /obj/structure/mecha_wreckage/mauler + wreckage = /obj/structure/mecha_wreckage/touro max_equip = 6 destruction_sleep_duration = 20 -/obj/mecha/combat/marauder/mauler/Initialize() +/obj/mecha/combat/marauder/touro/Initialize() . = ..() var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/thrusters/ion(src) ME.attach(src) -/obj/mecha/combat/marauder/mauler/loaded/Initialize() +/obj/mecha/combat/marauder/touro/loaded/Initialize() . = ..() var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg(src) ME.attach(src) diff --git a/code/game/mecha/combat/phazon.dm b/code/game/mecha/combat/phazon.dm index 95b60eba68d8..f1c48e8cc307 100644 --- a/code/game/mecha/combat/phazon.dm +++ b/code/game/mecha/combat/phazon.dm @@ -4,7 +4,7 @@ icon_state = "phazon" step_in = 2 dir_in = 2 //Facing South. - step_energy_drain = 3 + base_step_energy_drain = 8 max_integrity = 200 deflect_chance = 30 armor = list("melee" = 30, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 30, "bio" = 0, "rad" = 50, "fire" = 100, "acid" = 100) diff --git a/code/game/mecha/combat/reticence.dm b/code/game/mecha/combat/reticence.dm index 0d11859352d8..b63487ca17a5 100644 --- a/code/game/mecha/combat/reticence.dm +++ b/code/game/mecha/combat/reticence.dm @@ -14,7 +14,7 @@ add_req_access = 0 internal_damage_threshold = 25 max_equip = 2 - step_energy_drain = 3 + base_step_energy_drain = 8 color = "#87878715" stepsound = null turnsound = null diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index 63d308f69558..b7f225306b01 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -2,7 +2,7 @@ //I'm annoyed I even have to tell you this! SPRITE FIRST, then commit. /obj/item/mecha_parts/mecha_equipment - name = "mecha equipment" + name = "exosuit equipment" icon = 'icons/mecha/mecha_equipment.dmi' icon_state = "mecha_equip" force = 5 diff --git a/code/game/mecha/equipment/tools/mining_tools.dm b/code/game/mecha/equipment/tools/mining_tools.dm index 6283cd278645..d330865a4be2 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,22 @@ 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) + drill.occupant_message("You drill through some of the outer plating...") + playsound(src,'sound/weapons/drill.ogg',60,TRUE) + if(!alter_integrity(-drill.wall_decon_damage)) + return 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) + drill.occupant_message("You drill through some of the outer plating...") + playsound(src,'sound/weapons/drill.ogg',60,TRUE) + if(!alter_integrity(-drill.wall_decon_damage)) + return TRUE + else drill.occupant_message("[src] is too durable to drill through.") @@ -150,6 +158,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/mecha/equipment/tools/weapon_bay.dm b/code/game/mecha/equipment/tools/weapon_bay.dm index 5fe3e14880f4..bd8497e9774e 100644 --- a/code/game/mecha/equipment/tools/weapon_bay.dm +++ b/code/game/mecha/equipment/tools/weapon_bay.dm @@ -1,6 +1,6 @@ /obj/item/mecha_parts/concealed_weapon_bay name = "concealed weapon bay" - desc = "A compartment that allows a non-combat mecha to equip one weapon while hiding the weapon from plain sight." + desc = "A compartment that allows a civilian exosuit to equip one weapon while hiding the weapon from plain sight." icon = 'icons/mecha/mecha_equipment.dmi' icon_state = "mecha_weapon_bay" diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm index 95e7b2f07224..aa5dbf38c27f 100644 --- a/code/game/mecha/equipment/tools/work_tools.dm +++ b/code/game/mecha/equipment/tools/work_tools.dm @@ -491,10 +491,90 @@ return 1 //WS Edit End - Readded from Smartwire Revert +/obj/item/mecha_parts/mecha_equipment/salvage_saw + name = "109-C Salvage Saw" + desc = "Equipment for cutting open walls and airlocks." + icon_state = "mecha_saw" + equip_cooldown = 5 + energy_drain = 10 + force = 15 + var/dam_force = 30 + harmful = TRUE + tool_behaviour = TOOL_DECONSTRUCT + toolspeed = 0.5 + var/datum/effect_system/spark_spread/spark_system + +/obj/item/mecha_parts/mecha_equipment/salvage_saw/can_attach(obj/mecha/M as obj) + if(..()) + if(istype(M, /obj/mecha/working) || istype(M, /obj/mecha/combat)) + return 1 + return 0 + +/obj/item/mecha_parts/mecha_equipment/salvage_saw/attach() + ..() + toolspeed = 0.5 + return + +/obj/item/mecha_parts/mecha_equipment/salvage_saw/detach() + ..() + toolspeed = 10 //yeah sure, use a mech tool without a mech. see how far that gets you + return ..() + +/obj/item/mecha_parts/mecha_equipment/salvage_saw/action(atom/target) + if(!action_checks(target)) + return + if(isliving(target)) + if(chassis.occupant.a_intent == INTENT_HARM) + var/mob/living/M = target + saw_mob(M, chassis.occupant) + return + else + target.add_overlay(GLOB.cutting_effect) + if(target.deconstruct_act(chassis.occupant, src)) + do_sparks(2, TRUE, src) + chassis.stopped-- + target.cut_overlay(GLOB.cutting_effect) + if(!chassis.stopped) + occupant_message("[src] finishes cutting, allowing movement again.") + +/obj/item/mecha_parts/mecha_equipment/salvage_saw/tool_start_check(user, amount) + if(!chassis.stopped) + occupant_message("[src] begins cutting, locking in place!") + chassis.stopped++ + return TRUE + +/obj/item/mecha_parts/mecha_equipment/salvage_saw/proc/saw_mob(mob/living/target, mob/user) + target.visible_message("[chassis] is sawing [target] with [src]!", \ + "[chassis] is sawing you with [src]!") + if(!do_after_cooldown(target)) + return + log_combat(user, target, "sawed", "[name]", "(INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(damtype)])") + if(target.stat == DEAD && target.getBruteLoss() >= 400) + log_combat(user, target, "gibbed", name) + target.gib() + else + var/obj/item/bodypart/target_part = target.get_bodypart(ran_zone(BODY_ZONE_CHEST)) + target.apply_damage(15, BRUTE, BODY_ZONE_CHEST, target.run_armor_check(target_part, "melee")) + + //blood splatters + var/splatter_dir = get_dir(chassis, target) + if(isalien(target)) + new /obj/effect/temp_visual/dir_setting/bloodsplatter/xenosplatter(target.drop_location(), splatter_dir) + else + var/splatter_color = null + if(iscarbon(target)) + var/mob/living/carbon/carbon_target = target + splatter_color = carbon_target.dna.blood_type.color + new /obj/effect/temp_visual/dir_setting/bloodsplatter(target.drop_location(), splatter_dir, splatter_color) + + //organs go everywhere + if(target_part && prob(10)) + target_part.dismember(BRUTE) + //Dunno where else to put this so shrug /obj/item/mecha_parts/mecha_equipment/conversion_kit - name = "Mecha Conversion Kit" - desc = "A perfectly generic conversion kit for a perfectly generic mecha. How did you even get this?" + name = "Exosuit Conversion Kit" + desc = "A perfectly generic conversion kit for a perfectly generic exosuit. How did you even get this?" icon_state = "ripleyupgrade" var/source_mech = list(null) //must be a list due to the mining ripley existing var/result_mech = null @@ -575,3 +655,10 @@ icon_state = "clipupgrade" source_mech = list(/obj/mecha/combat/durand) result_mech = /obj/mecha/combat/durand/clip + +/obj/item/mecha_parts/mecha_equipment/conversion_kit/inteq_gygax + name = "IRMG Basenji Conversion Kit" + desc = "An IRMG-custom conversion kit for a Gygax combat exosuit, to convert it to the specialized Pyrnese breaching exosuit." + source_mech = list(/obj/mecha/combat/gygax,/obj/mecha/combat/gygax/dark) + result_mech = /obj/mecha/combat/gygax/inteq + diff --git a/code/game/mecha/equipment/weapons/mecha_ammo.dm b/code/game/mecha/equipment/weapons/mecha_ammo.dm index 73597ff21e49..0febe3327cb6 100644 --- a/code/game/mecha/equipment/weapons/mecha_ammo.dm +++ b/code/game/mecha/equipment/weapons/mecha_ammo.dm @@ -50,7 +50,7 @@ /obj/item/mecha_ammo/lmg name = "machine gun ammo" - desc = "A box of linked ammunition, designed for the Ultra AC 2 exosuit weapon." + desc = "A box of linked ammunition, designed for the UMG-2 exosuit weapon." icon_state = "lmg" rounds = 300 ammo_type = "lmg" diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index b0b40ea0877e..39b39ffeeff0 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -1,5 +1,5 @@ /obj/item/mecha_parts/mecha_equipment/weapon - name = "mecha weapon" + name = "exosuit weapon" range = MECHA_RANGED destroy_sound = 'sound/mecha/weapdestr.ogg' var/projectile @@ -300,7 +300,7 @@ /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine - name = "\improper FNX-99 \"Hades\" Carbine" + name = "\improper FNX-99 \"Phoenix\" Exosuit Carbine" desc = "A weapon for combat exosuits. Shoots incendiary bullets." icon_state = "mecha_carbine" equip_cooldown = 10 @@ -323,7 +323,7 @@ harmful = TRUE /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot - name = "\improper LBX AC 10 \"Scattershot\"" + name = "\improper LBX-10 \"Scattershot\" Heavy Shotgun" desc = "A weapon for combat exosuits. Shoots a spread of pellets." icon_state = "mecha_scatter" equip_cooldown = 20 @@ -337,7 +337,7 @@ ammo_type = "scattershot" /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg - name = "\improper Ultra AC 2" + name = "\improper UMG-2 Mounted Machine Gun" desc = "A weapon for combat exosuits. Shoots a rapid, three shot burst." icon_state = "mecha_uac2" equip_cooldown = 10 @@ -353,7 +353,7 @@ ammo_type = "lmg" /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg/mounted - name = "\improper mounted HMG" + name = "\improper Mounted Heavy Machine Gun" desc = "A heavy calibre machine gun commonly used by motorized forces, famed for it's ability to give people on the recieving end more holes than normal. It is modified to be attached to vehicles" projectile = /obj/projectile/bullet/lmg fire_sound = 'sound/weapons/gun/hmg/hmg.ogg' diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index ca24240b4f2e..04a2ef75bc40 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -1,6 +1,6 @@ /turf/open/floor/mech_bay_recharge_floor // Whos idea it was - name = "mech bay recharge station" // Recharging turfs - desc = "Parking a mech on this station will recharge its internal power cell." + name = "exosuit bay recharge station" // Recharging turfs + desc = "Parking an exosuit on this station will recharge its internal power cell." icon = 'icons/turf/floors.dmi' // That are set in stone to check the west turf for recharge port icon_state = "recharge_floor" // Some people just want to watch the world burn i guess @@ -12,8 +12,8 @@ initial_gas_mix = AIRLESS_ATMOS /obj/machinery/mech_bay_recharge_port - name = "mech bay power port" - desc = "This port recharges a mech's internal power cell." + name = "exosuit bay power port" + desc = "This port recharges an exosuit's internal power cell." density = TRUE dir = EAST icon = 'icons/mecha/mech_bay.dmi' @@ -81,8 +81,8 @@ return ..() /obj/machinery/computer/mech_bay_power_console - name = "mech bay power control console" - desc = "Displays the status of mechs connected to the recharge station." + name = "exosuit bay power control console" + desc = "Displays the status of exosuits connected to the recharge station." icon_screen = "recharge_comp" icon_keyboard = "rd_key" circuit = /obj/item/circuitboard/computer/mech_bay_power_console diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 48cc0388b508..eba4801ba56d 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -1,5 +1,5 @@ /obj/mecha - name = "mecha" + name = "exosuit" desc = "Exosuit" icon = 'icons/mecha/mecha.dmi' density = TRUE //Dense. To raise the heat. @@ -15,11 +15,12 @@ light_on = FALSE var/ruin_mecha = FALSE //if the mecha starts on a ruin, don't automatically give it a tracking beacon to prevent metagaming. var/can_move = 0 //time of next allowed movement + var/stopped = FALSE var/mob/living/carbon/occupant = null var/step_in = 10 //make a step in step_in/10 sec. var/dir_in = 2//What direction will the mech face when entered/powered on? Defaults to South. - var/normal_step_energy_drain = 10 //How much energy the mech will consume each time it moves. This variable is a backup for when leg actuators affect the energy drain. - var/step_energy_drain = 10 + var/base_step_energy_drain = 15 //The base amount of energy the mech should consume each time it moves. This variable is a backup for when leg actuators affect the energy drain. + var/step_energy_drain // How much energy the mech actually consumes when moving after modifiers (Eg, stock parts, leg actuators) var/melee_energy_drain = 15 var/overload_step_energy_drain_min = 100 max_integrity = 300 //max_integrity is base health @@ -41,6 +42,16 @@ var/last_user_hud = 1 // used to show/hide the mecha hud while preserving previous preference var/completely_disabled = FALSE //stops the mech from doing anything + ///Vars for mech charges + var/charging = FALSE + var/charge_ready = TRUE + var/charge_cooldown = 50 + var/charge_power_consume = 200 + var/charge_distance = 5 + var/charge_break_walls = FALSE + var/charge_toss_structures = FALSE + var/charge_toss_mobs = FALSE + var/bumpsmash = 0 //Whether or not the mech destroys walls by running into it. //inner atmos var/use_internal_tank = 0 @@ -90,6 +101,7 @@ var/datum/action/innate/mecha/mech_view_stats/stats_action = new var/datum/action/innate/mecha/mech_defense_mode/defense_action = new var/datum/action/innate/mecha/mech_overload_mode/overload_action = new + var/datum/action/innate/mecha/mech_charge_mode/charge_action = new var/datum/effect_system/smoke_spread/smoke_system = new //not an action, but trigged by one var/datum/action/innate/mecha/mech_smoke/smoke_action = new var/datum/action/innate/mecha/mech_zoom/zoom_action = new @@ -137,7 +149,7 @@ add_scanmod() add_capacitor() START_PROCESSING(SSobj, src) - GLOB.poi_list |= src + SSpoints_of_interest.make_point_of_interest(src) log_message("[src.name] created.", LOG_MECHA) GLOB.mechas_list += src //global mech list prepare_huds() @@ -147,6 +159,7 @@ diag_hud_set_mechcell() diag_hud_set_mechstat() become_hearing_sensitive(ROUNDSTART_TRAIT) + update_part_values() /obj/mecha/update_icon_state() if(silicon_pilot && silicon_icon_state) @@ -175,7 +188,7 @@ AI.gib() //No wreck, no AI to recover AI = null STOP_PROCESSING(SSobj, src) - GLOB.poi_list.Remove(src) + SSpoints_of_interest.remove_point_of_interest(src) equipment.Cut() for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds) @@ -225,11 +238,9 @@ /obj/mecha/proc/update_part_values() ///Updates the values given by scanning module and capacitor tier, called when a part is removed or inserted. if(scanmod) - normal_step_energy_drain = 20 - (5 * scanmod.rating) //10 is normal, so on lowest part its worse, on second its ok and on higher its real good up to 0 on best - step_energy_drain = normal_step_energy_drain + step_energy_drain = max(1, base_step_energy_drain - (5 * scanmod.rating)) //10 is normal, so on lowest part its worse, on second its ok and on higher its real good up to 0 on best else - normal_step_energy_drain = 500 - step_energy_drain = normal_step_energy_drain + step_energy_drain = 500 if(capacitor) armor = armor.modifyRating(energy = (capacitor.rating * 5)) //Each level of capacitor protects the mech against emp by 5% else //because we can still be hit without a cap, even if we can't move @@ -404,13 +415,13 @@ var/integrity = obj_integrity/max_integrity*100 switch(integrity) if(30 to 45) - occupant.throw_alert("mech damage", /atom/movable/screen/alert/low_mech_integrity, 1) + occupant.throw_alert("exosuit damage", /atom/movable/screen/alert/low_mech_integrity, 1) if(15 to 35) - occupant.throw_alert("mech damage", /atom/movable/screen/alert/low_mech_integrity, 2) + occupant.throw_alert("exosuit damage", /atom/movable/screen/alert/low_mech_integrity, 2) if(-INFINITY to 15) - occupant.throw_alert("mech damage", /atom/movable/screen/alert/low_mech_integrity, 3) + occupant.throw_alert("exosuit damage", /atom/movable/screen/alert/low_mech_integrity, 3) else - occupant.clear_alert("mech damage") + occupant.clear_alert("exosuit damage") var/atom/checking = occupant.loc // recursive check to handle all cases regarding very nested occupants, // such as brainmob inside brainitem inside MMI inside mecha @@ -419,7 +430,7 @@ // hit a turf before hitting the mecha, seems like they have // been moved out occupant.clear_alert("charge") - occupant.clear_alert("mech damage") + occupant.clear_alert("exosuit damage") RemoveActions(occupant, human_occupant=1) occupant = null break @@ -586,6 +597,8 @@ /obj/mecha/proc/domove(direction) if(can_move >= world.time) return 0 + if(stopped) + return 0 if(!Process_Spacemove(direction)) return 0 if(!has_charge(step_energy_drain)) @@ -644,6 +657,7 @@ step_silent = FALSE /obj/mecha/Bump(atom/obstacle) + var/atom/throw_target = get_edge_target_turf(obstacle, dir) if(phasing && get_charge() >= phasing_energy_drain && !throwing) if(!can_move) return @@ -655,6 +669,27 @@ forceMove(get_step(src,dir)) use_power(phasing_energy_drain) addtimer(VARSET_CALLBACK(src, can_move, TRUE), step_in*3) + else if(charging) + if(charge_break_walls && iswallturf(obstacle)) + var/turf/closed/wall/crushed = obstacle + playsound(src, 'sound/effects/meteorimpact.ogg', 100, TRUE) + visible_message(span_danger("[src] smashes through [obstacle]")) + crushed.dismantle_wall(TRUE) + if(isobj(obstacle)) + var/obj/object = obstacle + obstacle.mech_melee_attack(src) + if(!(object.resistance_flags & INDESTRUCTIBLE) && charge_toss_structures) + object.throw_at(throw_target, 4, 3) + visible_message(span_danger("[src] crashes into [obstacle]!")) + playsound(src, 'sound/effects/bang.ogg', 50, TRUE) + if(ishuman(obstacle)) + var/mob/living/carbon/human/H = obstacle + H.throw_at(throw_target,4,3) + visible_message(span_danger("[src] slams into \the [obstacle], sending [obstacle.p_them()] flying!")) + playsound(H, 'sound/effects/bang.ogg', 100, FALSE, -1) + H.Paralyze(20) + H.adjustStaminaLoss(30) + H.apply_damage(rand(20,35), BRUTE) else if(..()) //mech was thrown return @@ -1024,10 +1059,10 @@ final_exit_delay = exit_delay/2 if(do_after(occupant, has_gravity() ? final_exit_delay : 0 , target = src)) - to_chat(occupant, "You exit the mech.") + to_chat(occupant, "You exit the exosuit.") go_out() else - to_chat(occupant, "You stop exiting the mech. Weapons are enabled again.") + to_chat(occupant, "You stop exiting the exosuit. Weapons are enabled again.") is_currently_ejecting = FALSE /obj/mecha/Exited(atom/movable/M, atom/newloc) @@ -1052,7 +1087,7 @@ return var/atom/movable/mob_container occupant.clear_alert("charge") - occupant.clear_alert("mech damage") + occupant.clear_alert("exosuit damage") if(ishuman(occupant)) mob_container = occupant RemoveActions(occupant, human_occupant=1) @@ -1213,3 +1248,30 @@ GLOBAL_VAR_INIT(year_integer, text2num(year)) // = 2013??? else to_chat(user, "None of the equipment on this exosuit can use this ammo!") return FALSE + + +/////////////////////// +////// Charging ///// +/////////////////////// + +/obj/mecha/proc/start_charge() + Shake(15, 15, 1 SECONDS) + var/obj/effect/temp_visual/decoy/new_decoy = new /obj/effect/temp_visual/decoy(loc,src) + animate(new_decoy, alpha = 0, color = "#5a5858", transform = matrix()*2, time = 2) + addtimer(CALLBACK(src,PROC_REF(handle_charge)),0.5 SECONDS, TIMER_STOPPABLE) + +/obj/mecha/proc/handle_charge() + var/turf/mecha_loc = get_turf(src) + charging = TRUE + var/turf/charge_target = get_ranged_target_turf(mecha_loc,dir,charge_distance) + if(!charge_target) + charging = FALSE + return + cell.use(charge_power_consume) + walk_towards(src, charge_target, 0.7) + sleep(get_dist(src, charge_target) * 0.7) + charge_end() + +/obj/mecha/proc/charge_end() + walk(src,0) + charging = FALSE diff --git a/code/game/mecha/mecha_actions.dm b/code/game/mecha/mecha_actions.dm index 58fa675ac062..f10fb49c29bc 100644 --- a/code/game/mecha/mecha_actions.dm +++ b/code/game/mecha/mecha_actions.dm @@ -36,7 +36,7 @@ return ..() /datum/action/innate/mecha/mech_eject - name = "Eject From Mech" + name = "Eject From Exosuit" button_icon_state = "mech_eject" /datum/action/innate/mecha/mech_eject/Activate() @@ -179,10 +179,24 @@ else chassis.leg_overload_mode = 0 chassis.step_in = initial(chassis.step_in) - chassis.step_energy_drain = chassis.normal_step_energy_drain + chassis.update_part_values() chassis.occupant_message("You disable leg actuators overload.") UpdateButtonIcon() +/datum/action/innate/mecha/mech_charge_mode + name = "Charge" + button_icon_state = "mech_overload_off" + +/datum/action/innate/mecha/mech_charge_mode/Activate() + if(!owner || !chassis || chassis.occupant != owner) + return + if(chassis.charge_ready && !chassis.charging) + chassis.start_charge() + chassis.charge_ready = FALSE + addtimer(VARSET_CALLBACK(chassis, charge_ready, TRUE), chassis.charge_cooldown) + else + chassis.occupant_message(span_warning("The leg actuators are still recharging!")) + /datum/action/innate/mecha/mech_smoke name = "Smoke" button_icon_state = "mech_smoke" diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm index 5172619ba022..7a3c67140b5e 100644 --- a/code/game/mecha/mecha_construction_paths.dm +++ b/code/game/mecha/mecha_construction_paths.dm @@ -760,10 +760,6 @@ list( "key" = /obj/item/bikehorn ), - list( - "key" = /obj/item/clothing/shoes/clown_shoes, - "action" = ITEM_DELETE - ), list( "key" = /obj/item/bikehorn ), diff --git a/code/game/mecha/mecha_defense.dm b/code/game/mecha/mecha_defense.dm index 50652434c6f6..b6c72134456d 100644 --- a/code/game/mecha/mecha_defense.dm +++ b/code/game/mecha/mecha_defense.dm @@ -99,10 +99,6 @@ log_message("Attack by hulk. Attacker - [user].", LOG_MECHA, color="red") log_combat(user, src, "punched", "hulk powers") -/obj/mecha/blob_act(obj/structure/blob/B) - log_message("Attack by blob. Attacker - [B].", LOG_MECHA, color="red") - take_damage(30, BRUTE, "melee", 0, get_dir(src, B)) - /obj/mecha/attack_tk() return @@ -253,7 +249,7 @@ clearInternalDamage(MECHA_INT_SHORT_CIRCUIT) to_chat(user, "You replace the fused wires.") else - to_chat(user, "You need two lengths of cable to fix this mech!") + to_chat(user, "You need two lengths of cable to fix this exosuit!") return if(istype(W, /obj/item/mecha_parts)) diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm index 55d477f1817c..5a0e457e42c9 100644 --- a/code/game/mecha/mecha_parts.dm +++ b/code/game/mecha/mecha_parts.dm @@ -3,7 +3,7 @@ ///////////////////////// /obj/item/mecha_parts - name = "mecha part" + name = "exosuit part" icon = 'icons/mecha/mech_construct.dmi' icon_state = "blank" w_class = WEIGHT_CLASS_GIGANTIC @@ -20,7 +20,7 @@ return /obj/item/mecha_parts/chassis - name = "Mecha Chassis" + name = "Exosuit Chassis" icon_state = "backbone" interaction_flags_item = NONE //Don't pick us up!! var/construct_type diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm index 27c680120fae..b8808944b5bd 100644 --- a/code/game/mecha/mecha_wreckage.dm +++ b/code/game/mecha/mecha_wreckage.dm @@ -129,9 +129,9 @@ name = "\improper Marauder wreckage" icon_state = "marauder-broken" -/obj/structure/mecha_wreckage/mauler - name = "\improper Mauler wreckage" - icon_state = "mauler-broken" +/obj/structure/mecha_wreckage/touro + name = "\improper Touro wreckage" + icon_state = "touro-broken" desc = "The syndicate won't be very happy about this..." /obj/structure/mecha_wreckage/seraph diff --git a/code/game/mecha/medical/odysseus.dm b/code/game/mecha/medical/odysseus.dm index 27e139c84ab6..4874ab142647 100644 --- a/code/game/mecha/medical/odysseus.dm +++ b/code/game/mecha/medical/odysseus.dm @@ -8,7 +8,7 @@ wreckage = /obj/structure/mecha_wreckage/odysseus internal_damage_threshold = 35 deflect_chance = 15 - step_energy_drain = 6 + base_step_energy_drain = 11 /obj/mecha/medical/odysseus/moved_inside(mob/living/carbon/human/H) . = ..() diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index 40783ecbb204..9f360011df86 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -107,7 +107,7 @@ light_range = 7 light_power = 1 wreckage = /obj/structure/mecha_wreckage/ripley/deathripley - step_energy_drain = 0 + base_step_energy_drain = 0 enclosed = TRUE enter_delay = 40 silicon_icon_state = null @@ -167,11 +167,11 @@ scanner.attach(src) /obj/mecha/working/ripley/clip - desc = "An APLU utility mech, refitted with a lightweight pressurized cockpit and more powerful servos by the CLIP. While it preserves the Mk. I's speed, the overdriven motors tend to strain its power supply." + desc = "An APLU utility exosuit, refitted with a lightweight pressurized cockpit and more powerful servos by the CLIP. While it preserves the Mk. I's speed, the overdriven motors tend to strain its power supply." name = "\improper CLIP APLU Mk-IV \"Rogue\"" icon_state = "clipripley" base_icon_state = "clipripley" - step_energy_drain = 15 //overdriven servos are less efficient + base_step_energy_drain = 20 //overdriven servos are less efficient wreckage = /obj/structure/mecha_wreckage/ripley/clip enclosed = TRUE enter_delay = 20 //slower than a mk. I, faster than the armored Ripleys diff --git a/code/game/objects/effects/anomalies/anomalies_bluespace.dm b/code/game/objects/effects/anomalies/anomalies_bluespace.dm index 58267030960e..f7012e532944 100644 --- a/code/game/objects/effects/anomalies/anomalies_bluespace.dm +++ b/code/game/objects/effects/anomalies/anomalies_bluespace.dm @@ -63,7 +63,7 @@ if(istype(A, /obj/item/beacon)) continue // don't teleport beacons because that's just insanely stupid if(iscameramob(A)) - continue // Don't mess with AI eye, blob eye, xenobio or advanced cameras + continue // Don't mess with AI eye, xenobio or advanced cameras if(A.anchored) continue diff --git a/code/game/objects/effects/blessing.dm b/code/game/objects/effects/blessing.dm index be2d89707882..66b027f2e516 100644 --- a/code/game/objects/effects/blessing.dm +++ b/code/game/objects/effects/blessing.dm @@ -16,14 +16,7 @@ I.alpha = 64 I.appearance_flags = RESET_ALPHA add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/blessedAware, "blessing", I) - RegisterSignal(loc, COMSIG_ATOM_INTERCEPT_TELEPORT, PROC_REF(block_cult_teleport)) /obj/effect/blessing/Destroy() UnregisterSignal(loc, COMSIG_ATOM_INTERCEPT_TELEPORT) return ..() - -/obj/effect/blessing/proc/block_cult_teleport(datum/source, channel, turf/origin, turf/destination) - SIGNAL_HANDLER - - if(channel == TELEPORT_CHANNEL_CULT) - return COMPONENT_BLOCK_TELEPORT diff --git a/code/game/objects/effects/contraband.dm b/code/game/objects/effects/contraband.dm index 4177d8957965..1227ff3847b3 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 @@ -519,7 +519,7 @@ /obj/structure/sign/poster/contraband/m90 name = "M90 SMG" desc = "A poster advertising the Scarborough M90. Burst action with a grenade launcher, for some reason." - icon_state = "poster-bulldog" + icon_state = "poster-m90" /obj/structure/sign/poster/contraband/inteq_nt name = "Inteq Recruitment" diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm index 4161403fefd9..3ec6f58aa7b1 100644 --- a/code/game/objects/effects/decals/cleanable.dm +++ b/code/game/objects/effects/decals/cleanable.dm @@ -89,8 +89,9 @@ /obj/effect/decal/cleanable/wash(clean_types) ..() if(!(flags_1 & INITIALIZED_1)) - return FALSE - qdel(src) + return + if(clean_types in list(CLEAN_WASH, CLEAN_SCRUB)) + qdel(src) return TRUE /obj/effect/decal/cleanable/proc/can_bloodcrawl_in() diff --git a/code/game/objects/effects/decals/cleanable/humans.dm b/code/game/objects/effects/decals/cleanable/humans.dm index 3dd327dda08c..5de5510bec7b 100644 --- a/code/game/objects/effects/decals/cleanable/humans.dm +++ b/code/game/objects/effects/decals/cleanable/humans.dm @@ -68,6 +68,8 @@ random_icon_states = list("gibbl1", "gibbl2", "gibbl3", "gibbl4", "gibbl5") dryname = "dried tracks" drydesc = "Some old bloody tracks left by wheels. Machines are evil, perhaps." + ///Absorb the /squirt subtype when it exists on the turf + var/absorb_squirts = TRUE /obj/effect/decal/cleanable/blood/tracks icon_state = "tracks" @@ -278,3 +280,132 @@ if((blood_state != BLOOD_STATE_OIL) && (blood_state != BLOOD_STATE_NOT_BLOODY)) return 1 return 0 + +/obj/effect/decal/cleanable/blood/hitsplatter + name = "blood splatter" + pass_flags = PASSTABLE | PASSGRILLE + icon_state = "hitsplatter1" + random_icon_states = list("hitsplatter1", "hitsplatter2", "hitsplatter3") + /// The turf we just came from, so we can back up when we hit a wall + var/turf/prev_loc + /// The cached info about the blood + var/list/blood_dna_info + /// Skip making the final blood splatter when we're done, like if we're not in a turf + var/skip = FALSE + /// How many tiles/items/people we can paint red + var/splatter_strength = 3 + /// Insurance so that we don't keep moving once we hit a stoppoint + var/hit_endpoint = FALSE +// ///Absorb the /squirt subtype when it exists on the turf +// var/absorb_squirts = TRUE + +/obj/effect/decal/cleanable/blood/hitsplatter/Initialize(mapload, splatter_strength) + . = ..() + prev_loc = loc //Just so we are sure prev_loc exists + if(splatter_strength) + src.splatter_strength = splatter_strength + +/obj/effect/decal/cleanable/blood/hitsplatter/Destroy() + if(isturf(loc) && !skip) + playsound(src, 'sound/effects/splatter.ogg', 60, TRUE, -1) + if(blood_dna_info) + loc.add_blood_DNA(blood_dna_info) + return ..() + +/// Set the splatter up to fly through the air until it rounds out of steam or hits something. Contains sleep() pending imminent moveloop rework, don't call without async'ing it +/obj/effect/decal/cleanable/blood/hitsplatter/proc/fly_towards(turf/target_turf, range) + splatter_strength = range + for(var/i in 1 to range) + step_towards(src,target_turf) + sleep(2) // Will be resolved pending Potato's moveloop rework + for(var/atom/iter_atom in get_turf(src)) + if(hit_endpoint) + return + if(splatter_strength <= 0) + break + + if(isitem(iter_atom)) + iter_atom.add_blood_DNA(blood_dna_info) + splatter_strength-- + else if(ishuman(iter_atom)) + var/mob/living/carbon/human/splashed_human = iter_atom + if(splashed_human.wear_suit) + splashed_human.wear_suit.add_blood_DNA(blood_dna_info) + splashed_human.update_inv_wear_suit() //updates mob overlays to show the new blood (no refresh) + if(splashed_human.w_uniform) + splashed_human.w_uniform.add_blood_DNA(blood_dna_info) + splashed_human.update_inv_w_uniform() //updates mob overlays to show the new blood (no refresh) + splatter_strength-- + + if(splatter_strength <= 0) // we used all the puff so we delete it. + qdel(src) + return + + var/obj/effect/decal/cleanable/blood/newsplatter + if(splatter_strength <= 3.5) + newsplatter = new /obj/effect/decal/cleanable/blood/squirt(get_turf(src), get_dir(prev_loc, loc), blood_dna_info) + else + newsplatter = new /obj/effect/decal/cleanable/blood/splatter(get_turf(src)) + newsplatter.add_blood_DNA(blood_dna_info) + prev_loc = loc + + qdel(src) + return + +/obj/effect/decal/cleanable/blood/hitsplatter/Bump(atom/bumped_atom) + if(!iswallturf(bumped_atom) && !istype(bumped_atom, /obj/structure/window)) + qdel(src) + return + + if(istype(bumped_atom, /obj/structure/window)) + var/obj/structure/window/bumped_window = bumped_atom + if(!bumped_window.fulltile) + qdel(src) + return + + hit_endpoint = TRUE + if(isturf(prev_loc)) + abstract_move(bumped_atom) + skip = TRUE + //Adjust pixel offset to make splatters appear on the wall + if(istype(bumped_atom, /obj/structure/window)) + land_on_window(bumped_atom) + else + var/obj/effect/decal/cleanable/blood/splatter/over_window/final_splatter = new(prev_loc) + final_splatter.pixel_x = (dir == EAST ? 32 : (dir == WEST ? -32 : 0)) + final_splatter.pixel_y = (dir == NORTH ? 32 : (dir == SOUTH ? -32 : 0)) + else // This will only happen if prev_loc is not even a turf, which is highly unlikely. + abstract_move(bumped_atom) + qdel(src) + +/// A special case for hitsplatters hitting windows, since those can actually be moved around, store it in the window and slap it in the vis_contents +/obj/effect/decal/cleanable/blood/hitsplatter/proc/land_on_window(obj/structure/window/the_window) + if(!the_window.fulltile) + return + var/obj/effect/decal/cleanable/blood/splatter/over_window/final_splatter = new + final_splatter.forceMove(the_window) + the_window.vis_contents += final_splatter + the_window.bloodied = TRUE + qdel(src) + +/obj/effect/decal/cleanable/blood/squirt + name = "blood trail" + icon_state = "squirt" + random_icon_states = null + +/obj/effect/decal/cleanable/blood/squirt/Initialize(mapload, direction, list/blood_dna) + . = ..() + dir = direction + var/obj/effect/decal/cleanable/blood/splatter/existing_blood = locate() in get_turf(src) + if(existing_blood?.absorb_squirts) + if(blood_dna) + existing_blood.add_blood_DNA(blood_dna) + existing_blood.bloodiness = min((existing_blood.bloodiness + bloodiness), BLOOD_AMOUNT_PER_DECAL) + return INITIALIZE_HINT_QDEL + +/obj/effect/decal/cleanable/blood/splatter/over_window // special layer/plane set to appear on windows + layer = ABOVE_WINDOW_LAYER + plane = GAME_PLANE + turf_loc_check = FALSE + alpha = 180 + absorb_squirts = FALSE diff --git a/code/game/objects/effects/decals/decal.dm b/code/game/objects/effects/decals/decal.dm index 2dfea3173feb..0d2282eeb873 100644 --- a/code/game/objects/effects/decals/decal.dm +++ b/code/game/objects/effects/decals/decal.dm @@ -14,10 +14,6 @@ ) AddElement(/datum/element/connect_loc, loc_connections) -/obj/effect/decal/blob_act(obj/structure/blob/B) - if(B && B.loc == loc) - qdel(src) - /obj/effect/decal/proc/NeverShouldHaveComeHere(turf/T) return isclosedturf(T) || isgroundlessturf(T) diff --git a/code/game/objects/effects/decals/misc.dm b/code/game/objects/effects/decals/misc.dm index 5f84386668f2..f03fe61a1bea 100644 --- a/code/game/objects/effects/decals/misc.dm +++ b/code/game/objects/effects/decals/misc.dm @@ -5,9 +5,6 @@ pass_flags = PASSTABLE | PASSGRILLE layer = FLY_LAYER -/obj/effect/decal/chempuff/blob_act(obj/structure/blob/B) - return - /obj/effect/decal/fakelattice name = "lattice" desc = "A lightweight support lattice." diff --git a/code/game/objects/effects/decals/turfdecal/flooring_decals.dm b/code/game/objects/effects/decals/turfdecal/flooring_decals.dm index fc23ed89c278..a2ec15e5022f 100644 --- a/code/game/objects/effects/decals/turfdecal/flooring_decals.dm +++ b/code/game/objects/effects/decals/turfdecal/flooring_decals.dm @@ -166,7 +166,7 @@ TURF_DECAL_COLOR_HELPER(transparent/lightgrey, "#a8b2b6", 140) TURF_DECAL_COLOR_HELPER(transparent/bottlegreen, "#57967f", 140) TURF_DECAL_COLOR_HELPER(transparent/ntblue, "#283674", 140) TURF_DECAL_COLOR_HELPER(transparent/nsorange, "#FF6600", 140) -TURF_DECAL_COLOR_HELPER(opaque/vired, "#d40000", 140) +TURF_DECAL_COLOR_HELPER(transparent/vired, "#d40000", 140) TURF_DECAL_COLOR_HELPER(transparent/solgovblue, "#2d2a4e", 140) TURF_DECAL_COLOR_HELPER(transparent/solgovgold, "#eeac2e", 140) TURF_DECAL_COLOR_HELPER(transparent/syndiered, "#730622", 140) diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm index 51020d8f60dc..5fedeb47e455 100644 --- a/code/game/objects/effects/effect_system/effects_foam.dm +++ b/code/game/objects/effects/effect_system/effects_foam.dm @@ -48,13 +48,11 @@ /obj/effect/particle_effect/foam/firefighting/kill_foam() STOP_PROCESSING(SSfastprocess, src) - if(absorbed_plasma) var/obj/effect/decal/cleanable/plasma/P = (locate(/obj/effect/decal/cleanable/plasma) in get_turf(src)) if(!P) P = new(loc) P.reagents.add_reagent(/datum/reagent/stable_plasma, absorbed_plasma) - flick("[icon_state]-disolve", src) QDEL_IN(src, 5) @@ -67,6 +65,33 @@ /obj/effect/particle_effect/foam/firefighting/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) return + +/obj/effect/particle_effect/foam/antirad + name = "antiradiation foam" + lifetime = 80 + amount = 0 //no spread + slippery_foam = FALSE + color = "#A6FAFF55" + + +/obj/effect/particle_effect/foam/antirad/process() + ..() + + var/turf/open/T = get_turf(src) + var/obj/effect/radiation/rads = (locate(/obj/effect/radiation) in T) + if(rads && istype(T)) + rads.rad_power = rads.rad_power * rand(0.8, 0.95) + if (rads.rad_power <= RAD_BACKGROUND_RADIATION) + new /obj/effect/decal/cleanable/greenglow/filled(loc) + qdel(rads) + for(var/obj/things in get_turf(src)) + things.wash(CLEAN_TYPE_RADIATION) + +/obj/effect/particle_effect/foam/antirad/kill_foam() + STOP_PROCESSING(SSfastprocess, src) + flick("[icon_state]-disolve", src) + QDEL_IN(src, 5) + /obj/effect/particle_effect/foam/metal name = "aluminium foam" metal = ALUMINIUM_FOAM diff --git a/code/game/objects/effects/effect_system/effects_other.dm b/code/game/objects/effects/effect_system/effects_other.dm index 3f2b6ecaf94e..efa1de11103f 100644 --- a/code/game/objects/effects/effect_system/effects_other.dm +++ b/code/game/objects/effects/effect_system/effects_other.dm @@ -81,6 +81,9 @@ /datum/effect_system/trail_follow/proc/set_dir(obj/effect/particle_effect/ion_trails/I) I.setDir(holder.dir) +/datum/effect_system/trail_follow/ion/grav_allowed + nograv_required = FALSE + //Reagent-based explosion effect /datum/effect_system/reagents_explosion diff --git a/code/game/objects/effects/effects.dm b/code/game/objects/effects/effects.dm index fea67e7341b4..089b9b987965 100644 --- a/code/game/objects/effects/effects.dm +++ b/code/game/objects/effects/effects.dm @@ -20,9 +20,6 @@ /obj/effect/mech_melee_attack(obj/mecha/M) return 0 -/obj/effect/blob_act(obj/structure/blob/B) - return - /obj/effect/attack_hulk(mob/living/carbon/human/user) return FALSE diff --git a/code/game/objects/effects/forcefields.dm b/code/game/objects/effects/forcefields.dm index e46d8d92e82a..d4278d775888 100644 --- a/code/game/objects/effects/forcefields.dm +++ b/code/game/objects/effects/forcefields.dm @@ -19,14 +19,6 @@ /obj/effect/forcefield/singularity_pull() return -/obj/effect/forcefield/cult - desc = "An unholy shield that blocks all attacks." - name = "glowing wall" - icon = 'icons/effects/cult_effects.dmi' - icon_state = "cultshield" - CanAtmosPass = ATMOS_PASS_NO - timeleft = 200 - ///////////Mimewalls/////////// /obj/effect/forcefield/mime diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index 078c435bd213..ccc3e4f0286a 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -309,16 +309,6 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player) GLOB.xeno_spawn += loc return INITIALIZE_HINT_QDEL -//also blobs that have their spawn forcemoved (running out of time when picking their spawn spot), santa and respawning devils -/obj/effect/landmark/blobstart - name = "blobstart" - icon_state = "blob_start" - -/obj/effect/landmark/blobstart/Initialize(mapload) - ..() - GLOB.blobstart += loc - return INITIALIZE_HINT_QDEL - //spawns sec equipment lockers depending on the number of sec officers /obj/effect/landmark/secequipment name = "secequipment" diff --git a/code/game/objects/effects/particle_emitter.dm b/code/game/objects/effects/particle_emitter.dm index 3ee4ab8ed461..cc4210f742a1 100644 --- a/code/game/objects/effects/particle_emitter.dm +++ b/code/game/objects/effects/particle_emitter.dm @@ -1,7 +1,70 @@ -/obj/effect/particle_emitter - name = "" +///objects can only have one particle on them at a time, so we use these abstract effects to hold and display the effects. You know, so multiple particle effects can exist at once. +///also because some objects do not display particles due to how their visuals are built +/obj/effect/abstract/particle_holder + name = "particle holder" + desc = "How are you reading this? Please make a bug report :)" + appearance_flags = KEEP_APART|KEEP_TOGETHER|TILE_BOUND|PIXEL_SCALE|LONG_GLIDE //movable appearance_flags plus KEEP_APART and KEEP_TOGETHER + vis_flags = VIS_INHERIT_PLANE + layer = ABOVE_ALL_MOB_LAYER + mouse_opacity = MOUSE_OPACITY_TRANSPARENT anchored = TRUE - mouse_opacity = 0 + /// Holds info about how this particle emitter works + /// See \code\__DEFINES\particles.dm + var/particle_flags = NONE -/obj/effect/particle_emitter/Initialize(mapload, time) + var/atom/parent + +/obj/effect/abstract/particle_holder/Initialize(mapload, particle_path = /particles/smoke, particle_flags = NONE) . = ..() + if(!loc) + stack_trace("particle holder was created with no loc!") + return INITIALIZE_HINT_QDEL + // We nullspace ourselves because some objects use their contents (e.g. storage) and some items may drop everything in their contents on deconstruct. + parent = loc + loc = null + + // Mouse opacity can get set to opaque by some objects when placed into the object's contents (storage containers). + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + src.particle_flags = particle_flags + particles = new particle_path() + // /atom doesn't have vis_contents, /turf and /atom/movable do + var/atom/movable/lie_about_areas = parent + lie_about_areas.vis_contents += src + RegisterSignal(parent, COMSIG_PARENT_QDELETING, PROC_REF(parent_deleted)) + + if(particle_flags & PARTICLE_ATTACH_MOB) + RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(on_move)) + on_move(parent, null, NORTH) + +/obj/effect/abstract/particle_holder/Destroy(force) + QDEL_NULL(particles) + parent = null + return ..() + +/// Non movables don't delete contents on destroy, so we gotta do this +/obj/effect/abstract/particle_holder/proc/parent_deleted(datum/source) + SIGNAL_HANDLER + qdel(src) + +/// signal called when a parent that's been hooked into this moves +/// does a variety of checks to ensure overrides work out properly +/obj/effect/abstract/particle_holder/proc/on_move(atom/movable/attached, atom/oldloc, direction) + SIGNAL_HANDLER + + if(!(particle_flags & PARTICLE_ATTACH_MOB)) + return + + //remove old + if(ismob(oldloc)) + var/mob/particle_mob = oldloc + particle_mob.vis_contents -= src + + // If we're sitting in a mob, we want to emit from it too, for vibes and shit + if(ismob(attached.loc)) + var/mob/particle_mob = attached.loc + particle_mob.vis_contents += src + +/// Sets the particles position to the passed coordinate list (X, Y, Z) +/// See [https://www.byond.com/docs/ref/#/{notes}/particles] for position documentation +/obj/effect/abstract/particle_holder/proc/set_particle_position(list/pos) + particles.position = pos diff --git a/code/game/objects/effects/particles/acid.dm b/code/game/objects/effects/particles/acid.dm new file mode 100644 index 000000000000..5ce0984991d8 --- /dev/null +++ b/code/game/objects/effects/particles/acid.dm @@ -0,0 +1,15 @@ +// Acid related particles. +/particles/acid + icon = 'icons/effects/particles/goop.dmi' + icon_state = list("goop_1" = 6, "goop_2" = 2, "goop_3" = 1) + width = 100 + height = 100 + count = 100 + spawning = 0.5 + color = "#00ea2b80" //to get 96 alpha + lifespan = 1.5 SECONDS + fade = 1 SECONDS + grow = -0.025 + gravity = list(0, 0.15) + position = generator(GEN_SPHERE, 0, 16, NORMAL_RAND) + spin = generator(GEN_NUM, -15, 15, NORMAL_RAND) diff --git a/code/game/objects/effects/particles/fire.dm b/code/game/objects/effects/particles/fire.dm new file mode 100644 index 000000000000..fb20dc778e5e --- /dev/null +++ b/code/game/objects/effects/particles/fire.dm @@ -0,0 +1,55 @@ +// Fire related particles. +/particles/bonfire + icon = 'icons/effects/particles/bonfire.dmi' + icon_state = "bonfire" + width = 100 + height = 100 + count = 1000 + spawning = 4 + lifespan = 0.7 SECONDS + fade = 1 SECONDS + grow = -0.01 + velocity = list(0, 0) + position = generator(GEN_CIRCLE, 0, 16, NORMAL_RAND) + drift = generator(GEN_VECTOR, list(0, -0.2), list(0, 0.2)) + gravity = list(0, 0.95) + scale = generator(GEN_VECTOR, list(0.3, 0.3), list(1,1), NORMAL_RAND) + rotation = 30 + spin = generator(GEN_NUM, -20, 20) + +/particles/embers + icon = 'icons/effects/particles/generic.dmi' + icon_state = list("dot" = 4,"cross" = 1,"curl" = 1) + width = 64 + height = 96 + count = 500 + spawning = 5 + lifespan = 3 SECONDS + fade = 1 SECONDS + color = 0 + color_change = 0.05 + gradient = list("#FBAF4D", "#FCE6B6", "#FD481C") + position = generator(GEN_BOX, list(-12,-16,0), list(12,16,0), NORMAL_RAND) + drift = generator(GEN_VECTOR, list(-0.1,0), list(0.1,0.025)) + spin = generator(GEN_NUM, list(-15,15), NORMAL_RAND) + scale = generator(GEN_VECTOR, list(0.5,0.5), list(2,2), NORMAL_RAND) + +/particles/embers/lava + width = 700 + height = 700 + gradient = list(LIGHT_COLOR_FLARE, LIGHT_COLOR_FLARE , COLOR_ALMOST_BLACK) + spawning = 1 + +/particles/lava + width = 700 + height = 700 + count = 500 + spawning = 1 + lifespan = 4 SECONDS + fade = 2 SECONDS + position = generator(GEN_CIRCLE, 16, 24, NORMAL_RAND) + drift = generator(GEN_VECTOR, list(-0.2, -0.2), list(0.6, 0.6)) + velocity = generator(GEN_CIRCLE, -6, 6, NORMAL_RAND) + friction = 0.15 + gradient = list(0,LIGHT_COLOR_FLARE , 0.75, COLOR_ALMOST_BLACK) + color_change = 0.125 diff --git a/code/game/objects/effects/particles/misc.dm b/code/game/objects/effects/particles/misc.dm new file mode 100644 index 000000000000..18db20d63798 --- /dev/null +++ b/code/game/objects/effects/particles/misc.dm @@ -0,0 +1,32 @@ +// General or un-matched particles, make a new file if a few can be sorted together. +/particles/pollen + icon = 'icons/effects/particles/pollen.dmi' + icon_state = "pollen" + width = 100 + height = 100 + count = 1000 + spawning = 4 + lifespan = 0.7 SECONDS + fade = 1 SECONDS + grow = -0.01 + velocity = list(0, 0) + position = generator(GEN_CIRCLE, 0, 16, NORMAL_RAND) + drift = generator(GEN_VECTOR, list(0, -0.2), list(0, 0.2)) + gravity = list(0, 0.95) + scale = generator(GEN_VECTOR, list(0.3, 0.3), list(1,1), NORMAL_RAND) + rotation = 30 + spin = generator(GEN_NUM, -20, 20) + +/particles/echo + icon = 'icons/effects/particles/echo.dmi' + icon_state = list("echo1" = 1, "echo2" = 1, "echo3" = 2) + width = 480 + height = 480 + count = 1000 + spawning = 0.5 + lifespan = 2 SECONDS + fade = 1 SECONDS + gravity = list(0, -0.1) + position = generator(GEN_BOX, list(-240, -240), list(240, 240), NORMAL_RAND) + drift = generator(GEN_VECTOR, list(-0.1, 0), list(0.1, 0)) + rotation = generator(GEN_NUM, 0, 360, NORMAL_RAND) diff --git a/code/game/objects/effects/particles/slime.dm b/code/game/objects/effects/particles/slime.dm new file mode 100644 index 000000000000..5cef9c976257 --- /dev/null +++ b/code/game/objects/effects/particles/slime.dm @@ -0,0 +1,22 @@ +/// Slime particles. +/particles/slime + icon = 'icons/effects/particles/goop.dmi' + icon_state = list("goop_1" = 6, "goop_2" = 2, "goop_3" = 1) + width = 100 + height = 100 + count = 100 + spawning = 0.5 + color = "#707070a0" + lifespan = 1.5 SECONDS + fade = 1 SECONDS + grow = -0.025 + gravity = list(0, -0.05) + position = generator(GEN_BOX, list(-8,-16,0), list(8,16,0), NORMAL_RAND) + spin = generator(GEN_NUM, -15, 15, NORMAL_RAND) + scale = list(0.75, 0.75) + +/// Rainbow slime particles. +/particles/slime/rainbow + gradient = list(0, "#f00a", 3, "#0ffa", 6, "#f00a", "loop", "space"=COLORSPACE_HSL) + color_change = 0.2 + color = generator(GEN_NUM, 0, 6, UNIFORM_RAND) diff --git a/code/game/objects/effects/particles/smoke.dm b/code/game/objects/effects/particles/smoke.dm new file mode 100644 index 000000000000..72807e778f56 --- /dev/null +++ b/code/game/objects/effects/particles/smoke.dm @@ -0,0 +1,66 @@ +// All the smoke variant particles. +/particles/smoke + icon = 'icons/effects/particles/smoke.dmi' + icon_state = list("smoke_1" = 1, "smoke_2" = 1, "smoke_3" = 2) + width = 100 + height = 100 + count = 1000 + spawning = 4 + lifespan = 1.5 SECONDS + fade = 1 SECONDS + velocity = list(0, 0.4, 0) + position = list(6, 0, 0) + drift = generator(GEN_SPHERE, 0, 2, NORMAL_RAND) + friction = 0.2 + gravity = list(0, 0.95) + grow = 0.05 + +/particles/smoke/turf_fire + position = generator(GEN_SPHERE, 16, 24, NORMAL_RAND) + +/particles/smoke/burning + position = list(0, 0, 0) + +/particles/smoke/burning/small + spawning = 1 + scale = list(0.8, 0.8) + velocity = list(0, 0.4, 0) + +/particles/smoke/steam + icon_state = list("steam_1" = 1, "steam_2" = 1, "steam_3" = 2) + fade = 1.5 SECONDS + +/particles/smoke/steam/mild + spawning = 1 + velocity = list(0, 0.3, 0) + friction = 0.25 + +/particles/smoke/steam/bad + icon_state = list("steam_1" = 1, "smoke_1" = 1, "smoke_2" = 1, "smoke_3" = 1) + spawning = 2 + velocity = list(0, 0.25, 0) + +/particles/smoke/steam/vent + position = generator(GEN_SPHERE, 16, 16, NORMAL_RAND) + lifespan = 2 SECONDS + spawning = 3 + +/particles/smoke/steam/vent/low + spawning = 1 + velocity = list(0, 0.3, 0) + friction = 0.25 + +/particles/smoke/steam/vent/high + spawning = 8 + velocity = list(0, 0.25, 0) + count = 1000 + +/particles/smoke/ash + icon_state = list("ash_1" = 2, "ash_2" = 2, "ash_3" = 1, "smoke_1" = 3, "smoke_2" = 2) + count = 500 + spawning = 1 + lifespan = 1 SECONDS + fade = 0.2 SECONDS + fadein = 0.7 SECONDS + position = generator(GEN_VECTOR, list(-3, 5, 0), list(3, 6.5, 0), NORMAL_RAND) + velocity = generator(GEN_VECTOR, list(-0.1, 0.4, 0), list(0.1, 0.5, 0), NORMAL_RAND) diff --git a/code/game/objects/effects/particles/water.dm b/code/game/objects/effects/particles/water.dm new file mode 100644 index 000000000000..456617cb5d8a --- /dev/null +++ b/code/game/objects/effects/particles/water.dm @@ -0,0 +1,17 @@ +// Water related particles. +/particles/droplets + icon = 'icons/effects/particles/generic.dmi' + icon_state = list("dot"=2,"drop"=1) + width = 32 + height = 36 + count = 5 + spawning = 0.2 + lifespan = 1 SECONDS + fade = 0.5 SECONDS + color = "#549EFF" + position = generator(GEN_BOX, list(-9,-9,0), list(9,18,0), NORMAL_RAND) + scale = generator(GEN_VECTOR, list(0.9,0.9), list(1.1,1.1), NORMAL_RAND) + gravity = list(0, -0.9) + +/particles/droplets/blood + spawning = 0.2 diff --git a/code/game/objects/effects/portals.dm b/code/game/objects/effects/portals.dm index cfd5b8ba34b9..f285aa2058f3 100644 --- a/code/game/objects/effects/portals.dm +++ b/code/game/objects/effects/portals.dm @@ -31,6 +31,7 @@ var/innate_accuracy_penalty = 0 var/last_effect = 0 var/force_teleport = FALSE + var/restrain_vlevel = TRUE /obj/effect/portal/anom name = "wormhole" @@ -156,7 +157,7 @@ no_effect = TRUE else last_effect = world.time - if(do_teleport(M, real_target, innate_accuracy_penalty, no_effects = no_effect, channel = teleport_channel, forced = force_teleport)) + if(do_teleport(M, real_target, innate_accuracy_penalty, no_effects = no_effect, channel = teleport_channel, forced = force_teleport, restrain_vlevel = restrain_vlevel)) if(istype(M, /obj/projectile)) var/obj/projectile/P = M P.ignore_source_check = TRUE @@ -183,6 +184,7 @@ desc = "An unwavering portal that will never fade." hardlinked = FALSE // dont qdel my portal nerd force_teleport = TRUE // force teleports because they're a mapmaker tool + restrain_vlevel = FALSE var/id // var edit or set id in map editor /obj/effect/portal/permanent/proc/set_linked() diff --git a/code/game/objects/effects/spawners/bundle.dm b/code/game/objects/effects/spawners/bundle.dm index edab392613f3..e4f36e8b827d 100644 --- a/code/game/objects/effects/spawners/bundle.dm +++ b/code/game/objects/effects/spawners/bundle.dm @@ -12,13 +12,6 @@ for(var/path in items) new path(loc) -/obj/effect/spawner/bundle/costume/chicken - name = "chicken costume spawner" - items = list( - /obj/item/clothing/suit/chickensuit, - /obj/item/clothing/head/chicken, - /obj/item/reagent_containers/food/snacks/egg) - /obj/effect/spawner/bundle/costume/gladiator name = "gladiator costume spawner" items = list( @@ -72,7 +65,6 @@ name = "prig costume spawner" items = list( /obj/item/clothing/accessory/waistcoat, - /obj/item/clothing/glasses/monocle, /obj/effect/spawner/lootdrop/minor/bowler_or_that, /obj/item/clothing/shoes/sneakers/black, /obj/item/cane, @@ -83,7 +75,6 @@ name = "plague doctor costume spawner" items = list( /obj/item/clothing/suit/bio_suit/plaguedoctorsuit, - /obj/item/clothing/head/plaguedoctorhat, /obj/item/clothing/mask/gas/plaguedoctor) /obj/effect/spawner/bundle/costume/nightowl @@ -108,39 +99,12 @@ /obj/effect/spawner/lootdrop/minor/pirate_or_bandana, /obj/item/clothing/glasses/eyepatch) -/obj/effect/spawner/bundle/costume/imperium_monk - name = "imperium monk costume spawner" - items = list( - /obj/item/clothing/suit/imperium_monk, - /obj/effect/spawner/lootdrop/minor/twentyfive_percent_cyborg_mask) - -/obj/effect/spawner/bundle/costume/holiday_priest - name = "holiday priest costume spawner" - items = list( - /obj/item/clothing/suit/chaplainsuit/holidaypriest) - -/obj/effect/spawner/bundle/costume/marisawizard - name = "marisa wizard costume spawner" - items = list( - /obj/item/clothing/shoes/sandal/marisa, - /obj/item/clothing/head/wizard/marisa/fake, - /obj/item/clothing/suit/wizrobe/marisa/fake) - /obj/effect/spawner/bundle/costume/cutewitch name = "cute witch costume spawner" items = list( /obj/item/clothing/under/dress/sundress, - /obj/item/clothing/head/witchwig, /obj/item/staff/broom) -/obj/effect/spawner/bundle/costume/wizard - name = "wizard costume spawner" - items = list( - /obj/item/clothing/shoes/sandal, - /obj/item/clothing/suit/wizrobe/fake, - /obj/item/clothing/head/wizard/fake, - /obj/item/staff) - /obj/effect/spawner/bundle/costume/mafia name = "black mafia outfit spawner" items = list( diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index db99d0c4e4d8..364ddeb72298 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, @@ -105,9 +105,9 @@ /obj/item/paper/fluff/jobs/prisoner/letter = 1, /obj/item/grenade/smokebomb = 1, /obj/item/flashlight/seclite = 1, - /obj/item/kitchen/knife/shiv = 4, - /obj/item/kitchen/knife/shiv/carrot = 1, - /obj/item/kitchen/knife = 1, + /obj/item/melee/knife/shiv = 4, + /obj/item/melee/knife/shiv/carrot = 1, + /obj/item/melee/knife/kitchen = 1, /obj/item/storage/wallet/random = 1, /obj/item/pda = 1 ) @@ -279,20 +279,17 @@ /obj/effect/spawner/lootdrop/minor/beret_or_rabbitears name = "beret or rabbit ears spawner" loot = list( - /obj/item/clothing/head/beret = 1, - /obj/item/clothing/head/rabbitears = 1) + /obj/item/clothing/head/beret = 1) /obj/effect/spawner/lootdrop/minor/bowler_or_that name = "bowler or top hat spawner" loot = list( - /obj/item/clothing/head/bowler = 1, /obj/item/clothing/head/that = 1) /obj/effect/spawner/lootdrop/minor/kittyears_or_rabbitears name = "kitty ears or rabbit ears spawner" loot = list( - /obj/item/clothing/head/kitty = 1, - /obj/item/clothing/head/rabbitears = 1) + /obj/item/clothing/head/kitty = 1) /obj/effect/spawner/lootdrop/minor/pirate_or_bandana name = "pirate hat or bandana spawner" @@ -468,7 +465,7 @@ ) /obj/effect/spawner/lootdrop/ripley - name = "25% mech 75% wreckage ripley spawner" + name = "25% exosuit 75% wreckage ripley spawner" loot = list(/obj/mecha/working/ripley/mining = 1, /obj/structure/mecha_wreckage/ripley = 5) lootdoubles = FALSE @@ -1031,7 +1028,7 @@ ) /obj/effect/spawner/lootdrop/waste/mechwreck - name = "wasteplanet mech wreckage" + name = "wasteplanet exosuit wreckage" loot = list( /obj/structure/mecha_wreckage/ripley = 15, /obj/structure/mecha_wreckage/ripley/firefighter = 9, diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index 4913f9b835ce..2b82f656ac48 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -346,13 +346,6 @@ icon_state = "explosionfast" duration = 4 -/obj/effect/temp_visual/blob - name = "blob" - icon_state = "blob_attack" - alpha = 140 - randomdir = 0 - duration = 6 - /obj/effect/temp_visual/desynchronizer name = "desynchronizer field" icon_state = "chronofield" @@ -469,6 +462,11 @@ duration = 12 shrink = FALSE +/obj/effect/temp_visual/light_ash + icon_state = "light_ash" + icon = 'icons/effects/weather_effects.dmi' + duration = 3.2 SECONDS + /obj/effect/temp_visual/warp_cube duration = 5 var/outgoing = TRUE diff --git a/code/game/objects/effects/turf_fire.dm b/code/game/objects/effects/turf_fire.dm index a0c9e0f95a9b..0bed49a3709c 100644 --- a/code/game/objects/effects/turf_fire.dm +++ b/code/game/objects/effects/turf_fire.dm @@ -5,7 +5,7 @@ #define TURF_FIRE_VOLUME 150 #define TURF_FIRE_MAX_POWER 50 -#define TURF_FIRE_ENERGY_PER_BURNED_OXY_MOL 12000 +#define TURF_FIRE_ENERGY_PER_BURNED_OXY_MOL 30000 #define TURF_FIRE_BURN_RATE_BASE 0.12 #define TURF_FIRE_BURN_RATE_PER_POWER 0.02 #define TURF_FIRE_BURN_CARBON_DIOXIDE_MULTIPLIER 0.75 @@ -65,7 +65,7 @@ /obj/effect/abstract/turf_fire/Initialize(mapload, power, fire_color) . = ..() - particles = new /particles/lava + particles = new /particles/smoke/turf_fire var/turf/open/open_turf = loc if(open_turf.turf_fire) return INITIALIZE_HINT_QDEL diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 033307e5472f..90669dde84bb 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -2,6 +2,10 @@ GLOBAL_DATUM_INIT(fire_overlay, /mutable_appearance, mutable_appearance('icons/e GLOBAL_DATUM_INIT(welding_sparks, /mutable_appearance, mutable_appearance('icons/effects/welding_effect.dmi', "welding_sparks", GASFIRE_LAYER, ABOVE_LIGHTING_PLANE)) +GLOBAL_DATUM_INIT(cutting_effect, /mutable_appearance, mutable_appearance('icons/effects/cutting_effect.dmi', "cutting_effect", GASFIRE_LAYER, ABOVE_LIGHTING_PLANE)) + +GLOBAL_DATUM_INIT(advanced_cutting_effect, /mutable_appearance, mutable_appearance('icons/effects/cutting_effect.dmi', "advanced_cutting_effect", GASFIRE_LAYER, ABOVE_LIGHTING_PLANE)) + GLOBAL_DATUM_INIT(cleaning_bubbles, /mutable_appearance, mutable_appearance('icons/effects/effects.dmi', "bubbles", ABOVE_MOB_LAYER, GAME_PLANE)) GLOBAL_VAR_INIT(rpg_loot_items, FALSE) @@ -13,7 +17,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb /obj/item name = "item" - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' blocks_emissive = EMISSIVE_BLOCK_GENERIC ///icon state name for inhand overlays var/item_state = null @@ -26,12 +30,11 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb var/supports_variations = null ///If set, kepori wearing this use this instead of their clothing file - var/kepoi_override_icon - + var/kepori_override_icon ///If set, vox wearing this use this instead of their clothing file var/vox_override_icon - /// Needs to follow this syntax: either a list() with the x and y coordinates of the pixel you want to get the colour from, or a hexcolour. Colour one replaces red, two replaces blue, and three replaces green in the icon state. + /// Needs to follow this syntax: either a list() with the x and y coordinates of the pixel you want to get the colour from, or a hexcolour. Colour one replaces red, two replaces green, and three replaces blue in the icon state. var/list/greyscale_colors[3] /// Needs to be a RGB-greyscale format icon state in all species' clothing icon files. var/greyscale_icon_state @@ -162,6 +165,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 @@ -240,16 +245,57 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb qdel(X) return ..() +/// Called when an action associated with our item is deleted +/obj/item/proc/on_action_deleted(datum/source) + SIGNAL_HANDLER + + if(!(source in actions)) + CRASH("An action ([source.type]) was deleted that was associated with an item ([src]), but was not found in the item's actions list.") + + LAZYREMOVE(actions, source) + + +/// Adds an item action to our list of item actions. +/// Item actions are actions linked to our item, that are granted to mobs who equip us. +/// This also ensures that the actions are properly tracked in the actions list and removed if they're deleted. +/// Can be be passed a typepath of an action or an instance of an action. +/obj/item/proc/add_item_action(action_or_action_type) + + var/datum/action/action + if(ispath(action_or_action_type, /datum/action)) + action = new action_or_action_type(src) + else if(istype(action_or_action_type, /datum/action)) + action = action_or_action_type + else + CRASH("item add_item_action got a type or instance of something that wasn't an action.") + + LAZYADD(actions, action) + RegisterSignal(action, COMSIG_PARENT_QDELETING, PROC_REF(on_action_deleted)) + grant_action_to_bearer(action) + return action + +/// Grant the action to anyone who has this item equipped to an appropriate slot +/obj/item/proc/grant_action_to_bearer(datum/action/action) + if(!ismob(loc)) + return + var/mob/holder = loc + give_item_action(action, holder, holder.get_slot_by_item(src)) + +/// Removes an instance of an action from our list of item actions. +/obj/item/proc/remove_item_action(datum/action/action) + if(!action) + return + + UnregisterSignal(action, COMSIG_PARENT_QDELETING) + LAZYREMOVE(actions, action) + qdel(action) + /obj/item/proc/check_allowed_items(atom/target, not_inside, target_self) if(((src in target) && !target_self) || (!isturf(target.loc) && !isturf(target) && not_inside)) return 0 else return 1 -/obj/item/blob_act(obj/structure/blob/B) - if(B && B.loc == loc) - qdel(src) - /obj/item/ComponentInitialize() . = ..() // this proc says it's for initializing components, but we're initializing elements too because it's you and me against the world >:) @@ -535,9 +581,21 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb playsound(src, pickup_sound, PICKUP_SOUND_VOLUME, ignore_walls = FALSE) user.update_equipment_speed_mods() -///sometimes we only want to grant the item's action if it's equipped in a specific slot. -/obj/item/proc/item_action_slot_check(slot, mob/user) - if(slot == ITEM_SLOT_BACKPACK || slot == ITEM_SLOT_LEGCUFFED) //these aren't true slots, so avoid granting actions there +/// Gives one of our item actions to a mob, when equipped to a certain slot +/obj/item/proc/give_item_action(datum/action/action, mob/to_who, slot) + // Some items only give their actions buttons when in a specific slot. + if(!item_action_slot_check(slot, to_who)) + // There is a chance we still have our item action currently, + // and are moving it from a "valid slot" to an "invalid slot". + // So call Remove() here regardless, even if excessive. + action.Remove(to_who) + return + + action.Grant(to_who) + +/// Sometimes we only want to grant the item's action if it's equipped in a specific slot. +/obj/item/proc/item_action_slot_check(slot, mob/user, datum/action/action) + if(slot & (ITEM_SLOT_BACKPACK|ITEM_SLOT_LEGCUFFED)) //these aren't true slots, so avoid granting actions there return FALSE return TRUE @@ -817,7 +875,8 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb ..() /obj/item/proc/microwave_act(obj/machinery/microwave/M) - SEND_SIGNAL(src, COMSIG_ITEM_MICROWAVE_ACT, M) + if(SEND_SIGNAL(src, COMSIG_ITEM_MICROWAVE_ACT, M) & COMPONENT_SUCCESFUL_MICROWAVE) + return if(istype(M) && M.dirty < 100) M.dirty++ @@ -901,6 +960,9 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb /// Called when a mob tries to use the item as a tool.Handles most checks. /obj/item/proc/use_tool(atom/target, mob/living/user, delay, amount=0, volume=0, datum/callback/extra_checks) + // we have no target, why are we even doing this? + if(isnull(target)) + return // No delay means there is no start message, and no reason to call tool_start_check before use_tool. // Run the start check here so we wouldn't have to call it manually. if(!delay && !tool_start_check(user, amount)) @@ -1126,3 +1188,103 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb */ /obj/item/proc/get_writing_implement_details() return null + +/obj/item/proc/can_trigger_gun(mob/living/user) + if(!user.can_use_guns(src)) + return FALSE + return TRUE + +/// Whether or not this item can be put into a storage item through attackby +/obj/item/proc/attackby_storage_insert(datum/storage, atom/storage_holder, mob/user) + return TRUE +/// How many different types of mats will be counted in a bite? +#define MAX_MATS_PER_BITE 2 + +/* + * On accidental consumption: when you somehow end up eating an item accidentally (currently, this is used for when items are hidden in food like bread or cake) + * + * The base proc will check if the item is sharp and has a decent force. + * Then, it checks the item's mat datums for the effects it applies afterwards. + * Then, it checks tiny items. + * After all that, it returns TRUE if the item is set to be discovered. Otherwise, it returns FALSE. + * + * This works similarily to /suicide_act: if you want an item to have a unique interaction, go to that item + * and give it an /on_accidental_consumption proc override. For a simple example of this, check out the nuke disk. + * + * Arguments + * * M - the mob accidentally consuming the item + * * user - the mob feeding M the item - usually, it's the same as M + * * source_item - the item that held the item being consumed - bread, cake, etc + * * discover_after - if the item will be discovered after being chomped (FALSE will usually mean it was swallowed, TRUE will usually mean it was bitten into and discovered) + */ +/obj/item/proc/on_accidental_consumption(mob/living/carbon/victim, mob/living/carbon/user, obj/item/source_item, discover_after = TRUE) + if(get_sharpness() && force >= 5) //if we've got something sharp with a decent force (ie, not plastic) + INVOKE_ASYNC(victim, TYPE_PROC_REF(/mob, emote), "scream") + victim.visible_message("[victim] looks like [victim.p_theyve()] just bit something they shouldn't have!", \ + "OH GOD! Was that a crunch? That didn't feel good at all!!") + + victim.apply_damage(max(15, force), BRUTE, BODY_ZONE_HEAD) + victim.losebreath += 2 + if(tryEmbed(victim.get_bodypart(BODY_ZONE_CHEST), forced = TRUE)) //and if it embeds successfully in their chest, cause a lot of pain + victim.apply_damage(max(25, force*1.5), BRUTE, BODY_ZONE_CHEST) + victim.losebreath += 6 + discover_after = FALSE + if(QDELETED(src)) // in case trying to embed it caused its deletion (say, if it's DROPDEL) + return + source_item?.reagents?.add_reagent(/datum/reagent/blood, 2) + + else if(custom_materials?.len) //if we've got materials, lets see whats in it + /// How many mats have we found? You can only be affected by two material datums by default + var/found_mats = 0 + /// How much of each material is in it? Used to determine if the glass should break + var/total_material_amount = 0 + + for(var/mats in custom_materials) + total_material_amount += custom_materials[mats] + if(found_mats >= MAX_MATS_PER_BITE) + continue //continue instead of break so we can finish adding up all the mats to the total + + var/datum/material/discovered_mat = mats + if(discovered_mat.on_accidental_mat_consumption(victim, source_item)) + found_mats++ + + //if there's glass in it and the glass is more than 60% of the item, then we can shatter it + if(custom_materials[SSmaterials.GetMaterialRef(/datum/material/glass)] >= total_material_amount * 0.60) + if(prob(66)) //66% chance to break it + /// The glass shard that is spawned into the source item + var/obj/item/shard/broken_glass = new /obj/item/shard(loc) + broken_glass.name = "broken [name]" + broken_glass.desc = "This used to be \a [name], but it sure isn't anymore." + playsound(victim, "shatter", 25, TRUE) + qdel(src) + if(QDELETED(source_item)) + broken_glass.on_accidental_consumption(victim, user) + else //33% chance to just "crack" it (play a sound) and leave it in the bread + playsound(victim, "shatter", 15, TRUE) + discover_after = FALSE + + victim.adjust_disgust(33) + victim.visible_message( + "[victim] looks like [victim.p_theyve()] just bitten into something hard.", \ + "Eugh! Did I just bite into something?") + + else if(w_class == WEIGHT_CLASS_TINY) //small items like soap or toys that don't have mat datums + /// victim's chest (for cavity implanting the item) + var/obj/item/bodypart/chest/victim_cavity = victim.get_bodypart(BODY_ZONE_CHEST) + if(victim_cavity.cavity_item) + victim.vomit(5, FALSE, FALSE, distance = 0) + forceMove(drop_location()) + to_chat(victim, "You vomit up a [name]! [source_item? "Was that in \the [source_item]?" : ""]") + else + victim.transferItemToLoc(src, victim, TRUE) + victim.losebreath += 2 + victim_cavity.cavity_item = src + to_chat(victim, "You swallow hard. [source_item? "Something small was in \the [source_item]..." : ""]") + discover_after = FALSE + + else + to_chat(victim, "[source_item? "Something strange was in the \the [source_item]..." : "I just bit something strange..."] ") + + return discover_after + +#undef MAX_MATS_PER_BITE diff --git a/code/game/objects/items/AI_modules.dm b/code/game/objects/items/AI_modules.dm index 7fee84da562f..151be9b026da 100644 --- a/code/game/objects/items/AI_modules.dm +++ b/code/game/objects/items/AI_modules.dm @@ -49,7 +49,7 @@ AI MODULES //Handle the lawcap if(law_datum) var/tot_laws = 0 - for(var/lawlist in list(law_datum.devillaws, law_datum.inherent, law_datum.supplied, law_datum.ion, law_datum.hacked, laws)) + for(var/lawlist in list(law_datum.inherent, law_datum.supplied, law_datum.ion, law_datum.hacked, laws)) for(var/mylaw in lawlist) if(mylaw != "") tot_laws++ diff --git a/code/game/objects/items/attachments/_attachment.dm b/code/game/objects/items/attachments/_attachment.dm index a6c25ec8cdf3..dbb7a111355e 100644 --- a/code/game/objects/items/attachments/_attachment.dm +++ b/code/game/objects/items/attachments/_attachment.dm @@ -3,6 +3,7 @@ name = "broken attachment" desc = "alert coders" icon = 'icons/obj/guns/attachments.dmi' + w_class = WEIGHT_CLASS_SMALL //Slot the attachment goes on, also used in descriptions so should be player readable var/slot = ATTACHMENT_SLOT_RAIL diff --git a/code/game/objects/items/attachments/stock.dm b/code/game/objects/items/attachments/stock.dm index 1fe286c14296..c28700af6b64 100644 --- a/code/game/objects/items/attachments/stock.dm +++ b/code/game/objects/items/attachments/stock.dm @@ -38,3 +38,11 @@ /obj/item/attachment/foldable_stock/inteq icon_state = "skm-inteqsmg-stock" + +/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/blueprints.dm b/code/game/objects/items/blueprints.dm index d410dfef0d7d..232b4570a97e 100644 --- a/code/game/objects/items/blueprints.dm +++ b/code/game/objects/items/blueprints.dm @@ -5,7 +5,7 @@ /obj/item/areaeditor name = "area modification item" - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "blueprints" attack_verb = list("attacked", "bapped", "hit") var/fluffnotice = "Nobody's gonna read this stuff!" @@ -46,7 +46,7 @@ /obj/item/areaeditor/blueprints name = "station blueprints" desc = "Blueprints of what appear to be an experimental station design, with a large spinal weapon mounted to the front. There is a \"Classified\" stamp and several coffee stains on it." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "blueprints" fluffnotice = "Property of Nanotrasen. For heads of staff only. Store in high-secure storage." resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF @@ -150,7 +150,6 @@ if(A.outdoors) return AREA_SPACE var/list/SPECIALS = list( - /area/shuttle, /area/centcom, /area/asteroid, /area/tdome, @@ -204,7 +203,7 @@ /obj/item/areaeditor/blueprints/cyborg name = "construction schematics" desc = "A digital copy of the local blueprints and zoning permits stored in your memory." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "blueprints" fluffnotice = "Intellectual Property of Nanotrasen. For use in engineering cyborgs only. Wipe from memory upon departure from company ownership." @@ -235,7 +234,7 @@ /obj/item/areaeditor/shuttle name = "shuttle expansion permit" desc = "A set of paperwork which is used to expand flyable shuttles." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "blueprints" color = COLOR_ASSEMBLY_WHITE fluffnotice = "Not to be used for non-sanctioned shuttle construction and maintenance." diff --git a/code/game/objects/items/cash.dm b/code/game/objects/items/cash.dm index 12c9a0b99f0c..553da0a3e478 100644 --- a/code/game/objects/items/cash.dm +++ b/code/game/objects/items/cash.dm @@ -57,8 +57,9 @@ var/mob/living/carbon/human/H = user H.dropItemToGround(src) H.dropItemToGround(bundle) + H.put_in_hands(src) H.put_in_hands(bundle) - to_chat(user, "You add [value] credits worth of money to the bundle.
It now holds [bundle.value] credits.
") + to_chat(user, "You add [value] credits worth of money to the bundle.
It now holds [bundle.value + value] credits.
") bundle.transfer_value(bundle.value, src) /obj/item/spacecash/Destroy() diff --git a/code/game/objects/items/chrono_eraser.dm b/code/game/objects/items/chrono_eraser.dm index baa541662e20..fce9f308ea0f 100644 --- a/code/game/objects/items/chrono_eraser.dm +++ b/code/game/objects/items/chrono_eraser.dm @@ -285,9 +285,5 @@ /obj/structure/chrono_field/ex_act() return -/obj/structure/chrono_field/blob_act(obj/structure/blob/B) - return - - #undef CHRONO_BEAM_RANGE #undef CHRONO_FRAME_COUNT diff --git a/code/game/objects/items/circuitboards/computer_circuitboards.dm b/code/game/objects/items/circuitboards/computer_circuitboards.dm index 47739ded1551..9aece73946cc 100644 --- a/code/game/objects/items/circuitboards/computer_circuitboards.dm +++ b/code/game/objects/items/circuitboards/computer_circuitboards.dm @@ -272,7 +272,7 @@ build_path = /obj/machinery/computer/launchpad /obj/item/circuitboard/computer/mech_bay_power_console - name = "Mech Bay Power Control Console (Computer Board)" + name = "Exosuit Bay Power Control Console (Computer Board)" icon_state = "science" build_path = /obj/machinery/computer/mech_bay_power_console diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index 0a3a6f14d097..af7addd21a95 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -957,7 +957,7 @@ /obj/item/stock_parts/micro_laser = 2) /obj/item/circuitboard/machine/mech_recharger - name = "Mechbay Recharger (Machine Board)" + name = "Exosuit Bay Recharger (Machine Board)" icon_state = "science" build_path = /obj/machinery/mech_bay_recharge_port req_components = list( @@ -1111,17 +1111,6 @@ /obj/item/stack/sheet/glass = 1) def_components = list(/obj/item/stack/ore/bluespace_crystal = /obj/item/stack/ore/bluespace_crystal/artificial) -/obj/item/circuitboard/machine/bepis - name = "BEPIS Chamber (Machine Board)" - icon_state = "science" - build_path = /obj/machinery/rnd/bepis - req_components = list( - /obj/item/stack/cable_coil = 5, - /obj/item/stock_parts/capacitor = 1, - /obj/item/stock_parts/manipulator = 1, - /obj/item/stock_parts/micro_laser = 1, - /obj/item/stock_parts/scanning_module = 1) - /obj/item/circuitboard/machine/bluespace_miner name = "Bluespace Miner (Machine Board)" build_path = /obj/machinery/power/bluespace_miner @@ -1392,16 +1381,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/clown_items.dm b/code/game/objects/items/clown_items.dm index 9c6809cf3dbc..631eb7d2fc8f 100644 --- a/code/game/objects/items/clown_items.dm +++ b/code/game/objects/items/clown_items.dm @@ -14,7 +14,7 @@ name = "soap" desc = "A cheap bar of soap. Doesn't smell." gender = PLURAL - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "soap" lefthand_file = 'icons/mob/inhands/equipment/custodial_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/custodial_righthand.dmi' @@ -150,7 +150,7 @@ /obj/item/bikehorn name = "bike horn" desc = "A horn off of a bicycle." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "bike_horn" item_state = "bike_horn" lefthand_file = 'icons/mob/inhands/equipment/horns_lefthand.dmi' diff --git a/code/game/objects/items/cosmetics.dm b/code/game/objects/items/cosmetics.dm index d451f258bd78..b08adc216135 100644 --- a/code/game/objects/items/cosmetics.dm +++ b/code/game/objects/items/cosmetics.dm @@ -2,7 +2,7 @@ gender = PLURAL name = "red lipstick" desc = "A generic brand of lipstick." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "lipstick" w_class = WEIGHT_CLASS_TINY var/colour = "red" @@ -101,7 +101,7 @@ /obj/item/razor name = "electric razor" desc = "The latest and greatest power razor born from the science of shaving." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "razor" flags_1 = CONDUCT_1 w_class = WEIGHT_CLASS_TINY diff --git a/code/game/objects/items/courtroom.dm b/code/game/objects/items/courtroom.dm index 78d599ee4d9c..a1750a26493e 100644 --- a/code/game/objects/items/courtroom.dm +++ b/code/game/objects/items/courtroom.dm @@ -5,7 +5,7 @@ /obj/item/gavelhammer name = "gavel hammer" desc = "Order, order! No bombs in my courthouse." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "gavelhammer" force = 5 throwforce = 6 @@ -16,7 +16,7 @@ /obj/item/gavelblock name = "gavel block" desc = "Smack it with a gavel hammer when the assistants get rowdy." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "gavelblock" force = 2 throwforce = 2 diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index 32a62880d69c..640b4e4a6a0a 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -302,24 +302,12 @@ var/obj/item/defibrillator/defib var/req_defib = TRUE var/combat = FALSE //If it penetrates armor and gives additional functionality - var/wielded = FALSE // track wielded status on item /obj/item/shockpaddles/ComponentInitialize() . = ..() AddElement(/datum/element/update_icon_updates_onmob) AddComponent(/datum/component/two_handed, force_unwielded=8, force_wielded=12) -/// triggered on wield of two handed item -/obj/item/shockpaddles/proc/on_wield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = TRUE - -/// triggered on unwield of two handed item -/obj/item/shockpaddles/proc/on_unwield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = FALSE /obj/item/shockpaddles/Destroy() defib = null @@ -369,8 +357,6 @@ /obj/item/shockpaddles/Initialize() . = ..() ADD_TRAIT(src, TRAIT_NO_STORAGE_INSERT, GENERIC_ITEM_TRAIT) //stops shockpaddles from being inserted in BoH - RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(on_wield)) - RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(on_unwield)) if(!req_defib) return //If it doesn't need a defib, just say it exists if (!loc || !istype(loc, /obj/item/defibrillator)) //To avoid weird issues from admin spawns @@ -380,10 +366,10 @@ update_appearance() /obj/item/shockpaddles/update_icon_state() - icon_state = "[base_icon_state][wielded]" + icon_state = "[base_icon_state][HAS_TRAIT(src, TRAIT_WIELDED)]" item_state = icon_state if(cooldown) - icon_state = "[base_icon_state][wielded]_cooldown" + icon_state = "[base_icon_state][HAS_TRAIT(src, TRAIT_WIELDED)]_cooldown" return ..() /obj/item/shockpaddles/dropped(mob/user) @@ -410,7 +396,7 @@ user.visible_message("[defib] beeps: Unit is unpowered.") playsound(src, 'sound/machines/defib_failed.ogg', 50, FALSE) return - if(!wielded) + if(!HAS_TRAIT(src, TRAIT_WIELDED)) if(iscyborg(user)) to_chat(user, "You must activate the paddles in your active module before you can use them on someone!") else diff --git a/code/game/objects/items/devices/PDA/PDA_types.dm b/code/game/objects/items/devices/PDA/PDA_types.dm index c8a918732a9d..4a7817c5eb60 100644 --- a/code/game/objects/items/devices/PDA/PDA_types.dm +++ b/code/game/objects/items/devices/PDA/PDA_types.dm @@ -10,7 +10,6 @@ /obj/item/pda/clown/ComponentInitialize() . = ..() - AddComponent(/datum/component/slippery/clowning, 120, NO_SLIP_WHEN_WALKING, CALLBACK(src, PROC_REF(AfterSlip))) AddComponent(/datum/component/wearertargeting/sitcomlaughter, CALLBACK(src, PROC_REF(after_sitcom_laugh))) /obj/item/pda/clown/proc/AfterSlip(mob/living/carbon/human/M) diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index 65bda2aa1f54..5df5e96dd0ac 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -446,7 +446,7 @@ Code: if(!emoji_table) var/datum/asset/spritesheet/sheet = get_asset_datum(/datum/asset/spritesheet/chat) var/list/collate = list("
") - for(var/emoji in sortList(icon_states(icon('icons/emoji.dmi')))) + for(var/emoji in sortList(icon_states(icon(EMOJI_SET)))) var/tag = sheet.icon_tag("emoji-[emoji]") collate += "" collate += "
[emoji][tag]

" diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 6528ef4851c7..a9f28d88caed 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -62,7 +62,7 @@ to_chat(user, "[M] doesn't have a head!") return - if(light_power < 1) + if(light_power < 0.3) to_chat(user, "\The [src] isn't bright enough to see anything! ") return diff --git a/code/game/objects/items/devices/reverse_bear_trap.dm b/code/game/objects/items/devices/reverse_bear_trap.dm deleted file mode 100644 index 5d90c839bebf..000000000000 --- a/code/game/objects/items/devices/reverse_bear_trap.dm +++ /dev/null @@ -1,130 +0,0 @@ -/obj/item/reverse_bear_trap - name = "reverse bear trap" - desc = "A horrifying set of shut metal jaws, rigged to a kitchen timer and secured by padlock to a head-mounted clamp. To apply, hit someone with it." - icon = 'icons/obj/device.dmi' - icon_state = "reverse_bear_trap" - slot_flags = ITEM_SLOT_HEAD - flags_1 = CONDUCT_1 - resistance_flags = FIRE_PROOF | UNACIDABLE - w_class = WEIGHT_CLASS_NORMAL - obj_integrity = 300 - max_integrity = 300 - item_state = "rack_parts" - lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' - righthand_file = 'icons/mob/inhands/items_righthand.dmi' - - var/ticking = FALSE - var/time_left = 60 //seconds remaining until pop - var/escape_chance = 0 //chance per "fiddle" to get the trap off your head - var/struggling = FALSE - - var/time_since_last_beep = 0 - var/datum/looping_sound/reverse_bear_trap/soundloop - var/datum/looping_sound/reverse_bear_trap_beep/soundloop2 - -/obj/item/reverse_bear_trap/Initialize() - . = ..() - soundloop = new(list(src)) - soundloop2 = new(list(src)) - -/obj/item/reverse_bear_trap/Destroy() - QDEL_NULL(soundloop) - QDEL_NULL(soundloop2) - STOP_PROCESSING(SSprocessing, src) - return ..() - -/obj/item/reverse_bear_trap/process() - if(!ticking) - return - time_left-- - soundloop2.mid_length = max(0.5, time_left - 5) //beepbeepbeepbeepbeep - if(!time_left || !isliving(loc)) - playsound(src, 'sound/machines/microwave/microwave-end.ogg', 100, FALSE) - soundloop.stop() - soundloop2.stop() - to_chat(loc, "*ding*") - addtimer(CALLBACK(src, PROC_REF(snap)), 2) - -/obj/item/reverse_bear_trap/attack_hand(mob/user) - if(iscarbon(user)) - var/mob/living/carbon/C = user - if(C.get_item_by_slot(ITEM_SLOT_HEAD) == src) - if(HAS_TRAIT_FROM(src, TRAIT_NODROP, REVERSE_BEAR_TRAP_TRAIT) && !struggling) - struggling = TRUE - var/fear_string - switch(time_left) - if(0 to 5) - fear_string = "agonizingly" - if(5 to 20) - fear_string = "desperately" - if(20 to 40) - fear_string = "panickedly" - if(40 to 50) - fear_string = "shakily" - if(50 to 60) - fear_string = "" - C.visible_message("[C] fiddles with and pulls at [src]...", \ - "You [fear_string] try to pull at [src]...", "You hear clicking and ticking.") - if(!do_after(user, 20, target = src)) - struggling = FALSE - return - if(!prob(escape_chance)) - to_chat(user, "It doesn't budge!") - escape_chance++ - else - user.visible_message("The lock on [user]'s [name] pops open!", \ - "You force open the padlock!", "You hear a single, pronounced click!") - REMOVE_TRAIT(src, TRAIT_NODROP, REVERSE_BEAR_TRAP_TRAIT) - struggling = FALSE - return - ..() - -/obj/item/reverse_bear_trap/attack(mob/living/target, mob/living/user) - if(target.get_item_by_slot(ITEM_SLOT_HEAD)) - to_chat(user, "Remove [target.p_their()] headgear first!") - return - target.visible_message("[user] starts forcing [src] onto [target]'s head!", \ - "[target] starts forcing [src] onto your head!", "You hear clanking.") - to_chat(user, "You start forcing [src] onto [target]'s head...") - if(!do_after(user, 30, target = target) || target.get_item_by_slot(ITEM_SLOT_HEAD)) - return - target.visible_message("[user] forces and locks [src] onto [target]'s head!", \ - "[target] locks [src] onto your head!", "You hear a click, and then a timer ticking down.") - to_chat(user, "You force [src] onto [target]'s head and click the padlock shut.") - user.dropItemToGround(src) - target.equip_to_slot_if_possible(src, ITEM_SLOT_HEAD) - arm() - notify_ghosts("[user] put a reverse bear trap on [target]!", source = src, action = NOTIFY_ORBIT, flashwindow = FALSE, ghost_sound = 'sound/machines/beep.ogg', notify_volume = 75, header = "Reverse bear trap armed") - -/obj/item/reverse_bear_trap/proc/snap() - reset() - var/mob/living/carbon/human/H = loc - if(!istype(H) || H.get_item_by_slot(ITEM_SLOT_HEAD) != src) - visible_message("[src]'s jaws snap open with an ear-piercing crack!") - playsound(src, 'sound/effects/snap.ogg', 75, TRUE) - else - var/mob/living/carbon/human/jill = loc - jill.visible_message("[src] goes off in [jill]'s mouth, ripping [jill.p_their()] head apart!", "[src] goes off!") - jill.emote("scream") - playsound(src, 'sound/effects/snap.ogg', 75, TRUE, frequency = 0.5) - playsound(src, 'sound/effects/splat.ogg', 50, TRUE, frequency = 0.5) - jill.apply_damage(9999, BRUTE, BODY_ZONE_HEAD) - jill.death() //just in case, for some reason, they're still alive - flash_color(jill, flash_color = "#FF0000", flash_time = 100) - -/obj/item/reverse_bear_trap/proc/reset() - ticking = FALSE - REMOVE_TRAIT(src, TRAIT_NODROP, REVERSE_BEAR_TRAP_TRAIT) - soundloop.stop() - soundloop2.stop() - STOP_PROCESSING(SSprocessing, src) - -/obj/item/reverse_bear_trap/proc/arm() //hulen - ticking = TRUE - escape_chance = initial(escape_chance) //we keep these vars until re-arm, for tracking purposes - time_left = initial(time_left) - ADD_TRAIT(src, TRAIT_NODROP, REVERSE_BEAR_TRAP_TRAIT) - soundloop.start() - soundloop2.mid_length = initial(soundloop2.mid_length) - soundloop2.start() - START_PROCESSING(SSprocessing, src) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index cdded7e418ef..1f4b2ae6f6a2 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -226,12 +226,12 @@ GENE SCANNER if(length(damaged)>0 || oxy_loss>0 || tox_loss>0 || fire_loss>0) var/dmgreport = "General status:\ \ - \ + \ \ \ \ \ - \ + \ \ \ \ @@ -239,7 +239,7 @@ GENE SCANNER for(var/o in damaged) var/obj/item/bodypart/org = o //head, left arm, right arm, etc. - dmgreport += "\ + dmgreport += "\ \ " dmgreport += "
Damage:Damage:BruteBurnToxinSuffocation
Overall:
Overall:[CEILING(brute_loss,1)][CEILING(fire_loss,1)][CEILING(tox_loss,1)]
[capitalize(parse_zone(org.body_zone))]:
[capitalize(parse_zone(org.body_zone))]:[(org.brute_dam > 0) ? "[CEILING(org.brute_dam,1)]" : "0"][(org.burn_dam > 0) ? "[CEILING(org.burn_dam,1)]" : "0"]
" diff --git a/code/game/objects/items/dna_injector.dm b/code/game/objects/items/dna_injector.dm index 113a72fb8d8d..3e0823761520 100644 --- a/code/game/objects/items/dna_injector.dm +++ b/code/game/objects/items/dna_injector.dm @@ -1,7 +1,7 @@ /obj/item/dnainjector name = "\improper DNA injector" desc = "This injects the person with DNA." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "dnainjector" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/medical_righthand.dmi' diff --git a/code/game/objects/items/documents.dm b/code/game/objects/items/documents.dm index 51c17ff4290d..2fb225fd2fb9 100644 --- a/code/game/objects/items/documents.dm +++ b/code/game/objects/items/documents.dm @@ -27,6 +27,15 @@ /obj/item/documents/syndicate desc = "\"Top Secret\" documents detailing sensitive Syndicate operational intelligence." +/obj/item/documents/syndicate/cybersun + name = "classified Cybersun documents" + desc = "\"Top Secret\" documents detailing sensitive Cybersun Virtual Solutions operational intelligence. These documents are verified with a red wax seal." + icon_state = "docs_red" + +/obj/item/documents/syndicate/cybersun/biodynamics + desc = "\"Top Secret\" Cybersun Biodynamics documents, filled with patient lists and unfinished designs. These documents are verified with a teal wax seal." + icon_state = "docs_teal" + /obj/item/documents/syndicate/red name = "red secret documents" desc = "\"Top Secret\" documents detailing sensitive Syndicate operational intelligence. These documents are verified with a red wax seal." diff --git a/code/game/objects/items/door_seal.dm b/code/game/objects/items/door_seal.dm index 64f7ca4fd92c..76b406f3c9ab 100644 --- a/code/game/objects/items/door_seal.dm +++ b/code/game/objects/items/door_seal.dm @@ -1,7 +1,7 @@ /obj/item/door_seal name = "pneumatic seal" desc = "A brace used to seal and reinforce an airlock. Useful for making areas inaccessible to those without opposable thumbs." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "pneumatic_seal" lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' righthand_file = 'icons/mob/inhands/items_righthand.dmi' diff --git a/code/game/objects/items/eightball.dm b/code/game/objects/items/eightball.dm index 1396521aaf9a..b721393e85ed 100644 --- a/code/game/objects/items/eightball.dm +++ b/code/game/objects/items/eightball.dm @@ -136,10 +136,10 @@ become_hearing_sensitive(ROUNDSTART_TRAIT) for (var/answer in haunted_answers) votes[answer] = 0 - GLOB.poi_list |= src + SSpoints_of_interest.make_point_of_interest(src) /obj/item/toy/eightball/haunted/Destroy() - GLOB.poi_list -= src + SSpoints_of_interest.remove_point_of_interest(src) . = ..() /obj/item/toy/eightball/haunted/MakeHaunted() diff --git a/code/game/objects/items/etherealdiscoball.dm b/code/game/objects/items/etherealdiscoball.dm index 94f1ae2a6062..75084c239e53 100644 --- a/code/game/objects/items/etherealdiscoball.dm +++ b/code/game/objects/items/etherealdiscoball.dm @@ -1,18 +1,18 @@ /obj/item/etherealballdeployer - name = "Portable Ethereal Disco Ball" - desc = "Press the button for a deployment of slightly-unethical PARTY!" + name = "Portable Animatronic Disco Ball" + desc = "Press the button for a deployment of a copyright free PARTY!" icon = 'icons/obj/device.dmi' icon_state = "ethdisco" /obj/item/etherealballdeployer/attack_self(mob/living/carbon/user) .=..() - to_chat(user, "You deploy the Ethereal Disco Ball.") + to_chat(user, span_notice("You deploy the Ethereal Disco Ball.")) new /obj/structure/etherealball(user.loc) qdel(src) /obj/structure/etherealball - name = "Ethereal Disco Ball" - desc = "The ethics of this discoball are questionable." + name = "Animatronic Disco Ball" + desc = "A discoball with an animatronic head inside, seemingly in the likeness of a famous elzousza muscisian. A disclaimer on the side says any resemblence to living persons is entirely coincidental." icon = 'icons/obj/device.dmi' icon_state = "ethdisco_head_0" anchored = TRUE @@ -31,15 +31,15 @@ . = ..() if(TurnedOn) TurnOff() - to_chat(user, "You turn the disco ball off!") + to_chat(user, span_notice("You turn the disco ball off!")) else TurnOn() - to_chat(user, "You turn the disco ball on!") + to_chat(user, span_notice("You turn the disco ball on!")) /obj/structure/etherealball/AltClick(mob/living/carbon/human/user) . = ..() set_anchored(!anchored) - to_chat(user, "You [anchored ? null : "un"]lock the disco ball.") + to_chat(user, span_notice("You [anchored ? null : "un"]lock the disco ball.")) /obj/structure/etherealball/proc/TurnOn() TurnedOn = TRUE //Same diff --git a/code/game/objects/items/food/_food.dm b/code/game/objects/items/food/_food.dm new file mode 100644 index 000000000000..b8233e0ecc76 --- /dev/null +++ b/code/game/objects/items/food/_food.dm @@ -0,0 +1,67 @@ +///Abstract class to allow us to easily create all the generic "normal" food without too much copy pasta of adding more components +/obj/item/food + name = "food" + desc = "you eat this" + resistance_flags = FLAMMABLE + w_class = WEIGHT_CLASS_SMALL + icon = 'icons/obj/food/food.dmi' + icon_state = null + lefthand_file = 'icons/mob/inhands/misc/food_lefthand.dmi' + righthand_file = 'icons/mob/inhands/misc/food_righthand.dmi' + ///List of reagents this food gets on creation + var/list/food_reagents + ///Extra flags for things such as if the food is in a container or not + var/food_flags + ///Bitflag of the types of food this food is + var/foodtypes + ///Amount of volume the food can contain + var/max_volume + ///How long it will take to eat this food without any other modifiers + var/eat_time + ///Tastes to describe this food + var/list/tastes + ///Verbs used when eating this food in the to_chat messages + var/list/eatverbs + ///How much reagents per bite + var/bite_consumption + ///What you get if you microwave the food, this should be replaced once I fully re-work cooking. + var/microwaved_type + ///Type of atom thats spawned after eating this item + var/trash_type + +/obj/item/food/Initialize() + . = ..() + if(food_reagents) + food_reagents = string_assoc_list(food_reagents) + if(tastes) + tastes = string_assoc_list(tastes) + if(eatverbs) + eatverbs = string_list(eatverbs) + make_edible() + make_processable() + make_leave_trash() + +///This proc adds the edible component, overwrite this if you for some reason want to change some specific args like callbacks. +/obj/item/food/proc/make_edible() + AddComponent(/datum/component/edible,\ + initial_reagents = food_reagents,\ + food_flags = food_flags,\ + foodtypes = foodtypes,\ + volume = max_volume,\ + eat_time = eat_time,\ + tastes = tastes,\ + eatverbs = eatverbs,\ + bite_consumption = bite_consumption,\ + microwaved_type = microwaved_type,\ + ) + + +///This proc handles processable elements, overwrite this if you want to add behavior such as slicing, forking, spooning, whatever, to turn the item into something else +/obj/item/food/proc/make_processable() + return + +///This proc handles trash components, overwrite this if you want the object to spawn trash +/obj/item/food/proc/make_leave_trash() + if(trash_type) + AddElement(/datum/element/food_trash, trash_type) + return diff --git a/code/game/objects/items/food/bread.dm b/code/game/objects/items/food/bread.dm new file mode 100644 index 000000000000..609315a9ea12 --- /dev/null +++ b/code/game/objects/items/food/bread.dm @@ -0,0 +1,378 @@ + +/obj/item/food/bread + name = "bread?" + desc = "This shouldn't exist, report to codermonkeys" + icon = 'icons/obj/food/burgerbread.dmi' + max_volume = 80 + tastes = list("bread" = 10) + foodtypes = GRAIN + eat_time = 3 SECONDS + /// type is spawned 5 at a time and replaces this bread loaf when processed by cutting tool + var/obj/item/food/breadslice/slice_type + /// so that the yield can change if it isnt 5 + var/yield = 5 + +/obj/item/food/bread/Initialize(mapload) + . = ..() + AddElement(/datum/element/dunkable, 10) + AddComponent(/datum/component/food_storage) + +/obj/item/food/bread/make_processable() + if (slice_type) + AddElement(/datum/element/processable, TOOL_KNIFE, slice_type, yield, 3 SECONDS, table_required = TRUE) + AddElement(/datum/element/processable, TOOL_SAW, slice_type, yield, 4 SECONDS, table_required = TRUE) + +/obj/item/food/breadslice + name = "breadslice?" + desc = "This shouldn't exist, report to codermonkeys" + icon = 'icons/obj/food/burgerbread.dmi' + foodtypes = GRAIN + food_flags = FOOD_FINGER_FOOD + eat_time = 0.5 SECONDS + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/breadslice/Initialize() + . = ..() + AddElement(/datum/element/dunkable, 10) + +/obj/item/food/bread/plain + name = "bread" + desc = "Some plain old earthen bread." + icon_state = "bread" + food_reagents = list( + /datum/reagent/consumable/nutriment = 10 + ) + tastes = list("bread" = 10) + foodtypes = GRAIN + w_class = WEIGHT_CLASS_SMALL + slice_type = /obj/item/food/breadslice/plain + +/obj/item/food/breadslice/plain + name = "bread slice" + desc = "A slice of home." + icon_state = "breadslice" + foodtypes = GRAIN + food_reagents = list( + /datum/reagent/consumable/nutriment = 2 + ) + +/obj/item/food/breadslice/moldy + name = "moldy bread slice" + desc = "Entire stations have been ripped apart over arguing whether this is still good to eat." + icon_state = "moldybreadslice" + food_reagents = list( + /datum/reagent/consumable/nutriment = 2, + /datum/reagent/consumable/mold = 10, + ) + tastes = list("decaying fungus" = 1) + foodtypes = GROSS + +/obj/item/food/bread/meat + name = "meatbread loaf" + desc = "The culinary base of every self-respecting eloquen/tg/entleman." + icon_state = "meatbread" + food_reagents = list( + /datum/reagent/consumable/nutriment = 20, + /datum/reagent/consumable/nutriment/vitamin = 10 + ) + tastes = list("bread" = 10, "meat" = 10) + foodtypes = GRAIN | MEAT + slice_type = /obj/item/food/breadslice/meat + +/obj/item/food/breadslice/meat + name = "meatbread slice" + desc = "A slice of delicious meatbread." + icon_state = "meatbreadslice" + food_reagents = list( + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/consumable/nutriment/vitamin = 2 + ) + tastes = list("bread" = 1, "meat" = 1) + foodtypes = GRAIN | MEAT + +/obj/item/food/bread/xenomeat + name = "xenomeatbread loaf" + desc = "Extra Heretical." + icon_state = "xenomeatbread" + food_reagents = list( + /datum/reagent/consumable/nutriment = 20, + /datum/reagent/consumable/nutriment/vitamin = 10 + ) + tastes = list("bread" = 10, "acid" = 10) + foodtypes = GRAIN | MEAT + slice_type = /obj/item/food/breadslice/xenomeat + +/obj/item/food/breadslice/xenomeat + name = "xenomeatbread slice" + desc = "A slice of delicious meatbread. Extra Heretical." + icon_state = "xenobreadslice" + food_reagents = list( + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/consumable/nutriment/vitamin = 2 + ) + tastes = list("bread" = 10, "acid" = 10) + foodtypes = GRAIN | MEAT + +/obj/item/food/bread/spidermeat + name = "spider meat loaf" + desc = "Reassuringly green meatloaf made from spider meat." + icon_state = "spidermeatbread" + food_reagents = list( + /datum/reagent/consumable/nutriment = 20, + /datum/reagent/toxin = 15, + /datum/reagent/consumable/nutriment/vitamin = 10 + ) + tastes = list("bread" = 10, "cobwebs" = 5) + foodtypes = GRAIN | MEAT | TOXIC + slice_type = /obj/item/food/breadslice/spidermeat + +/obj/item/food/breadslice/spidermeat + name = "spider meat bread slice" + desc = "A slice of meatloaf made from an animal that most likely still wants you dead." + icon_state = "xenobreadslice" + food_reagents = list( + /datum/reagent/consumable/nutriment = 3, + /datum/reagent/toxin = 3, + /datum/reagent/consumable/nutriment/vitamin = 1 + ) + tastes = list("bread" = 10, "cobwebs" = 5) + foodtypes = GRAIN | MEAT | TOXIC + +/obj/item/food/bread/banana + name = "banana-nut bread" + desc = "A heavenly and filling treat." + icon_state = "bananabread" + food_reagents = list( + /datum/reagent/consumable/nutriment = 20, + /datum/reagent/consumable/banana = 20 + ) + tastes = list("bread" = 10) // bananjuice will also flavour + foodtypes = GRAIN | FRUIT + slice_type = /obj/item/food/breadslice/banana + +/obj/item/food/breadslice/banana + name = "banana-nut bread slice" + desc = "A slice of delicious banana bread." + icon_state = "bananabreadslice" + food_reagents = list( + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/consumable/banana = 4 + ) + tastes = list("bread" = 10) + foodtypes = GRAIN | FRUIT + +/obj/item/food/bread/tofu + name = "Tofubread" + desc = "Like meatbread but for vegetarians. Not guaranteed to give superpowers." + icon_state = "tofubread" + food_reagents = list( + /datum/reagent/consumable/nutriment = 20, + /datum/reagent/consumable/nutriment/vitamin = 10 + ) + tastes = list("bread" = 10, "tofu" = 10) + foodtypes = GRAIN | VEGETABLES + slice_type = /obj/item/food/breadslice/tofu + +/obj/item/food/breadslice/tofu + name = "tofubread slice" + desc = "A slice of delicious tofubread." + icon_state = "tofubreadslice" + food_reagents = list( + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/consumable/nutriment/vitamin = 2 + ) + tastes = list("bread" = 10, "tofu" = 10) + foodtypes = GRAIN | VEGETABLES + +/obj/item/food/bread/creamcheese + name = "cream cheese bread" + desc = "Just a schmear." + icon_state = "creamcheesebread" + food_reagents = list( + /datum/reagent/consumable/nutriment = 20, + /datum/reagent/consumable/nutriment/vitamin = 10 + ) + tastes = list("bread" = 10, "cheese" = 10) + foodtypes = GRAIN | DAIRY + slice_type = /obj/item/food/breadslice/creamcheese + +/obj/item/food/breadslice/creamcheese + name = "cream cheese bread slice" + desc = "A slice of Brotherly love!" + icon_state = "creamcheesebreadslice" + food_reagents = list( + /datum/reagent/consumable/nutriment = 3, + /datum/reagent/consumable/nutriment/vitamin = 2 + ) + tastes = list("bread" = 10, "cheese" = 10) + foodtypes = GRAIN | DAIRY + +/obj/item/food/bread/mimana + name = "mimana bread" + desc = "Best eaten in silence." + icon_state = "mimanabread" + food_reagents = list( + /datum/reagent/consumable/nutriment = 20, + /datum/reagent/toxin/mutetoxin = 10, + /datum/reagent/consumable/nothing = 10, + /datum/reagent/consumable/nutriment/vitamin = 10 + ) + tastes = list("bread" = 10, "silence" = 10) + foodtypes = GRAIN | FRUIT + slice_type = /obj/item/food/breadslice/mimana + +/obj/item/food/breadslice/mimana + name = "mimana bread slice" + desc = "A slice of silence!" + icon_state = "mimanabreadslice" + food_reagents = list( + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/toxin/mutetoxin = 2, + /datum/reagent/consumable/nothing = 2, + /datum/reagent/consumable/nutriment/vitamin = 2 + ) + foodtypes = GRAIN | FRUIT + +/obj/item/food/breadslice/custom + name = "bread slice" + icon_state = "tofubreadslice" + foodtypes = GRAIN + +/obj/item/food/baguette + name = "baguette" + desc = "Bon appetit!" + icon = 'icons/obj/food/burgerbread.dmi' + icon_state = "baguette" + item_state = null + mob_overlay_state = "baguette" + food_reagents = list( + /datum/reagent/consumable/nutriment = 8, + /datum/reagent/consumable/nutriment/vitamin = 3 + ) + bite_consumption = 3 + w_class = WEIGHT_CLASS_NORMAL + slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_BELT + attack_verb = list("touche") + tastes = list("bread" = 1) + foodtypes = GRAIN + +/obj/item/food/garlicbread + name = "garlic bread" + desc = "Alas, it is limited." + icon = 'icons/obj/food/burgerbread.dmi' + icon_state = "garlicbread" + item_state = null + food_reagents = list( + /datum/reagent/consumable/nutriment = 10, + /datum/reagent/consumable/nutriment/vitamin = 6, + /datum/reagent/consumable/garlic = 2 + ) + bite_consumption = 3 + tastes = list("bread" = 1, "garlic" = 1, "butter" = 1) + foodtypes = GRAIN + +/obj/item/food/deepfryholder + name = "Deep Fried Foods Holder Obj" + desc = "If you can see this description the code for the deep fryer fucked up." + icon = 'icons/obj/food/food.dmi' + icon_state = "" + bite_consumption = 2 + +/obj/item/food/deepfryholder/make_edible() + AddComponent(/datum/component/edible,\ + initial_reagents = food_reagents,\ + food_flags = food_flags,\ + foodtypes = foodtypes,\ + volume = max_volume,\ + eat_time = eat_time,\ + tastes = tastes,\ + eatverbs = eatverbs,\ + bite_consumption = bite_consumption,\ + on_consume = CALLBACK(src, PROC_REF(On_Consume))) + + +/obj/item/food/deepfryholder/Initialize(mapload, obj/item/fried) + . = ..() + name = fried.name //We'll determine the other stuff when it's actually removed + appearance = fried.appearance + layer = initial(layer) + plane = initial(plane) + lefthand_file = fried.lefthand_file + righthand_file = fried.righthand_file + mob_overlay_state = fried.mob_overlay_state + desc = fried.desc + w_class = fried.w_class + slowdown = fried.slowdown + equip_delay_self = fried.equip_delay_self + equip_delay_other = fried.equip_delay_other + strip_delay = fried.strip_delay + species_exception = fried.species_exception + item_flags = fried.item_flags + obj_flags = fried.obj_flags + inhand_x_dimension = fried.inhand_x_dimension + inhand_y_dimension = fried.inhand_y_dimension + + if(!(SEND_SIGNAL(fried, COMSIG_ITEM_FRIED, src) & COMSIG_FRYING_HANDLED)) //If frying is handled by signal don't do the defaault behavior. + fried.forceMove(src) + + +/obj/item/food/deepfryholder/Destroy() + if(contents) + QDEL_LIST(contents) + return ..() + +/obj/item/food/deepfryholder/proc/On_Consume(eater, feeder) + if(contents) + QDEL_LIST(contents) + + +/obj/item/food/deepfryholder/proc/fry(cook_time = 30) + switch(cook_time) + if(0 to 15) + add_atom_colour(rgb(166,103,54), FIXED_COLOUR_PRIORITY) + name = "lightly-fried [name]" + desc = "[desc] It's been lightly fried in a deep fryer." + if(16 to 49) + add_atom_colour(rgb(103,63,24), FIXED_COLOUR_PRIORITY) + name = "fried [name]" + desc = "[desc] It's been fried, increasing its tastiness value by [rand(1, 75)]%." + if(50 to 59) + add_atom_colour(rgb(63,23,4), FIXED_COLOUR_PRIORITY) + name = "deep-fried [name]" + desc = "[desc] Deep-fried to perfection." + if(60 to INFINITY) + add_atom_colour(rgb(33,19,9), FIXED_COLOUR_PRIORITY) + name = "\proper the physical manifestation of the very concept of fried foods" + desc = "A heavily-fried... something. Who can tell anymore?" + foodtypes |= FRIED + +/obj/item/food/butterbiscuit + name = "butter biscuit" + desc = "Well butter my biscuit!" + icon = 'icons/obj/food/food.dmi' + icon_state = "butterbiscuit" + food_reagents = list( + /datum/reagent/consumable/nutriment = 6, + /datum/reagent/consumable/nutriment/vitamin = 1 + ) + tastes = list("butter" = 1, "biscuit" = 1) + foodtypes = GRAIN | BREAKFAST + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/butterdog + name = "butterdog" + desc = "Made from exotic butters." + icon = 'icons/obj/food/food.dmi' + icon_state = "butterdog" + bite_consumption = 1 + food_reagents = list( + /datum/reagent/consumable/nutriment = 6, + /datum/reagent/consumable/nutriment/vitamin = 1 + ) + tastes = list("butter" = 1, "exotic butter" = 1) + foodtypes = GRAIN | DAIRY + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/butterdog/ComponentInitialize() + . = ..() + AddComponent(/datum/component/slippery, 8 SECONDS) diff --git a/code/game/objects/items/food/cake.dm b/code/game/objects/items/food/cake.dm new file mode 100644 index 000000000000..12445d50d8f2 --- /dev/null +++ b/code/game/objects/items/food/cake.dm @@ -0,0 +1,530 @@ +/obj/item/food/cake + icon = 'icons/obj/food/piecake.dmi' + bite_consumption = 3 + max_volume = 80 + food_reagents = list( + /datum/reagent/consumable/nutriment = 20, + /datum/reagent/consumable/nutriment/vitamin = 5 + ) + tastes = list("cake" = 1) + foodtypes = GRAIN | DAIRY + /// type is spawned 5 at a time and replaces this cake when processed by cutting tool + var/obj/item/food/cakeslice/slice_type + /// changes yield of sliced cake, default for cake is 5 + var/yield = 5 + +/obj/item/food/cake/Initialize(mapload) + . = ..() + AddComponent(/datum/component/food_storage) + +/obj/item/food/cake/make_processable() + if (slice_type) + AddElement(/datum/element/processable, TOOL_KNIFE, slice_type, yield, 3 SECONDS, table_required = TRUE) + +/obj/item/food/cakeslice + icon = 'icons/obj/food/piecake.dmi' + food_reagents = list( + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/consumable/nutriment/vitamin = 1 + ) + tastes = list("cake" = 1) + foodtypes = GRAIN | DAIRY + w_class = WEIGHT_CLASS_SMALL + +/obj/item/food/cake/plain + name = "plain cake" + desc = "A plain cake, not a lie." //Many of the cakes seem to follow this desc scheme, so I am going to try and put either a hint about its contents, or a fun fact. Lets try to follow this. + icon_state = "plaincake" + food_reagents = list( + /datum/reagent/consumable/nutriment = 30, + /datum/reagent/consumable/nutriment/vitamin = 7 + ) + tastes = list("sweetness" = 2, "cake" = 5) + foodtypes = GRAIN | DAIRY | SUGAR + slice_type = /obj/item/food/cakeslice/plain + +/obj/item/food/cakeslice/plain + name = "plain cake slice" + desc = "Just a slice of cake, it is enough for everyone." + icon_state = "plaincake_slice" + tastes = list("sweetness" = 2,"cake" = 5) + foodtypes = GRAIN | DAIRY | SUGAR + +/obj/item/food/cake/carrot + name = "carrot cake" + desc = "Scientifically proven to improve eyesight! Not a lie." + icon_state = "carrotcake" + food_reagents = list( + /datum/reagent/consumable/nutriment = 20, + /datum/reagent/medicine/oculine = 10, + /datum/reagent/consumable/nutriment/vitamin = 5 + ) + tastes = list("cake" = 5, "sweetness" = 2, "carrot" = 1) + foodtypes = GRAIN | DAIRY | VEGETABLES | SUGAR + slice_type = /obj/item/food/cakeslice/carrot + +/obj/item/food/cakeslice/carrot + name = "carrot cake slice" + desc = "Carrotty slice of Carrot Cake, carrots are good for your eyes! Also not a lie." + icon_state = "carrotcake_slice" + food_reagents = list( + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/medicine/oculine = 2, + /datum/reagent/consumable/nutriment/vitamin = 1 + ) + tastes = list("cake" = 5, "sweetness" = 2, "carrot" = 1) + foodtypes = GRAIN | DAIRY | VEGETABLES | SUGAR + +/obj/item/food/cake/brain + name = "brain cake" + desc = "Yeah... its actually made out of brain. I wish it were a lie." + icon_state = "braincake" + food_reagents = list( + /datum/reagent/consumable/nutriment = 15, + /datum/reagent/medicine/mannitol = 10, + /datum/reagent/consumable/nutriment/vitamin = 5 + ) + tastes = list("cake" = 5, "sweetness" = 2, "brains" = 1) + foodtypes = GRAIN | DAIRY | MEAT | GROSS | SUGAR + slice_type = /obj/item/food/cakeslice/brain + +/obj/item/food/cakeslice/brain + name = "brain cake slice" + desc = "Lemme tell you something about prions. THEY'RE DELICIOUS. A terrifying not-lie." + icon_state = "braincakeslice" + food_reagents = list( + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/medicine/mannitol = 2, + /datum/reagent/consumable/nutriment/vitamin = 1 + ) + tastes = list("cake" = 5, "sweetness" = 2, "brains" = 1) + foodtypes = GRAIN | DAIRY | MEAT | GROSS | SUGAR + +/obj/item/food/cake/cheese + name = "cheese cake" + desc = "DANGEROUSLY cheesy." + icon_state = "cheesecake" + food_reagents = list( + /datum/reagent/consumable/nutriment = 20, + /datum/reagent/consumable/nutriment/vitamin = 8 + ) + tastes = list("cake" = 4, "cream cheese" = 3) + foodtypes = GRAIN | DAIRY + slice_type = /obj/item/food/cakeslice/cheese + +/obj/item/food/cakeslice/cheese + name = "cheese cake slice" + desc = "Slice of pure cheestisfaction." + icon_state = "cheesecake_slice" + food_reagents = list( + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/consumable/nutriment/vitamin = 1.3 + ) + tastes = list("cake" = 4, "cream cheese" = 3) + foodtypes = GRAIN | DAIRY + +/obj/item/food/cake/orange + name = "orange cake" + desc = "A cake with added orange." + icon_state = "orangecake" + food_reagents = list( + /datum/reagent/consumable/nutriment = 20, + /datum/reagent/consumable/nutriment/vitamin = 10 + ) + tastes = list("cake" = 5, "sweetness" = 2, "oranges" = 2) + foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + slice_type = /obj/item/food/cakeslice/orange + +/obj/item/food/cakeslice/orange + name = "orange cake slice" + desc = "Just a slice of cake, it is enough for everyone." + icon_state = "orangecake_slice" + tastes = list("cake" = 5, "sweetness" = 2, "oranges" = 2) + foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + +/obj/item/food/cake/lime + name = "lime cake" + desc = "A cake with added lime." + icon_state = "limecake" + food_reagents = list( + /datum/reagent/consumable/nutriment = 20, + /datum/reagent/consumable/nutriment/vitamin = 10 + ) + tastes = list("cake" = 5, "sweetness" = 2, "unbearable sourness" = 2) + foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + slice_type = /obj/item/food/cakeslice/lime + +/obj/item/food/cakeslice/lime + name = "lime cake slice" + desc = "Just a slice of cake, it is enough for everyone." + icon_state = "limecake_slice" + tastes = list("cake" = 5, "sweetness" = 2, "unbearable sourness" = 2) + foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + +/obj/item/food/cake/lemon + name = "lemon cake" + desc = "A cake with added lemon." + icon_state = "lemoncake" + food_reagents = list( + /datum/reagent/consumable/nutriment = 20, + /datum/reagent/consumable/nutriment/vitamin = 10 + ) + tastes = list("cake" = 5, "sweetness" = 3, "sourness" = 1) //lemon cake is never as sour as it is sweet, have you ever actually eaten it? + foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + slice_type = /obj/item/food/cakeslice/lemon + +/obj/item/food/cakeslice/lemon + name = "lemon cake slice" + desc = "Just a slice of cake, it is enough for everyone." + icon_state = "lemoncake_slice" + tastes = list("cake" = 5, "sweetness" = 2, "sourness" = 2) + foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + +/obj/item/food/cake/chocolate + name = "chocolate cake" + desc = "A cake with added chocolate." + icon_state = "chocolatecake" + food_reagents = list( + /datum/reagent/consumable/nutriment = 20, + /datum/reagent/consumable/nutriment/vitamin = 10 + ) + tastes = list("cake" = 5, "sweetness" = 1, "chocolate" = 4) + foodtypes = GRAIN | DAIRY | JUNKFOOD | SUGAR + slice_type = /obj/item/food/cakeslice/chocolate + +/obj/item/food/cakeslice/chocolate + name = "chocolate cake slice" + desc = "Just a slice of cake, it is enough for everyone." + icon_state = "chocolatecake_slice" + tastes = list("cake" = 5, "sweetness" = 1, "chocolate" = 4) + foodtypes = GRAIN | DAIRY | JUNKFOOD | SUGAR + +/obj/item/food/cake/birthday + name = "birthday cake" + desc = "Happy Birthday little clown..." + icon_state = "birthdaycake" + food_reagents = list( + /datum/reagent/consumable/nutriment = 20, + /datum/reagent/consumable/sprinkles = 10, + /datum/reagent/consumable/nutriment/vitamin = 5 + ) + tastes = list("cake" = 5, "sweetness" = 1) + foodtypes = GRAIN | DAIRY | JUNKFOOD | SUGAR + slice_type = /obj/item/food/cakeslice/birthday + +/obj/item/food/cakeslice/birthday + name = "birthday cake slice" + desc = "A slice of your birthday." + icon_state = "birthdaycakeslice" + food_reagents = list( + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/consumable/sprinkles = 2, + /datum/reagent/consumable/nutriment/vitamin = 1 + ) + tastes = list("cake" = 5, "sweetness" = 1) + foodtypes = GRAIN | DAIRY | JUNKFOOD | SUGAR + +/obj/item/food/cake/birthday/energy + name = "energy cake" + desc = "Just enough calories for a whole nuclear operative squad." + icon_state = "energycake" + force = 5 + hitsound = 'sound/weapons/blade1.ogg' + food_reagents = list( + /datum/reagent/consumable/nutriment = 10, + /datum/reagent/consumable/sprinkles = 10, + /datum/reagent/consumable/nutriment/vitamin = 5, + /datum/reagent/consumable/pacfuel = 10, + /datum/reagent/consumable/liquidelectricity = 10 + ) + tastes = list("cake" = 3, "a Vlad's Salad" = 1) + slice_type = /obj/item/food/cakeslice/birthday/energy + +/obj/item/food/cake/birthday/energy/proc/energy_bite(mob/living/user) + to_chat(user, "As you eat the cake, you accidentally hurt yourself on the embedded energy sword!") + user.apply_damage(30, BURN, BODY_ZONE_HEAD) // ITs an ENERGY sword, so it burns, duh + playsound(user, 'sound/weapons/blade1.ogg', 5, TRUE) + +/obj/item/food/cake/birthday/energy/attack(mob/living/target_mob, mob/living/user) + . = ..() + if(HAS_TRAIT(user, TRAIT_PACIFISM) && target_mob != user) //Prevents pacifists from attacking others directly + return + energy_bite(target_mob, user) + +/obj/item/food/cakeslice/birthday/energy + name = "energy cake slice" + desc = "For the traitor on the go." + icon_state = "energycakeslice" + force = 2 + hitsound = 'sound/weapons/blade1.ogg' + food_reagents = list( + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/consumable/sprinkles = 2, + /datum/reagent/consumable/nutriment/vitamin = 1, + /datum/reagent/consumable/pacfuel = 2, + /datum/reagent/consumable/liquidelectricity = 2 + ) + tastes = list("cake" = 3, "a Vlad's Salad" = 1) + +/obj/item/food/cakeslice/birthday/energy/proc/energy_bite(mob/living/user) + to_chat(user, "As you eat the cake slice, you accidentally hurt yourself on the embedded energy dagger!") + user.apply_damage(18, BURN, BODY_ZONE_HEAD) + playsound(user, 'sound/weapons/blade1.ogg', 5, TRUE) + +/obj/item/food/cakeslice/birthday/energy/attack(mob/living/target_mob, mob/living/user) + . = ..() + if(HAS_TRAIT(user, TRAIT_PACIFISM) && target_mob != user) //Prevents pacifists from attacking others directly + return + energy_bite(target_mob, user) + +/obj/item/food/cake/apple + name = "apple cake" + desc = "A cake centred with Apple." + icon_state = "applecake" + food_reagents = list( + /datum/reagent/consumable/nutriment = 20, + /datum/reagent/consumable/nutriment/vitamin = 10 + ) + tastes = list("cake" = 5, "sweetness" = 1, "apple" = 1) + foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + slice_type = /obj/item/food/cakeslice/apple + +/obj/item/food/cakeslice/apple + name = "apple cake slice" + desc = "A slice of heavenly cake." + icon_state = "applecakeslice" + tastes = list("cake" = 5, "sweetness" = 1, "apple" = 1) + foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + +/obj/item/food/cake/slimecake + name = "Slime cake" + desc = "A cake made of slimes. Probably not electrified." + icon_state = "slimecake" + tastes = list("cake" = 5, "sweetness" = 1, "slime" = 1) + foodtypes = GRAIN | DAIRY | SUGAR + slice_type = /obj/item/food/cakeslice/slimecake + +/obj/item/food/cakeslice/slimecake + name = "slime cake slice" + desc = "A slice of slime cake." + icon_state = "slimecake_slice" + tastes = list("cake" = 5, "sweetness" = 1, "slime" = 1) + foodtypes = GRAIN | DAIRY | SUGAR + +/obj/item/food/cake/pumpkinspice + name = "pumpkin spice cake" + desc = "A hollow cake with real pumpkin." + icon_state = "pumpkinspicecake" + tastes = list("cake" = 5, "sweetness" = 1, "pumpkin" = 1) + foodtypes = GRAIN | DAIRY | VEGETABLES | SUGAR + slice_type = /obj/item/food/cakeslice/pumpkinspice + +/obj/item/food/cakeslice/pumpkinspice + name = "pumpkin spice cake slice" + desc = "A spicy slice of pumpkin goodness." + icon_state = "pumpkinspicecakeslice" + tastes = list("cake" = 5, "sweetness" = 1, "pumpkin" = 1) + foodtypes = GRAIN | DAIRY | VEGETABLES | SUGAR + +/obj/item/food/cake/bsvc // blackberry strawberries vanilla cake + name = "blackberry and strawberry vanilla cake" + desc = "A plain cake, filled with assortment of blackberries and strawberries!" + icon_state = "blackbarry_strawberries_cake_vanilla_cake" + tastes = list("blackberry" = 2, "strawberries" = 2, "vanilla" = 2, "sweetness" = 2, "cake" = 3) + foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + slice_type = /obj/item/food/cakeslice/bsvc + +/obj/item/food/cakeslice/bsvc + name = "blackberry and strawberry vanilla cake slice" + desc = "Just a slice of cake filled with assortment of blackberries and strawberries!" + icon_state = "blackbarry_strawberries_cake_vanilla_slice" + tastes = list("blackberry" = 2, "strawberries" = 2, "vanilla" = 2, "sweetness" = 2,"cake" = 3) + foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + +/obj/item/food/cake/bscc // blackbarry strawberries chocolate cake + name = "blackberry and strawberry chocolate cake" + desc = "A chocolate cake, filled with assortment of blackberries and strawberries!" + icon_state = "blackbarry_strawberries_cake_coco_cake" + food_reagents = list( + /datum/reagent/consumable/nutriment = 20, + /datum/reagent/consumable/nutriment/vitamin = 5, + /datum/reagent/consumable/coco = 5 + ) + tastes = list("blackberry" = 2, "strawberries" = 2, "chocolate" = 4, "sweetness" = 2,"cake" = 3) + foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + slice_type = /obj/item/food/cakeslice/bscc + +/obj/item/food/cakeslice/bscc + name = "blackberry and strawberry chocolate cake slice" + desc = "Just a slice of cake filled with assortment of blackberries and strawberries!" + icon_state = "blackbarry_strawberries_cake_coco_slice" + tastes = list("blackberry" = 2, "strawberries" = 2, "chocolate" = 4, "sweetness" = 2,"cake" = 3) + foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + +/obj/item/food/cake/holy_cake + name = "angel food cake" + desc = "A cake made for angels and chaplains alike! Contains holy water." + icon_state = "holy_cake" + food_reagents = list( + /datum/reagent/consumable/nutriment = 1, + /datum/reagent/consumable/nutriment/vitamin = 3, + /datum/reagent/water/holywater = 10 + ) + tastes = list("cake" = 5, "sweetness" = 1, "clouds" = 1) + foodtypes = GRAIN | DAIRY | SUGAR + slice_type = /obj/item/food/cakeslice/holy_cake_slice + +/obj/item/food/cakeslice/holy_cake_slice + name = "angel food cake slice" + desc = "A slice of heavenly cake." + icon_state = "holy_cake_slice" + tastes = list("cake" = 5, "sweetness" = 1, "clouds" = 1) + foodtypes = GRAIN | DAIRY | SUGAR + +/obj/item/food/cake/pound_cake + name = "pound cake" + desc = "A condensed cake made for filling people up quickly." + icon_state = "pound_cake" + food_reagents = list( + /datum/reagent/consumable/nutriment = 60, + /datum/reagent/consumable/nutriment/vitamin = 5 + ) + tastes = list("cake" = 5, "sweetness" = 1, "batter" = 1) + foodtypes = GRAIN | DAIRY | SUGAR | JUNKFOOD + slice_type = /obj/item/food/cakeslice/pound_cake_slice + yield = 10 //cause its so damn THICC (seriously these things are fucking huge a pound of each ingredient are you kidding) + +/obj/item/food/cakeslice/pound_cake_slice + name = "pound cake slice" + desc = "A slice of condensed cake made for filling people up quickly." + icon_state = "pound_cake_slice" + food_reagents = list( + /datum/reagent/consumable/nutriment = 9, + /datum/reagent/consumable/nutriment/vitamin = 0.5 + ) + tastes = list("cake" = 5, "sweetness" = 5, "batter" = 1) + foodtypes = GRAIN | DAIRY | SUGAR | JUNKFOOD + +/obj/item/food/cake/hardware_cake + name = "hardware cake" + desc = "A quote on quote cake that is made with electronic boards and leaks acid..." + icon_state = "hardware_cake" + food_reagents = list( + /datum/reagent/consumable/nutriment = 20, + /datum/reagent/consumable/nutriment/vitamin = 5, + /datum/reagent/toxin/acid = 15, + /datum/reagent/fuel/oil = 15 + ) + tastes = list("acid" = 3, "metal" = 4, "glass" = 5) + foodtypes = GRAIN | GROSS + slice_type = /obj/item/food/cakeslice/hardware_cake_slice + +/obj/item/food/cakeslice/hardware_cake_slice + name = "hardware cake slice" + desc = "A slice of electronic boards and some acid." + icon_state = "hardware_cake_slice" + food_reagents = list( + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/consumable/nutriment/vitamin = 1, + /datum/reagent/toxin/acid = 3, + /datum/reagent/fuel/oil = 3 + ) + tastes = list("acid" = 3, "metal" = 4, "glass" = 5) + foodtypes = GRAIN | GROSS + +/obj/item/food/cake/vanilla_cake + name = "vanilla cake" + desc = "A vanilla frosted cake." + icon_state = "vanillacake" + food_reagents = list( + /datum/reagent/consumable/nutriment = 20, + /datum/reagent/consumable/nutriment/vitamin = 5, + /datum/reagent/consumable/sugar = 15, + /datum/reagent/consumable/vanilla = 15 + ) + tastes = list("cake" = 1, "sugar" = 1, "vanilla" = 10) + foodtypes = GRAIN | SUGAR | DAIRY + slice_type = /obj/item/food/cakeslice/vanilla_slice + +/obj/item/food/cakeslice/vanilla_slice + name = "vanilla cake slice" + desc = "A slice of vanilla frosted cake." + icon_state = "vanillacake_slice" + food_reagents = list( + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/consumable/nutriment/vitamin = 1, + /datum/reagent/consumable/sugar = 3, + /datum/reagent/consumable/vanilla = 3 + ) + tastes = list("cake" = 1, "sugar" = 1, "vanilla" = 10) + foodtypes = GRAIN | SUGAR | DAIRY + +/obj/item/food/cake/clown_cake + name = "clown cake" + desc = "A funny cake with a clown face on it." + icon_state = "clowncake" + food_reagents = list( + /datum/reagent/consumable/nutriment = 20, + /datum/reagent/consumable/nutriment/vitamin = 5, + /datum/reagent/consumable/banana = 15 + ) + tastes = list("cake" = 1, "sugar" = 1, "joy" = 10) + foodtypes = GRAIN | SUGAR | DAIRY + slice_type = /obj/item/food/cakeslice/clown_slice + +/obj/item/food/cakeslice/clown_slice + name = "clown cake slice" + desc = "A slice of bad jokes, and silly props." + icon_state = "clowncake_slice" + food_reagents = list( + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/consumable/nutriment/vitamin = 1, + /datum/reagent/consumable/banana = 3 + ) + tastes = list("cake" = 1, "sugar" = 1, "joy" = 10) + foodtypes = GRAIN | SUGAR | DAIRY + +/obj/item/food/cake/trumpet + name = "spaceman's cake" + desc = "A spaceman's trumpet frosted cake." + icon_state = "trumpetcake" + food_reagents = list( + /datum/reagent/consumable/nutriment = 20, + /datum/reagent/consumable/nutriment/vitamin = 5, + /datum/reagent/medicine/polypyr = 15, + /datum/reagent/consumable/cream = 5, + /datum/reagent/consumable/nutriment/vitamin = 5, + /datum/reagent/consumable/berryjuice = 5 + ) + tastes = list("cake" = 4, "violets" = 2, "jam" = 2) + foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + slice_type = /obj/item/food/cakeslice/trumpet + +/obj/item/food/cakeslice/trumpet + name = "spaceman's cake" + desc = "A spaceman's trumpet frosted cake." + icon_state = "trumpetcakeslice" + food_reagents = list( + /datum/reagent/consumable/nutriment = 4, + /datum/reagent/consumable/nutriment/vitamin = 1, + /datum/reagent/medicine/polypyr = 3, + /datum/reagent/consumable/cream = 1, + /datum/reagent/consumable/nutriment/vitamin = 1, + /datum/reagent/consumable/berryjuice = 1 + ) + tastes = list("cake" = 4, "violets" = 2, "jam" = 2) + foodtypes = GRAIN | DAIRY | FRUIT | SUGAR + +/obj/item/food/cake/brioche + name = "brioche cake" + desc = "A ring of sweet, glazed buns." + icon_state = "briochecake" + tastes = list("cake" = 4, "butter" = 2, "cream" = 1) + foodtypes = GRAIN | DAIRY | SUGAR + slice_type = /obj/item/food/cakeslice/brioche + yield = 6 + +/obj/item/food/cakeslice/brioche + name = "brioche cake slice" + desc = "Delicious sweet-bread. Who needs anything else?" + icon_state = "briochecake_slice" diff --git a/code/game/objects/items/food/spaghetti.dm b/code/game/objects/items/food/spaghetti.dm new file mode 100644 index 000000000000..a6c5394e0647 --- /dev/null +++ b/code/game/objects/items/food/spaghetti.dm @@ -0,0 +1,98 @@ + +/obj/item/food/spaghetti + icon = 'icons/obj/food/pizzaspaghetti.dmi' + food_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1) + foodtypes = GRAIN + +/obj/item/food/spaghetti/Initialize() + . = ..() + if(!microwaved_type) // This isn't cooked, why would you put uncooked spaghetti in your pocket? + var/list/display_message = list( + "Something wet falls out of their pocket and hits the ground. Is that... [name]?", + "Oh shit! All your pocket [name] fell out!") + AddComponent(/datum/component/spill, display_message, 'sound/effects/splat.ogg') + +/obj/item/food/spaghetti/raw + name = "spaghetti" + desc = "Now that's a nic'e pasta!" + icon_state = "spaghetti" + tastes = list("pasta" = 1) + microwaved_type = /obj/item/food/spaghetti/boiledspaghetti + +/obj/item/food/spaghetti/boiledspaghetti + name = "boiled spaghetti" + desc = "A plain dish of noodles, this needs more ingredients." + icon_state = "spaghettiboiled" + trash_type = /obj/item/trash/plate + food_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/vitamin = 1) + microwaved_type = null + +/obj/item/food/spaghetti/pastatomato + name = "spaghetti" + desc = "Spaghetti and crushed tomatoes. Just like your abusive father used to make!" + icon_state = "pastatomato" + trash_type = /obj/item/trash/plate + bite_consumption = 4 + food_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/tomatojuice = 10, /datum/reagent/consumable/nutriment/vitamin = 4) + microwaved_type = null + tastes = list("pasta" = 1, "tomato" = 1) + foodtypes = GRAIN | VEGETABLES + +/obj/item/food/spaghetti/copypasta + name = "copypasta" + desc = "You probably shouldn't try this, you always hear people talking about how bad it is..." + icon_state = "copypasta" + trash_type = /obj/item/trash/plate + bite_consumption = 4 + food_reagents = list(/datum/reagent/consumable/nutriment = 12, /datum/reagent/consumable/tomatojuice = 20, /datum/reagent/consumable/nutriment/vitamin = 8) + microwaved_type = null + tastes = list("pasta" = 1, "tomato" = 1) + foodtypes = GRAIN | VEGETABLES + +/obj/item/food/spaghetti/meatballspaghetti + name = "spaghetti and meatballs" + desc = "Now that's a nic'e meatball!" + icon_state = "meatballspaghetti" + trash_type = /obj/item/trash/plate + food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/vitamin = 2) + microwaved_type = null + tastes = list("pasta" = 1, "meat" = 1) + foodtypes = GRAIN | MEAT + +/obj/item/food/spaghetti/spesslaw + name = "spesslaw" + desc = "A lawyers favourite." + icon_state = "spesslaw" + trash_type = /obj/item/trash/plate + food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/vitamin = 3) + microwaved_type = null + tastes = list("pasta" = 1, "meat" = 1) + +/obj/item/food/spaghetti/chowmein + name = "chow mein" + desc = "A nice mix of noodles and fried vegetables." + icon_state = "chowmein" + trash_type = /obj/item/trash/plate + food_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/nutriment/vitamin = 6) + microwaved_type = null + tastes = list("noodle" = 1, "tomato" = 1) + +/obj/item/food/spaghetti/beefnoodle + name = "beef noodle" + desc = "Nutritious, beefy and noodly." + icon_state = "beefnoodle" + trash_type = /obj/item/reagent_containers/glass/bowl + food_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/vitamin = 6, /datum/reagent/liquidgibs = 3) + microwaved_type = null + tastes = list("noodle" = 1, "meat" = 1) + foodtypes = GRAIN | MEAT + +/obj/item/food/spaghetti/butternoodles + name = "butter noodles" + desc = "Noodles covered in savory butter. Simple and slippery, but delicious." + icon_state = "butternoodles" + trash_type = /obj/item/trash/plate + food_reagents = list(/datum/reagent/consumable/nutriment = 9, /datum/reagent/consumable/nutriment/vitamin = 2) + microwaved_type = null + tastes = list("noodle" = 1, "butter" = 1) + foodtypes = GRAIN | DAIRY diff --git a/code/game/objects/items/gear_packs.dm b/code/game/objects/items/gear_packs.dm new file mode 100644 index 000000000000..65db4ffa28c9 --- /dev/null +++ b/code/game/objects/items/gear_packs.dm @@ -0,0 +1,285 @@ +/obj/item/gear_pack + name = "gear pack" + desc = "A large backpack that usually holds things" + icon = 'icons/obj/hydroponics/equipment.dmi' + icon_state = "waterbackpack" + item_state = "waterbackpack" + lefthand_file = 'icons/mob/inhands/equipment/backpack_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/backpack_righthand.dmi' + w_class = WEIGHT_CLASS_HUGE + slot_flags = ITEM_SLOT_BACK + item_flags = SLOWS_WHILE_IN_HAND + max_integrity = 300 + slowdown = 1 + drag_slowdown = 1 + actions_types = list(/datum/action/item_action/toggle_gear_handle) + max_integrity = 200 + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30) + resistance_flags = FIRE_PROOF + var/on = FALSE + var/obj/item/stock_parts/cell/cell + var/preload_cell_type = /obj/item/stock_parts/cell/high + var/powered = FALSE + var/activate_sound = "sparks" + var/obj/item/gear_handle/gear_handle_type = /obj/item/gear_handle + var/obj/item/gear_handle/gear_handle + +/obj/item/gear_pack/get_cell() + return cell + +/obj/item/gear_pack/Initialize() + . = ..() + drag_slowdown = slowdown + gear_handle = new gear_handle_type(src) + cell = new preload_cell_type(src) + update_power() + return + +/obj/item/gear_pack/examine(mob/user) + . = ..() + . += "It is [ on ? "currently" : "not"] active." + if(cell) + . += "A small readout reports [PERCENT(cell.charge / cell.maxcharge)]% charge." + +/obj/item/gear_pack/fire_act(exposed_temperature, exposed_volume) + . = ..() + if(gear_handle?.loc == src) + gear_handle.fire_act(exposed_temperature, exposed_volume) + +/obj/item/gear_pack/extinguish() + . = ..() + if(gear_handle?.loc == src) + gear_handle.extinguish() + +/obj/item/gear_pack/proc/update_power() + if(!QDELETED(cell)) + if(QDELETED(gear_handle) || cell.charge < gear_handle.usecost) + powered = FALSE + else + powered = TRUE + else + powered = FALSE + update_icon() + +/obj/item/gear_pack/update_overlays() + . = ..() + + if(powered) + . += "[initial(icon_state)]-powered" + if(!QDELETED(cell)) + var/ratio = cell.charge / cell.maxcharge + ratio = CEILING(ratio*4, 1) * 25 + . += "[initial(icon_state)]-charge[ratio]" + if(!cell) + . += "[initial(icon_state)]-nocell" + if(!on) + . += "[initial(icon_state)]-attachment" + +/obj/item/gear_pack/CheckParts(list/parts_list) + ..() + cell = locate(/obj/item/stock_parts/cell) in contents + update_power() + +/obj/item/gear_pack/ui_action_click() + toggle_gear_handle() + +//ATTACK HAND IGNORING PARENT RETURN VALUE +/obj/item/gear_pack/attack_hand(mob/user) + if(loc == user) + if(slot_flags == ITEM_SLOT_BACK) + if(user.get_item_by_slot(ITEM_SLOT_BACK) == src) + ui_action_click() + else + to_chat(user, "Put the [src] on your back first!") + + else if(slot_flags == ITEM_SLOT_BELT) + if(user.get_item_by_slot(ITEM_SLOT_BELT) == src) + ui_action_click() + else + to_chat(user, "Strap the [src]'s belt on first!") + return + return ..() + +/obj/item/gear_pack/MouseDrop(obj/over_object) + . = ..() + if(ismob(loc)) + var/mob/M = loc + if(!M.incapacitated() && istype(over_object, /atom/movable/screen/inventory/hand)) + var/atom/movable/screen/inventory/hand/H = over_object + M.putItemFromInventoryInHandIfPossible(src, H.held_index) + +/obj/item/gear_pack/attackby(obj/item/W, mob/user, params) + if(W == gear_handle) + toggle_gear_handle() + else if(istype(W, /obj/item/stock_parts/cell)) + var/obj/item/stock_parts/cell/C = W + if(cell) + to_chat(user, "[src] already has a cell!") + else + if(C.maxcharge < gear_handle.usecost) + to_chat(user, "[src] requires a higher capacity cell.") + return + if(!user.transferItemToLoc(W, src)) + return + cell = W + to_chat(user, "You install a cell in [src].") + update_power() + + else if(W.tool_behaviour == TOOL_SCREWDRIVER) + if(cell) + cell.update_icon() + cell.forceMove(get_turf(src)) + cell = null + to_chat(user, "You remove the cell from [src].") + update_power() + else + return ..() + +/obj/item/gear_pack/emp_act(severity) + . = ..() + if(cell && !(. & EMP_PROTECT_CONTENTS)) + deductcharge(1000 / severity) + if(. & EMP_PROTECT_SELF) + return + update_power() + +/obj/item/gear_pack/proc/toggle_gear_handle() + set name = "Toggle gear_handle" + set category = "Object" + on = !on + + var/mob/living/carbon/user = usr + if(on) + //Detach the gear_handle into the user's hands + playsound(src, 'sound/items/handling/multitool_pickup.ogg', 100) + if(!usr.put_in_hands(gear_handle)) + on = FALSE + to_chat(user, "You need a free hand to hold the [gear_handle]!") + update_power() + return + else + //Remove from their hands and back onto the gear pack + remove_gear_handle(user) + + update_power() + for(var/X in actions) + var/datum/action/A = X + A.UpdateButtonIcon() + + +/obj/item/gear_pack/equipped(mob/user, slot) + ..() + if((slot_flags == ITEM_SLOT_BACK && slot != ITEM_SLOT_BACK) || (slot_flags == ITEM_SLOT_BELT && slot != ITEM_SLOT_BELT)) + remove_gear_handle(user) + update_power() + +/obj/item/gear_pack/item_action_slot_check(slot, mob/user) + if(slot == user.getBackSlot()) + return 1 + +/obj/item/gear_pack/proc/remove_gear_handle(mob/user) + if(ismob(gear_handle.loc)) + var/mob/M = gear_handle.loc + M.dropItemToGround(gear_handle, TRUE) + return + +/obj/item/gear_pack/Destroy() + if(on) + var/M = get(gear_handle, /mob) + remove_gear_handle(M) + QDEL_NULL(gear_handle) + QDEL_NULL(cell) + return ..() + +/obj/item/gear_pack/proc/deductcharge(chrgdeductamt) + if(cell) + if(cell.charge < (gear_handle.usecost+chrgdeductamt)) + powered = FALSE + update_power() + if(cell.use(chrgdeductamt)) + update_power() + return TRUE + else + return FALSE + +/obj/item/gear_handle + + name = "gear handle" + desc = "handles the gear." + icon = 'icons/obj/hydroponics/equipment.dmi' + icon_state = "mister" + item_state = "mister" + lefthand_file = 'icons/mob/inhands/equipment/mister_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/mister_righthand.dmi' + + force = 0 + throwforce = 6 + w_class = WEIGHT_CLASS_BULKY + resistance_flags = INDESTRUCTIBLE + base_icon_state = "mister" + + var/req_pack = TRUE + var/usecost = 1000 + var/obj/item/gear_pack/pack + +/obj/item/gear_handle/Initialize() + . = ..() + ADD_TRAIT(src, TRAIT_NO_STORAGE_INSERT, GENERIC_ITEM_TRAIT) + if (!loc || !istype(loc, /obj/item/gear_pack)) + return INITIALIZE_HINT_QDEL + if(!req_pack) + return + pack = loc + update_icon() + +/obj/item/gear_handle/Destroy() + pack = null + return ..() + +/obj/item/gear_handle/equipped(mob/user, slot) + . = ..() + if(!req_pack) + return + RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(check_range)) + +/obj/item/gear_handle/Moved() + . = ..() + check_range() + + +/obj/item/gear_handle/fire_act(exposed_temperature, exposed_volume) + . = ..() + if((req_pack && pack) && loc != pack) + pack.fire_act(exposed_temperature, exposed_volume) + +/obj/item/gear_handle/proc/check_range() + SIGNAL_HANDLER + + if(!req_pack ||!pack) + return + if(!in_range(src,pack)) + var/mob/living/L = loc + if(istype(L)) + to_chat(L, "[pack]'s [src] overextends and comes out of your hands!") + else + visible_message("[src] snaps back into [pack].") + snap_back() + +/obj/item/gear_handle/dropped(mob/user) + . = ..() + if(!req_pack) + return ..() + if(user) + UnregisterSignal(user, COMSIG_MOVABLE_MOVED) + if(user != loc) + to_chat(user, "[src] snap back into the main unit.") + snap_back() + return + +/obj/item/gear_handle/proc/snap_back() + if(!pack) + return + playsound() + pack.on = FALSE + forceMove(pack) + pack.update_power() diff --git a/code/game/objects/items/gift.dm b/code/game/objects/items/gift.dm index 8ec4353d1ca2..592a4f6364fb 100644 --- a/code/game/objects/items/gift.dm +++ b/code/game/objects/items/gift.dm @@ -47,8 +47,7 @@ GLOBAL_LIST_EMPTY(possible_gifts) I.add_fingerprint(M) /obj/item/a_gift/proc/get_gift_type() - var/gift_type_list = list(/obj/item/sord, - /obj/item/storage/wallet, + var/gift_type_list = list(/obj/item/storage/wallet, /obj/item/storage/photo_album, /obj/item/storage/box/snappops, /obj/item/storage/crayons, @@ -67,7 +66,6 @@ GLOBAL_LIST_EMPTY(possible_gifts) /obj/item/bikehorn, /obj/item/toy/beach_ball, /obj/item/toy/beach_ball/holoball, - /obj/item/banhammer, /obj/item/reagent_containers/food/snacks/grown/ambrosia/deus, /obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris, /obj/item/paicard, @@ -76,10 +74,6 @@ GLOBAL_LIST_EMPTY(possible_gifts) /obj/item/storage/belt/utility/full, /obj/item/clothing/neck/tie/horrible, /obj/item/clothing/suit/jacket/leather, - /obj/item/clothing/suit/jacket/leather/overcoat, - /obj/item/clothing/suit/poncho, - /obj/item/clothing/suit/poncho/green, - /obj/item/clothing/suit/poncho/red, /obj/item/clothing/suit/snowman, /obj/item/clothing/head/snowman, /obj/item/stack/sheet/mineral/coal) diff --git a/code/game/objects/items/granters.dm b/code/game/objects/items/granters.dm index 50da920b06f1..79b37d41e52c 100644 --- a/code/game/objects/items/granters.dm +++ b/code/game/objects/items/granters.dm @@ -446,10 +446,8 @@ name = "Cooking Desserts 101" desc = "A cook book that teaches you some more of the newest desserts. AI approved, and a best seller on Honkplanet." crafting_recipe_types = list( - /datum/crafting_recipe/food/mimetart, /datum/crafting_recipe/food/berrytart, /datum/crafting_recipe/food/cocolavatart, - /datum/crafting_recipe/food/clowncake, /datum/crafting_recipe/food/vanillacake ) icon_state = "cooking_learing_sweets" diff --git a/code/game/objects/items/grenades/chem_grenade.dm b/code/game/objects/items/grenades/chem_grenade.dm index b675a0012152..e8b7e0de487f 100644 --- a/code/game/objects/items/grenades/chem_grenade.dm +++ b/code/game/objects/items/grenades/chem_grenade.dm @@ -207,7 +207,7 @@ desc = "A custom made large grenade. Larger splash range and increased ignition temperature compared to basic grenades. Fits exotic and bluespace based containers." casedesc = "This casing affects a larger area than the basic model and can fit exotic containers, including slime cores and bluespace beakers. Heats contents by 25°K upon ignition." icon_state = "large_grenade" - allowed_containers = list(/obj/item/reagent_containers/glass, /obj/item/reagent_containers/food/condiment, /obj/item/reagent_containers/food/drinks) + allowed_containers = list(/obj/item/reagent_containers/glass, /obj/item/reagent_containers/condiment, /obj/item/reagent_containers/food/drinks) banned_containers = list() affected_area = 5 ignition_temp = 25 // Large grenades are slightly more effective at setting off heat-sensitive mixtures than smaller grenades. diff --git a/code/game/objects/items/grenades/discogrenade.dm b/code/game/objects/items/grenades/discogrenade.dm index 84ce765d59d3..b8f988f363fe 100644 --- a/code/game/objects/items/grenades/discogrenade.dm +++ b/code/game/objects/items/grenades/discogrenade.dm @@ -1,5 +1,3 @@ -//Ethereal Disco Grenade for Ethereal traitors -//Does not affect ethereals. //Some basic code pieces taken from flashbang, spawner grenade and ethereal disco ball for functionality (basically a combination of the 3). ////////////////////// @@ -7,8 +5,8 @@ ////////////////////// /obj/item/grenade/discogrenade - name = "Ethereal Disco Grenade" - desc = "An unethical micro-party that will make all non-Ethereal beings dance to its beat!" + name = "Portable Disco Grenade" + desc = "An exotic prototype grenade. Through powerful audiovisual hypnotic cues, victims are afflicted with an unstoppable urge to boogie down. " icon_state = "disco" item_state = "flashbang" lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' @@ -91,7 +89,7 @@ return if(target.stat != CONSCIOUS) //Only conscious people can dance return - if(!target || iselzuose(target)) //Non humans and non etherals can't dance + if(!target) //Non humans and non etherals can't dance return var/distance = max(0,get_dist(get_turf(src), target_turf)) @@ -102,27 +100,23 @@ target.say(pick(message_social_anxiety)) if(rand(3) && target.get_ear_protection() == 0) target.drop_all_held_items() - target.show_message("You cover your ears, the music is just too loud for you.", 2) + target.show_message(span_warning("You cover your ears, the music is just too loud for you."), 2) return if(HAS_TRAIT(target, TRAIT_MINDSHIELD)) - target.show_message("You resist your inner urges to break out your best moves.", 2) + target.show_message(span_warning("You resist your inner urges to break out your best moves."), 2) target.set_drugginess(5) return - if(istype(target.get_item_by_slot(ITEM_SLOT_HEAD), /obj/item/clothing/head/foilhat)) - to_chat(target, "THOSE GLOW-IN-THE-DARK NANOTRASEN LIGHTBULBS WON'T CORRUPT ME WITH THEIR AGENDA!") - target.emote("scream") - return target.set_drugginess(10) - target.show_message("You feel a strong rythme and your muscles spasm uncontrollably, you begin dancing and cannot move!", 2) + target.show_message(span_warning("You feel a strong rythme and your muscles spasm uncontrollably, you begin dancing and cannot move!"), 2) target.Immobilize(30) //Special actions switch(rand(0, 6)) if(0) target.Knockdown(4) - target.show_message("You [pick("mess", "screw")] up your moves and trip!", 2) + target.show_message(span_warning("You [pick("mess", "screw")] up your moves and trip!"), 2) if(1 to 3) target.emote("spin") if(3 to 4) diff --git a/code/game/objects/items/grenades/plastic.dm b/code/game/objects/items/grenades/plastic.dm index f3f891bad11d..c4cafbc8fdb9 100644 --- a/code/game/objects/items/grenades/plastic.dm +++ b/code/game/objects/items/grenades/plastic.dm @@ -52,6 +52,9 @@ target.cut_overlay(plastic_overlay, TRUE) if(!ismob(target) || full_damage_on_mobs) target.ex_act(EXPLODE_HEAVY, target) + if(iswallturf(target)) + var/turf/closed/wall/wall = target + wall.dismantle_wall(TRUE) else location = get_turf(src) if(location) diff --git a/code/game/objects/items/grenades/smokebomb.dm b/code/game/objects/items/grenades/smokebomb.dm index e300c3ef07a6..dfea3fb87829 100644 --- a/code/game/objects/items/grenades/smokebomb.dm +++ b/code/game/objects/items/grenades/smokebomb.dm @@ -22,7 +22,4 @@ smoke.set_up(4, src) smoke.start() qdel(smoke) //And deleted again. Sad really. - for(var/obj/structure/blob/B in view(8,src)) - var/damage = round(30/(get_dist(B,src)+1)) - B.take_damage(damage, BURN, "melee", 0) resolve() diff --git a/code/game/objects/items/handcuffs.dm b/code/game/objects/items/handcuffs.dm index 9fece4feedd4..f36c27bb244d 100644 --- a/code/game/objects/items/handcuffs.dm +++ b/code/game/objects/items/handcuffs.dm @@ -20,7 +20,7 @@ name = "handcuffs" desc = "Use this to keep prisoners in line." gender = PLURAL - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "handcuff" lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' @@ -217,7 +217,7 @@ name = "leg cuffs" desc = "Use this to keep prisoners in line." gender = PLURAL - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "handcuff" lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' @@ -426,6 +426,6 @@ /obj/item/restraints/legcuffs/bola/watcher //tribal bola for tribal lizards name = "watcher Bola" desc = "A Bola made from the stretchy sinew of fallen watchers." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "bola_watcher" breakouttime = 45 diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm deleted file mode 100644 index 0affcd107af0..000000000000 --- a/code/game/objects/items/holy_weapons.dm +++ /dev/null @@ -1,522 +0,0 @@ -// CHAPLAIN CUSTOM ARMORS // - -/obj/item/storage/box/holy - name = "Witchhunter Kit" - -/obj/item/storage/box/holy/PopulateContents() - new /obj/item/clothing/head/witchunter(src) - new /obj/item/clothing/suit/armor/witchhunter(src) - - -/obj/item/storage/box/holy/follower - name = "Followers of the Chaplain Kit" - -/obj/item/storage/box/holy/follower/PopulateContents() - new /obj/item/clothing/suit/hooded/chaplain_hoodie/leader(src) - new /obj/item/clothing/suit/hooded/chaplain_hoodie(src) - new /obj/item/clothing/suit/hooded/chaplain_hoodie(src) - new /obj/item/clothing/suit/hooded/chaplain_hoodie(src) - new /obj/item/clothing/suit/hooded/chaplain_hoodie(src) - -/obj/item/clothing/suit/hooded/chaplain_hoodie - name = "follower hoodie" - desc = "Hoodie made for acolytes of the chaplain." - icon_state = "chaplain_hoodie" - item_state = "chaplain_hoodie" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) - hoodtype = /obj/item/clothing/head/hooded/chaplain_hood - -/obj/item/clothing/head/hooded/chaplain_hood - name = "follower hood" - desc = "Hood made for acolytes of the chaplain." - icon_state = "chaplain_hood" - body_parts_covered = HEAD - flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS - -/obj/item/clothing/suit/hooded/chaplain_hoodie/leader - name = "leader hoodie" - desc = "Now you're ready for some 50 dollar bling water." - icon_state = "chaplain_hoodie_leader" - item_state = "chaplain_hoodie_leader" - hoodtype = /obj/item/clothing/head/hooded/chaplain_hood/leader - -/obj/item/clothing/head/hooded/chaplain_hood/leader - name = "leader hood" - desc = "I mean, you don't /have/ to seek bling water. I just think you should." - icon_state = "chaplain_hood_leader" - - -// CHAPLAIN NULLROD AND CUSTOM WEAPONS // - -/obj/item/nullrod - name = "null rod" - desc = "A rod of pure obsidian; its very presence disrupts and dampens the powers of Nar'Sie's followers." - icon_state = "nullrod" - item_state = "nullrod" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - force = 18 - throw_speed = 3 - throw_range = 4 - throwforce = 10 - w_class = WEIGHT_CLASS_TINY - obj_flags = UNIQUE_RENAME - var/reskinned = FALSE - var/chaplain_spawnable = TRUE - -/obj/item/nullrod/godhand - icon_state = "disintegrate" - item_state = "disintegrate" - lefthand_file = 'icons/mob/inhands/misc/touchspell_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/touchspell_righthand.dmi' - name = "god hand" - desc = "This hand of yours glows with an awesome power!" - item_flags = ABSTRACT | DROPDEL - w_class = WEIGHT_CLASS_HUGE - hitsound = 'sound/weapons/sear.ogg' - damtype = BURN - attack_verb = list("punched", "cross countered", "pummeled") - -/obj/item/nullrod/godhand/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT) - -/obj/item/nullrod/staff - icon_state = "godstaff-red" - item_state = "godstaff-red" - lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' - name = "red holy staff" - desc = "It has a mysterious, protective aura." - w_class = WEIGHT_CLASS_HUGE - force = 5 - slot_flags = ITEM_SLOT_BACK - block_chance = 40 - var/shield_icon = "shield-red" - -/obj/item/nullrod/staff/worn_overlays(isinhands) - . = list() - if(isinhands) - . += mutable_appearance('icons/effects/effects.dmi', shield_icon, MOB_LAYER + 0.01) - -/obj/item/nullrod/staff/blue - name = "blue holy staff" - icon_state = "godstaff-blue" - item_state = "godstaff-blue" - shield_icon = "shield-old" - -/obj/item/nullrod/claymore - icon_state = "claymore_gold" - item_state = "claymore_gold" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - pickup_sound = 'sound/items/handling/knife2_pickup.ogg' - drop_sound = 'sound/items/handling/metal_drop.ogg' - name = "holy claymore" - desc = "A weapon fit for a crusade!" - w_class = WEIGHT_CLASS_HUGE - slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_BELT - block_chance = 30 - sharpness = IS_SHARP - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - -/obj/item/nullrod/claymore/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(attack_type == PROJECTILE_ATTACK) - final_block_chance = 0 //Don't bring a sword to a gunfight - return ..() - -/obj/item/nullrod/claymore/darkblade - icon_state = "cultblade" - item_state = "cultblade" - lefthand_file = 'icons/mob/inhands/64x64_lefthand.dmi' - righthand_file = 'icons/mob/inhands/64x64_righthand.dmi' - inhand_x_dimension = 64 - inhand_y_dimension = 64 - name = "dark blade" - desc = "Spread the glory of the dark gods!" - slot_flags = ITEM_SLOT_BELT - hitsound = 'sound/hallucinations/growl1.ogg' - -/obj/item/nullrod/claymore/chainsaw_sword - icon_state = "chainswordon" - item_state = "chainswordon" - name = "sacred chainsaw sword" - desc = "Suffer not a heretic to live." - slot_flags = ITEM_SLOT_BELT - attack_verb = list("sawed", "torn", "cut", "chopped", "diced") - hitsound = 'sound/weapons/chainsawhit.ogg' - tool_behaviour = TOOL_SAW - toolspeed = 1.5 //slower than a real saw - -/obj/item/nullrod/claymore/glowing - icon_state = "swordon" - item_state = "swordon" - name = "force weapon" - desc = "The blade glows with the power of faith. Or possibly a battery." - slot_flags = ITEM_SLOT_BELT - -/obj/item/nullrod/claymore/katana - name = "\improper Hanzo steel" - desc = "Capable of cutting clean through a holy claymore." - icon_state = "katana" - item_state = "katana" - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK - supports_variations = VOX_VARIATION - -/obj/item/nullrod/claymore/multiverse - name = "extradimensional blade" - desc = "Once the harbinger of an interdimensional war, its sharpness fluctuates wildly." - icon_state = "multiverse" - item_state = "multiverse" - slot_flags = ITEM_SLOT_BELT - -/obj/item/nullrod/claymore/multiverse/attack(mob/living/carbon/M, mob/living/carbon/user) - force = rand(1, 30) - ..() - -/obj/item/nullrod/claymore/saber - name = "light energy sword" - hitsound = 'sound/weapons/blade1.ogg' - icon = 'icons/obj/transforming_energy.dmi' - icon_state = "swordblue" - item_state = "swordblue" - desc = "If you strike me down, I shall become more robust than you can possibly imagine." - slot_flags = ITEM_SLOT_BELT - -/obj/item/nullrod/claymore/saber/red - name = "dark energy sword" - icon_state = "swordred" - item_state = "swordred" - desc = "Woefully ineffective when used on steep terrain." - -/obj/item/nullrod/claymore/saber/pirate - name = "nautical energy sword" - icon_state = "cutlassred" - item_state = "cutlassred" - desc = "Convincing HR that your religion involved piracy was no mean feat." - -/obj/item/nullrod/sord - name = "\improper UNREAL SORD" - desc = "This thing is so unspeakably HOLY you are having a hard time even holding it." - icon_state = "sord" - item_state = "sord" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - slot_flags = ITEM_SLOT_BELT - force = 4.13 - throwforce = 1 - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - -/obj/item/nullrod/scythe - icon_state = "scythe1" - item_state = "scythe1" - lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' - name = "reaper scythe" - desc = "Ask not for whom the bell tolls..." - w_class = WEIGHT_CLASS_BULKY - armour_penetration = 35 - slot_flags = ITEM_SLOT_BACK - sharpness = IS_SHARP - attack_verb = list("chopped", "sliced", "cut", "reaped") - -/obj/item/nullrod/scythe/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 70, 110) //the harvest gives a high bonus chance - -/obj/item/nullrod/scythe/vibro - icon_state = "hfrequency0" - item_state = "hfrequency1" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - name = "high frequency blade" - desc = "Bad references are the DNA of the soul." - attack_verb = list("chopped", "sliced", "cut", "zandatsu'd") - hitsound = 'sound/weapons/rapierhit.ogg' - -/obj/item/nullrod/scythe/spellblade - icon_state = "spellblade" - item_state = "spellblade" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - icon = 'icons/obj/guns/magic.dmi' - name = "dormant spellblade" - desc = "The blade grants the wielder nearly limitless power...if they can figure out how to turn it on, that is." - hitsound = 'sound/weapons/rapierhit.ogg' - -/obj/item/nullrod/scythe/talking - icon_state = "talking_sword" - item_state = "talking_sword" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - name = "possessed blade" - desc = "When the world falls into chaos, it's nice to have a friend by your side." - attack_verb = list("chopped", "sliced", "cut") - hitsound = 'sound/weapons/rapierhit.ogg' - var/possessed = FALSE - -/obj/item/nullrod/scythe/talking/relaymove(mob/living/user, direction) - return //stops buckled message spam for the ghost. - -/obj/item/nullrod/scythe/talking/attack_self(mob/living/user) - if(possessed) - return - - to_chat(user, "You attempt to wake the spirit of the blade...") - - possessed = TRUE - - var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to play as the spirit of [user.real_name]'s blade?", ROLE_PAI, null, FALSE, 100, POLL_IGNORE_POSSESSED_BLADE) - - if(LAZYLEN(candidates)) - var/mob/dead/observer/C = pick(candidates) - var/mob/living/simple_animal/shade/S = new(src) - S.ckey = C.ckey - S.fully_replace_character_name(null, "The spirit of [name]") - S.status_flags |= GODMODE - S.copy_languages(user, LANGUAGE_MASTER) //Make sure the sword can understand and communicate with the user. - S.update_atom_languages() - grant_all_languages(FALSE, FALSE, TRUE) //Grants omnitongue - var/input = sanitize_name(stripped_input(S,"What are you named?", ,"", MAX_NAME_LEN)) - - if(src && input) - name = input - S.fully_replace_character_name(null, "The spirit of [input]") - else - to_chat(user, "The blade is dormant. Maybe you can try again later.") - possessed = FALSE - -/obj/item/nullrod/scythe/talking/Destroy() - for(var/mob/living/simple_animal/shade/S in contents) - to_chat(S, "You were destroyed!") - qdel(S) - return ..() - -/obj/item/nullrod/scythe/talking/chainsword - icon_state = "chainswordon" - item_state = "chainswordon" - name = "possessed chainsaw sword" - desc = "Suffer not a heretic to live." - chaplain_spawnable = FALSE - force = 30 - slot_flags = ITEM_SLOT_BELT - attack_verb = list("sawed", "torn", "cut", "chopped", "diced") - hitsound = 'sound/weapons/chainsawhit.ogg' - tool_behaviour = TOOL_SAW - toolspeed = 0.5 //faster than normal saw - -/obj/item/nullrod/scythe/talking/necro - desc = "An ancient weapon flush with the souls of the fallen. The blood of the necropolis has suffused it over time immemorial, granting a toothy bite." - force = 35 - block_chance = 35 - hitsound = 'sound/weapons/pierce_slow.ogg' - armour_penetration = 20// lower ap than the original possessed sword, go figure. The justification is that this has a serrated blade - chaplain_spawnable = FALSE - attack_verb = list("gnawed", "munched on", "chewed", "rended", "chomped") - name = "possessed greatsword" - var/bleed_stacks_per_hit = 2 //this effect has rapid scaling and is an instant down pretty much, I'll crib it since it can trigger on non-fauna - resistance_flags = FIRE_PROOF | ACID_PROOF - -/obj/item/nullrod/scythe/talking/necro/examine(mob/user) - . = ..() - . += "This weapon applies a growing blood curse on attack. Though it slowly fades, fully manifesting it causes your target's blood to violently explode, creating a lethal burst of damage." - -/obj/item/nullrod/scythe/talking/necro/attack(mob/living/target) - ..() - var/datum/status_effect/stacking/saw_bleed/B = target.has_status_effect(STATUS_EFFECT_SAWBLEED) - if(!B) - target.apply_status_effect(STATUS_EFFECT_SAWBLEED,bleed_stacks_per_hit) - else - B.add_stacks(bleed_stacks_per_hit) - -/obj/item/nullrod/hammmer - icon_state = "hammeron" - item_state = "hammeron" - lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' - name = "relic war hammer" - desc = "This war hammer cost the chaplain forty thousand space dollars." - slot_flags = ITEM_SLOT_BELT - w_class = WEIGHT_CLASS_HUGE - attack_verb = list("smashed", "bashed", "hammered", "crunched") - -/obj/item/nullrod/chainsaw - name = "chainsaw hand" - desc = "Good? Bad? You're the guy with the chainsaw hand." - icon_state = "chainsaw_on" - item_state = "mounted_chainsaw" - lefthand_file = 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/chainsaw_righthand.dmi' - w_class = WEIGHT_CLASS_HUGE - item_flags = ABSTRACT - sharpness = IS_SHARP - attack_verb = list("sawed", "torn", "cut", "chopped", "diced") - hitsound = 'sound/weapons/chainsawhit.ogg' - tool_behaviour = TOOL_SAW - toolspeed = 2 //slower than a real saw - -/obj/item/nullrod/chainsaw/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT) - AddComponent(/datum/component/butchering, 30, 100, 0, hitsound) - -/obj/item/nullrod/clown - icon = 'icons/obj/wizard.dmi' - icon_state = "clownrender" - item_state = "render" - name = "clown dagger" - desc = "Used for absolutely hilarious sacrifices." - hitsound = 'sound/items/bikehorn.ogg' - sharpness = IS_SHARP - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - -/obj/item/nullrod/pride_hammer - icon_state = "pride" - name = "Pride-struck Hammer" - desc = "It resonates an aura of Pride." - force = 16 - throwforce = 15 - w_class = 4 - slot_flags = ITEM_SLOT_BACK - attack_verb = list("attacked", "smashed", "crushed", "splattered", "cracked") - hitsound = 'sound/weapons/blade1.ogg' - -/obj/item/nullrod/pride_hammer/afterattack(atom/A as mob|obj|turf|area, mob/user, proximity) - . = ..() - if(!proximity) - return - if(prob(30) && ishuman(A)) - var/mob/living/carbon/human/H = A - user.reagents.trans_to(H, user.reagents.total_volume, 1, 1, 0, transfered_by = user) - to_chat(user, "Your pride reflects on [H].") - to_chat(H, "You feel insecure, taking on [user]'s burden.") - -/obj/item/nullrod/whip - name = "holy whip" - desc = "What a terrible night to be on Space Station 13."//very classic, it stays - icon_state = "chain" - item_state = "chain" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - slot_flags = ITEM_SLOT_BELT - attack_verb = list("whipped", "lashed") - hitsound = 'sound/weapons/chainhit.ogg' - -/obj/item/nullrod/fedora - name = "atheist's fedora" - desc = "The brim of the hat is as sharp as your wit. The edge would hurt almost as much as disproving the existence of God." - icon_state = "fedora" - item_state = "fedora" - slot_flags = ITEM_SLOT_HEAD - icon = 'icons/obj/clothing/hats.dmi' - force = 0 - throw_speed = 4 - throw_range = 7 - throwforce = 30 - sharpness = IS_SHARP - attack_verb = list("enlightened", "redpilled") - -/obj/item/nullrod/armblade - name = "dark blessing" - desc = "Particularly twisted deities grant gifts of dubious value." - icon = 'icons/obj/changeling_items.dmi' - icon_state = "arm_blade" - item_state = "arm_blade" - lefthand_file = 'icons/mob/inhands/antag/changeling_lefthand.dmi' - righthand_file = 'icons/mob/inhands/antag/changeling_righthand.dmi' - item_flags = ABSTRACT - w_class = WEIGHT_CLASS_HUGE - sharpness = IS_SHARP - -/obj/item/nullrod/armblade/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT) - AddComponent(/datum/component/butchering, 80, 70) - -/obj/item/nullrod/armblade/tentacle - name = "unholy blessing" - icon_state = "tentacle" - item_state = "tentacle" - -/obj/item/nullrod/carp - name = "carp-sie plushie" - desc = "An adorable stuffed toy that resembles the god of all carp. The teeth look pretty sharp. Activate it to receive the blessing of Carp-Sie." - icon = 'icons/obj/plushes.dmi' - icon_state = "carpplush" - item_state = "carp_plushie" - lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' - righthand_file = 'icons/mob/inhands/items_righthand.dmi' - force = 15 - attack_verb = list("bitten", "eaten", "fin slapped") - hitsound = 'sound/weapons/bite.ogg' - var/used_blessing = FALSE - -/obj/item/nullrod/claymore/bostaff //May as well make it a "claymore" and inherit the blocking - name = "monk's staff" - desc = "A long, tall staff made of polished wood. Traditionally used in ancient old-Earth martial arts, it is now used to harass the clown." - w_class = WEIGHT_CLASS_BULKY - force = 15 - block_chance = 40 - slot_flags = ITEM_SLOT_BACK - sharpness = IS_BLUNT - hitsound = "swing_hit" - attack_verb = list("smashed", "slammed", "whacked", "thwacked") - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "bostaff0" - item_state = "bostaff0" - lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' - -/obj/item/nullrod/pitchfork - icon_state = "pitchfork0" - lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' - name = "unholy pitchfork" - w_class = WEIGHT_CLASS_NORMAL - desc = "Holding this makes you look absolutely devilish." - attack_verb = list("poked", "impaled", "pierced", "jabbed") - hitsound = 'sound/weapons/bladeslice.ogg' - sharpness = IS_SHARP - -/obj/item/nullrod/egyptian - name = "egyptian staff" - desc = "A tutorial in mummification is carved into the staff. You could probably craft the wraps if you had some cloth." - icon = 'icons/obj/guns/magic.dmi' - icon_state = "pharoah_sceptre" - item_state = "pharoah_sceptre" - lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' - w_class = WEIGHT_CLASS_NORMAL - attack_verb = list("bashes", "smacks", "whacks") - -/obj/item/nullrod/hypertool - icon = 'icons/obj/device.dmi' - icon_state = "hypertool" - item_state = "hypertool" - lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/tools_righthand.dmi' - slot_flags = ITEM_SLOT_BELT - name = "hypertool" - desc = "A tool so powerful even you cannot perfectly use it." - armour_penetration = 35 - damtype = BRAIN - attack_verb = list("pulsed", "mended", "cut") - hitsound = 'sound/effects/sparks4.ogg' - -/obj/item/nullrod/spear - name = "ancient spear" - desc = "An ancient spear made of brass, I mean gold, I mean bronze." - icon_state = "ratvarian_spear" - item_state = "ratvarian_spear" - lefthand_file = 'icons/mob/inhands/antag/clockwork_lefthand.dmi' - righthand_file = 'icons/mob/inhands/antag/clockwork_righthand.dmi' - icon = 'icons/obj/clockwork_objects.dmi' - slot_flags = ITEM_SLOT_BELT - armour_penetration = 10 - sharpness = IS_SHARP_ACCURATE - w_class = WEIGHT_CLASS_BULKY - attack_verb = list("stabbed", "poked", "slashed", "clocked") - hitsound = 'sound/weapons/bladeslice.ogg' diff --git a/code/game/objects/items/implants/implant_mindshield.dm b/code/game/objects/items/implants/implant_mindshield.dm index 121fa9f0c234..0a7094fb3895 100644 --- a/code/game/objects/items/implants/implant_mindshield.dm +++ b/code/game/objects/items/implants/implant_mindshield.dm @@ -28,10 +28,7 @@ deconverted = TRUE if(!silent) - if(target.mind in SSticker.mode.cult) - to_chat(target, "You feel something interfering with your mental conditioning, but you resist it!") - else - to_chat(target, "You feel a sense of peace and security. You are now protected from brainwashing.") + to_chat(target, "You feel a sense of peace and security. You are now protected from brainwashing.") ADD_TRAIT(target, TRAIT_MINDSHIELD, "implant") target.sec_hud_set_implants() if(deconverted) diff --git a/code/game/objects/items/implants/implantcase.dm b/code/game/objects/items/implants/implantcase.dm index 23f7aec9b199..ef8aeefd0517 100644 --- a/code/game/objects/items/implants/implantcase.dm +++ b/code/game/objects/items/implants/implantcase.dm @@ -1,7 +1,6 @@ /obj/item/implantcase name = "implant case" desc = "A glass case containing an implant." - icon = 'icons/obj/items_and_weapons.dmi' icon_state = "implantcase-0" item_state = "implantcase" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' diff --git a/code/game/objects/items/implants/implanter.dm b/code/game/objects/items/implants/implanter.dm index 6de461954cb2..8f95ef9942d7 100644 --- a/code/game/objects/items/implants/implanter.dm +++ b/code/game/objects/items/implants/implanter.dm @@ -1,7 +1,7 @@ /obj/item/implanter name = "implanter" desc = "A sterile automatic implant injector." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "implanter0" item_state = "syringe_0" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' diff --git a/code/game/objects/items/implants/implantpad.dm b/code/game/objects/items/implants/implantpad.dm index 37667786262f..ccbda83067a2 100644 --- a/code/game/objects/items/implants/implantpad.dm +++ b/code/game/objects/items/implants/implantpad.dm @@ -1,7 +1,7 @@ /obj/item/implantpad name = "implant pad" desc = "Used to modify implants." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "implantpad-0" item_state = "electronic" lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm index 9e90329404f0..f7ff9c187a9c 100644 --- a/code/game/objects/items/kitchen.dm +++ b/code/game/objects/items/kitchen.dm @@ -1,10 +1,7 @@ /* Kitchen tools * Contains: * Fork - * Kitchen knives - * Ritual Knife * Butcher's cleaver - * Combat Knife * Rolling Pins * Plastic Utensils */ @@ -64,221 +61,6 @@ user.visible_message("[user]'s fork snaps into tiny pieces in their hand.") qdel(src) -/obj/item/kitchen/knife - name = "kitchen knife" - icon = 'icons/obj/item/knife.dmi' - lefthand_file = 'icons/mob/inhands/weapons/knifes_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/knifes_righthand.dmi' - icon_state = "kitchenknife" - item_state = "kitchenknife" - desc = "A general purpose Chef's Knife made by SpaceCook Incorporated. Guaranteed to stay sharp for years to come." - pickup_sound = 'sound/items/handling/knife1_pickup.ogg' - drop_sound = 'sound/items/handling/knife3_drop.ogg' - flags_1 = CONDUCT_1 - force = 10 - w_class = WEIGHT_CLASS_SMALL - throwforce = 10 - hitsound = 'sound/weapons/bladeslice.ogg' - throw_speed = 3 - throw_range = 6 - custom_materials = list(/datum/material/iron=12000) - attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - sharpness = IS_SHARP_ACCURATE - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - item_flags = EYE_STAB - var/bayonet = FALSE //Can this be attached to a gun? - custom_price = 250 - -/obj/item/kitchen/knife/ComponentInitialize() - . = ..() - set_butchering() - -///Adds the butchering component, used to override stats for special cases -/obj/item/kitchen/knife/proc/set_butchering() - AddComponent(/datum/component/butchering, 80 - force, 100, force - 10) //bonus chance increases depending on force - -/obj/item/kitchen/knife/plastic - name = "plastic knife" - icon_state = "plastic_knife" - desc = "A very safe, barely sharp knife made of plastic. Good for cutting food and not much else." - force = 0 - w_class = WEIGHT_CLASS_TINY - throwforce = 0 - throw_range = 5 - custom_materials = list(/datum/material/plastic = 100) - attack_verb = list("prodded", "whiffed","scratched", "poked") - sharpness = IS_SHARP - custom_price = 50 - var/break_chance = 25 - -/obj/item/kitchen/knife/plastic/afterattack(mob/living/carbon/user) - .=..() - if(prob(break_chance)) - user.visible_message("[user]'s knife snaps into tiny pieces in their hand.") - qdel(src) - -/obj/item/kitchen/knife/pizza_cutter - name = "pizza cutter" - icon_state = "pizza_cutter" - desc = "A knife edge bent around a circle using the power of science. Perfect for safely cutting pizza." - force = 1 - w_class = WEIGHT_CLASS_SMALL - throwforce = 1 - throw_range = 6 - custom_materials = list(/datum/material/iron=4000) - attack_verb = list("prodded", "whiffed","rolled", "poked") - sharpness = IS_SHARP - -/obj/item/kitchen/knife/ritual - name = "ritual knife" - desc = "The unearthly energies that once powered this blade are now dormant." - icon = 'icons/obj/wizard.dmi' - icon_state = "render" - lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi' - w_class = WEIGHT_CLASS_NORMAL - -/obj/item/kitchen/knife/bloodletter - name = "bloodletter" - desc = "An occult looking dagger that is cold to the touch. Somehow, the flawless orb on the pommel is made entirely of liquid blood." - icon = 'icons/obj/ice_moon/artifacts.dmi' - icon_state = "bloodletter" - w_class = WEIGHT_CLASS_NORMAL - var/bleed_stacks_per_hit = 3 - -/obj/item/kitchen/knife/bloodletter/attack(mob/living/M, mob/living/carbon/user) - . =..() - if(istype(M) && (M.mob_biotypes & MOB_ORGANIC)) - var/datum/status_effect/stacking/saw_bleed/bloodletting/B = M.has_status_effect(/datum/status_effect/stacking/saw_bleed/bloodletting) - if(!B) - M.apply_status_effect(/datum/status_effect/stacking/saw_bleed/bloodletting, bleed_stacks_per_hit) - else - B.add_stacks(bleed_stacks_per_hit) - -/obj/item/kitchen/knife/butcher - name = "butcher's cleaver" - icon_state = "cleaver" - item_state = "cleaver" - desc = "A huge thing used for chopping and chopping up meat." - flags_1 = CONDUCT_1 - force = 15 - throwforce = 10 - custom_materials = list(/datum/material/iron=18000) - attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - w_class = WEIGHT_CLASS_NORMAL - custom_price = 600 - -/obj/item/kitchen/knife/hunting - name = "hunting knife" - desc = "Despite its name, it's mainly used for cutting meat from dead prey rather than actual hunting." - item_state = "huntingknife" - icon_state = "huntingknife" - -/obj/item/kitchen/knife/hunting/set_butchering() - AddComponent(/datum/component/butchering, 80 - force, 100, force + 10) - -/obj/item/kitchen/knife/switchblade - name = "switchblade" - icon_state = "switchblade" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - desc = "A sharp, concealable, spring-loaded knife." - flags_1 = CONDUCT_1 - force = 3 - w_class = WEIGHT_CLASS_SMALL - throwforce = 5 - custom_materials = list(/datum/material/iron=12000) - hitsound = 'sound/weapons/genhit.ogg' - attack_verb = list("stubbed", "poked") - resistance_flags = FIRE_PROOF - var/extended = 0 - -/obj/item/kitchen/knife/switchblade/attack_self(mob/user) - extended = !extended - playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, TRUE) - if(extended) - force = 20 - w_class = WEIGHT_CLASS_NORMAL - throwforce = 23 - icon_state = "switchblade_ext" - attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - hitsound = 'sound/weapons/bladeslice.ogg' - sharpness = IS_SHARP - else - force = 3 - w_class = WEIGHT_CLASS_SMALL - throwforce = 5 - icon_state = "switchblade" - attack_verb = list("stubbed", "poked") - hitsound = 'sound/weapons/genhit.ogg' - sharpness = IS_BLUNT - -/obj/item/kitchen/knife/combat - name = "combat knife" - icon = 'icons/obj/world/melee.dmi' - icon_state = "combatknife" - item_state = "combatknife" - desc = "A military combat utility survival knife." - embedding = list("pain_mult" = 4, "embed_chance" = 65, "fall_chance" = 10, "ignore_throwspeed_threshold" = TRUE) - force = 20 - throwforce = 20 - attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "cut") - bayonet = TRUE - -/obj/item/kitchen/knife/combat/Initialize() - . = ..() - AddElement(/datum/element/world_icon, null, icon, 'icons/obj/item/knife.dmi') - -/obj/item/kitchen/knife/combat/survival - name = "survival knife" - icon_state = "survivalknife" - item_state = "survivalknife" - embedding = list("pain_mult" = 4, "embed_chance" = 35, "fall_chance" = 10) - desc = "A hunting grade survival knife." - force = 15 - throwforce = 15 - bayonet = TRUE - -/obj/item/kitchen/knife/combat/bone - name = "bone dagger" - item_state = "bone_dagger" - icon_state = "bone_dagger" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - desc = "A sharpened bone. The bare minimum in survival." - embedding = list("pain_mult" = 4, "embed_chance" = 35, "fall_chance" = 10) - force = 15 - throwforce = 15 - custom_materials = null - -/obj/item/kitchen/knife/combat/cyborg - name = "cyborg knife" - icon = 'icons/obj/items_cyborg.dmi' - icon_state = "knife_cyborg" - desc = "A cyborg-mounted plasteel knife. Extremely sharp and durable." - -/obj/item/kitchen/knife/shiv - name = "glass shiv" - icon = 'icons/obj/shards.dmi' - icon_state = "shiv" - item_state = "shiv" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - desc = "A makeshift glass shiv." - force = 8 - throwforce = 12 - attack_verb = list("shanked", "shivved") - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - custom_materials = list(/datum/material/glass=400) - -/obj/item/kitchen/knife/shiv/carrot - name = "carrot shiv" - icon_state = "carrotshiv" - item_state = "carrotshiv" - icon = 'icons/obj/kitchen.dmi' - desc = "Unlike other carrots, you should probably keep this far away from your eyes." - custom_materials = null - /obj/item/kitchen/rollingpin name = "rolling pin" desc = "Used to knock out the Bartender." @@ -292,8 +74,6 @@ attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked") custom_price = 200 -/* Trays moved to /obj/item/storage/bag */ - /obj/item/kitchen/spoon/plastic name = "plastic spoon" desc = "Just be careful your food doesn't melt the spoon first." @@ -304,9 +84,3 @@ custom_materials = list(/datum/material/plastic=120) custom_price = 50 var/break_chance = 25 - -/obj/item/kitchen/knife/plastic/afterattack(mob/living/carbon/user) - .=..() - if(prob(break_chance)) - user.visible_message("[user]'s spoon snaps into tiny pieces in their hand.") - qdel(src) diff --git a/code/game/objects/items/manuals.dm b/code/game/objects/items/manuals.dm index 05af8fcadbad..2b4aec09ac87 100644 --- a/code/game/objects/items/manuals.dm +++ b/code/game/objects/items/manuals.dm @@ -107,7 +107,7 @@
  • A firesuit must be connected to the Firefighter chassis for heat shielding.
  • Internal armor is plasteel for additional strength.
  • External armor must be installed in 2 parts, totaling 10 sheets.
  • -
  • Completed mech is more resiliant against fire, and is a bit more durable overall
  • +
  • Completed exosuit is more resiliant against fire, and is a bit more durable overall
  • Nanotrasen is determined to the safety of its investments employees.
  • diff --git a/code/game/objects/items/chainsaw.dm b/code/game/objects/items/melee/chainsaw.dm similarity index 81% rename from code/game/objects/items/chainsaw.dm rename to code/game/objects/items/melee/chainsaw.dm index f9181ef3ac6a..d179237f8559 100644 --- a/code/game/objects/items/chainsaw.dm +++ b/code/game/objects/items/melee/chainsaw.dm @@ -4,6 +4,7 @@ name = "chainsaw" desc = "A versatile power tool. Useful for limbing trees and delimbing humans." icon_state = "chainsaw_off" + icon = 'icons/obj/weapon/axe.dmi' lefthand_file = 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/chainsaw_righthand.dmi' flags_1 = CONDUCT_1 @@ -21,30 +22,12 @@ tool_behaviour = TOOL_SAW toolspeed = 0.5 var/on = FALSE - var/wielded = FALSE // track wielded status on item - -/obj/item/chainsaw/Initialize() - . = ..() - RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(on_wield)) - RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(on_unwield)) /obj/item/chainsaw/ComponentInitialize() . = ..() AddComponent(/datum/component/butchering, 30, 100, 0, 'sound/weapons/chainsawhit.ogg', TRUE) AddComponent(/datum/component/two_handed, require_twohands=TRUE) -/// triggered on wield of two handed item -/obj/item/chainsaw/proc/on_wield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = TRUE - -/// triggered on unwield of two handed item -/obj/item/chainsaw/proc/on_unwield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = FALSE - /obj/item/chainsaw/attack_self(mob/user) on = !on to_chat(user, "As you pull the starting cord dangling from [src], [on ? "it begins to whirr." : "the chain stops moving."]") @@ -66,7 +49,7 @@ A.UpdateButtonIcon() /obj/item/chainsaw/get_dismemberment_chance() - if(wielded) + if(HAS_TRAIT(src, TRAIT_WIELDED)) . = ..() /obj/item/chainsaw/doomslayer diff --git a/code/game/objects/items/dualsaber.dm b/code/game/objects/items/melee/dualsaber.dm similarity index 91% rename from code/game/objects/items/dualsaber.dm rename to code/game/objects/items/melee/dualsaber.dm index 7ddb02035927..28242c1006a1 100644 --- a/code/game/objects/items/dualsaber.dm +++ b/code/game/objects/items/melee/dualsaber.dm @@ -2,7 +2,7 @@ * Double-Bladed Energy Swords - Cheridan */ /obj/item/dualsaber - icon = 'icons/obj/transforming_energy.dmi' + icon = 'icons/obj/weapon/energy.dmi' icon_state = "dualsaber" lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' @@ -28,7 +28,6 @@ var/two_hand_force = 34 var/hacked = FALSE var/list/possible_colors = list("red", "blue", "green", "purple", "yellow") - var/wielded = FALSE // track wielded status on item /obj/item/dualsaber/ComponentInitialize() . = ..() @@ -43,7 +42,6 @@ if(user.dna.check_mutation(HULK)) to_chat(user, "You lack the grace to wield this!") return COMPONENT_TWOHANDED_BLOCK_WIELD - wielded = TRUE sharpness = IS_SHARP w_class = w_class_on hitsound = 'sound/weapons/blade1.ogg' @@ -56,16 +54,14 @@ /obj/item/dualsaber/proc/on_unwield(obj/item/source, mob/living/carbon/user) SIGNAL_HANDLER - wielded = FALSE sharpness = initial(sharpness) w_class = initial(w_class) hitsound = "swing_hit" STOP_PROCESSING(SSobj, src) set_light_on(FALSE) - /obj/item/dualsaber/update_icon_state() - icon_state = wielded ? "dualsaber[saber_color]" : "dualsaber" + icon_state = HAS_TRAIT(src, TRAIT_WIELDED) ? "dualsaber[saber_color]" : "dualsaber" return ..() /obj/item/dualsaber/Initialize() @@ -94,14 +90,14 @@ if(user.has_dna()) if(user.dna.check_mutation(HULK)) to_chat(user, "You grip the blade too hard and accidentally drop it!") - if(wielded) + if(HAS_TRAIT(src, TRAIT_WIELDED)) user.dropItemToGround(src, force=TRUE) return ..() - if(wielded && HAS_TRAIT(user, TRAIT_CLUMSY) && prob(40)) + if(HAS_TRAIT(src, TRAIT_WIELDED) && HAS_TRAIT(user, TRAIT_CLUMSY) && prob(40)) impale(user) return - if(wielded && prob(50)) + if(HAS_TRAIT(src, TRAIT_WIELDED) && prob(50)) INVOKE_ASYNC(src, PROC_REF(jedi_spin), user) /obj/item/dualsaber/proc/jedi_spin(mob/living/user) @@ -109,18 +105,18 @@ /obj/item/dualsaber/proc/impale(mob/living/user) to_chat(user, "You twirl around a bit before losing your balance and impaling yourself on [src].") - if(wielded) + if(HAS_TRAIT(src, TRAIT_WIELDED)) user.take_bodypart_damage(20,25,check_armor = TRUE) else user.adjustStaminaLoss(25) /obj/item/dualsaber/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(wielded) + if(HAS_TRAIT(src, TRAIT_WIELDED)) return ..() return 0 /obj/item/dualsaber/process() - if(wielded) + if(HAS_TRAIT(src, TRAIT_WIELDED)) if(hacked) set_light_color(pick(COLOR_SOFT_RED, LIGHT_COLOR_GREEN, LIGHT_COLOR_LIGHT_CYAN, LIGHT_COLOR_LAVENDER)) open_flame() @@ -128,12 +124,12 @@ STOP_PROCESSING(SSobj, src) /obj/item/dualsaber/IsReflect() - if(wielded) + if(HAS_TRAIT(src, TRAIT_WIELDED)) return 1 /obj/item/dualsaber/ignition_effect(atom/A, mob/user) // same as /obj/item/melee/transforming/energy, mostly - if(!wielded) + if(!HAS_TRAIT(src, TRAIT_WIELDED)) return "" var/in_mouth = "" if(iscarbon(user)) diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index b500eadca2f2..34219662e53d 100644 --- a/code/game/objects/items/melee/energy.dm +++ b/code/game/objects/items/melee/energy.dm @@ -1,5 +1,5 @@ /obj/item/melee/transforming/energy - icon = 'icons/obj/transforming_energy.dmi' + icon = 'icons/obj/weapon/energy.dmi' hitsound_on = 'sound/weapons/blade1.ogg' heat = 3500 max_integrity = 200 @@ -255,7 +255,6 @@ /obj/item/melee/transforming/energy/ctf name = "energy sword" desc = "That cable over there, I'm going to cut it." - icon = 'icons/obj/items_and_weapons.dmi' icon_state = "plasmasword0" lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' diff --git a/code/game/objects/items/energyhalberd.dm b/code/game/objects/items/melee/energyhalberd.dm similarity index 92% rename from code/game/objects/items/energyhalberd.dm rename to code/game/objects/items/melee/energyhalberd.dm index 416964bbfded..8ae5cdd96f36 100644 --- a/code/game/objects/items/energyhalberd.dm +++ b/code/game/objects/items/melee/energyhalberd.dm @@ -3,8 +3,9 @@ * Copied mostly from dualsaber.dm to avoid inhertance issues */ /obj/item/energyhalberd - icon = 'icons/obj/transforming_energy.dmi' + icon = 'icons/obj/weapon/energy.dmi' icon_state = "halberd" + icon = 'icons/obj/weapon/energy.dmi' lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' name = "energy halberd" @@ -30,13 +31,12 @@ var/two_hand_force = 34 var/hacked = FALSE var/list/possible_colors = list("red", "blue", "green", "purple", "yellow") - var/wielded = FALSE // track wielded status on item /obj/item/energyhalberd/ComponentInitialize() . = ..() AddComponent(/datum/component/two_handed, force_unwielded=force, force_wielded=two_hand_force, wieldsound='sound/weapons/saberon.ogg', unwieldsound='sound/weapons/saberoff.ogg') -/// Triggered on wield of two handed item + /// Specific hulk checks due to reflection chance for balance issues and switches hitsounds. /obj/item/energyhalberd/proc/on_halberdwield(obj/item/source, mob/living/carbon/user) SIGNAL_HANDLER @@ -45,7 +45,6 @@ if(user.dna.check_mutation(HULK)) to_chat(user, "You lack the grace to wield this!") return COMPONENT_TWOHANDED_BLOCK_WIELD - wielded = TRUE sharpness = IS_SHARP w_class = w_class_on hitsound = 'sound/weapons/blade1.ogg' @@ -53,12 +52,9 @@ set_light_on(TRUE) -/// Triggered on unwield of two handed item /// switch hitsounds /obj/item/energyhalberd/proc/on_halberdunwield(obj/item/source, mob/living/carbon/user) SIGNAL_HANDLER - - wielded = FALSE sharpness = initial(sharpness) w_class = initial(w_class) hitsound = "swing_hit" @@ -67,7 +63,7 @@ /obj/item/energyhalberd/update_icon_state() - if(wielded) + if(HAS_TRAIT(src, TRAIT_WIELDED)) icon_state = "halberd[halberd_color]" return ..() else @@ -100,28 +96,28 @@ if(user.has_dna()) if(user.dna.check_mutation(HULK)) to_chat(user, "You grip the blade too hard and accidentally drop it!") - if(wielded) + if(HAS_TRAIT(src, TRAIT_WIELDED)) user.dropItemToGround(src, force=TRUE) return ..() - if(wielded && HAS_TRAIT(user, TRAIT_CLUMSY) && prob(40)) + if(HAS_TRAIT(src, TRAIT_WIELDED) && HAS_TRAIT(user, TRAIT_CLUMSY) && prob(40)) impale(user) return /obj/item/energyhalberd/proc/impale(mob/living/user) to_chat(user, "You swing around a bit before losing your balance and impaling yourself on [src].") - if(wielded) + if(HAS_TRAIT(src, TRAIT_WIELDED)) user.take_bodypart_damage(20,25,check_armor = TRUE) else user.adjustStaminaLoss(25) /obj/item/energyhalberd/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(wielded) + if(HAS_TRAIT(src, TRAIT_WIELDED)) return ..() return 0 /obj/item/energyhalberd/process() - if(wielded) + if(HAS_TRAIT(src, TRAIT_WIELDED)) if(hacked) set_light_color(pick(COLOR_SOFT_RED, LIGHT_COLOR_GREEN, LIGHT_COLOR_LIGHT_CYAN, LIGHT_COLOR_LAVENDER)) open_flame() @@ -129,12 +125,12 @@ STOP_PROCESSING(SSobj, src) /obj/item/energyhalberd/IsReflect() - if(wielded) + if(HAS_TRAIT(src, TRAIT_WIELDED)) return 1 /obj/item/energyhalberd/ignition_effect(atom/A, mob/user) // same as /obj/item/melee/transforming/energy, mostly - if(!wielded) + if(!HAS_TRAIT(src, TRAIT_WIELDED)) return "" var/in_mouth = "" if(iscarbon(user)) diff --git a/code/game/objects/items/fireaxe.dm b/code/game/objects/items/melee/fireaxe.dm similarity index 62% rename from code/game/objects/items/fireaxe.dm rename to code/game/objects/items/melee/fireaxe.dm index b2e5534a92b0..b3e04ac1bc3c 100644 --- a/code/game/objects/items/fireaxe.dm +++ b/code/game/objects/items/melee/fireaxe.dm @@ -1,13 +1,7 @@ -/* - * Fireaxe - */ -/obj/item/fireaxe // DEM AXES MAN, marker -Agouri - icon_state = "fireaxe0" - base_icon_state = "fireaxe" +/obj/item/melee/axe + icon = 'icons/obj/weapon/axe.dmi' lefthand_file = 'icons/mob/inhands/weapons/axes_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/axes_righthand.dmi' - name = "fire axe" - desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?" force = 5 throwforce = 15 w_class = WEIGHT_CLASS_BULKY @@ -19,54 +13,42 @@ armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30) resistance_flags = FIRE_PROOF species_exception = list(/datum/species/kepori) - var/wielded = FALSE // track wielded status on item - -/obj/item/fireaxe/Initialize() - . = ..() - RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(on_wield)) - RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(on_unwield)) -/obj/item/fireaxe/ComponentInitialize() +/obj/item/melee/axe/ComponentInitialize() . = ..() AddComponent(/datum/component/butchering, 100, 80, 0 , hitsound) //axes are not known for being precision butchering tools AddComponent(/datum/component/two_handed, force_unwielded=5, force_wielded=24, icon_wielded="[base_icon_state]1") -/// triggered on wield of two handed item -/obj/item/fireaxe/proc/on_wield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = TRUE - -/// triggered on unwield of two handed item -/obj/item/fireaxe/proc/on_unwield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = FALSE - /obj/item/fireaxe/update_icon_state() icon_state = "[base_icon_state]0" return ..() -/obj/item/fireaxe/afterattack(atom/A, mob/user, proximity) +/obj/item/melee/axe/afterattack(atom/A, mob/user, proximity) . = ..() if(!proximity) return - if(wielded) //destroys windows and grilles in one hit + if(HAS_TRAIT(src, TRAIT_WIELDED)) //destroys windows and grilles in one hit if(istype(A, /obj/structure/window) || istype(A, /obj/structure/grille)) var/obj/structure/W = A - W.obj_destruction("fireaxe") + W.obj_destruction("axe") -/* - * Bone Axe - */ -/obj/item/fireaxe/boneaxe // Blatant imitation of the fireaxe, but made out of bone. - icon_state = "bone_axe0" - base_icon_state = "bone_axe" +/obj/item/melee/axe/fire // DEM AXES MAN, marker -Agouri + name = "fire axe" + desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?" + icon_state = "fireaxe0" + base_icon_state = "fireaxe" + +/obj/item/melee/axe/bone // Blatant imitation of the fireaxe, but made out of bone. name = "bone axe" desc = "A large, vicious axe crafted out of several sharpened bone plates and crudely tied together. Made of monsters, by killing monsters, for killing monsters." - icon = 'icons/obj/items_and_weapons.dmi' + icon_state = "bone_axe0" + base_icon_state = "bone_axe" -/obj/item/fireaxe/boneaxe/ComponentInitialize() - . = ..() - AddComponent(/datum/component/two_handed, force_unwielded=5, force_wielded=23, icon_wielded="[base_icon_state]1") +/obj/item/melee/axe/scrap + name = "scrap axe" + desc = "Oversided and with a pretty dull blade, its decent against armour" + armour_penetration = 10 +/obj/item/melee/axe/scrap/ComponentInitialize() + . = ..() + AddComponent(/datum/component/two_handed, force_unwielded=5, force_wielded=22, icon_wielded="[base_icon_state]1") diff --git a/code/game/objects/items/melee/knife.dm b/code/game/objects/items/melee/knife.dm new file mode 100644 index 000000000000..83022e7125ff --- /dev/null +++ b/code/game/objects/items/melee/knife.dm @@ -0,0 +1,208 @@ +/obj/item/melee/knife + icon_state = "kitchenknife" + item_state = "kitchenknife" + icon = 'icons/obj/weapon/knife.dmi' + lefthand_file = 'icons/mob/inhands/weapons/knifes_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/knifes_righthand.dmi' + pickup_sound = 'sound/items/handling/knife1_pickup.ogg' + drop_sound = 'sound/items/handling/knife3_drop.ogg' + flags_1 = CONDUCT_1 + force = 10 + w_class = WEIGHT_CLASS_SMALL + throwforce = 10 + hitsound = 'sound/weapons/bladeslice.ogg' + throw_speed = 3 + throw_range = 6 + custom_materials = list(/datum/material/iron=12000) + attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + sharpness = IS_SHARP_ACCURATE + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + item_flags = EYE_STAB + tool_behaviour = TOOL_KNIFE + + +/obj/item/melee/knife/ComponentInitialize() + . = ..() + set_butchering() + +///Adds the butchering component, used to override stats for special cases +/obj/item/melee/knife/proc/set_butchering() + AddComponent(/datum/component/butchering, 80 - force, 100, force - 10) //bonus chance increases depending on force + +/obj/item/melee/knife/kitchen + name = "kitchen knife" + icon_state = "kitchenknife" + item_state = "kitchenknife" + desc = "A general purpose Chef's Knife made by SpaceCook Incorporated. Guaranteed to stay sharp for years to come." + +/obj/item/melee/knife/plastic + name = "plastic knife" + icon_state = "plastic_knife" + desc = "A very safe, barely sharp knife made of plastic. Good for cutting food and not much else." + force = 0 + w_class = WEIGHT_CLASS_TINY + throwforce = 0 + throw_range = 5 + custom_materials = list(/datum/material/plastic = 100) + attack_verb = list("prodded", "whiffed","scratched", "poked") + sharpness = IS_SHARP + custom_price = 50 + var/break_chance = 25 + +/obj/item/melee/knife/plastic/afterattack(mob/living/carbon/user) + .=..() + if(prob(break_chance)) + user.visible_message("[user]'s spoon snaps into tiny pieces in their hand.") + qdel(src) + + +/obj/item/melee/knife/plastic/afterattack(mob/living/carbon/user) + .=..() + if(prob(break_chance)) + user.visible_message("[user]'s knife snaps into tiny pieces in their hand.") + qdel(src) + +/obj/item/melee/knife/pizza_cutter + name = "pizza cutter" + icon_state = "pizza_cutter" + desc = "A knife edge bent around a circle using the power of science. Perfect for safely cutting pizza." + force = 1 + w_class = WEIGHT_CLASS_SMALL + throwforce = 1 + throw_range = 6 + custom_materials = list(/datum/material/iron=4000) + attack_verb = list("prodded", "whiffed","rolled", "poked") + sharpness = IS_SHARP + +/obj/item/melee/knife/butcher + name = "butcher's cleaver" + icon_state = "cleaver" + item_state = "cleaver" + desc = "A huge thing used for chopping and chopping up meat." + flags_1 = CONDUCT_1 + force = 15 + throwforce = 10 + custom_materials = list(/datum/material/iron=18000) + attack_verb = list("cleaved", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + w_class = WEIGHT_CLASS_NORMAL + custom_price = 600 + +/obj/item/melee/knife/hunting + name = "hunting knife" + desc = "Despite its name, it's mainly used for cutting meat from dead prey rather than actual hunting." + item_state = "huntingknife" + icon_state = "huntingknife" + +/obj/item/melee/knife/hunting/set_butchering() + AddComponent(/datum/component/butchering, 80 - force, 100, force + 10) + +/obj/item/melee/knife/combat + name = "combat knife" + icon_state = "combatknife" + item_state = "combatknife" + desc = "A military combat utility survival knife." + embedding = list("pain_mult" = 4, "embed_chance" = 65, "fall_chance" = 10, "ignore_throwspeed_threshold" = TRUE) + force = 20 + throwforce = 20 + attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "cut") + +/obj/item/melee/knife/survival + name = "survival knife" + icon_state = "survivalknife" + item_state = "survivalknife" + embedding = list("pain_mult" = 4, "embed_chance" = 35, "fall_chance" = 10) + desc = "A hunting grade survival knife." + force = 15 + throwforce = 15 + attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "cut") + +/obj/item/melee/knife/bone + name = "bone dagger" + item_state = "bone_dagger" + icon_state = "bone_dagger" + lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' + desc = "A sharpened bone. The bare minimum in survival." + embedding = list("pain_mult" = 4, "embed_chance" = 35, "fall_chance" = 10) + force = 15 + throwforce = 15 + custom_materials = null + +/obj/item/melee/knife/combat/cyborg + name = "cyborg knife" + icon = 'icons/obj/items_cyborg.dmi' + icon_state = "knife_cyborg" + desc = "A cyborg-mounted plasteel knife. Extremely sharp and durable." + +/obj/item/melee/knife/shiv + name = "glass shiv" + icon = 'icons/obj/shards.dmi' + icon_state = "shiv" + item_state = "shiv" + lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' + desc = "A makeshift glass shiv." + force = 8 + throwforce = 12 + attack_verb = list("shanked", "shivved") + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + custom_materials = list(/datum/material/glass=400) + +/obj/item/melee/knife/shiv/carrot + name = "carrot shiv" + icon_state = "carrotshiv" + item_state = "carrotshiv" + icon = 'icons/obj/kitchen.dmi' + desc = "Unlike other carrots, you should probably keep this far away from your eyes." + custom_materials = null + +/obj/item/melee/knife/switchblade + name = "switchblade" + icon_state = "switchblade" + lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' + desc = "A sharp, concealable, spring-loaded knife." + flags_1 = CONDUCT_1 + force = 3 + w_class = WEIGHT_CLASS_SMALL + throwforce = 5 + throw_speed = 3 + throw_range = 6 + custom_materials = list(/datum/material/iron=12000) + hitsound = 'sound/weapons/genhit.ogg' + attack_verb = list("stubbed", "poked") + resistance_flags = FIRE_PROOF + var/extended = 0 + +/obj/item/melee/knife/switchblade/attack_self(mob/user) + extended = !extended + playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, TRUE) + if(extended) + force = 20 + w_class = WEIGHT_CLASS_NORMAL + throwforce = 23 + icon_state = "switchblade_ext" + attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + hitsound = 'sound/weapons/bladeslice.ogg' + sharpness = IS_SHARP + else + force = 3 + w_class = WEIGHT_CLASS_SMALL + throwforce = 5 + icon_state = "switchblade" + attack_verb = list("stubbed", "poked") + hitsound = 'sound/weapons/genhit.ogg' + sharpness = IS_BLUNT + +/obj/item/melee/knife/letter_opener + name = "letter opener" + icon = 'icons/obj/items.dmi' + icon_state = "letter_opener" + desc = "A military combat utility survival knife." + embedding = list("pain_mult" = 4, "embed_chance" = 65, "fall_chance" = 10, "ignore_throwspeed_threshold" = TRUE) + force = 15 + throwforce = 15 + unique_reskin = list("Traditional" = "letter_opener", + "Boxcutter" = "letter_opener_b", + "Corporate" = "letter_opener_a" + ) diff --git a/code/game/objects/items/melee/misc.dm b/code/game/objects/items/melee/misc.dm index 9d90a1a43373..afb4bfe2ec33 100644 --- a/code/game/objects/items/melee/misc.dm +++ b/code/game/objects/items/melee/misc.dm @@ -1,5 +1,14 @@ /obj/item/melee item_flags = NEEDS_PERMIT + icon = 'icons/obj/weapon/misc.dmi' + lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' + var/projectile_block_chance = 0 + +/obj/item/melee/sword/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) + if(attack_type == PROJECTILE_ATTACK) + final_block_chance = projectile_block_chance //Don't bring a sword to a gunfight + return ..() /obj/item/melee/proc/check_martial_counter(mob/living/carbon/human/target, mob/living/carbon/human/user) if(target.check_block()) @@ -8,14 +17,11 @@ user.Stun(40) return TRUE - /obj/item/melee/chainofcommand name = "chain of command" desc = "A tool used by great men to placate the frothing masses." icon_state = "chain" item_state = "chain" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' flags_1 = CONDUCT_1 slot_flags = ITEM_SLOT_BELT force = 10 @@ -44,487 +50,11 @@ . = ..() AddComponent(/datum/component/butchering, 60, 80) //very imprecise -/obj/item/melee/sabre - name = "officer's sabre" - desc = "An elegant weapon, its monomolecular edge is capable of cutting through flesh and bone with ease." - icon_state = "sabre" - item_state = "sabre" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - pickup_sound = 'sound/items/unsheath.ogg' - drop_sound = 'sound/items/handling/metal_drop.ogg' - flags_1 = CONDUCT_1 - obj_flags = UNIQUE_RENAME - force = 15 - throwforce = 10 - w_class = WEIGHT_CLASS_BULKY - block_chance = 60 - armour_penetration = 75 - sharpness = IS_SHARP - attack_verb = list("slashed", "cut") - hitsound = 'sound/weapons/rapierhit.ogg' - custom_materials = list(/datum/material/iron = 1000) - -/obj/item/melee/sabre/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 30, 95, 5) //fast and effective, but as a sword, it might damage the results. - -/obj/item/melee/sabre/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(attack_type == PROJECTILE_ATTACK) - final_block_chance = 0 //Don't bring a sword to a gunfight - return ..() - -/obj/item/melee/sabre/on_enter_storage(datum/component/storage/concrete/S) - var/obj/item/storage/belt/sabre/B = S.real_location() - if(istype(B)) - playsound(B, 'sound/items/sheath.ogg', 25, TRUE) - -/obj/item/melee/sabre/solgov - name = "solarian sabre" - desc = "A refined ceremonial blade often given to soldiers and high ranking officials of SolGov." - icon_state = "sabresolgov" - item_state = "sabresolgov" - -/obj/item/melee/sabre/suns - name = "SUNS sabre" - desc = "A blade of Solarian origin given to SUNS followers." - icon_state = "suns-sabre" - item_state = "suns-sabre" - -/obj/item/melee/sabre/suns/captain - name = "SUNS captain sabre" - desc = "An elegant blade awarded to SUNS captains. Despite its higher craftmanship, it appears to be just as effective as a normal sabre." - icon_state = "suns-capsabre" - item_state = "suns-capsabre" - -/obj/item/melee/sabre/suns/cmo - name = "SUNS stick sabre" - desc = "A thin blade used by SUNS medical instructors." - icon_state = "suns-swordstick" - item_state = "suns-swordstick" - -/obj/item/melee/sabre/suns/telescopic - name = "telescopic sabre" - desc = "A telescopic and retractable blade given to SUNS peacekeepers for easy concealment and carry. It's design makes it slightly less effective than normal sabres sadly, however it is still excelent at piercing armor." - icon_state = "suns-tsword" - item_state = "suns-tsword" - force = 0 - throwforce = 0 - block_chance = 0 - - slot_flags = ITEM_SLOT_BELT - w_class = WEIGHT_CLASS_SMALL - attack_verb = list("smacked", "prodded") - - - var/extended = FALSE - var/extend_sound = 'sound/weapons/batonextend.ogg' - - - - var/on_icon_state = "suns-tsword_ext" - var/on_item_state = "suns-tsword_ext" - var/off_icon_state = "suns-tsword" - var/off_item_state = "suns-tsword" - - var/force_on = 10 - var/on_throwforce = 10 - var/on_blockchance = 40 - - var/force_off = 0 - var/off_throwforce = 0 - var/off_blockchance = 0 - - var/weight_class_on = WEIGHT_CLASS_BULKY - -/obj/item/melee/sabre/suns/telescopic/attack_self(mob/user) - extended = !extended - - if(extended) - to_chat(user, "You extend the [src].") - icon_state = on_icon_state - item_state = on_item_state - slot_flags = 0 - w_class = weight_class_on - force = force_on - throwforce = on_throwforce - block_chance = on_blockchance - attack_verb = list("slashed", "cut") - else - to_chat(user, "You collapse the [src].") - icon_state = off_icon_state - item_state = off_item_state - slot_flags = ITEM_SLOT_BELT - w_class = WEIGHT_CLASS_SMALL - force = force_off - throwforce = off_throwforce - block_chance = off_blockchance - attack_verb = list("smacked", "prodded") - - playsound(get_turf(src), extend_sound, 50, TRUE) - add_fingerprint(user) - -/obj/item/melee/beesword - name = "The Stinger" - desc = "Taken from a giant bee and folded over one thousand times in pure honey. Can sting through anything." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "beesword" - item_state = "stinger" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - slot_flags = ITEM_SLOT_BELT - force = 5 - w_class = WEIGHT_CLASS_BULKY - sharpness = IS_SHARP - throwforce = 10 - block_chance = 20 - armour_penetration = 65 - attack_verb = list("slashed", "stung", "prickled", "poked") - hitsound = 'sound/weapons/rapierhit.ogg' - -/obj/item/melee/beesword/afterattack(atom/target, mob/user, proximity) - . = ..() - if(!proximity) - return - user.changeNext_move(CLICK_CD_RAPID) - if(iscarbon(target)) - var/mob/living/carbon/H = target - H.reagents.add_reagent(/datum/reagent/toxin, 4) - -/obj/item/melee/classic_baton - name = "police baton" - desc = "A wooden truncheon for beating criminal scum." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "classic_baton" - item_state = "classic_baton" - lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' - slot_flags = ITEM_SLOT_BELT - force = 12 //9 hit crit - w_class = WEIGHT_CLASS_NORMAL - - var/cooldown_check = 0 // Used interally, you don't want to modify - - var/cooldown = 40 // Default wait time until can stun again. - var/knockdown_time_carbon = (1.5 SECONDS) // Knockdown length for carbons. - var/stun_time_silicon = (5 SECONDS) // If enabled, how long do we stun silicons. - var/stamina_damage = 55 // Do we deal stamina damage. - var/affect_silicon = FALSE // Does it stun silicons. - var/on_sound // "On" sound, played when switching between able to stun or not. - var/on_stun_sound = 'sound/effects/woodhit.ogg' // Default path to sound for when we stun. - var/stun_animation = TRUE // Do we animate the "hit" when stunning. - var/on = TRUE // Are we on or off. - - var/on_icon_state // What is our sprite when turned on - var/off_icon_state // What is our sprite when turned off - var/on_item_state // What is our in-hand sprite when turned on - var/force_on // Damage when on - not stunning - var/force_off // Damage when off - not stunning - var/weight_class_on // What is the new size class when turned on - -// Description for trying to stun when still on cooldown. -/obj/item/melee/classic_baton/proc/get_wait_description() - return - -// Description for when turning their baton "on" -/obj/item/melee/classic_baton/proc/get_on_description() - . = list() - - .["local_on"] = "You extend the baton." - .["local_off"] = "You collapse the baton." - - return . - -// Default message for stunning mob. -/obj/item/melee/classic_baton/proc/get_stun_description(mob/living/target, mob/living/user) - . = list() - - .["visible"] = "[user] knocks [target] down with [src]!" - .["local"] = "[user] knocks you down with [src]!" - - return . - -// Default message for stunning a silicon. -/obj/item/melee/classic_baton/proc/get_silicon_stun_description(mob/living/target, mob/living/user) - . = list() - - .["visible"] = "[user] pulses [target]'s sensors with the baton!" - .["local"] = "You pulse [target]'s sensors with the baton!" - - return . - -// Are we applying any special effects when we stun to carbon -/obj/item/melee/classic_baton/proc/additional_effects_carbon(mob/living/target, mob/living/user) - return - -// Are we applying any special effects when we stun to silicon -/obj/item/melee/classic_baton/proc/additional_effects_silicon(mob/living/target, mob/living/user) - return - -/obj/item/melee/classic_baton/attack(mob/living/target, mob/living/user) - if(!on) - return ..() - - add_fingerprint(user) - if((HAS_TRAIT(user, TRAIT_CLUMSY)) && prob(50)) - to_chat(user, "You hit yourself over the head!") - - user.Paralyze(knockdown_time_carbon * force) - user.apply_damage(stamina_damage, STAMINA, BODY_ZONE_HEAD) - - additional_effects_carbon(user) // user is the target here - if(ishuman(user)) - var/mob/living/carbon/human/H = user - H.apply_damage(2*force, BRUTE, BODY_ZONE_HEAD) - else - user.take_bodypart_damage(2*force) - return - if(iscyborg(target)) - // We don't stun if we're on harm. - if (user.a_intent != INTENT_HARM) - if (affect_silicon) - var/list/desc = get_silicon_stun_description(target, user) - - target.flash_act(affect_silicon = TRUE) - target.Paralyze(stun_time_silicon) - additional_effects_silicon(target, user) - - user.visible_message(desc["visible"], desc["local"]) - playsound(get_turf(src), on_stun_sound, 100, TRUE, -1) - - if (stun_animation) - user.do_attack_animation(target) - else - ..() - else - ..() - return - if(!isliving(target)) - return - if (user.a_intent == INTENT_HARM) - if(!..()) - return - if(!iscyborg(target)) - return - else - if(cooldown_check <= world.time) - if(ishuman(target)) - var/mob/living/carbon/human/H = target - if (H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK)) - return - if(check_martial_counter(H, user)) - return - - var/list/desc = get_stun_description(target, user) - - if (stun_animation) - user.do_attack_animation(target) - - playsound(get_turf(src), on_stun_sound, 75, TRUE, -1) - target.Knockdown(knockdown_time_carbon) - target.apply_damage(stamina_damage, STAMINA, BODY_ZONE_CHEST) - additional_effects_carbon(target, user) - - log_combat(user, target, "stunned", src) - add_fingerprint(user) - - target.visible_message(desc["visible"], desc["local"]) - - if(!iscarbon(user)) - target.LAssailant = null - else - target.LAssailant = WEAKREF(user) - cooldown_check = world.time + cooldown - else - var/wait_desc = get_wait_description() - if (wait_desc) - to_chat(user, wait_desc) - -/obj/item/conversion_kit - name = "conversion kit" - desc = "A strange box containing wood working tools and an instruction paper to turn stun batons into something else." - icon = 'icons/obj/storage.dmi' - icon_state = "uk" - custom_price = 450 - -/obj/item/melee/classic_baton/telescopic - name = "telescopic baton" - desc = "A compact yet robust personal defense weapon. Can be concealed when folded." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "telebaton_0" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - item_state = null - slot_flags = ITEM_SLOT_BELT - w_class = WEIGHT_CLASS_SMALL - item_flags = NONE - force = 0 - on = FALSE - on_sound = 'sound/weapons/batonextend.ogg' - - on_icon_state = "telebaton_1" - off_icon_state = "telebaton_0" - on_item_state = "nullrod" - force_on = 10 - force_off = 0 - weight_class_on = WEIGHT_CLASS_BULKY - -/obj/item/melee/classic_baton/telescopic/attack_self(mob/user) - on = !on - var/list/desc = get_on_description() - - if(on) - to_chat(user, desc["local_on"]) - icon_state = on_icon_state - item_state = on_item_state - w_class = weight_class_on - force = force_on - attack_verb = list("smacked", "struck", "cracked", "beaten") - else - to_chat(user, desc["local_off"]) - icon_state = off_icon_state - item_state = null //no sprite for concealment even when in hand - slot_flags = ITEM_SLOT_BELT - w_class = WEIGHT_CLASS_SMALL - force = force_off - attack_verb = list("hit", "poked") - - playsound(src.loc, on_sound, 50, TRUE) - add_fingerprint(user) - -/obj/item/melee/classic_baton/telescopic/contractor_baton - name = "contractor baton" - desc = "A compact, specialised baton assigned to Syndicate contractors. Applies light electrical shocks to targets." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "contractor_baton_0" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - item_state = null - slot_flags = ITEM_SLOT_BELT - w_class = WEIGHT_CLASS_SMALL - item_flags = NONE - force = 5 - - cooldown = 25 - stamina_damage = 85 - affect_silicon = TRUE - on_sound = 'sound/weapons/contractorbatonextend.ogg' - on_stun_sound = 'sound/effects/contractorbatonhit.ogg' - - on_icon_state = "contractor_baton_1" - off_icon_state = "contractor_baton_0" - on_item_state = "contractor_baton" - force_on = 16 - force_off = 5 - weight_class_on = WEIGHT_CLASS_NORMAL - -/obj/item/melee/classic_baton/telescopic/contractor_baton/get_wait_description() - return "The baton is still charging!" - -/obj/item/melee/classic_baton/telescopic/contractor_baton/additional_effects_carbon(mob/living/target, mob/living/user) - target.Jitter(20) - target.stuttering += 20 - -/obj/item/melee/supermatter_sword - name = "supermatter sword" - desc = "In a universe full of bad ideas, this might just be the worst." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "supermatter_sword" - item_state = "supermatter_sword" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - slot_flags = null - w_class = WEIGHT_CLASS_BULKY - force = 0.001 - armour_penetration = 1000 - var/obj/machinery/power/supermatter_crystal/shard - var/balanced = 1 - force_string = "INFINITE" - -/obj/item/melee/supermatter_sword/Initialize() - . = ..() - shard = new /obj/machinery/power/supermatter_crystal(src) - qdel(shard.countdown) - shard.countdown = null - START_PROCESSING(SSobj, src) - visible_message("[src] appears, balanced ever so perfectly on its hilt. This isn't ominous at all.") - -/obj/item/melee/supermatter_sword/process() - if(balanced || throwing || ismob(src.loc) || isnull(src.loc)) - return - if(!isturf(src.loc)) - var/atom/target = src.loc - forceMove(target.loc) - consume_everything(target) - else - var/turf/T = get_turf(src) - if(!isspaceturf(T)) - consume_turf(T) - -/obj/item/melee/supermatter_sword/afterattack(target, mob/user, proximity_flag) - . = ..() - if(user && target == user) - user.dropItemToGround(src) - if(proximity_flag) - consume_everything(target) - -/obj/item/melee/supermatter_sword/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - ..() - if(ismob(hit_atom)) - var/mob/M = hit_atom - if(src.loc == M) - M.dropItemToGround(src) - consume_everything(hit_atom) - -/obj/item/melee/supermatter_sword/pickup(user) - ..() - balanced = 0 - -/obj/item/melee/supermatter_sword/ex_act(severity, target) - visible_message("The blast wave smacks into [src] and rapidly flashes to ash.",\ - "You hear a loud crack as you are washed with a wave of heat.") - consume_everything() - -/obj/item/melee/supermatter_sword/acid_act() - visible_message("The acid smacks into [src] and rapidly flashes to ash.",\ - "You hear a loud crack as you are washed with a wave of heat.") - consume_everything() - -/obj/item/melee/supermatter_sword/bullet_act(obj/projectile/P) - visible_message("[P] smacks into [src] and rapidly flashes to ash.",\ - "You hear a loud crack as you are washed with a wave of heat.") - consume_everything(P) - return BULLET_ACT_HIT - - -/obj/item/melee/supermatter_sword/proc/consume_everything(target) - if(isnull(target)) - shard.Consume() - else if(!isturf(target)) - shard.Bumped(target) - else - consume_turf(target) - -/obj/item/melee/supermatter_sword/proc/consume_turf(turf/T) - var/oldtype = T.type - var/turf/newT = T.ScrapeAway(flags = CHANGETURF_INHERIT_AIR) - if(newT.type == oldtype) - return - playsound(T, 'sound/effects/supermatter.ogg', 50, TRUE) - T.visible_message("[T] smacks into [src] and rapidly flashes to ash.",\ - "You hear a loud crack as you are washed with a wave of heat.") - shard.Consume() - -/obj/item/melee/supermatter_sword/add_blood_DNA(list/blood_dna) - return FALSE - /obj/item/melee/curator_whip name = "curator's whip" desc = "Somewhat eccentric and outdated, it still stings like hell to be hit by." icon_state = "whip" item_state = "chain" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' slot_flags = ITEM_SLOT_BELT force = 15 w_class = WEIGHT_CLASS_NORMAL @@ -538,345 +68,128 @@ H.drop_all_held_items() H.visible_message("[user] disarms [H]!", "[user] disarmed you!") -/obj/item/melee/roastingstick - name = "advanced roasting stick" - desc = "A telescopic roasting stick with a miniature shield generator designed to ensure entry into various high-tech shielded cooking ovens and firepits." - icon_state = "roastingstick_0" - item_state = "null" +/obj/item/melee/cleric_mace + name = "cleric mace" + desc = "The grandson of the club, yet the grandfather of the baseball bat. Most notably used by holy orders in days past." + icon_state = "mace_greyscale" + item_state = "mace_greyscale" + material_flags = MATERIAL_ADD_PREFIX | MATERIAL_COLOR | MATERIAL_AFFECT_STATISTICS //Material type changes the prefix as well as the color. + custom_materials = list(/datum/material/iron = 12000) //Defaults to an Iron Mace. slot_flags = ITEM_SLOT_BELT - w_class = WEIGHT_CLASS_SMALL - item_flags = NONE - force = 0 - attack_verb = list("hit", "poked") - var/obj/item/reagent_containers/food/snacks/sausage/held_sausage - var/static/list/ovens - var/on = FALSE - var/datum/beam/beam - -/obj/item/melee/roastingstick/Initialize() - . = ..() - if (!ovens) - ovens = typecacheof(list(/obj/singularity, /obj/machinery/power/supermatter_crystal, /obj/structure/bonfire)) - -/obj/item/melee/roastingstick/attack_self(mob/user) - on = !on - if(on) - extend(user) - else - if (held_sausage) - to_chat(user, "You can't retract [src] while [held_sausage] is attached!") - return - retract(user) - - playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, TRUE) - add_fingerprint(user) - -/obj/item/melee/roastingstick/attackby(atom/target, mob/user) - ..() - if (istype(target, /obj/item/reagent_containers/food/snacks/sausage)) - if (!on) - to_chat(user, "You must extend [src] to attach anything to it!") - return - if (held_sausage) - to_chat(user, "[held_sausage] is already attached to [src]!") - return - if (user.transferItemToLoc(target, src)) - held_sausage = target - else - to_chat(user, "[target] doesn't seem to want to get on [src]!") - update_appearance() - -/obj/item/melee/roastingstick/attack_hand(mob/user) - ..() - if (held_sausage) - user.put_in_hands(held_sausage) - held_sausage = null - update_appearance() - -/obj/item/melee/roastingstick/update_overlays() - . = ..() - if (held_sausage) - . += mutable_appearance(icon, "roastingstick_sausage") - -/obj/item/melee/roastingstick/proc/extend(user) - to_chat(user, "You extend [src].") - icon_state = "roastingstick_1" - item_state = "nullrod" + force = 14 w_class = WEIGHT_CLASS_BULKY - -/obj/item/melee/roastingstick/proc/retract(user) - to_chat(user, "You collapse [src].") - icon_state = "roastingstick_0" - item_state = null - w_class = WEIGHT_CLASS_SMALL - -/obj/item/melee/roastingstick/handle_atom_del(atom/target) - if (target == held_sausage) - held_sausage = null - update_appearance() - -/obj/item/melee/roastingstick/afterattack(atom/target, mob/user, proximity) - . = ..() - if (!on) - return - if (is_type_in_typecache(target, ovens)) - if (held_sausage && held_sausage.roasted) - to_chat(src, "Your [held_sausage] has already been cooked!") - return - if (istype(target, /obj/singularity) && get_dist(user, target) < 10) - to_chat(user, "You send [held_sausage] towards [target].") - playsound(src, 'sound/items/rped.ogg', 50, TRUE) - beam = user.Beam(target,icon_state="rped_upgrade",time=100) - else if (user.Adjacent(target)) - to_chat(user, "You extend [src] towards [target].") - playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, TRUE) - else - return - if(do_after(user, 100, target = user)) - finish_roasting(user, target) - else - QDEL_NULL(beam) - playsound(src, 'sound/weapons/batonextend.ogg', 50, TRUE) - -/obj/item/melee/roastingstick/proc/finish_roasting(user, atom/target) - to_chat(user, "You finish roasting [held_sausage].") - playsound(src,'sound/items/welder2.ogg',50,TRUE) - held_sausage.add_atom_colour(rgb(103,63,24), FIXED_COLOUR_PRIORITY) - held_sausage.name = "[target.name]-roasted [held_sausage.name]" - held_sausage.desc = "[held_sausage.desc] It has been cooked to perfection on \a [target]." - update_appearance() - -/obj/item/melee/greykingsword - name = "blade of the grey-king" - desc = "A legendary sword made with 3 replica katanas nailed together and dipped in heavy narcotics." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "grey_sword" - item_state = "swordoff" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BACK - force = 15 throwforce = 8 - w_class = WEIGHT_CLASS_NORMAL - block_chance = 30 - attack_verb = list("struck", "slashed", "mall-ninjad", "tided", "multi-shanked", "shredded") - custom_materials = list(/datum/material/iron = 1420) - sharpness = IS_SHARP - - var/prick_chance = 50 - var/prick_chems = list( - /datum/reagent/toxin = 10, - /datum/reagent/toxin/mindbreaker = 10, - /datum/reagent/drug/space_drugs = 10, - /datum/reagent/drug/crank = 5, - /datum/reagent/drug/methamphetamine = 5, - /datum/reagent/drug/bath_salts = 5, - /datum/reagent/drug/aranesp = 5, - /datum/reagent/drug/pumpup = 10, - /datum/reagent/medicine/omnizine = 10, - /datum/reagent/medicine/earthsblood = 15, - /datum/reagent/medicine/omnizine/protozine = 15 - ) - -/obj/item/melee/greykingsword/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - if (iscarbon(target) && prob(prick_chance)) - var/mob/living/carbon/C = target - var/datum/reagent/R = pick(prick_chems) - C.reagents.add_reagent(R, prick_chems[R]) - C.visible_message("[user] is pricked!", \ - "You've been pricked by the [src]!") - log_combat(user, C, "pricked", src.name, "with [prick_chems[R]]u of [R]") - return ..() - - -/obj/item/melee/greykingsword/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text, final_block_chance, damage, attack_type) - if(attack_type == PROJECTILE_ATTACK) - final_block_chance = 1 //Still not like your Japaniese animes though. - return ..() - -/obj/item/kitchen/knife/letter_opener - name = "letter opener" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "letter_opener" - desc = "A military combat utility survival knife." - embedding = list("pain_mult" = 4, "embed_chance" = 65, "fall_chance" = 10, "ignore_throwspeed_threshold" = TRUE) - force = 15 - throwforce = 15 - unique_reskin = list("Traditional" = "letter_opener", - "Boxcutter" = "letter_opener_b", - "Corporate" = "letter_opener_a" - ) -/obj/item/melee/weebstick - name = "Weeb Stick" - desc = "Glorious nippon steel, folded 1000 times." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "weeb_blade" - item_state = "weeb_blade" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - pickup_sound = 'sound/items/handling/knife2_pickup.ogg' - drop_sound = 'sound/items/handling/metal_drop.ogg' - flags_1 = CONDUCT_1 - obj_flags = UNIQUE_RENAME - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - sharpness = IS_SHARP_ACCURATE - force = 25 - throw_speed = 4 - throw_range = 5 - throwforce = 12 - block_chance = 20 armour_penetration = 50 - hitsound = 'sound/weapons/anime_slash.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "diced", "cut") + attack_verb = list("smacked", "struck", "cracked", "beaten") + var/overlay_state = "mace_handle" + var/mutable_appearance/overlay -/obj/item/melee/weebstick/Initialize() +/obj/item/melee/cleric_mace/Initialize() . = ..() - AddComponent(/datum/component/butchering, 25, 90, 5) //Not made for scalping victims, but will work nonetheless - -/obj/item/melee/weebstick/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(attack_type == PROJECTILE_ATTACK) - final_block_chance = block_chance / 2 //Pretty good... - return ..() - -/obj/item/melee/weebstick/on_exit_storage(datum/component/storage/concrete/S) - var/obj/item/storage/belt/weebstick/B = S.real_location() - if(istype(B)) - playsound(B, 'sound/items/unsheath.ogg', 25, TRUE) - -/obj/item/melee/weebstick/on_enter_storage(datum/component/storage/concrete/S) - var/obj/item/storage/belt/weebstick/B = S.real_location() - if(istype(B)) - playsound(B, 'sound/items/sheath.ogg', 25, TRUE) - -/obj/item/storage/belt/weebstick - name = "nanoforged blade sheath" - desc = "It yearns to bath in the blood of your enemies... but you hold it back!" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "weeb_sheath" - item_state = "sheath" - w_class = WEIGHT_CLASS_BULKY - force = 3 - var/primed = FALSE //Prerequisite to anime bullshit - // ##The anime bullshit## - Mostly stolen from action/innate/dash - var/dash_sound = 'sound/weapons/unsheathed_blade.ogg' - var/beam_effect = "blood_beam" - var/phasein = /obj/effect/temp_visual/dir_setting/cult/phase - var/phaseout = /obj/effect/temp_visual/dir_setting/cult/phase - -/obj/item/storage/belt/weebstick/ComponentInitialize() - . = ..() - AddElement(/datum/element/update_icon_updates_onmob) - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 1 - STR.use_sound = null - STR.max_w_class = WEIGHT_CLASS_BULKY - STR.set_holdable(list( - /obj/item/melee/weebstick - )) + overlay = mutable_appearance(icon, overlay_state) + overlay.appearance_flags = RESET_COLOR + add_overlay(overlay) + +/obj/item/melee/baseball_bat + name = "baseball bat" + desc = "There ain't a skull in the league that can withstand a swatter." + icon = 'icons/obj/weapon/blunt.dmi' + icon_state = "baseball_bat" + item_state = "baseball_bat" + force = 12 + throwforce = 12 + attack_verb = list("beat", "smacked") + custom_materials = list(/datum/material/wood = MINERAL_MATERIAL_AMOUNT * 3.5) + w_class = WEIGHT_CLASS_HUGE + var/homerun_ready = 0 + var/homerun_able = 0 -/obj/item/storage/belt/weebstick/examine(mob/user) - . = ..() - if(length(contents)) - . += "Use [src] in-hand to prime for an opening strike." - . += "Alt-click it to quickly draw the blade." +/obj/item/melee/baseball_bat/homerun + name = "home run bat" + desc = "This thing looks dangerous... Dangerously good at baseball, that is." + homerun_able = 1 -/obj/item/storage/belt/weebstick/AltClick(mob/user) - if(!iscarbon(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)) || primed) +/obj/item/melee/baseball_bat/attack_self(mob/user) + if(!homerun_able) + ..() return - if(length(contents)) - var/obj/item/I = contents[1] - playsound(user, dash_sound, 25, TRUE) - user.visible_message("[user] swiftly draws \the [I].", "You draw \the [I].") - user.put_in_hands(I) - update_appearance() - else - to_chat(user, "[src] is empty!") - -/obj/item/storage/belt/weebstick/attack_self(mob/user) - if(!iscarbon(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) + if(homerun_ready) + to_chat(user, "You're already ready to do a home run!") + ..() return - if(length(contents)) - var/datum/component/storage/CP = GetComponent(/datum/component/storage) - if(primed) - CP.locked = FALSE - playsound(user, 'sound/items/sheath.ogg', 25, TRUE) - to_chat(user, "You return your stance.") - primed = FALSE - update_appearance() - else - CP.locked = TRUE //Prevents normal removal of the blade while primed - playsound(user, 'sound/items/unsheath.ogg', 25, TRUE) - user.visible_message("[user] grips the blade within [src] and primes to attack.", "You take an opening stance...", "You hear a weapon being drawn...") - primed = TRUE - update_appearance() - else - to_chat(user, "[src] is empty!") + to_chat(user, "You begin gathering strength...") + playsound(get_turf(src), 'sound/magic/lightning_chargeup.ogg', 65, TRUE) + if(do_after(user, 90, target = src)) + to_chat(user, "You gather power! Time for a home run!") + homerun_ready = 1 + ..() -/obj/item/storage/belt/weebstick/afterattack(atom/A, mob/living/user, proximity_flag, params) +/obj/item/melee/baseball_bat/attack(mob/living/target, mob/living/user) . = ..() - if(primed && length(contents)) - if(!(A in view(user.client.view, user))) - return - var/obj/item/I = contents[1] - if(!user.put_in_inactive_hand(I)) - to_chat(user, "You need a free hand!") - return - var/datum/component/storage/CP = GetComponent(/datum/component/storage) - CP.locked = FALSE - primed = FALSE - update_appearance() - primed_attack(A, user) - if(CanReach(A, I)) - I.melee_attack_chain(user, A, params) - user.swap_hand() - -/obj/item/storage/belt/weebstick/proc/primed_attack(atom/target, mob/living/user) - var/turf/end = get_turf(user) - var/turf/start = get_turf(user) - var/obj/spot1 = new phaseout(start, user.dir) - var/halt = FALSE - // Stolen dash code - for(var/T in getline(start, get_turf(target))) - var/turf/tile = T - for(var/mob/living/victim in tile) - if(victim != user) - playsound(victim, 'sound/weapons/anime_slash.ogg', 10, TRUE) - victim.take_bodypart_damage(15) - // Unlike actual ninjas, we stop noclip-dashing here. - if(isclosedturf(T)) - halt = TRUE - for(var/obj/O in tile) - // We ignore mobs as we are cutting through them - if(!O.CanPass(user, tile)) - halt = TRUE - if(halt) - break - else - end = T - user.forceMove(end) // YEET - playsound(start, dash_sound, 35, TRUE) - var/obj/spot2 = new phasein(end, user.dir) - spot1.Beam(spot2, beam_effect, time=20) - user.visible_message("In a flash of red, [user] draws [user.p_their()] blade!", "You dash forward while drawing your weapon!", "You hear a blade slice through the air at impossible speeds!") + var/atom/throw_target = get_edge_target_turf(target, user.dir) + if(homerun_ready) + user.visible_message("It's a home run!") + target.throw_at(throw_target, rand(8,10), 14, user) + SSexplosions.medturf += throw_target + playsound(get_turf(src), 'sound/weapons/homerun.ogg', 100, TRUE) + homerun_ready = 0 + return + else if(!target.anchored) + target.throw_at(throw_target, rand(1,2), 2, user, gentle = TRUE) + +/obj/item/melee/baseball_bat/ablative + name = "metal baseball bat" + desc = "This bat is made of highly reflective, highly armored material." + icon_state = "baseball_bat_metal" + item_state = "baseball_bat_metal" + force = 12 + throwforce = 15 -/obj/item/storage/belt/weebstick/update_icon_state() - icon_state = "weeb_sheath" - item_state = "sheath" - if(contents.len) - if(primed) - icon_state += "-primed" - else - icon_state += "-blade" - item_state += "-sabre" - return ..() +/obj/item/melee/baseball_bat/bone + name = "bone club" + desc = "A long and hard shaft of rock solid bone." // I am the master of comedy + icon_state = "baseball_bat_bone" + item_state = "baseball_bat_bone" + +/obj/item/melee/baseball_bat/ablative/IsReflect()//some day this will reflect thrown items instead of lasers + var/picksound = rand(1,2) + var/turf = get_turf(src) + if(picksound == 1) + playsound(turf, 'sound/weapons/effects/batreflect1.ogg', 50, TRUE) + if(picksound == 2) + playsound(turf, 'sound/weapons/effects/batreflect2.ogg', 50, TRUE) + return 1 + +/obj/item/melee/flyswatter + name = "flyswatter" + desc = "Useful for killing insects of all sizes." + icon_state = "flyswatter" + item_state = "flyswatter" + force = 1 + throwforce = 1 + attack_verb = list("swatted", "smacked") + hitsound = 'sound/effects/snap.ogg' + w_class = WEIGHT_CLASS_SMALL + //Things in this list will be instantly splatted. Flyman weakness is handled in the flyman species weakness proc. + var/list/strong_against -/obj/item/storage/belt/weebstick/PopulateContents() - //Time to generate names now that we have the sword - var/n_title = pick(GLOB.ninja_titles) - var/n_name = pick(GLOB.ninja_names) - var/obj/item/melee/weebstick/sword = new /obj/item/melee/weebstick(src) - sword.name = "[n_title] blade of clan [n_name]" - name = "[n_title] scabbard of clan [n_name]" - update_appearance() +/obj/item/melee/flyswatter/Initialize() + . = ..() + strong_against = typecacheof(list( + /mob/living/simple_animal/hostile/poison/bees/, + /mob/living/simple_animal/butterfly, + /mob/living/simple_animal/hostile/cockroach, + /obj/item/queen_bee + )) + +/obj/item/melee/flyswatter/afterattack(atom/target, mob/user, proximity_flag) + . = ..() + if(proximity_flag) + if(is_type_in_typecache(target, strong_against)) + new /obj/effect/decal/cleanable/insectguts(target.drop_location()) + to_chat(user, "You easily splat the [target].") + if(istype(target, /mob/living/)) + var/mob/living/bug = target + bug.death(1) + else + qdel(target) diff --git a/code/game/objects/items/powerfist.dm b/code/game/objects/items/melee/powerfist.dm similarity index 98% rename from code/game/objects/items/powerfist.dm rename to code/game/objects/items/melee/powerfist.dm index c41142d4ad24..13d1d10230f0 100644 --- a/code/game/objects/items/powerfist.dm +++ b/code/game/objects/items/melee/powerfist.dm @@ -75,6 +75,7 @@ return var/datum/gas_mixture/gasused = tank.air_contents.remove(gasperfist * fisto_setting) var/turf/T = get_turf(src) + var/mols_used = gasused.total_moles() if(!T) return T.assume_air(gasused) @@ -86,7 +87,7 @@ target.visible_message("[user]'s powerfist lets out a dull thunk as [user.p_they()] punch[user.p_es()] [target.name]!", \ "[user]'s punches you!") return - if(gasused.total_moles() < gasperfist * fisto_setting) + if(mols_used < gasperfist * fisto_setting) to_chat(user, "\The [src]'s piston-ram lets out a weak hiss, it needs more gas!") playsound(loc, 'sound/weapons/punch4.ogg', 50, TRUE) target.apply_damage((force / 2), BRUTE) diff --git a/code/game/objects/items/melee/spear.dm b/code/game/objects/items/melee/spear.dm new file mode 100644 index 000000000000..218638882bfb --- /dev/null +++ b/code/game/objects/items/melee/spear.dm @@ -0,0 +1,122 @@ +//spears +/obj/item/melee/spear + icon_state = "spearglass0" + icon = 'icons/obj/weapon/spear.dmi' + lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' + name = "spear" + desc = "A haphazardly-constructed yet still deadly weapon of ancient design." + force = 10 + w_class = WEIGHT_CLASS_BULKY + slot_flags = ITEM_SLOT_BACK + throwforce = 20 + throw_speed = 4 + embedding = list("impact_pain_mult" = 3) + armour_penetration = 10 + custom_materials = list(/datum/material/iron=1150, /datum/material/glass=2075) + hitsound = 'sound/weapons/bladeslice.ogg' + attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") + sharpness = IS_SHARP + max_integrity = 200 + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30) + species_exception = list(/datum/species/kepori) + var/icon_prefix = "spearglass" + +/obj/item/melee/spear/ComponentInitialize() + . = ..() + AddComponent(/datum/component/butchering, 100, 70) //decent in a pinch, but pretty bad. + AddComponent(/datum/component/jousting) + AddComponent(/datum/component/two_handed, force_unwielded=10, force_wielded=18, icon_wielded="[icon_prefix]1") + +/obj/item/melee/spear/update_icon_state() + icon_state = "[icon_prefix]0" + return ..() + +/obj/item/melee/spear/CheckParts(list/parts_list) + var/obj/item/shard/tip = locate() in parts_list + if (istype(tip, /obj/item/shard/plasma)) + throwforce = 21 + icon_prefix = "spearplasma" + AddComponent(/datum/component/two_handed, force_unwielded=11, force_wielded=19, icon_wielded="[icon_prefix]1") + update_appearance() + qdel(tip) + ..() + +/* + * Bone Spear + */ +/obj/item/melee/spear/bone //Blatant imitation of spear, but made out of bone. Not valid for explosive modification. + icon_state = "bone_spear0" + name = "bone spear" + base_icon_state = "bone_spear0" + icon_prefix = "bone_spear" + desc = "A haphazardly-constructed yet still deadly weapon. The pinnacle of modern technology." + //this should be a plasma spear or worse. + force = 11 + throwforce = 21 + +/obj/item/melee/spear/bone/ComponentInitialize() + . = ..() + AddComponent(/datum/component/two_handed, force_unwielded=11, force_wielded=19, icon_wielded="[icon_prefix]1") + +/obj/item/melee/spear/explosive + name = "explosive lance" + icon_state = "spearbomb0" + base_icon_state = "spearbomb" + icon_prefix = "spearbomb" + var/obj/item/grenade/explosive = null + var/war_cry = "AAAAARGH!!!" + +/obj/item/melee/spear/explosive/Initialize(mapload) + . = ..() + set_explosive(new /obj/item/grenade/iedcasing/spawned()) //For admin-spawned explosive lances + +/obj/item/melee/spear/explosive/ComponentInitialize() + . = ..() + AddComponent(/datum/component/two_handed, force_unwielded=10, force_wielded=18, icon_wielded="[icon_prefix]1") + +/obj/item/melee/spear/explosive/proc/set_explosive(obj/item/grenade/G) + if(explosive) + QDEL_NULL(explosive) + G.forceMove(src) + explosive = G + desc = "A makeshift spear with [G] attached to it" + +/obj/item/melee/spear/explosive/CheckParts(list/parts_list) + var/obj/item/grenade/G = locate() in parts_list + if(G) + var/obj/item/melee/spear/lancePart = locate() in parts_list + var/datum/component/two_handed/comp_twohand = lancePart.GetComponent(/datum/component/two_handed) + if(comp_twohand) + var/lance_wielded = comp_twohand.force_wielded + var/lance_unwielded = comp_twohand.force_unwielded + AddComponent(/datum/component/two_handed, force_unwielded=lance_unwielded, force_wielded=lance_wielded) + throwforce = lancePart.throwforce + icon_prefix = lancePart.icon_prefix + parts_list -= G + parts_list -= lancePart + set_explosive(G) + qdel(lancePart) + ..() + +/obj/item/melee/spear/explosive/examine(mob/user) + . = ..() + . += "Alt-click to set your war cry." + +/obj/item/melee/spear/explosive/AltClick(mob/user) + if(user.canUseTopic(src, BE_CLOSE)) + ..() + if(istype(user) && loc == user) + var/input = stripped_input(user,"What do you want your war cry to be? You will shout it when you hit someone in melee.", ,"", 50) + if(input) + src.war_cry = input + +/obj/item/melee/spear/explosive/afterattack(atom/movable/AM, mob/user, proximity) + . = ..() + if(!proximity) + return + if(HAS_TRAIT(src, TRAIT_WIELDED)) + user.say("[war_cry]", forced="spear warcry") + explosive.forceMove(AM) + explosive.prime() + qdel(src) diff --git a/code/game/objects/items/stunbaton.dm b/code/game/objects/items/melee/stunbaton.dm similarity index 59% rename from code/game/objects/items/stunbaton.dm rename to code/game/objects/items/melee/stunbaton.dm index 3265b36a3b41..05225d80cff8 100644 --- a/code/game/objects/items/stunbaton.dm +++ b/code/game/objects/items/melee/stunbaton.dm @@ -1,7 +1,7 @@ /obj/item/melee/baton name = "stun baton" desc = "A stun baton for incapacitating people with." - + icon = 'icons/obj/weapon/baton.dmi' icon_state = "stunbaton" item_state = "baton" lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' @@ -333,3 +333,233 @@ /obj/item/melee/baton/boomerang/loaded //Same as above, comes with a cell. preload_cell_type = /obj/item/stock_parts/cell/high + +/obj/item/melee/classic_baton + name = "police baton" + desc = "A wooden truncheon for beating criminal scum." + icon = 'icons/obj/weapon/baton.dmi' + icon_state = "classic_baton" + item_state = "classic_baton" + lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi' + slot_flags = ITEM_SLOT_BELT + force = 12 //9 hit crit + w_class = WEIGHT_CLASS_NORMAL + + var/cooldown_check = 0 // Used interally, you don't want to modify + + var/cooldown = 40 // Default wait time until can stun again. + var/knockdown_time_carbon = (1.5 SECONDS) // Knockdown length for carbons. + var/stun_time_silicon = (5 SECONDS) // If enabled, how long do we stun silicons. + var/stamina_damage = 55 // Do we deal stamina damage. + var/affect_silicon = FALSE // Does it stun silicons. + var/on_sound // "On" sound, played when switching between able to stun or not. + var/on_stun_sound = 'sound/effects/woodhit.ogg' // Default path to sound for when we stun. + var/stun_animation = TRUE // Do we animate the "hit" when stunning. + var/on = TRUE // Are we on or off. + + var/on_icon_state // What is our sprite when turned on + var/off_icon_state // What is our sprite when turned off + var/on_item_state // What is our in-hand sprite when turned on + var/force_on // Damage when on - not stunning + var/force_off // Damage when off - not stunning + var/weight_class_on // What is the new size class when turned on + +// Description for trying to stun when still on cooldown. +/obj/item/melee/classic_baton/proc/get_wait_description() + return + +// Description for when turning their baton "on" +/obj/item/melee/classic_baton/proc/get_on_description() + . = list() + + .["local_on"] = "You extend the baton." + .["local_off"] = "You collapse the baton." + + return . + +// Default message for stunning mob. +/obj/item/melee/classic_baton/proc/get_stun_description(mob/living/target, mob/living/user) + . = list() + + .["visible"] = "[user] knocks [target] down with [src]!" + .["local"] = "[user] knocks you down with [src]!" + + return . + +// Default message for stunning a silicon. +/obj/item/melee/classic_baton/proc/get_silicon_stun_description(mob/living/target, mob/living/user) + . = list() + + .["visible"] = "[user] pulses [target]'s sensors with the baton!" + .["local"] = "You pulse [target]'s sensors with the baton!" + + return . + +// Are we applying any special effects when we stun to carbon +/obj/item/melee/classic_baton/proc/additional_effects_carbon(mob/living/target, mob/living/user) + return + +// Are we applying any special effects when we stun to silicon +/obj/item/melee/classic_baton/proc/additional_effects_silicon(mob/living/target, mob/living/user) + return + +/obj/item/melee/classic_baton/attack(mob/living/target, mob/living/user) + if(!on) + return ..() + + add_fingerprint(user) + if((HAS_TRAIT(user, TRAIT_CLUMSY)) && prob(50)) + to_chat(user, "You hit yourself over the head!") + + user.Paralyze(knockdown_time_carbon * force) + user.apply_damage(stamina_damage, STAMINA, BODY_ZONE_HEAD) + + additional_effects_carbon(user) // user is the target here + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.apply_damage(2*force, BRUTE, BODY_ZONE_HEAD) + else + user.take_bodypart_damage(2*force) + return + if(iscyborg(target)) + // We don't stun if we're on harm. + if (user.a_intent != INTENT_HARM) + if (affect_silicon) + var/list/desc = get_silicon_stun_description(target, user) + + target.flash_act(affect_silicon = TRUE) + target.Paralyze(stun_time_silicon) + additional_effects_silicon(target, user) + + user.visible_message(desc["visible"], desc["local"]) + playsound(get_turf(src), on_stun_sound, 100, TRUE, -1) + + if (stun_animation) + user.do_attack_animation(target) + else + ..() + else + ..() + return + if(!isliving(target)) + return + if (user.a_intent == INTENT_HARM) + if(!..()) + return + if(!iscyborg(target)) + return + else + if(cooldown_check <= world.time) + if(ishuman(target)) + var/mob/living/carbon/human/H = target + if (H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK)) + return + if(check_martial_counter(H, user)) + return + + var/list/desc = get_stun_description(target, user) + + if (stun_animation) + user.do_attack_animation(target) + + playsound(get_turf(src), on_stun_sound, 75, TRUE, -1) + target.Knockdown(knockdown_time_carbon) + target.apply_damage(stamina_damage, STAMINA, BODY_ZONE_CHEST) + additional_effects_carbon(target, user) + + log_combat(user, target, "stunned", src) + add_fingerprint(user) + + target.visible_message(desc["visible"], desc["local"]) + + if(!iscarbon(user)) + target.LAssailant = null + else + target.LAssailant = WEAKREF(user) + cooldown_check = world.time + cooldown + else + var/wait_desc = get_wait_description() + if (wait_desc) + to_chat(user, wait_desc) + +/obj/item/conversion_kit + name = "conversion kit" + desc = "A strange box containing wood working tools and an instruction paper to turn stun batons into something else." + icon = 'icons/obj/storage.dmi' + icon_state = "uk" + custom_price = 450 + +/obj/item/melee/classic_baton/telescopic + name = "telescopic baton" + desc = "A compact yet robust personal defense weapon. Can be concealed when folded." + icon_state = "telebaton_0" + lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' + item_state = null + slot_flags = ITEM_SLOT_BELT + w_class = WEIGHT_CLASS_SMALL + item_flags = NONE + force = 0 + on = FALSE + on_sound = 'sound/weapons/batonextend.ogg' + + on_icon_state = "telebaton_1" + off_icon_state = "telebaton_0" + on_item_state = "nullrod" + force_on = 10 + force_off = 0 + weight_class_on = WEIGHT_CLASS_BULKY + +/obj/item/melee/classic_baton/telescopic/attack_self(mob/user) + on = !on + var/list/desc = get_on_description() + + if(on) + to_chat(user, desc["local_on"]) + icon_state = on_icon_state + item_state = on_item_state + w_class = weight_class_on + force = force_on + attack_verb = list("smacked", "struck", "cracked", "beaten") + else + to_chat(user, desc["local_off"]) + icon_state = off_icon_state + item_state = null //no sprite for concealment even when in hand + slot_flags = ITEM_SLOT_BELT + w_class = WEIGHT_CLASS_SMALL + force = force_off + attack_verb = list("hit", "poked") + + playsound(src.loc, on_sound, 50, TRUE) + add_fingerprint(user) + +/obj/item/melee/classic_baton/telescopic/contractor_baton + name = "contractor baton" + desc = "A compact, specialised baton assigned to Syndicate contractors. Applies light electrical shocks to targets." + icon_state = "contractor_baton_0" + item_state = null + slot_flags = ITEM_SLOT_BELT + w_class = WEIGHT_CLASS_SMALL + item_flags = NONE + force = 5 + + cooldown = 25 + stamina_damage = 85 + affect_silicon = TRUE + on_sound = 'sound/weapons/contractorbatonextend.ogg' + on_stun_sound = 'sound/effects/contractorbatonhit.ogg' + + on_icon_state = "contractor_baton_1" + off_icon_state = "contractor_baton_0" + on_item_state = "contractor_baton" + force_on = 16 + force_off = 5 + weight_class_on = WEIGHT_CLASS_NORMAL + +/obj/item/melee/classic_baton/telescopic/contractor_baton/get_wait_description() + return "The baton is still charging!" + +/obj/item/melee/classic_baton/telescopic/contractor_baton/additional_effects_carbon(mob/living/target, mob/living/user) + target.Jitter(20) + target.stuttering += 20 diff --git a/code/game/objects/items/melee/sword.dm b/code/game/objects/items/melee/sword.dm new file mode 100644 index 000000000000..ff384770a318 --- /dev/null +++ b/code/game/objects/items/melee/sword.dm @@ -0,0 +1,521 @@ +/obj/item/melee/sword + icon = 'icons/obj/weapon/sword.dmi' + lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' + pickup_sound = 'sound/items/unsheath.ogg' + drop_sound = 'sound/items/handling/metal_drop.ogg' + hitsound = 'sound/weapons/bladeslice.ogg' + flags_1 = CONDUCT_1 + slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK + w_class = WEIGHT_CLASS_BULKY + obj_flags = UNIQUE_RENAME + block_chance = 25 + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + sharpness = IS_SHARP + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) + resistance_flags = FIRE_PROOF + +/obj/item/melee/sword/claymore + name = "claymore" + desc = "What are you standing around staring at this for? Get to killing!" + icon_state = "claymore" + item_state = "claymore" + force = 30 + throwforce = 10 + block_chance = 40 + max_integrity = 200 + +/obj/item/melee/sword/claymore/Initialize() + . = ..() + AddComponent(/datum/component/butchering, 40, 105) + +/obj/item/melee/sword/bone + name = "bone sword" + desc = "Jagged pieces of bone are tied to what looks like a goliaths femur." + icon_state = "bone_sword" + item_state = "bone_sword" + force = 15 + throwforce = 10 + armour_penetration = 15 + +/obj/item/melee/sword/scrap + name = "scrap sword" + desc = "A jagged and painful weapon only effective on targets without an armour" + icon_state = "machete0" + force = 24 + throwforce = 10 + armour_penetration = -35 + max_integrity = 100 + +/obj/item/melee/sword/mass + name = "mass produced machete" + desc = "A middle ground between a machete and a short sword. A simple construction of stamped steel but its so cheap its hard to complain. Its right between being a one hand and two handed weapon" + icon_state = "machete0" + base_icon_state = "machete" + force = 20 + throwforce = 15 + max_integrity = 50 + +/obj/item/melee/sword/mass/ComponentInitialize() + . = ..() + AddComponent(/datum/component/two_handed, force_unwielded=20, force_wielded=22, icon_wielded="[base_icon_state]1") + +/obj/item/melee/sword/katana + name = "katana" + desc = "Woefully underpowered in D20." + icon_state = "katana" + item_state = "katana" + slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK + force = 30 + throwforce = 10 + w_class = WEIGHT_CLASS_HUGE + block_chance = 10 + max_integrity = 200 + +/obj/item/melee/sword/chainsaw + name = "sacred chainsaw sword" + desc = "Suffer not a heretic to live." + icon_state = "chainswordon" + item_state = "chainswordon" + force = 15 + throwforce = 10 + armour_penetration = 25 + slot_flags = ITEM_SLOT_BELT + attack_verb = list("sawed", "torn", "cut", "chopped", "diced") + hitsound = 'sound/weapons/chainsawhit.ogg' + tool_behaviour = TOOL_SAW + toolspeed = 1.5 //slower than a real saw + +/obj/item/melee/sword/sabre + name = "officer's sabre" + desc = "An elegant weapon, its monomolecular edge is capable of cutting through flesh and bone with ease." + icon_state = "sabre" + item_state = "sabre" + force = 15 + throwforce = 10 + block_chance = 60 + armour_penetration = 75 + attack_verb = list("slashed", "cut") + hitsound = 'sound/weapons/rapierhit.ogg' + custom_materials = list(/datum/material/iron = 1000) + +/obj/item/melee/sword/sabre/Initialize() + . = ..() + AddComponent(/datum/component/butchering, 30, 95, 5) //fast and effective, but as a sword, it might damage the results. + +/obj/item/melee/sword/sabre/on_enter_storage(datum/component/storage/concrete/S) + var/obj/item/storage/belt/sabre/B = S.real_location() + if(istype(B)) + playsound(B, 'sound/items/sheath.ogg', 25, TRUE) + +/obj/item/melee/sword/sabre/solgov + name = "solarian sabre" + desc = "A refined ceremonial blade often given to soldiers and high ranking officials of SolGov." + icon_state = "sabresolgov" + item_state = "sabresolgov" + +/obj/item/melee/sword/sabre/suns + name = "SUNS sabre" + desc = "A blade of Solarian origin given to SUNS followers." + icon_state = "suns-sabre" + item_state = "suns-sabre" + +/obj/item/melee/sword/sabre/suns/captain + name = "SUNS captain sabre" + desc = "An elegant blade awarded to SUNS captains. Despite its higher craftmanship, it appears to be just as effective as a normal sabre." + icon_state = "suns-capsabre" + item_state = "suns-capsabre" + +/obj/item/melee/sword/sabre/suns/cmo + name = "SUNS stick sabre" + desc = "A thin blade used by SUNS medical instructors." + icon_state = "suns-swordstick" + item_state = "suns-swordstick" + +/obj/item/melee/sword/sabre/suns/telescopic + name = "telescopic sabre" + desc = "A telescopic and retractable blade given to SUNS peacekeepers for easy concealment and carry. It's design makes it slightly less effective than normal sabres sadly, however it is still excelent at piercing armor." + icon_state = "suns-tsword" + item_state = "suns-tsword" + force = 0 + throwforce = 0 + block_chance = 0 + + slot_flags = ITEM_SLOT_BELT + w_class = WEIGHT_CLASS_SMALL + attack_verb = list("smacked", "prodded") + + var/extended = FALSE + var/extend_sound = 'sound/weapons/batonextend.ogg' + + var/on_icon_state = "suns-tsword_ext" + var/on_item_state = "suns-tsword_ext" + var/off_icon_state = "suns-tsword" + var/off_item_state = "suns-tsword" + + var/force_on = 10 + var/on_throwforce = 10 + var/on_blockchance = 40 + + var/force_off = 0 + var/off_throwforce = 0 + var/off_blockchance = 0 + + var/weight_class_on = WEIGHT_CLASS_BULKY + +/obj/item/melee/sword/sabre/suns/telescopic/attack_self(mob/user) + extended = !extended + + if(extended) + to_chat(user, "You extend the [src].") + icon_state = on_icon_state + item_state = on_item_state + slot_flags = 0 + w_class = weight_class_on + force = force_on + throwforce = on_throwforce + block_chance = on_blockchance + attack_verb = list("slashed", "cut") + else + to_chat(user, "You collapse the [src].") + icon_state = off_icon_state + item_state = off_item_state + slot_flags = ITEM_SLOT_BELT + w_class = WEIGHT_CLASS_SMALL + force = force_off + throwforce = off_throwforce + block_chance = off_blockchance + attack_verb = list("smacked", "prodded") + + playsound(get_turf(src), extend_sound, 50, TRUE) + add_fingerprint(user) + +/obj/item/melee/sword/supermatter + name = "supermatter sword" + desc = "In a universe full of bad ideas, this might just be the worst." + icon_state = "supermatter_sword" + item_state = "supermatter_sword" + slot_flags = null + force = 0.001 + armour_penetration = 1000 + var/obj/machinery/power/supermatter_crystal/shard + var/balanced = 1 + force_string = "INFINITE" + +/obj/item/melee/sword/supermatter/Initialize() + . = ..() + shard = new /obj/machinery/power/supermatter_crystal(src) + qdel(shard.countdown) + shard.countdown = null + START_PROCESSING(SSobj, src) + visible_message("[src] appears, balanced ever so perfectly on its hilt. This isn't ominous at all.") + +/obj/item/melee/sword/supermatter/process() + if(balanced || throwing || ismob(src.loc) || isnull(src.loc)) + return + if(!isturf(src.loc)) + var/atom/target = src.loc + forceMove(target.loc) + consume_everything(target) + else + var/turf/T = get_turf(src) + if(!isspaceturf(T)) + consume_turf(T) + +/obj/item/melee/sword/supermatter/afterattack(target, mob/user, proximity_flag) + . = ..() + if(user && target == user) + user.dropItemToGround(src) + if(proximity_flag) + consume_everything(target) + +/obj/item/melee/sword/supermatter/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) + ..() + if(ismob(hit_atom)) + var/mob/M = hit_atom + if(src.loc == M) + M.dropItemToGround(src) + consume_everything(hit_atom) + +/obj/item/melee/sword/supermatter/pickup(user) + ..() + balanced = 0 + +/obj/item/melee/sword/supermatter/ex_act(severity, target) + visible_message("The blast wave smacks into [src] and rapidly flashes to ash.",\ + "You hear a loud crack as you are washed with a wave of heat.") + consume_everything() + +/obj/item/melee/sword/supermatter/acid_act() + visible_message("The acid smacks into [src] and rapidly flashes to ash.",\ + "You hear a loud crack as you are washed with a wave of heat.") + consume_everything() + +/obj/item/melee/sword/supermatter/bullet_act(obj/projectile/P) + visible_message("[P] smacks into [src] and rapidly flashes to ash.",\ + "You hear a loud crack as you are washed with a wave of heat.") + consume_everything(P) + return BULLET_ACT_HIT + + +/obj/item/melee/sword/supermatter/proc/consume_everything(target) + if(isnull(target)) + shard.Consume() + else if(!isturf(target)) + shard.Bumped(target) + else + consume_turf(target) + +/obj/item/melee/sword/supermatter/proc/consume_turf(turf/T) + var/oldtype = T.type + var/turf/newT = T.ScrapeAway(flags = CHANGETURF_INHERIT_AIR) + if(newT.type == oldtype) + return + playsound(T, 'sound/effects/supermatter.ogg', 50, TRUE) + T.visible_message("[T] smacks into [src] and rapidly flashes to ash.",\ + "You hear a loud crack as you are washed with a wave of heat.") + shard.Consume() + +/obj/item/melee/sword/supermatter/add_blood_DNA(list/blood_dna) + return FALSE + +/obj/item/melee/sword/greyking + name = "blade of the grey-king" + desc = "A legendary sword made with 3 replica katanas nailed together and dipped in heavy narcotics." + icon_state = "grey_sword" + item_state = "swordoff" + slot_flags = ITEM_SLOT_BACK + force = 15 + throwforce = 8 + block_chance = 30 + attack_verb = list("struck", "slashed", "mall-ninjad", "tided", "multi-shanked", "shredded") + + var/prick_chance = 50 + var/prick_chems = list( + /datum/reagent/toxin = 10, + /datum/reagent/toxin/mindbreaker = 10, + /datum/reagent/drug/space_drugs = 10, + /datum/reagent/drug/crank = 5, + /datum/reagent/drug/methamphetamine = 5, + /datum/reagent/drug/bath_salts = 5, + /datum/reagent/drug/aranesp = 5, + /datum/reagent/drug/pumpup = 10, + /datum/reagent/medicine/omnizine = 10, + /datum/reagent/medicine/earthsblood = 15, + /datum/reagent/medicine/omnizine/protozine = 15 + ) + +/obj/item/melee/sword/greyking/afterattack(atom/target, mob/user, proximity_flag, click_parameters) + if (iscarbon(target) && prob(prick_chance)) + var/mob/living/carbon/C = target + var/datum/reagent/R = pick(prick_chems) + C.reagents.add_reagent(R, prick_chems[R]) + C.visible_message("[user] is pricked!", \ + "You've been pricked by the [src]!") + log_combat(user, C, "pricked", src.name, "with [prick_chems[R]]u of [R]") + return ..() + +//HF blade +/obj/item/melee/sword/vibro + icon_state = "hfrequency0" + base_icon_state = "hfrequency" + lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' + name = "vibro sword" + desc = "A potent weapon capable of cutting through nearly anything. Wielding it in two hands will allow you to deflect gunfire." + armour_penetration = 100 + block_chance = 30 + force = 20 + throwforce = 20 + throw_speed = 4 + sharpness = IS_SHARP + attack_verb = list("cut", "sliced", "diced") + slot_flags = ITEM_SLOT_BACK + hitsound = 'sound/weapons/bladeslice.ogg' + +/obj/item/melee/sword/vibro/ComponentInitialize() + . = ..() + AddComponent(/datum/component/butchering, 20, 105) + AddComponent(/datum/component/two_handed, force_multiplier=2, icon_wielded="[base_icon_state]1") + +/obj/item/melee/sword/vibro/update_icon_state() + icon_state = "[base_icon_state]0" + return ..() + +/obj/item/melee/sword/vibro/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) + if(HAS_TRAIT(src, TRAIT_WIELDED)) + final_block_chance *= 2 + if(HAS_TRAIT(src, TRAIT_WIELDED) || attack_type != PROJECTILE_ATTACK) + if(prob(final_block_chance)) + if(attack_type == PROJECTILE_ATTACK) + owner.visible_message("[owner] deflects [attack_text] with [src]!") + playsound(src, pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 75, TRUE) + return 1 + else + owner.visible_message("[owner] parries [attack_text] with [src]!") + return 1 + return 0 + +/obj/item/melee/sword/weebstick + name = "Weeb Stick" + desc = "Glorious nippon steel, folded 1000 times." + icon_state = "weeb_blade" + item_state = "weeb_blade" + slot_flags = ITEM_SLOT_BACK + sharpness = IS_SHARP_ACCURATE + force = 25 + throw_speed = 4 + throw_range = 5 + throwforce = 12 + block_chance = 20 + armour_penetration = 50 + hitsound = 'sound/weapons/anime_slash.ogg' + +/obj/item/melee/sword/weebstick/Initialize() + . = ..() + AddComponent(/datum/component/butchering, 25, 90, 5) //Not made for scalping victims, but will work nonetheless + +/obj/item/melee/sword/weebstick/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) + if(attack_type == PROJECTILE_ATTACK) + final_block_chance = block_chance / 2 //Pretty good... + return ..() + +/obj/item/melee/sword/weebstick/on_exit_storage(datum/component/storage/concrete/S) + var/obj/item/storage/belt/weebstick/B = S.real_location() + if(istype(B)) + playsound(B, 'sound/items/unsheath.ogg', 25, TRUE) + +/obj/item/melee/sword/weebstick/on_enter_storage(datum/component/storage/concrete/S) + var/obj/item/storage/belt/weebstick/B = S.real_location() + if(istype(B)) + playsound(B, 'sound/items/sheath.ogg', 25, TRUE) + +/obj/item/storage/belt/weebstick + name = "nanoforged blade sheath" + desc = "It yearns to bath in the blood of your enemies... but you hold it back!" + icon = 'icons/obj/weapon/sword.dmi' + icon_state = "weeb_sheath" + item_state = "sheath" + force = 3 + var/primed = FALSE //Prerequisite to anime bullshit + // ##The anime bullshit## - Mostly stolen from action/innate/dash + var/dash_sound = 'sound/weapons/unsheathed_blade.ogg' + var/beam_effect = "blood_beam" + var/phasein = /obj/effect/temp_visual/dir_setting/cult/phase + var/phaseout = /obj/effect/temp_visual/dir_setting/cult/phase + +/obj/item/storage/belt/weebstick/ComponentInitialize() + . = ..() + AddElement(/datum/element/update_icon_updates_onmob) + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.max_items = 1 + STR.use_sound = null + STR.max_w_class = WEIGHT_CLASS_BULKY + STR.set_holdable(list( + /obj/item/melee/sword/weebstick + )) + +/obj/item/storage/belt/weebstick/examine(mob/user) + . = ..() + if(length(contents)) + . += "Use [src] in-hand to prime for an opening strike." + . += "Alt-click it to quickly draw the blade." + +/obj/item/storage/belt/weebstick/AltClick(mob/user) + if(!iscarbon(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)) || primed) + return + if(length(contents)) + var/obj/item/I = contents[1] + playsound(user, dash_sound, 25, TRUE) + user.visible_message("[user] swiftly draws \the [I].", "You draw \the [I].") + user.put_in_hands(I) + update_appearance() + else + to_chat(user, "[src] is empty!") + +/obj/item/storage/belt/weebstick/attack_self(mob/user) + if(!iscarbon(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user))) + return + if(length(contents)) + var/datum/component/storage/CP = GetComponent(/datum/component/storage) + if(primed) + CP.locked = FALSE + playsound(user, 'sound/items/sheath.ogg', 25, TRUE) + to_chat(user, "You return your stance.") + primed = FALSE + update_appearance() + else + CP.locked = TRUE //Prevents normal removal of the blade while primed + playsound(user, 'sound/items/unsheath.ogg', 25, TRUE) + user.visible_message("[user] grips the blade within [src] and primes to attack.", "You take an opening stance...", "You hear a weapon being drawn...") + primed = TRUE + update_appearance() + else + to_chat(user, "[src] is empty!") + +/obj/item/storage/belt/weebstick/afterattack(atom/A, mob/living/user, proximity_flag, params) + . = ..() + if(primed && length(contents)) + if(!(A in view(user.client.view, user))) + return + var/obj/item/I = contents[1] + if(!user.put_in_inactive_hand(I)) + to_chat(user, "You need a free hand!") + return + var/datum/component/storage/CP = GetComponent(/datum/component/storage) + CP.locked = FALSE + primed = FALSE + update_appearance() + primed_attack(A, user) + if(CanReach(A, I)) + I.melee_attack_chain(user, A, params) + user.swap_hand() + +/obj/item/storage/belt/weebstick/proc/primed_attack(atom/target, mob/living/user) + var/turf/end = get_turf(user) + var/turf/start = get_turf(user) + var/obj/spot1 = new phaseout(start, user.dir) + var/halt = FALSE + // Stolen dash code + for(var/T in getline(start, get_turf(target))) + var/turf/tile = T + for(var/mob/living/victim in tile) + if(victim != user) + playsound(victim, 'sound/weapons/anime_slash.ogg', 10, TRUE) + victim.take_bodypart_damage(15) + // Unlike actual ninjas, we stop noclip-dashing here. + if(isclosedturf(T)) + halt = TRUE + for(var/obj/O in tile) + // We ignore mobs as we are cutting through them + if(!O.CanPass(user, tile)) + halt = TRUE + if(halt) + break + else + end = T + user.forceMove(end) // YEET + playsound(start, dash_sound, 35, TRUE) + var/obj/spot2 = new phasein(end, user.dir) + spot1.Beam(spot2, beam_effect, time=20) + user.visible_message("In a flash of red, [user] draws [user.p_their()] blade!", "You dash forward while drawing your weapon!", "You hear a blade slice through the air at impossible speeds!") + +/obj/item/storage/belt/weebstick/update_icon_state() + icon_state = "weeb_sheath" + item_state = "sheath" + if(contents.len) + if(primed) + icon_state += "-primed" + else + icon_state += "-blade" + item_state += "-sabre" + return ..() + +/obj/item/storage/belt/weebstick/PopulateContents() + //Time to generate names now that we have the sword + var/n_title = pick(GLOB.ninja_titles) + var/n_name = pick(GLOB.ninja_names) + var/obj/item/melee/sword/weebstick/sword = new /obj/item/melee/sword/weebstick(src) + sword.name = "[n_title] blade of clan [n_name]" + name = "[n_title] scabbard of clan [n_name]" + update_appearance() diff --git a/code/game/objects/items/teleprod.dm b/code/game/objects/items/melee/teleprod.dm similarity index 100% rename from code/game/objects/items/teleprod.dm rename to code/game/objects/items/melee/teleprod.dm diff --git a/code/game/objects/items/melee/weaponry.dm b/code/game/objects/items/melee/weaponry.dm new file mode 100644 index 000000000000..11c1b118570b --- /dev/null +++ b/code/game/objects/items/melee/weaponry.dm @@ -0,0 +1,119 @@ + + +/obj/item/wirerod + name = "wired rod" + desc = "A rod with some wire wrapped around the top. It'd be easy to attach something to the top bit." + icon = 'icons/obj/weapon/spear.dmi' + icon_state = "wiredrod" + item_state = "rods" + flags_1 = CONDUCT_1 + force = 9 + throwforce = 10 + w_class = WEIGHT_CLASS_NORMAL + custom_materials = list(/datum/material/iron=1150, /datum/material/glass=75) + attack_verb = list("hit", "bludgeoned", "whacked", "bonked") + +/obj/item/wirerod/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/shard)) + var/obj/item/melee/spear/S = new /obj/item/melee/spear + + remove_item_from_storage(user) + if (!user.transferItemToLoc(I, S)) + return + S.CheckParts(list(I)) + qdel(src) + + user.put_in_hands(S) + to_chat(user, "You fasten the glass shard to the top of the rod with the cable.") + + else if(istype(I, /obj/item/assembly/igniter) && !(HAS_TRAIT(I, TRAIT_NODROP))) + var/obj/item/melee/baton/cattleprod/P = new /obj/item/melee/baton/cattleprod + + remove_item_from_storage(user) + + to_chat(user, "You fasten [I] to the top of the rod with the cable.") + + qdel(I) + qdel(src) + + user.put_in_hands(P) + else + return ..() + +/obj/item/throwing_star + name = "throwing star" + desc = "An ancient weapon still used to this day, due to its ease of lodging itself into its victim's body parts." + icon_state = "throwingstar" + item_state = "eshield0" + lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' + force = 2 + throwforce = 20 //20 + 2 (WEIGHT_CLASS_SMALL) * 4 (EMBEDDED_IMPACT_PAIN_MULTIPLIER) = 28 damage on hit due to guaranteed embedding + throw_speed = 4 + embedding = list("pain_mult" = 4, "embed_chance" = 100, "fall_chance" = 0, "embed_chance_turf_mod" = 15) + armour_penetration = 40 + + w_class = WEIGHT_CLASS_SMALL + sharpness = IS_SHARP + custom_materials = list(/datum/material/iron=500, /datum/material/glass=500) + resistance_flags = FIRE_PROOF + +/obj/item/throwing_star/stamina + name = "shock throwing star" + desc = "An aerodynamic disc designed to cause excruciating pain when stuck inside fleeing targets, hopefully without causing fatal harm." + throwforce = 5 + embedding = list("pain_chance" = 5, "embed_chance" = 100, "fall_chance" = 0, "jostle_chance" = 10, "pain_stam_pct" = 0.8, "jostle_pain_mult" = 3) + +/obj/item/throwing_star/toy + name = "toy throwing star" + desc = "An aerodynamic disc strapped with adhesive for sticking to people, good for playing pranks and getting yourself killed by security." + sharpness = IS_BLUNT + force = 0 + throwforce = 0 + embedding = list("pain_mult" = 0, "jostle_pain_mult" = 0, "embed_chance" = 100, "fall_chance" = 0) + +/obj/item/throwing_star/magspear + name = "magnetic spear" + desc = "A reusable spear that is typically loaded into kinetic spearguns." + icon = 'icons/obj/ammo_bullets.dmi' + icon_state = "magspear" + throwforce = 25 //kills regular carps in one hit + force = 10 + throw_range = 0 //throwing these invalidates the speargun + attack_verb = list("stabbed", "ripped", "gored", "impaled") + embedding = list("pain_mult" = 8, "embed_chance" = 100, "fall_chance" = 0, "impact_pain_mult" = 15) //55 damage+embed on hit + +/obj/item/mounted_chainsaw + name = "mounted chainsaw" + desc = "A chainsaw that has replaced your arm." + icon_state = "chainsaw_on" + item_state = "mounted_chainsaw" + lefthand_file = 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/chainsaw_righthand.dmi' + item_flags = ABSTRACT | DROPDEL + w_class = WEIGHT_CLASS_HUGE + force = 24 + throwforce = 0 + throw_range = 0 + throw_speed = 0 + sharpness = IS_SHARP + attack_verb = list("sawed", "torn", "cut", "chopped", "diced") + hitsound = 'sound/weapons/chainsawhit.ogg' + tool_behaviour = TOOL_SAW + toolspeed = 1 + +/obj/item/mounted_chainsaw/Initialize() + . = ..() + ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT) + +/obj/item/mounted_chainsaw/Destroy() + var/obj/item/bodypart/part + new /obj/item/chainsaw(get_turf(src)) + if(iscarbon(loc)) + var/mob/living/carbon/holder = loc + var/index = holder.get_held_index_of_item(src) + if(index) + part = holder.hand_bodyparts[index] + . = ..() + if(part) + part.drop_limb() diff --git a/code/game/objects/items/miscellaneous.dm b/code/game/objects/items/miscellaneous.dm index 619ebf3eb0e9..3c8f3ead8709 100644 --- a/code/game/objects/items/miscellaneous.dm +++ b/code/game/objects/items/miscellaneous.dm @@ -94,7 +94,7 @@ /obj/item/storage/box/hero/scottish/PopulateContents() new /obj/item/clothing/under/costume/kilt(src) - new /obj/item/claymore/weak/ceremonial(src) + new /obj/item/melee/sword/claymore(src) new /obj/item/toy/crayon/spraycan(src) new /obj/item/clothing/shoes/sandal(src) @@ -105,7 +105,7 @@ /obj/item/storage/box/hero/carphunter/PopulateContents() new /obj/item/clothing/suit/space/hardsuit/carp/old(src) new /obj/item/clothing/mask/gas/carp(src) - new /obj/item/kitchen/knife/hunting(src) + new /obj/item/melee/knife/hunting(src) new /obj/item/storage/box/papersack/meat(src) new /obj/item/fishing_rod(src) new /obj/item/fishing_line(src) @@ -116,7 +116,6 @@ /obj/item/storage/box/hero/ghostbuster/PopulateContents() new /obj/item/choice_beacon/ouija(src) - new /obj/item/clothing/glasses/welding/ghostbuster(src) new /obj/item/storage/belt/fannypack/bustin(src) new /obj/item/clothing/gloves/color/black(src) new /obj/item/clothing/shoes/jackboots(src) @@ -149,7 +148,6 @@ /obj/item/skub desc = "It's skub." name = "skub" - icon = 'icons/obj/items_and_weapons.dmi' icon_state = "skub" w_class = WEIGHT_CLASS_BULKY attack_verb = list("skubbed") @@ -217,17 +215,6 @@ ouija_spaghetti_list[initial(A.name)] = A return ouija_spaghetti_list -/obj/structure/legionpike - name = "legion on a spear" - desc = "EXTREME interior decorating. You can feel it watching you." - icon = 'icons/obj/structures.dmi' - icon_state = "headpike-legion" - density = FALSE - anchored = TRUE - light_color = "#8B0000" - light_power = 2 - light_range = 2 - //rare and valulable gems- designed to eventually be used for archeology, or to be given as opposed to money as loot. Auctioned off at export, or kept as a trophy. /obj/item/gem/rupee name = "\improper Ruperium Crystal" @@ -282,3 +269,283 @@ light_power = 1 light_color = "#4785a4" w_class = WEIGHT_CLASS_SMALL + +/obj/item/phone + name = "red phone" + desc = "Should anything ever go wrong..." + icon_state = "red_phone" + force = 3 + throwforce = 2 + throw_speed = 3 + throw_range = 4 + w_class = WEIGHT_CLASS_SMALL + attack_verb = list("called", "rang") + hitsound = 'sound/weapons/ring.ogg' + +/obj/item/roastingstick + name = "advanced roasting stick" + desc = "A telescopic roasting stick with a miniature shield generator designed to ensure entry into various high-tech shielded cooking ovens and firepits." + icon_state = "roastingstick_0" + item_state = "null" + slot_flags = ITEM_SLOT_BELT + w_class = WEIGHT_CLASS_SMALL + item_flags = NONE + force = 0 + attack_verb = list("hit", "poked") + var/obj/item/reagent_containers/food/snacks/sausage/held_sausage + var/static/list/ovens + var/on = FALSE + var/datum/beam/beam + +/obj/item/roastingstick/Initialize() + . = ..() + if (!ovens) + ovens = typecacheof(list(/obj/singularity, /obj/machinery/power/supermatter_crystal, /obj/structure/bonfire)) + +/obj/item/roastingstick/attack_self(mob/user) + on = !on + if(on) + extend(user) + else + if (held_sausage) + to_chat(user, "You can't retract [src] while [held_sausage] is attached!") + return + retract(user) + + playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, TRUE) + add_fingerprint(user) + +/obj/item/roastingstick/attackby(atom/target, mob/user) + ..() + if (istype(target, /obj/item/reagent_containers/food/snacks/sausage)) + if (!on) + to_chat(user, "You must extend [src] to attach anything to it!") + return + if (held_sausage) + to_chat(user, "[held_sausage] is already attached to [src]!") + return + if (user.transferItemToLoc(target, src)) + held_sausage = target + else + to_chat(user, "[target] doesn't seem to want to get on [src]!") + update_appearance() + +/obj/item/roastingstick/attack_hand(mob/user) + ..() + if (held_sausage) + user.put_in_hands(held_sausage) + held_sausage = null + update_appearance() + +/obj/item/roastingstick/update_overlays() + . = ..() + if (held_sausage) + . += mutable_appearance(icon, "roastingstick_sausage") + +/obj/item/roastingstick/proc/extend(user) + to_chat(user, "You extend [src].") + icon_state = "roastingstick_1" + item_state = "nullrod" + w_class = WEIGHT_CLASS_BULKY + +/obj/item/roastingstick/proc/retract(user) + to_chat(user, "You collapse [src].") + icon_state = "roastingstick_0" + item_state = null + w_class = WEIGHT_CLASS_SMALL + +/obj/item/roastingstick/handle_atom_del(atom/target) + if (target == held_sausage) + held_sausage = null + update_appearance() + +/obj/item/roastingstick/afterattack(atom/target, mob/user, proximity) + . = ..() + if (!on) + return + if (is_type_in_typecache(target, ovens)) + if (held_sausage && held_sausage.roasted) + to_chat(src, "Your [held_sausage] has already been cooked!") + return + if (istype(target, /obj/singularity) && get_dist(user, target) < 10) + to_chat(user, "You send [held_sausage] towards [target].") + playsound(src, 'sound/items/rped.ogg', 50, TRUE) + beam = user.Beam(target,icon_state="rped_upgrade",time=100) + else if (user.Adjacent(target)) + to_chat(user, "You extend [src] towards [target].") + playsound(src.loc, 'sound/weapons/batonextend.ogg', 50, TRUE) + else + return + if(do_after(user, 100, target = user)) + finish_roasting(user, target) + else + QDEL_NULL(beam) + playsound(src, 'sound/weapons/batonextend.ogg', 50, TRUE) + +/obj/item/roastingstick/proc/finish_roasting(user, atom/target) + to_chat(user, "You finish roasting [held_sausage].") + playsound(src,'sound/items/welder2.ogg',50,TRUE) + held_sausage.add_atom_colour(rgb(103,63,24), FIXED_COLOUR_PRIORITY) + held_sausage.name = "[target.name]-roasted [held_sausage.name]" + held_sausage.desc = "[held_sausage.desc] It has been cooked to perfection on \a [target]." + update_appearance() + +/obj/item/skateboard + name = "improvised skateboard" + desc = "A skateboard. It can be placed on its wheels and ridden, or used as a strong weapon." + icon_state = "skateboard" + item_state = "skateboard" + force = 12 + throwforce = 4 + w_class = WEIGHT_CLASS_NORMAL + attack_verb = list("smacked", "whacked", "slammed", "smashed") + ///The vehicle counterpart for the board + var/board_item_type = /obj/vehicle/ridden/scooter/skateboard + +/obj/item/skateboard/attack_self(mob/user) + var/obj/vehicle/ridden/scooter/skateboard/S = new board_item_type(get_turf(user))//this probably has fucky interactions with telekinesis but for the record it wasnt my fault + S.buckle_mob(user) + qdel(src) + +/obj/item/skateboard/pro + name = "skateboard" + desc = "A RaDSTORMz brand professional skateboard. It looks sturdy and well made." + icon_state = "skateboard2" + item_state = "skateboard2" + board_item_type = /obj/vehicle/ridden/scooter/skateboard/pro + custom_premium_price = 500 + +/obj/item/skateboard/hoverboard + name = "hoverboard" + desc = "A blast from the past, so retro!" + icon_state = "hoverboard_red" + item_state = "hoverboard_red" + board_item_type = /obj/vehicle/ridden/scooter/skateboard/hoverboard + custom_premium_price = 2015 + +/obj/item/skateboard/hoverboard/admin + name = "\improper Board Of Directors" + desc = "The engineering complexity of a spaceship concentrated inside of a board. Just as expensive, too." + icon_state = "hoverboard_nt" + item_state = "hoverboard_nt" + board_item_type = /obj/vehicle/ridden/scooter/skateboard/hoverboard/admin + +/obj/item/statuebust + name = "bust" + desc = "A priceless ancient marble bust, the kind that belongs in a museum." //or you can hit people with it + icon = 'icons/obj/statue.dmi' + icon_state = "bust" + force = 15 + throwforce = 10 + throw_speed = 5 + throw_range = 2 + attack_verb = list("busted") + var/impressiveness = 45 + +/obj/item/statuebust/Initialize() + . = ..() + AddComponent(/datum/component/art, impressiveness) + AddElement(/datum/element/beauty, 1000) + +/obj/item/statuebust/hippocratic + name = "hippocrates bust" + desc = "A bust of the famous Greek physician Hippocrates of Kos, often referred to as the father of western medicine." + icon_state = "hippocratic" + impressiveness = 50 + +/obj/item/extendohand + name = "extendo-hand" + desc = "Futuristic tech has allowed these classic spring-boxing toys to essentially act as a fully functional hand-operated hand prosthetic." + icon_state = "extendohand" + item_state = "extendohand" + lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' + force = 0 + throwforce = 5 + reach = 2 + var/min_reach = 2 + +/obj/item/extendohand/acme + name = "\improper ACME Extendo-Hand" + desc = "A novelty extendo-hand produced by the ACME corporation. Originally designed to knock out roadrunners." + +/obj/item/extendohand/attack(atom/M, mob/living/carbon/human/user) + var/dist = get_dist(M, user) + if(dist < min_reach) + to_chat(user, "[M] is too close to use [src] on.") + return + M.attack_hand(user) + +/obj/item/gohei + name = "gohei" + desc = "A wooden stick with white streamers at the end. Originally used by shrine maidens to purify things." + force = 5 + throwforce = 5 + hitsound = "swing_hit" + attack_verb = list("whacked", "thwacked", "walloped", "socked") + icon_state = "gohei" + item_state = "gohei" + lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' + +/obj/item/ectoplasm + name = "ectoplasm" + desc = "Spooky." + gender = PLURAL + icon = 'icons/obj/wizard.dmi' + icon_state = "ectoplasm" + +/obj/item/ectoplasm/angelic + icon = 'icons/obj/wizard.dmi' + icon_state = "angelplasm" + +/obj/item/cane + name = "cane" + desc = "A cane used by a true gentleman." + icon = 'icons/obj/items.dmi' + icon_state = "cane" + item_state = "stick" + lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' + force = 5 + throwforce = 5 + w_class = WEIGHT_CLASS_SMALL + custom_materials = list(/datum/material/iron=50) + attack_verb = list("bludgeoned", "whacked", "disciplined", "thrashed") + +/obj/item/staff + name = "wizard staff" + desc = "Apparently a staff used by the wizard." + icon = 'icons/obj/wizard.dmi' + icon_state = "staff" + lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' + force = 3 + throwforce = 5 + throw_speed = 2 + throw_range = 5 + w_class = WEIGHT_CLASS_SMALL + armour_penetration = 100 + attack_verb = list("bludgeoned", "whacked", "disciplined") + resistance_flags = FLAMMABLE + +/obj/item/staff/broom + name = "broom" + desc = "Used for sweeping, and flying into the night while cackling. Black cat not included." + icon = 'icons/obj/wizard.dmi' + icon_state = "broom" + resistance_flags = FLAMMABLE + +/obj/item/staff/stick + name = "stick" + desc = "A great tool to drag someone else's drinks across the bar." + icon = 'icons/obj/items.dmi' + icon_state = "cane" + item_state = "stick" + lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' + force = 3 + throwforce = 5 + throw_speed = 2 + throw_range = 5 + w_class = WEIGHT_CLASS_SMALL diff --git a/code/game/objects/items/paint.dm b/code/game/objects/items/paint.dm index 5aff78b5561d..9e314d848e3e 100644 --- a/code/game/objects/items/paint.dm +++ b/code/game/objects/items/paint.dm @@ -5,7 +5,6 @@ gender= PLURAL name = "paint" desc = "Used to recolor floors and walls. Can be removed by the janitor." - icon = 'icons/obj/items_and_weapons.dmi' icon_state = "paint_neutral" var/paint_color = "FFFFFF" item_state = "paintcan" diff --git a/code/game/objects/items/pitchfork.dm b/code/game/objects/items/pitchfork.dm deleted file mode 100644 index 05183ed479db..000000000000 --- a/code/game/objects/items/pitchfork.dm +++ /dev/null @@ -1,102 +0,0 @@ -/obj/item/pitchfork - icon_state = "pitchfork0" - base_icon_state = "pitchfork" - lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' - name = "pitchfork" - desc = "A simple tool used for moving hay." - force = 7 - throwforce = 15 - w_class = WEIGHT_CLASS_BULKY - attack_verb = list("attacked", "impaled", "pierced") - hitsound = 'sound/weapons/bladeslice.ogg' - sharpness = IS_SHARP - max_integrity = 200 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30) - resistance_flags = FIRE_PROOF - var/wielded = FALSE // track wielded status on item - -/obj/item/pitchfork/Initialize() - . = ..() - RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(on_wield)) - RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(on_unwield)) - -/obj/item/pitchfork/ComponentInitialize() - . = ..() - AddComponent(/datum/component/two_handed, force_unwielded=7, force_wielded=15, icon_wielded="[base_icon_state]1") - -/// triggered on wield of two handed item -/obj/item/pitchfork/proc/on_wield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = TRUE - -/// triggered on unwield of two handed item -/obj/item/pitchfork/proc/on_unwield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = FALSE - -/obj/item/pitchfork/update_icon_state() - icon_state = "[base_icon_state]0" - return ..() - -/obj/item/pitchfork/demonic - name = "demonic pitchfork" - desc = "A red pitchfork, it looks like the work of the devil." - force = 19 - throwforce = 24 - light_system = MOVABLE_LIGHT - light_range = 3 - light_power = 6 - light_color = COLOR_SOFT_RED - - -/obj/item/pitchfork/demonic/ComponentInitialize() - . = ..() - AddComponent(/datum/component/two_handed, force_unwielded=19, force_wielded=25) - -/obj/item/pitchfork/demonic/greater - force = 24 - throwforce = 50 - -/obj/item/pitchfork/demonic/greater/ComponentInitialize() - . = ..() - AddComponent(/datum/component/two_handed, force_unwielded=24, force_wielded=34) - -/obj/item/pitchfork/demonic/ascended - force = 100 - throwforce = 100 - -/obj/item/pitchfork/demonic/ascended/ComponentInitialize() - . = ..() - AddComponent(/datum/component/two_handed, force_unwielded=100, force_wielded=500000) // Kills you DEAD - -/obj/item/pitchfork/demonic/pickup(mob/living/user) - . = ..() - if(isliving(user) && user.mind && user.owns_soul() && !is_devil(user)) - var/mob/living/U = user - U.visible_message("As [U] picks [src] up, [U]'s arms briefly catch fire.", \ - "\"As you pick up [src] your arms ignite, reminding you of all your past sins.\"") - if(ishuman(U)) - var/mob/living/carbon/human/H = U - H.apply_damage(rand(force/2, force), BURN, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) - else - U.adjustFireLoss(rand(force/2,force)) - -/obj/item/pitchfork/demonic/attack(mob/target, mob/living/carbon/human/user) - if(user.mind && user.owns_soul() && !is_devil(user)) - to_chat(user, "[src] burns in your hands.") - user.apply_damage(rand(force/2, force), BURN, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) - ..() - -/obj/item/pitchfork/demonic/ascended/afterattack(atom/target, mob/user, proximity) - . = ..() - if(!proximity || !wielded) - return - if(iswallturf(target)) - var/turf/closed/wall/W = target - user.visible_message("[user] blasts \the [target] with \the [src]!") - playsound(target, 'sound/magic/disintegrate.ogg', 100, TRUE) - W.dismantle_wall(devastated = FALSE) - return diff --git a/code/game/objects/items/plushes.dm b/code/game/objects/items/plushes.dm index a6ef402ecad4..4b16ee60942d 100644 --- a/code/game/objects/items/plushes.dm +++ b/code/game/objects/items/plushes.dm @@ -38,7 +38,7 @@ . = ..() if(should_squeak) AddComponent(/datum/component/squeak, squeak_override) - AddElement(/datum/element/bed_tuckable, 6, -5, 90) + AddElement(/datum/element/bed_tuckable, 6, -5, 90, FALSE, FALSE) //have we decided if Pinocchio goes in the blue or pink aisle yet? if(gender == NEUTER) @@ -863,3 +863,43 @@ var/mutable_appearance/base_overlay_among = mutable_appearance(icon, "plushie_among_visor") base_overlay_among.appearance_flags = RESET_COLOR add_overlay(base_overlay_among) + +/obj/effect/spawner/lootdrop/plushie + loot = list ( + /obj/item/toy/plush/beeplushie, + /obj/item/toy/plush/blahaj, + /obj/item/toy/plush/carpplushie, + /obj/item/toy/plush/flushed, + /obj/item/toy/plush/kari, + /obj/item/toy/plush/lizardplushie, + /obj/item/toy/plush/mora, + /obj/item/toy/plush/realgoat, + /obj/item/toy/plush/rilena, + /obj/item/toy/plush/sharai, + /obj/item/toy/plush/slimeplushie, + /obj/item/toy/plush/snakeplushie, + /obj/item/toy/plush/spider, + /obj/item/toy/plush/tali, + /obj/item/toy/plush/xader, + /obj/effect/spawner/lootdrop/plushie/moth // fair chances + ) + +/obj/effect/spawner/lootdrop/plushie/moth + loot = list ( + /obj/item/toy/plush/moth, + /obj/item/toy/plush/moth/monarch, + /obj/item/toy/plush/moth/luna, + /obj/item/toy/plush/moth/atlas, + /obj/item/toy/plush/moth/redish, + /obj/item/toy/plush/moth/royal, + /obj/item/toy/plush/moth/gothic, + /obj/item/toy/plush/moth/lovers, + /obj/item/toy/plush/moth/whitefly, + /obj/item/toy/plush/moth/punished, + /obj/item/toy/plush/moth/firewatch, + /obj/item/toy/plush/moth/deadhead, + /obj/item/toy/plush/moth/poison, + /obj/item/toy/plush/moth/ragged, + /obj/item/toy/plush/moth/snow, + /obj/item/toy/plush/moth/moonfly + ) diff --git a/code/game/objects/items/pneumaticCannon.dm b/code/game/objects/items/pneumaticCannon.dm index 5108a8713633..9122be0a5d6c 100644 --- a/code/game/objects/items/pneumaticCannon.dm +++ b/code/game/objects/items/pneumaticCannon.dm @@ -326,23 +326,3 @@ /obj/item/pneumatic_cannon/speargun/Initialize() . = ..() allowed_typecache = magspear_typecache - -/obj/item/storage/backpack/magspear_quiver - name = "quiver" - desc = "A quiver for holding magspears." - icon_state = "quiver" - item_state = "quiver" - -/obj/item/storage/backpack/magspear_quiver/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 20 - STR.max_combined_w_class = 40 - STR.display_numerical_stacking = TRUE - STR.set_holdable(list( - /obj/item/throwing_star/magspear - )) - -/obj/item/storage/backpack/magspear_quiver/PopulateContents() - for(var/i in 1 to 20) - new /obj/item/throwing_star/magspear(src) diff --git a/code/game/objects/items/religion.dm b/code/game/objects/items/religion.dm index e2507dfb911b..97cc74a51589 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 @@ -244,52 +244,6 @@ /obj/item/clothing/gloves/plate/blue icon_state = "crusader-blue" -/obj/item/clothing/shoes/plate - name = "Plate Boots" - desc = "Metal boots, they look heavy." - icon_state = "crusader" - w_class = WEIGHT_CLASS_NORMAL - armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60) //does this even do anything on boots? - clothing_flags = NOSLIP - cold_protection = FEET - min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT - heat_protection = FEET - max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT - - -/obj/item/clothing/shoes/plate/red - icon_state = "crusader-red" - -/obj/item/clothing/shoes/plate/blue - icon_state = "crusader-blue" - - /obj/item/storage/box/itemset/crusader name = "Crusader's Armour Set" //i can't into ck2 references desc = "This armour is said to be based on the armor of kings on another world thousands of years ago, who tended to assassinate, conspire, and plot against everyone who tried to do the same to them. Some things never change." - - -/obj/item/storage/box/itemset/crusader/blue/PopulateContents() - new /obj/item/clothing/suit/armor/plate/crusader/blue(src) - new /obj/item/clothing/head/helmet/plate/crusader/blue(src) - new /obj/item/clothing/gloves/plate/blue(src) - new /obj/item/clothing/shoes/plate/blue(src) - - -/obj/item/storage/box/itemset/crusader/red/PopulateContents() - new /obj/item/clothing/suit/armor/plate/crusader/red(src) - new /obj/item/clothing/head/helmet/plate/crusader/red(src) - new /obj/item/clothing/gloves/plate/red(src) - new /obj/item/clothing/shoes/plate/red(src) - - -/obj/item/claymore/weak - desc = "This one is rusted." - force = 30 - armour_penetration = 15 - -/obj/item/claymore/weak/ceremonial - desc = "A rusted claymore, once at the heart of a powerful scottish clan struck down and oppressed by tyrants, it has been passed down the ages as a symbol of defiance." - force = 15 - block_chance = 30 - armour_penetration = 5 diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index 243b84b7e1ec..614b37ec4548 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -886,7 +886,7 @@ desc = "A special apparatus for carrying drinks without spilling the contents. Alt-Z or right-click to drop the beaker." icon_state = "borg_beaker_apparatus" storable = list(/obj/item/reagent_containers/food/drinks/, - /obj/item/reagent_containers/food/condiment) + /obj/item/reagent_containers/condiment) /obj/item/borg/apparatus/beaker/service/Initialize() . = ..() diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index 3194c1302512..6aba20463392 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -289,7 +289,6 @@ if(M.laws.id == DEFAULT_AI_LAWID) O.make_laws() - SSticker.mode.remove_antag_for_borging(B.mind) O.job = "Cyborg" O.cell = chest.cell diff --git a/code/game/objects/items/shuttle_creator.dm b/code/game/objects/items/shuttle_creator.dm index 781020f87318..9f25041d1f00 100644 --- a/code/game/objects/items/shuttle_creator.dm +++ b/code/game/objects/items/shuttle_creator.dm @@ -218,7 +218,6 @@ /obj/item/shuttle_creator/proc/check_current_area(mob/user) var/static/area_or_turf_fail_types = typecacheof(list( /turf/open/space, - /area/shuttle )) //Check to see if the user can make a new area to prevent spamming if(user) diff --git a/code/game/objects/items/singularityhammer.dm b/code/game/objects/items/singularityhammer.dm deleted file mode 100644 index 04d7629623b5..000000000000 --- a/code/game/objects/items/singularityhammer.dm +++ /dev/null @@ -1,145 +0,0 @@ -/obj/item/singularityhammer - name = "singularity hammer" - desc = "The pinnacle of close combat technology, the hammer harnesses the power of a miniaturized singularity to deal crushing blows." - icon_state = "singularity0" - base_icon_state = "singularity_hammer" - lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BACK - force = 5 - throwforce = 15 - throw_range = 1 - w_class = WEIGHT_CLASS_HUGE - armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 0, "bomb" = 50, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) - resistance_flags = FIRE_PROOF | ACID_PROOF - force_string = "LORD SINGULOTH HIMSELF" - var/charged = 5 - var/wielded = FALSE // track wielded status on item - -/obj/item/singularityhammer/Initialize() - . = ..() - RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(on_wield)) - RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(on_unwield)) - START_PROCESSING(SSobj, src) - -/obj/item/singularityhammer/ComponentInitialize() - . = ..() - AddComponent(/datum/component/two_handed, force_multiplier=4, icon_wielded="[base_icon_state]1") - -/// triggered on wield of two handed item -/obj/item/singularityhammer/proc/on_wield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = TRUE - -/// triggered on unwield of two handed item -/obj/item/singularityhammer/proc/on_unwield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = FALSE - -/obj/item/singularityhammer/update_icon_state() - icon_state = "[base_icon_state]0" - return ..() - -/obj/item/singularityhammer/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/singularityhammer/process() - if(charged < 5) - charged++ - -/obj/item/singularityhammer/proc/vortex(turf/pull, mob/wielder) - for(var/atom/X in orange(5,pull)) - if(ismovable(X)) - var/atom/movable/A = X - if(A == wielder) - continue - if(A && !A.anchored && !ishuman(X) && !isobserver(X)) - step_towards(A,pull) - step_towards(A,pull) - step_towards(A,pull) - else if(ishuman(X)) - var/mob/living/carbon/human/H = X - if(istype(H.shoes, /obj/item/clothing/shoes/magboots)) - var/obj/item/clothing/shoes/magboots/M = H.shoes - if(M.magpulse) - continue - H.apply_effect(20, EFFECT_PARALYZE, 0) - step_towards(H,pull) - step_towards(H,pull) - step_towards(H,pull) - -/obj/item/singularityhammer/afterattack(atom/A as mob|obj|turf|area, mob/user, proximity) - . = ..() - if(!proximity) - return - if(wielded) - if(charged == 5) - charged = 0 - if(istype(A, /mob/living/)) - var/mob/living/Z = A - Z.take_bodypart_damage(20,0) - playsound(user, 'sound/weapons/marauder.ogg', 50, TRUE) - var/turf/target = get_turf(A) - vortex(target,user) - -/obj/item/mjollnir - name = "Mjolnir" - desc = "A weapon worthy of a god, able to strike with the force of a lightning bolt. It crackles with barely contained energy." - icon_state = "mjollnir0" - base_icon_state = "mjollnir" - lefthand_file = 'icons/mob/inhands/weapons/hammers_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/hammers_righthand.dmi' - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BACK - force = 5 - throwforce = 30 - throw_range = 7 - w_class = WEIGHT_CLASS_HUGE - var/wielded = FALSE // track wielded status on item - -/obj/item/mjollnir/Initialize() - . = ..() - RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(on_wield)) - RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(on_unwield)) - -/obj/item/mjollnir/ComponentInitialize() - . = ..() - AddComponent(/datum/component/two_handed, force_multiplier=5, icon_wielded="[base_icon_state]1", attacksound="sparks") - -/// triggered on wield of two handed item -/obj/item/mjollnir/proc/on_wield(obj/item/source, mob/user) - wielded = TRUE - -/// triggered on unwield of two handed item -/obj/item/mjollnir/proc/on_unwield(obj/item/source, mob/user) - wielded = FALSE - -/obj/item/mjollnir/update_icon_state() - icon_state = "[base_icon_state]0" - return ..() - -/obj/item/mjollnir/proc/shock(mob/living/target) - target.Stun(60) - var/datum/effect_system/lightning_spread/s = new /datum/effect_system/lightning_spread - s.set_up(5, 1, target.loc) - s.start() - target.visible_message("[target.name] is shocked by [src]!", \ - "You feel a powerful shock course through your body sending you flying!", \ - "You hear a heavy electrical crack!") - var/atom/throw_target = get_edge_target_turf(target, get_dir(src, get_step_away(target, src))) - target.throw_at(throw_target, 200, 4) - return - -/obj/item/mjollnir/attack(mob/living/M, mob/user) - ..() - if(wielded) - shock(M) - -/obj/item/mjollnir/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - . = ..() - if(isliving(hit_atom)) - shock(hit_atom) diff --git a/code/game/objects/items/spear.dm b/code/game/objects/items/spear.dm deleted file mode 100644 index be6b9d3a5a14..000000000000 --- a/code/game/objects/items/spear.dm +++ /dev/null @@ -1,283 +0,0 @@ -//spears -/obj/item/spear - icon_state = "spearglass0" - lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' - name = "spear" - desc = "A haphazardly-constructed yet still deadly weapon of ancient design." - force = 10 - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - throwforce = 20 - throw_speed = 4 - embedding = list("impact_pain_mult" = 3) - armour_penetration = 10 - custom_materials = list(/datum/material/iron=1150, /datum/material/glass=2075) - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") - sharpness = IS_SHARP - max_integrity = 200 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30) - species_exception = list(/datum/species/kepori) - var/war_cry = "AAAAARGH!!!" - var/icon_prefix = "spearglass" - -/obj/item/spear/ComponentInitialize() - . = ..() - AddComponent(/datum/component/butchering, 100, 70) //decent in a pinch, but pretty bad. - AddComponent(/datum/component/jousting) - AddComponent(/datum/component/two_handed, force_unwielded=10, force_wielded=18, icon_wielded="[icon_prefix]1") - -/obj/item/spear/update_icon_state() - icon_state = "[icon_prefix]0" - return ..() - -/obj/item/spear/CheckParts(list/parts_list) - var/obj/item/shard/tip = locate() in parts_list - if (istype(tip, /obj/item/shard/plasma)) - throwforce = 21 - icon_prefix = "spearplasma" - AddComponent(/datum/component/two_handed, force_unwielded=11, force_wielded=19, icon_wielded="[icon_prefix]1") - update_appearance() - qdel(tip) - ..() - -/obj/item/spear/explosive - name = "explosive lance" - icon_state = "spearbomb0" - base_icon_state = "spearbomb" - icon_prefix = "spearbomb" - var/obj/item/grenade/explosive = null - var/wielded = FALSE // track wielded status on item - -/obj/item/spear/explosive/Initialize(mapload) - . = ..() - RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(on_wield)) - RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(on_unwield)) - set_explosive(new /obj/item/grenade/iedcasing/spawned()) //For admin-spawned explosive lances - -/obj/item/spear/explosive/ComponentInitialize() - . = ..() - AddComponent(/datum/component/two_handed, force_unwielded=10, force_wielded=18, icon_wielded="[icon_prefix]1") - -/// triggered on wield of two handed item -/obj/item/spear/explosive/proc/on_wield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = TRUE - -/// triggered on unwield of two handed item -/obj/item/spear/explosive/proc/on_unwield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = FALSE - -/obj/item/spear/explosive/proc/set_explosive(obj/item/grenade/G) - if(explosive) - QDEL_NULL(explosive) - G.forceMove(src) - explosive = G - desc = "A makeshift spear with [G] attached to it" - -/obj/item/spear/explosive/CheckParts(list/parts_list) - var/obj/item/grenade/G = locate() in parts_list - if(G) - var/obj/item/spear/lancePart = locate() in parts_list - var/datum/component/two_handed/comp_twohand = lancePart.GetComponent(/datum/component/two_handed) - if(comp_twohand) - var/lance_wielded = comp_twohand.force_wielded - var/lance_unwielded = comp_twohand.force_unwielded - AddComponent(/datum/component/two_handed, force_unwielded=lance_unwielded, force_wielded=lance_wielded) - throwforce = lancePart.throwforce - icon_prefix = lancePart.icon_prefix - parts_list -= G - parts_list -= lancePart - set_explosive(G) - qdel(lancePart) - ..() - -/obj/item/spear/explosive/examine(mob/user) - . = ..() - . += "Alt-click to set your war cry." - -/obj/item/spear/explosive/AltClick(mob/user) - if(user.canUseTopic(src, BE_CLOSE)) - ..() - if(istype(user) && loc == user) - var/input = stripped_input(user,"What do you want your war cry to be? You will shout it when you hit someone in melee.", ,"", 50) - if(input) - src.war_cry = input - -/obj/item/spear/explosive/afterattack(atom/movable/AM, mob/user, proximity) - . = ..() - if(!proximity) - return - if(wielded) - user.say("[war_cry]", forced="spear warcry") - explosive.forceMove(AM) - explosive.prime() - qdel(src) - -//GREY TIDE -/obj/item/spear/grey_tide - name = "\improper Grey Tide" - desc = "Recovered from the aftermath of a revolt aboard Defense Outpost Theta Aegis, in which a seemingly endless tide of Assistants caused heavy casualities among Nanotrasen military forces." - attack_verb = list("gored") - force=15 - -/obj/item/spear/grey_tide/ComponentInitialize() - . = ..() - AddComponent(/datum/component/two_handed, force_unwielded=15, force_wielded=25, icon_wielded="[icon_prefix]1") - -/obj/item/spear/grey_tide/afterattack(atom/movable/AM, mob/living/user, proximity) - . = ..() - if(!proximity) - return - user.faction |= "greytide([REF(user)])" - if(isliving(AM)) - var/mob/living/L = AM - if(istype (L, /mob/living/simple_animal/hostile/illusion)) - return - if(!L.stat && prob(50)) - var/mob/living/simple_animal/hostile/illusion/M = new(user.loc) - M.faction = user.faction.Copy() - M.Copy_Parent(user, 100, user.health/2.5, 12, 30) - M.GiveTarget(L) - -/* - * Bone Spear - */ -/obj/item/spear/bonespear //Blatant imitation of spear, but made out of bone. Not valid for explosive modification. - icon_state = "bone_spear0" - name = "bone spear" - base_icon_state = "bone_spear0" - icon_prefix = "bone_spear" - desc = "A haphazardly-constructed yet still deadly weapon. The pinnacle of modern technology." - icon = 'icons/obj/items_and_weapons.dmi' - lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' - mob_overlay_icon = 'icons/mob/clothing/back.dmi' - force = 12 - throwforce = 22 - armour_penetration = 15 //Enhanced armor piercing - -/obj/item/spear/bonespear/ComponentInitialize() - . = ..() - AddComponent(/datum/component/two_handed, force_unwielded=12, force_wielded=20, icon_wielded="[icon_prefix]1") -/obj/item/spear/dragonspear//version of the bone spear crafted from the trophy dropped by the Ash Drake. High damage, high ap, burns. - name = "dragonslayer's spear" - desc = "A bone spear crafted from the leading spine of a fully-grown drake, razor-sharp and hotter then magma. Wielded by the deranged, pyromaniacs, and champions of lavaland." - icon = 'icons/obj/items_and_weapons.dmi' - lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' - mob_overlay_icon = 'icons/mob/clothing/back.dmi' - force = 20 - throwforce = 25 - block_chance = 15//lol,lmao - armour_penetration = 30 - embedding = list("impact_pain_mult" = 5) - icon_prefix = "dragonspear" - base_icon_state = "dragonspear0" - icon_state = "dragonspear0" - var/list/nemesis_factions = list("mining", "boss") - var/faction_bonus_force = 25 - attack_verb = list("seared", "braided", "impaled", "smote", "gored") - hitsound = 'sound/weapons/sear.ogg' - var/cooldown_time = 0 SECONDS - COOLDOWN_DECLARE(freeze_cooldown) - -/obj/item/spear/dragonspear/attack(mob/living/target, mob/living/carbon/human/user) - var/nemesis_faction = FALSE - if(LAZYLEN(nemesis_factions)) - for(var/F in target.faction) - if(F in nemesis_factions) - nemesis_faction = TRUE - force += faction_bonus_force - throwforce += faction_bonus_force - nemesis_effects(user, target) - break - . = ..() - if(nemesis_faction) - force -= faction_bonus_force - throwforce -= faction_bonus_force - -/obj/item/spear/dragonspear/proc/nemesis_effects(mob/living/user, mob/living/target) - return - -/obj/item/spear/dragonspear/ComponentInitialize() - . = ..() - AddComponent(/datum/component/two_handed, force_unwielded=20, force_wielded=25, icon_wielded="[icon_prefix]1") - AddComponent(/datum/component/butchering, 60, 150) - -/obj/item/spear/dragonspear/attack(atom/target, blocked = FALSE) - if(iscarbon(target)) - var/mob/living/carbon/M = target - M.adjust_fire_stacks(3) - M.IgniteMob() - M.apply_damage(5, BURN) - M.adjust_bodytemperature(150) - if(isanimal(target)) - var/mob/living/simple_animal/M = target - M.apply_damage(15, BURN) - ..() - -//crystal spear -/obj/item/spear/crystal - icon_state = "crystal_spear0" - name = "crystal spear" - desc = "While more 'sharp stick' than spear, this thing is extremely dangerous neverless. Crafted out of the mysterous crystals, it can hit for very high damage, although it will break with repeated use." - icon = 'icons/obj/items_and_weapons.dmi' - base_icon_state = "crystal_spear" - icon_prefix = "crystal_spear" - lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' - mob_overlay_icon = 'icons/mob/clothing/back.dmi' - force = 12 - throwforce = 40 - armour_penetration = 20 - max_integrity = 300 //you can repair this with duct tape - var/damage_to_take_on_hit = 25 //every time we hit something, deal how much damage? - -/obj/item/spear/crystal/ComponentInitialize() - . = ..() - AddComponent(/datum/component/two_handed, force_unwielded=12, force_wielded=30, icon_wielded="[icon_prefix]1") //4 hit crit - -/obj/item/spear/crystal/examine(mob/user) - . = ..() - . += "You can throw it for very high damage and stuns fauna, though this will shatter it instantly." - var/healthpercent = (obj_integrity/max_integrity) * 100 - switch(healthpercent) - if(50 to 99) - . += "It looks slightly damaged." - if(25 to 50) - . += "It appears heavily damaged." - if(0 to 25) - . += "It's falling apart!" - -/obj/item/spear/crystal/attack(mob/living/M, mob/living/user) - . = ..() - take_damage(damage_to_take_on_hit) - -/obj/item/spear/crystal/attack_obj(obj/O, mob/living/user) - . = ..() - take_damage(damage_to_take_on_hit) - -/obj/item/spear/crystal/obj_destruction(damage_flag) - visible_message("[src] shatters into a million pieces!") - playsound(src,"shatter", 70) - new /obj/effect/decal/cleanable/glass/strange(get_turf(src)) - return ..() - -/obj/item/spear/crystal/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) //destroyes when thrown - . = ..() - if(ishostile(hit_atom)) - var/mob/living/simple_animal/hostile/hostile_target = hit_atom - var/hostile_ai_status = hostile_target.AIStatus - hostile_target.AIStatus = AI_OFF - addtimer(VARSET_CALLBACK(hostile_target, AIStatus, hostile_ai_status), 5 SECONDS) - - new /obj/effect/temp_visual/goliath_tentacle/crystal/visual_only(get_turf(src)) - visible_message("[src] shatters into a million pieces!") - playsound(src,"shatter", 70) - new /obj/effect/decal/cleanable/glass/strange(get_turf(src)) - qdel(src) diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 264ab12646ea..10eb8c1e2cf8 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -382,7 +382,7 @@ desc = "Used to secure limbs following a fracture." gender = PLURAL singular_name = "splint" - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "splint" apply_sounds = list('sound/effects/rip1.ogg', 'sound/effects/rip2.ogg') self_delay = 40 diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index da08c87a5a35..23a8c8d5e5f0 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -339,7 +339,7 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list( var/obj/item/stack/sheet/cotton/cloth/C = I to_chat(user, "You begin to wrap the [C] around the [src]...") if(do_after(user, 35, target = src)) - var/obj/item/kitchen/knife/shiv/S = new /obj/item/kitchen/knife/shiv + var/obj/item/melee/knife/shiv/S = new /obj/item/melee/knife/shiv C.use(1) to_chat(user, "You wrap the [C] around the [src] forming a makeshift weapon.") remove_item_from_storage(src) diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 26cff752c364..75c863bee5b6 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -57,14 +57,6 @@ GLOBAL_LIST_INIT(gondola_recipes, list ( \ . = ..() . += GLOB.gondola_recipes -GLOBAL_LIST_INIT(corgi_recipes, list ( \ - new/datum/stack_recipe("corgi costume", /obj/item/clothing/suit/hooded/ian_costume, 3), \ - )) - -/obj/item/stack/sheet/animalhide/corgi/get_main_recipes() - . = ..() - . += GLOB.corgi_recipes - /obj/item/stack/sheet/animalhide/cat name = "cat hide" desc = "The by-product of cat farming." @@ -81,7 +73,6 @@ GLOBAL_LIST_INIT(corgi_recipes, list ( \ GLOBAL_LIST_INIT(monkey_recipes, list ( \ new/datum/stack_recipe("monkey mask", /obj/item/clothing/mask/gas/monkeymask, 1), \ - new/datum/stack_recipe("monkey suit", /obj/item/clothing/suit/monkeysuit, 2), \ )) /obj/item/stack/sheet/animalhide/monkey/get_main_recipes() @@ -102,15 +93,6 @@ GLOBAL_LIST_INIT(monkey_recipes, list ( \ icon_state = "sheet-xeno" item_state = "sheet-xeno" -GLOBAL_LIST_INIT(xeno_recipes, list ( \ - new/datum/stack_recipe("alien helmet", /obj/item/clothing/head/xenos, 1), \ - new/datum/stack_recipe("alien suit", /obj/item/clothing/suit/xenos, 2), \ - )) - -/obj/item/stack/sheet/animalhide/xeno/get_main_recipes() - . = ..() - . += GLOB.xeno_recipes - //don't see anywhere else to put these, maybe together they could be used to make the xenos suit? /obj/item/stack/sheet/xenochitin name = "alien chitin" @@ -167,7 +149,6 @@ GLOBAL_LIST_INIT(leather_recipes, list ( \ new/datum/stack_recipe("bandolier", /obj/item/storage/belt/bandolier, 5), \ new/datum/stack_recipe("leather jacket", /obj/item/clothing/suit/jacket/leather, 7), \ new/datum/stack_recipe("leather shoes", /obj/item/clothing/shoes/laceup, 2), \ - new/datum/stack_recipe("leather overcoat", /obj/item/clothing/suit/jacket/leather/overcoat, 10), \ new/datum/stack_recipe("saddle", /obj/item/saddle, 5), \ )) diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 9fc6fa808a46..560031fa03da 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -74,7 +74,6 @@ GLOBAL_LIST_INIT(sandbag_recipes, list ( \ /obj/item/emptysandbag name = "empty sandbag" desc = "A bag to be filled with sand." - icon = 'icons/obj/items_and_weapons.dmi' icon_state = "sandbag" w_class = WEIGHT_CLASS_TINY diff --git a/code/game/objects/items/stacks/sheets/recipes/recipes_metal.dm b/code/game/objects/items/stacks/sheets/recipes/recipes_metal.dm index 6860f34be5c7..9819a941e5f8 100644 --- a/code/game/objects/items/stacks/sheets/recipes/recipes_metal.dm +++ b/code/game/objects/items/stacks/sheets/recipes/recipes_metal.dm @@ -1,9 +1,13 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ new/datum/stack_recipe("stool", /obj/structure/chair/stool, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("bar stool", /obj/structure/chair/stool/bar, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("bed", /obj/structure/bed, 2, one_per_turf = TRUE, on_floor = TRUE), \ - new/datum/stack_recipe("double bed", /obj/structure/bed/double, 4, one_per_turf = TRUE, on_floor = TRUE), \ null, \ + new/datum/stack_recipe_list("beds", list( \ + new/datum/stack_recipe("bed", /obj/structure/bed, 2, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("double bed", /obj/structure/bed/double, 4, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("bottom bunk", /obj/structure/bed/bunk, 2, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("top bunk", /obj/structure/bed/bunk/top, 2, one_per_turf = TRUE, on_floor = TRUE), \ + )), \ new/datum/stack_recipe_list("office chairs", list( \ new/datum/stack_recipe("gray office chair", /obj/structure/chair/office, 5, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("light office chair", /obj/structure/chair/office/light, 5, one_per_turf = TRUE, on_floor = TRUE), \ diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index ead6b8aeb8f1..ce64af1fd205 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -7,7 +7,6 @@ * Plastic * Cardboard * Paper Frames - * Runed Metal (cult) * Bronze (bake brass) */ @@ -451,8 +450,6 @@ GLOBAL_LIST_INIT(bronze_recipes, list ( \ new/datum/stack_recipe("pinion airlock assembly", /obj/structure/door_assembly/door_assembly_bronze, 4, time = 50, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("bronze pinion airlock assembly", /obj/structure/door_assembly/door_assembly_bronze/seethru, 4, time = 50, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("bronze hat", /obj/item/clothing/head/bronze), \ - new/datum/stack_recipe("bronze suit", /obj/item/clothing/suit/bronze), \ - new/datum/stack_recipe("bronze boots", /obj/item/clothing/shoes/bronze), \ null, new/datum/stack_recipe("bronze chair", /obj/structure/chair/comfy/shuttle/bronze, 1, time = 0, one_per_turf = TRUE, on_floor = TRUE), \ new/datum/stack_recipe("Marx Bust", /obj/structure/statue/bronze/marx, 15, one_per_turf = 1, on_floor = 1), \ @@ -519,10 +516,8 @@ 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/melee/knife/bone, 2))) + /obj/item/stack/sheet/bone name = "bones" icon = 'icons/obj/mining.dmi' @@ -608,41 +603,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/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 5653b641c99d..f34836de156f 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -305,7 +305,7 @@ if(!window_structure.fulltile) continue if(object.density) - to_chat(usr, "There is \a [object.name] here. You cant make \a [recipe.title] here!") + to_chat(usr, "There is \a [object.name] here. You can't make \a [recipe.title] here!") return FALSE if(recipe.placement_checks) switch(recipe.placement_checks) diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index 92123969a4cd..dd0598e80c2d 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -16,6 +16,8 @@ desc = "You wear this on your back and put items into it." icon_state = "backpack" item_state = "backpack" + icon = 'icons/obj/clothing/back/backpacks.dmi' + mob_overlay_icon = 'icons/mob/clothing/back/backpacks.dmi' lefthand_file = 'icons/mob/inhands/equipment/backpack_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/backpack_righthand.dmi' pickup_sound = "rustle" @@ -26,7 +28,9 @@ max_integrity = 300 greyscale_icon_state = "backpack" greyscale_colors = list(list(13, 17), list(12, 17), list(12, 21)) - supports_variations = VOX_VARIATION + + supports_variations = VOX_VARIATION | KEPORI_VARIATION + kepori_override_icon = 'icons/mob/clothing/back/backpacks_kepori.dmi' /obj/item/storage/backpack/ComponentInitialize() . = ..() @@ -61,51 +65,12 @@ STR.storage_flags = STORAGE_FLAGS_VOLUME_DEFAULT STR.max_volume = STORAGE_VOLUME_BAG_OF_HOLDING -/obj/item/storage/backpack/santabag - name = "Santa's Gift Bag" - desc = "Space Santa uses this to deliver presents to all the nice children in space in Christmas! Wow, it's pretty big!" - icon_state = "giftbag0" - item_state = "giftbag" - w_class = WEIGHT_CLASS_BULKY - -/obj/item/storage/backpack/santabag/Initialize() - . = ..() - regenerate_presents() - -/obj/item/storage/backpack/santabag/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_w_class = WEIGHT_CLASS_NORMAL - STR.max_combined_w_class = 60 - -/obj/item/storage/backpack/santabag/proc/regenerate_presents() - addtimer(CALLBACK(src, PROC_REF(regenerate_presents)), 30 SECONDS) - - var/mob/M = get(loc, /mob) - if(!istype(M)) - return - if(M.mind && HAS_TRAIT(M.mind, TRAIT_CANNOT_OPEN_PRESENTS)) - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - var/turf/floor = get_turf(src) - var/obj/item/I = new /obj/item/a_gift/anything(floor) - if(STR.can_be_inserted(I, stop_messages=TRUE)) - STR.handle_item_insertion(I, prevent_warning=TRUE) - else - qdel(I) - - /obj/item/storage/backpack/cultpack name = "trophy rack" desc = "It's useful for both carrying extra gear and proudly declaring your insanity." icon_state = "cultpack" item_state = "backpack" -/obj/item/storage/backpack/clown - name = "Giggles von Honkerton" - desc = "It's a backpack made by Honk! Co." - icon_state = "clownpack" - item_state = "clownpack" - /obj/item/storage/backpack/explorer name = "explorer bag" desc = "A robust backpack for stashing your loot." @@ -215,7 +180,6 @@ item_state = "satchel-norm" greyscale_icon_state = "satchel" greyscale_colors = list(list(11, 12), list(17, 18), list(10, 11)) - supports_variations = VOX_VARIATION /obj/item/storage/backpack/satchel/ComponentInitialize() . = ..() @@ -226,7 +190,6 @@ /obj/item/storage/backpack/satchel/leather name = "leather satchel" desc = "It's a very fancy satchel made with fine leather." - icon = 'icons/obj/storage.dmi' icon_state = "satchel" item_state = "satchel" @@ -261,12 +224,6 @@ icon_state = "satchel-chem" item_state = "satchel-chem" -/obj/item/storage/backpack/satchel/gen - name = "geneticist satchel" - desc = "A sterile satchel with geneticist colours." - icon_state = "satchel-gen" - item_state = "satchel-gen" - /obj/item/storage/backpack/satchel/tox name = "scientist satchel" desc = "Useful for holding research materials." @@ -354,8 +311,6 @@ /obj/item/storage/backpack/messenger name = "messenger bag" desc = "A sturdy backpack worn over one shoulder." - icon = 'icons/obj/storage.dmi' - mob_overlay_icon = 'icons/mob/clothing/back.dmi' icon_state = "courierbag" item_state = "courierbag" greyscale_icon_state = "satchel" @@ -581,17 +536,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." @@ -603,10 +558,10 @@ new /obj/item/mecha_ammo/scattershot(src) new /obj/item/storage/belt/utility/syndicate(src) -/obj/item/storage/backpack/duffelbag/syndie/ammo/mauler +/obj/item/storage/backpack/duffelbag/syndie/ammo/touro desc = "A large duffel bag, packed to the brim with various exosuit ammo." -/obj/item/storage/backpack/duffelbag/syndie/ammo/mauler/PopulateContents() +/obj/item/storage/backpack/duffelbag/syndie/ammo/touro/PopulateContents() new /obj/item/mecha_ammo/lmg(src) new /obj/item/mecha_ammo/lmg(src) new /obj/item/mecha_ammo/lmg(src) @@ -621,18 +576,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 +596,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 +606,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 +627,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) @@ -689,7 +644,6 @@ /obj/item/storage/backpack/duffelbag/clown/syndie/PopulateContents() new /obj/item/pda/clown(src) new /obj/item/clothing/under/rank/civilian/clown(src) - new /obj/item/clothing/shoes/clown_shoes(src) new /obj/item/clothing/mask/gas/clown_hat(src) new /obj/item/bikehorn(src) new /obj/item/implanter/sad_trombone(src) diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index 2904745f25aa..c6d55e03ef48 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 @@ -274,6 +275,7 @@ STR.set_holdable(list( /obj/item/melee/baton, /obj/item/melee/classic_baton, + /obj/item/melee/knife, /obj/item/grenade, /obj/item/reagent_containers/spray/pepper, /obj/item/restraints/handcuffs, @@ -287,10 +289,10 @@ /obj/item/ammo_box/a858, //oh boy stripper clips too /obj/item/ammo_box/vickland_a308, /obj/item/ammo_box/a300, - /obj/item/ammo_box/aac_300blk_stripper, + /obj/item/ammo_box/a762_stripper, /obj/item/ammo_box/amagpellet_claris, //that's the last of the clips /obj/item/reagent_containers/food/snacks/donut, - /obj/item/kitchen/knife/combat, + /obj/item/melee/knife/combat, /obj/item/flashlight/seclite, /obj/item/melee/classic_baton/telescopic, /obj/item/radio, @@ -324,7 +326,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 +358,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, @@ -365,7 +368,7 @@ /obj/item/storage/fancy/cigarettes, /obj/item/reagent_containers/food/drinks/bottle, /obj/item/stack/medical, - /obj/item/kitchen/knife, + /obj/item/melee/knife, /obj/item/reagent_containers/hypospray, /obj/item/gps, /obj/item/storage/bag/ore, @@ -380,8 +383,7 @@ /obj/item/storage/bag/plants, /obj/item/stack/marker_beacon, /obj/item/restraints/legcuffs/bola/watcher, - /obj/item/claymore/bone, - /obj/item/key/lasso + /obj/item/melee/sword/bone )) @@ -403,32 +405,6 @@ var/datum/component/storage/STR = GetComponent(/datum/component/storage) STR.max_items = 5 -/obj/item/storage/belt/soulstone - name = "soul stone belt" - desc = "Designed for ease of access to the shards during a fight, as to not let a single enemy spirit slip away." - icon_state = "soulstone" - item_state = "soulstone" - -/obj/item/storage/belt/soulstone/ComponentInitialize() - . = ..() - var/datum/component/storage/STR = GetComponent(/datum/component/storage) - STR.max_items = 6 - STR.set_holdable(list( - /obj/item/soulstone - )) - -/obj/item/storage/belt/soulstone/full/PopulateContents() - for(var/i in 1 to 6) - new /obj/item/soulstone(src) - -/obj/item/storage/belt/soulstone/full/chappy/PopulateContents() - for(var/i in 1 to 6) - new /obj/item/soulstone/anybody/chaplain(src) - -/obj/item/storage/belt/soulstone/full/purified/PopulateContents() - for(var/i in 1 to 6) - new /obj/item/soulstone/anybody/purified(src) - /obj/item/storage/belt/champion name = "championship belt" desc = "Proves to the world that you are the strongest!" @@ -480,12 +456,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" @@ -520,7 +496,7 @@ /obj/item/reagent_containers/food/snacks/cheesynachos, /obj/item/reagent_containers/food/snacks/cubannachos, /obj/item/reagent_containers/food/snacks/nugget, - /obj/item/reagent_containers/food/snacks/spaghetti/pastatomato, + /obj/item/food/spaghetti/pastatomato, /obj/item/reagent_containers/food/snacks/rofflewaffles, /obj/item/reagent_containers/food/snacks/donkpocket, /obj/item/reagent_containers/food/drinks/soda_cans/cola, @@ -680,7 +656,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 +670,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." @@ -780,7 +760,7 @@ STR.use_sound = null //if youre wondering why this is null, its so you can look in your sheath to prepare to draw, without letting anyone know youre preparing to draw it STR.max_w_class = WEIGHT_CLASS_BULKY STR.set_holdable(list( - /obj/item/melee/sabre + /obj/item/melee/sword/sabre )) /obj/item/storage/belt/sabre/examine(mob/user) @@ -808,7 +788,7 @@ return ..() /obj/item/storage/belt/sabre/PopulateContents() - new /obj/item/melee/sabre(src) + new /obj/item/melee/sword/sabre(src) update_appearance() /obj/item/storage/belt/sabre/solgov @@ -827,11 +807,11 @@ STR.use_sound = null STR.max_w_class = WEIGHT_CLASS_BULKY STR.set_holdable(list( - /obj/item/melee/sabre/solgov + /obj/item/melee/sword/sabre/solgov )) /obj/item/storage/belt/sabre/solgov/PopulateContents() - new /obj/item/melee/sabre/solgov(src) + new /obj/item/melee/sword/sabre/solgov(src) update_appearance() /obj/item/storage/belt/sabre/suns @@ -856,11 +836,11 @@ STR.use_sound = null STR.max_w_class = WEIGHT_CLASS_BULKY STR.set_holdable(list( - /obj/item/melee/sabre/suns + /obj/item/melee/sword/sabre/suns )) /obj/item/storage/belt/sabre/suns/PopulateContents() - new /obj/item/melee/sabre/suns(src) + new /obj/item/melee/sword/sabre/suns(src) update_appearance() @@ -881,11 +861,11 @@ STR.use_sound = null STR.max_w_class = WEIGHT_CLASS_BULKY STR.set_holdable(list( - /obj/item/melee/sabre/suns/captain + /obj/item/melee/sword/sabre/suns/captain )) /obj/item/storage/belt/sabre/suns/captain/PopulateContents() - new /obj/item/melee/sabre/suns/captain(src) + new /obj/item/melee/sword/sabre/suns/captain(src) update_appearance() /obj/item/storage/belt/sabre/suns/cmo @@ -911,11 +891,11 @@ STR.use_sound = null STR.max_w_class = WEIGHT_CLASS_BULKY STR.set_holdable(list( - /obj/item/melee/sabre/suns/cmo + /obj/item/melee/sword/sabre/suns/cmo )) /obj/item/storage/belt/sabre/suns/cmo/PopulateContents() - new /obj/item/melee/sabre/suns/cmo(src) + new /obj/item/melee/sword/sabre/suns/cmo(src) update_appearance() /obj/item/storage/belt/security/webbing/inteq diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index 8aa7b1d9c478..57b574e39b7f 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -455,7 +455,7 @@ /obj/item/storage/box/condimentbottles/PopulateContents() for(var/i in 1 to 6) - new /obj/item/reagent_containers/food/condiment(src) + new /obj/item/reagent_containers/condiment(src) /obj/item/storage/box/cups name = "box of paper cups" diff --git a/code/game/objects/items/storage/briefcase.dm b/code/game/objects/items/storage/briefcase.dm index 64a3a11cf327..dfc65846bd11 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 9cda5ac27a39..2feb49af03f7 100644 --- a/code/game/objects/items/storage/guncases.dm +++ b/code/game/objects/items/storage/guncases.dm @@ -1,8 +1,8 @@ /obj/item/storage/guncase name = "gun case" desc = "A large box designed for holding firearms and magazines safely." - icon = 'icons/obj/guncase_48x32.dmi' - icon_state = "riflecase" + icon = 'icons/obj/guncase.dmi' + icon_state = "guncase" item_state = "infiltrator_case" force = 12 throwforce = 12 @@ -14,7 +14,6 @@ drop_sound = 'sound/items/handling/toolbox_drop.ogg' pickup_sound = 'sound/items/handling/toolbox_pickup.ogg' - /obj/item/storage/guncase/ComponentInitialize() . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) @@ -30,6 +29,14 @@ /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,12 +59,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() @@ -87,7 +99,7 @@ name = "pistol case" desc = "A large box designed for holding pistols and magazines safely." icon = 'icons/obj/guncase.dmi' - icon_state = "pistolcase" + icon_state = "guncase" item_state = "infiltrator_case" force = 12 throwforce = 12 @@ -115,11 +127,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() @@ -137,6 +149,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) @@ -153,7 +169,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) @@ -163,7 +179,6 @@ new /obj/item/ammo_box/a44roum_speedloader/empty(src) new /obj/item/ammo_box/a44roum_speedloader/empty(src) - /obj/item/storage/pistolcase/disposable /obj/item/storage/pistolcase/disposable/PopulateContents() new /obj/item/gun/ballistic/automatic/pistol/disposable(src) @@ -176,7 +191,7 @@ /obj/item/storage/pistolcase/egun /obj/item/storage/pistolcase/egun/PopulateContents() - new /obj/item/gun/energy/laser/empty_cell(src) + new /obj/item/gun/energy/e_gun/empty_cell(src) new /obj/item/stock_parts/cell/gun(src) /obj/item/storage/pistolcase/kalixpistol @@ -191,7 +206,7 @@ /obj/item/storage/pistolcase/miniegun /obj/item/storage/pistolcase/miniegun/PopulateContents() - new /obj/item/gun/energy/e_gun/empty_cell(src) + new /obj/item/gun/energy/e_gun/mini/empty_cell(src) new /obj/item/stock_parts/cell/gun/mini(src) /obj/item/storage/pistolcase/iongun diff --git a/code/game/objects/items/storage/holsters.dm b/code/game/objects/items/storage/holsters.dm index 9000d5e4dbd0..251cc9e06b1a 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/ration.dm b/code/game/objects/items/storage/ration.dm index 482ba202a73e..9a9e4a5a2617 100644 --- a/code/game/objects/items/storage/ration.dm +++ b/code/game/objects/items/storage/ration.dm @@ -9,16 +9,28 @@ resistance_flags = FLAMMABLE drop_sound = 'sound/items/handling/cardboardbox_drop.ogg' pickup_sound = 'sound/items/handling/cardboardbox_pickup.ogg' + var/emblem_icon_state = "null" + var/ration_overlay = "null" /obj/item/storage/ration/Initialize(mapload) . = ..() update_icon() + update_overlays() + +/obj/item/storage/ration/update_overlays() + . = ..() + var/mutable_appearance/ration_overlay + if(emblem_icon_state) + ration_overlay = mutable_appearance(icon, emblem_icon_state) + add_overlay(ration_overlay) /obj/item/storage/ration/ComponentInitialize() . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) STR.max_items = 7 - STR.set_holdable(list(/obj/item/reagent_containers/food)) + STR.set_holdable(list( + /obj/item/reagent_containers/food, + /obj/item/ration_heater)) STR.locked = TRUE STR.locked_flavor = "sealed closed" @@ -38,13 +50,13 @@ /obj/item/storage/ration/vegan_chili name = "vegan chili with beans ration" desc = "A complete meal package containing a hearty vegan chili with beans, complemented by vegetable crackers, savory cornbread, flavorful pizza crackers, and more. A perfect choice for plant-based nourishment." - + emblem_icon_state = "emblem_vegan_chili" /obj/item/storage/ration/vegan_chili/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/vegan_chili = 1, /obj/item/reagent_containers/food/snacks/ration/side/vegan_crackers = 1, /obj/item/reagent_containers/food/snacks/ration/side/cornbread = 1, - /obj/item/reagent_containers/food/snacks/ration/snack/pizza_crackers = 1, + /obj/item/reagent_containers/food/snacks/ration/snack/fruit_puree = 1, /obj/item/reagent_containers/food/snacks/ration/condiment/cheese_spread = 1, /obj/item/reagent_containers/food/snacks/ration/pack/grape_beverage = 1, /obj/item/ration_heater = 1 @@ -54,7 +66,7 @@ /obj/item/storage/ration/shredded_beef name = "shredded beef in barbecue sauce ration" desc = "Enjoy the rich and savory flavors of shredded beef in smoky barbecue sauce with this satisfying ration. Accompanied by a fruit puree, jerky wrap, cinnamon bun, and additional condiments, this ration is perfect for meat lovers." - + emblem_icon_state = "emblem_shredded_beef" /obj/item/storage/ration/shredded_beef/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/shredded_beef = 1, @@ -70,7 +82,7 @@ /obj/item/storage/ration/pork_spaghetti name = "spaghetti with pork and sauce ration" desc = "Indulge in a comforting meal of spaghetti with tender pork and savory sauce with this ration. Complemented by a toaster pastry, seasoned bread sticks, dried raisins, and other accompaniments, this ration offers a flavorful experience." - + emblem_icon_state = "emblem_pork_spaghetti" /obj/item/storage/ration/pork_spaghetti/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/pork_spaghetti = 1, @@ -86,7 +98,7 @@ /obj/item/storage/ration/fried_fish name = "fried fish chunks ration" desc = "Experience the crispy delight of fried fish chunks with this ration. Accompanied by an energy bar, tortillas, toasted corn kernels, and more, this ration provides a satisfying combination of flavors and textures." - + emblem_icon_state = "emblem_fried_fish" /obj/item/storage/ration/fried_fish/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/fried_fish = 1, @@ -103,7 +115,7 @@ /obj/item/storage/ration/beef_strips name = "beef strips in tomato sauce ration" desc = "Savor the deliciousness of tender beef strips in a flavorful tomato sauce with this ration. Enjoy a chocolate pudding, white wheat snack bread, blackberry preserves, and peppermint candy rings as delightful accompaniments." - + emblem_icon_state = "emblem_beef_strips" /obj/item/storage/ration/beef_strips/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/beef_strips = 1, @@ -120,7 +132,7 @@ /obj/item/storage/ration/chili_macaroni name = "chili and macaroni ration" desc = "Indulge in the comforting combination of chili and macaroni in this flavorful ration. Satisfy your taste buds with a mix of sweet and savory treats." - + emblem_icon_state = "emblem_chili_macaroni" /obj/item/storage/ration/chili_macaroni/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/chili_macaroni = 1, @@ -137,7 +149,7 @@ /obj/item/storage/ration/chicken_wings_hot_sauce name = "chicken wings in hot sauce ration" desc = "Experience the bold and spicy flavors of chicken wings drenched in hot sauce. This ration also includes a mix of delightful snacks for a well-rounded meal." - + emblem_icon_state = "emblem_chicken_wings_hot_sauce" /obj/item/storage/ration/chicken_wings_hot_sauce/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/chicken_wings_hot_sauce = 1, @@ -153,7 +165,7 @@ /obj/item/storage/ration/fish_stew name = "fish stew ration" desc = "Dive into the depths of flavor with this fish stew ration. Enjoy a hearty blend of seafood and vegetables, complemented by a selection of tasty accompaniments." - + emblem_icon_state = "emblem_fish_stew" /obj/item/storage/ration/fish_stew/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/fish_stew = 1, @@ -170,7 +182,7 @@ /obj/item/storage/ration/lemon_pepper_chicken name = "lemon pepper chicken ration" desc = "A tasty Lemon Pepper Chicken ration that combines the flavors of fruit and meat. Perfect for a satisfying meal." - + emblem_icon_state = "emblem_lemon_pepper_chicken" /obj/item/storage/ration/lemon_pepper_chicken/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/lemon_pepper_chicken = 1, @@ -186,7 +198,7 @@ /obj/item/storage/ration/sausage_peppers_onions name = "sausage, peppers and onions ration" desc = "Indulge in the delightful combination of juicy sausage, peppers, and onions in this hearty ration." - + emblem_icon_state = "emblem_sausage_peppers_onions" /obj/item/storage/ration/sausage_peppers_onions/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/sausage_peppers_onions = 1, @@ -202,7 +214,7 @@ /obj/item/storage/ration/pork_dumplings_chili_sauce name = "pork dumplings in chili sauce ration" desc = "Savor the rich flavors of pork dumplings in a spicy chili sauce, accompanied by a variety of complementary snacks." - + emblem_icon_state = "emblem_pork_dumplings_chili_sauce" /obj/item/storage/ration/pork_dumplings_chili_sauce/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/dumplings_chili_sauce = 1, @@ -218,7 +230,7 @@ /obj/item/storage/ration/battered_fish_sticks name = "battered fish sticks ration" desc = "Enjoy the crispy goodness of battered fish sticks, along with a selection of sides and a delectable dessert." - + emblem_icon_state = "emblem_battered_fish_sticks" /obj/item/storage/ration/battered_fish_sticks/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/battered_fish_sticks = 1, @@ -234,7 +246,7 @@ /obj/item/storage/ration/assorted_salted_offal name = "assorted salted offal ration" desc = "An adventurous choice, this ration offers an assortment of salted offal, providing a unique culinary experience." - + emblem_icon_state = "emblem_assorted_salted_offal" /obj/item/storage/ration/assorted_salted_offal/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/assorted_salted_offal = 1, @@ -250,7 +262,7 @@ /obj/item/storage/ration/maple_pork_sausage_patty name = "maple pork sausage patty ration" desc = "Start your day with a satisfying breakfast featuring a maple-infused pork sausage patty and a variety of treats." - + emblem_icon_state = "emblem_maple_pork_sausage_patty" /obj/item/storage/ration/maple_pork_sausage_patty/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/maple_pork_sausage_patty = 1, @@ -267,7 +279,7 @@ /obj/item/storage/ration/pepper_jack_beef_patty name = "jalapeno pepper jack beef patty ration" desc = "Experience a flavorful fusion of jalapeno, pepper jack cheese, and beef in this grilled beef patty ration." - + emblem_icon_state = "emblem_pepper_jack_beef_patty" /obj/item/storage/ration/pepper_jack_beef_patty/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/pepper_jack_beef_patty = 1, @@ -284,7 +296,7 @@ /obj/item/storage/ration/beef_goulash name = "beef goulash ration" desc = "Delight in the rich flavors of beef goulash, accompanied by a selection of sides and a sweet treat." - + emblem_icon_state = "emblem_beef_goulash" /obj/item/storage/ration/beef_goulash/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/beef_goulash = 1, @@ -301,7 +313,7 @@ /obj/item/storage/ration/pepperoni_pizza_slice name = "pepperoni pizza slice ration" desc = "Indulge in the classic taste of pepperoni pizza with this ration, complete with sides and a refreshing beverage." - + emblem_icon_state = "emblem_pepperoni_pizza_slice" /obj/item/storage/ration/pepperoni_pizza_slice/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/pepperoni_pizza_slice = 1, @@ -317,7 +329,7 @@ /obj/item/storage/ration/blackened_calamari name = "blackened calamari in red sauce ration" desc = "Enjoy the savory delight of blackened calamari served in a rich red sauce." - + emblem_icon_state = "emblem_blackened_calamari" /obj/item/storage/ration/blackened_calamari/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/blackened_calamari = 1, @@ -334,7 +346,7 @@ /obj/item/storage/ration/elbow_macaroni name = "elbow macaroni in tomato sauce ration" desc = "Savor the comforting taste of elbow macaroni in a delicious tomato sauce." - + emblem_icon_state = "emblem_elbow_macaroni" /obj/item/storage/ration/elbow_macaroni/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/elbow_macaroni = 1, @@ -351,7 +363,7 @@ /obj/item/storage/ration/cheese_pizza_slice name = "cheese pizza slice ration" desc = "Experience the timeless flavor of a classic cheese pizza slice." - + emblem_icon_state = "emblem_cheese_pizza_slice" /obj/item/storage/ration/cheese_pizza_slice/PopulateContents() var/static/items_inside = list( /obj/item/reagent_containers/food/snacks/ration/entree/cheese_pizza_slice = 1, @@ -368,7 +380,7 @@ /obj/item/storage/ration/crayons name = "military grade crayon ration" desc = "Proven to increase kill count by atleast 1." - + emblem_icon_state = "emblem_crayons" /obj/item/storage/ration/crayons/PopulateContents() var/static/items_inside = list( /obj/item/toy/crayon/red = 1, diff --git a/code/game/objects/items/storage/secure.dm b/code/game/objects/items/storage/secure.dm index 238e39ce9318..f46d6eb4c2c9 100644 --- a/code/game/objects/items/storage/secure.dm +++ b/code/game/objects/items/storage/secure.dm @@ -173,7 +173,7 @@ . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) STR.set_holdable(null, list(/obj/item/storage/secure/briefcase)) - STR.max_w_class = 8 //?? + STR.max_w_class = 8 /obj/item/storage/secure/safe/PopulateContents() new /obj/item/paper(src) @@ -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" @@ -211,3 +211,20 @@ /obj/item/storage/secure/safe/suns/PopulateContents() . = ..() new /obj/item/storage/belt/sabre/suns(src) + +/obj/item/storage/secure/safe/cybersun + name = "Captain's secure safe" + desc = "An electronic safe manufactured by Cybersun Virtual Solutions." + +/obj/item/storage/secure/safe/cybersun/PopulateContents() + new /obj/item/gun/ballistic/automatic/pistol/himehabu/no_mag(src) + new /obj/item/ammo_box/magazine/m22lr_himehabu(src) + new /obj/item/ammo_box/magazine/m22lr_himehabu(src) + +/obj/item/storage/secure/safe/cybersun/solutions/PopulateContents() + . = ..() + new /obj/item/folder/documents/syndicate/cybersun(src) + +/obj/item/storage/secure/safe/cybersun/biodynamics/PopulateContents() + . = ..() + new /obj/item/folder/documents/syndicate/cybersun/biodynamics(src) diff --git a/code/game/objects/items/storage/storage.dm b/code/game/objects/items/storage/storage.dm index c2619eef4c14..f0e5665b446b 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 987aaa9933d5..e0768391dae5 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/yellow(src) /obj/item/storage/toolbox/syndicate/empty @@ -298,8 +298,7 @@ /obj/item/clothing/under/syndicate/bloodred, /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 )) @@ -310,7 +309,6 @@ new /obj/item/clothing/under/syndicate/bloodred(src) new /obj/item/clothing/gloves/color/latex/nitrile/infiltrator(src) new /obj/item/clothing/mask/infiltrator(src) - new /obj/item/clothing/shoes/combat/sneakboots(src) /obj/item/storage/toolbox/bounty name = "defused explosives case" diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index f34aae9e6f82..9516c7128090 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -22,7 +22,7 @@ new /obj/item/multitool/ai_detect(src) // 1 tc new /obj/item/encryptionkey/syndicate(src) // 2 tc new /obj/item/reagent_containers/syringe/mulligan(src) // 4 tc - new /obj/item/kitchen/knife/switchblade(src) //I'll count this as 2 tc + new /obj/item/melee/knife/switchblade(src) //I'll count this as 2 tc new /obj/item/storage/fancy/cigarettes/cigpack_syndicate (src) // 2 tc this shit heals new /obj/item/flashlight/emp(src) // 2 tc new /obj/item/chameleon(src) // 7 tc @@ -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,28 +108,28 @@ 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 /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))) + switch (pickweight(list( "bond" = 2, "ninja" = 1, "darklord" = 1, "white_whale_holy_grail" = 2, "mad_scientist" = 2, "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) new /obj/item/reagent_containers/glass/rag(src) if("ninja") - new /obj/item/katana(src) // Unique , hard to tell how much tc this is worth. 8 tc? + new /obj/item/melee/sword/katana(src) new /obj/item/implanter/adrenalin(src) // 8 tc for(var/i in 1 to 6) new /obj/item/throwing_star(src) // ~5 tc for all 6 @@ -140,14 +140,12 @@ if("darklord") new /obj/item/dualsaber(src) new /obj/item/dnainjector/telemut/darkbundle(src) - new /obj/item/clothing/suit/hooded/chaplain_hoodie(src) new /obj/item/card/id/syndicate(src) new /obj/item/clothing/shoes/chameleon/noslip(src) //because slipping while being a dark lord sucks new /obj/item/book/granter/spell/summonitem(src) if("white_whale_holy_grail") //Unique items that don't appear anywhere else new /obj/item/pneumatic_cannon/speargun(src) - new /obj/item/storage/backpack/magspear_quiver(src) new /obj/item/clothing/suit/space/hardsuit/carp(src) new /obj/item/clothing/mask/gas/carp(src) new /obj/item/grenade/spawnergrenade/spesscarp(src) @@ -167,16 +165,6 @@ new /obj/item/pen/edagger(src) new /obj/item/gun/energy/decloner(src) - if("bee") - new /obj/item/paper/fluff/bee_objectives(src) // 0 tc (motivation) - new /obj/item/clothing/suit/hooded/bee_costume(src) // 0 tc - new /obj/item/clothing/mask/rat/bee(src) // 0 tc - new /obj/item/storage/belt/fannypack/yellow(src) // 0 tc - new /obj/item/grenade/spawnergrenade/buzzkill(src) - new /obj/item/grenade/spawnergrenade/buzzkill(src) - new /obj/item/reagent_containers/glass/bottle/beesease(src) // 10 tc? - new /obj/item/melee/beesword(src) //priceless - if("mr_freeze") new /obj/item/clothing/glasses/cold(src) new /obj/item/clothing/gloves/color/black(src) @@ -195,7 +183,7 @@ if("made_man") new /obj/effect/spawner/lootdrop/mafia_outfit(src) // 0 TC, just an outfit for the new 'don of this family new /obj/item/gun/ballistic/automatic/smg/firestorm/pan(src) // 20 TC, a gun with 50 .45 bullets on a three round burst is kinda outstanding - new /obj/item/kitchen/knife/switchblade(src) // 3 TC? It's nice, but it's really a stealth/oh fuck I'm out of ammo weapon + new /obj/item/melee/knife/switchblade(src) // 3 TC? It's nice, but it's really a stealth/oh fuck I'm out of ammo weapon new /obj/item/reagent_containers/food/drinks/bottle/vodka (src) // 5 TC, free molotov assemblies new /obj/item/reagent_containers/food/drinks/bottle/vodka (src) new /obj/item/reagent_containers/food/drinks/bottle/vodka (src) @@ -209,14 +197,6 @@ new /obj/item/reagent_containers/food/drinks/flask (src) // 1 TC, I can't believe I forgot about the booze flask AAAAAAA new /obj/item/storage/secure/briefcase/syndie (src) // 1TC, for bribing the bartender to let you set up shop... amongst other actions. - -/obj/item/paper/fluff/bee_objectives - name = "Objectives of a Bee Liberation Front Operative" - default_raw_text = "Objective #1. Liberate all bees on the NT transport vessel 2416/B. Success!
    Objective #2. Escape alive. Failed." - - - - /obj/item/storage/box/syndicate/contract_kit name = "Contract Kit" desc = "Supplied to Syndicate contractors." @@ -306,7 +286,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 @@ -581,12 +561,3 @@ /obj/item/storage/box/syndie_kit/signaler/PopulateContents() for(var/i in 1 to 6) new /obj/item/assembly/signaler(src) - -/obj/item/storage/box/syndie_kit/cultconstructkit - name = "cult construct kit" - desc = "A sleek, sturdy box with an ominous, dark energy inside. Yikes." - -/obj/item/storage/box/syndie_kit/cultconstructkit/PopulateContents() - new /obj/item/storage/belt/soulstone/full/purified(src) - new /obj/item/sbeacondrop/constructshell(src) - new /obj/item/sbeacondrop/constructshell(src) diff --git a/code/game/objects/items/storage/wallets.dm b/code/game/objects/items/storage/wallets.dm index 002b72633294..2c8fda3ec5d7 100644 --- a/code/game/objects/items/storage/wallets.dm +++ b/code/game/objects/items/storage/wallets.dm @@ -19,26 +19,21 @@ /obj/item/spacecash/bundle, /obj/item/holochip, /obj/item/card, - /obj/item/clothing/mask/cigarette, /obj/item/flashlight/pen, /obj/item/seeds, - /obj/item/stack/medical, /obj/item/toy/crayon, /obj/item/coin, /obj/item/dice, /obj/item/disk, - /obj/item/implanter, /obj/item/lighter, + /obj/item/key/ship, + /obj/item/gun/ballistic/derringer, /obj/item/lipstick, /obj/item/match, /obj/item/paper, /obj/item/pen, /obj/item/photo, - /obj/item/reagent_containers/dropper, - /obj/item/reagent_containers/syringe, - /obj/item/screwdriver, - /obj/item/stamp), - list(/obj/item/screwdriver/power)) + /obj/item/stamp)) /obj/item/storage/wallet/Exited(atom/movable/AM) . = ..() diff --git a/code/game/objects/items/tanks/jetpack.dm b/code/game/objects/items/tanks/jetpack.dm index b8f4451a9660..deca5b57397e 100644 --- a/code/game/objects/items/tanks/jetpack.dm +++ b/code/game/objects/items/tanks/jetpack.dm @@ -173,7 +173,7 @@ /obj/item/tank/jetpack/suit name = "hardsuit jetpack upgrade" desc = "A modular, compact set of thrusters designed to integrate with a hardsuit. It is fueled by a tank inserted into the suit's storage compartment." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "jetpack_upgrade" item_state = "jetpack-black" w_class = WEIGHT_CLASS_NORMAL diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm index aff73626906a..c45911f98f4a 100644 --- a/code/game/objects/items/tanks/tanks.dm +++ b/code/game/objects/items/tanks/tanks.dm @@ -110,17 +110,6 @@ . += "It feels [descriptive]." -/obj/item/tank/blob_act(obj/structure/blob/B) - if(B && B.loc == loc) - var/turf/location = get_turf(src) - if(!location) - qdel(src) - - if(air_contents) - location.assume_air(air_contents) - - qdel(src) - /obj/item/tank/deconstruct(disassembled = TRUE) if(!disassembled) var/turf/T = get_turf(src) diff --git a/code/game/objects/items/tanks/watertank.dm b/code/game/objects/items/tanks/watertank.dm index 4095d159ea82..23fe0852c353 100644 --- a/code/game/objects/items/tanks/watertank.dm +++ b/code/game/objects/items/tanks/watertank.dm @@ -175,6 +175,39 @@ amount_per_transfer_from_this = (amount_per_transfer_from_this == 10 ? 5 : 10) to_chat(user, "You [amount_per_transfer_from_this == 10 ? "remove" : "fix"] the nozzle. You'll now use [amount_per_transfer_from_this] units per spray.") +//radiation cleanup pack + +/obj/item/watertank/anti_rad + name = "radiation foam pack" + desc = "A pressurized backpack tank with sprayer nozzle, intended to clean up radioactive hazards." + item_state = "waterbackpackatmos" + icon_state = "waterbackpackatmos" + volume = 200 + slowdown = 0.3 + +/obj/item/watertank/anti_rad/Initialize() + . = ..() + reagents.add_reagent(/datum/reagent/anti_radiation_foam, 200) + + +/obj/item/reagent_containers/spray/mister/anti_rad + name = "spray nozzle" + desc = "A heavy duty nozzle attached to a radiation foam tank." + icon_state = "atmos_nozzle" + item_state = "nozzleatmos" + amount_per_transfer_from_this = 5 + possible_transfer_amounts = list() + current_range = 6 + spray_range = 6 + + +/obj/item/watertank/anti_rad/make_noz() + return new /obj/item/reagent_containers/spray/mister/anti_rad(src) + +/obj/item/reagent_containers/spray/mister/anti_rad/attack_self(mob/user) + amount_per_transfer_from_this = (amount_per_transfer_from_this == 10 ? 5 : 10) + to_chat(user, "You [amount_per_transfer_from_this == 10 ? "tigten" : "loosen"] the nozzle. You'll now use [amount_per_transfer_from_this] units per spray.") + //ATMOS FIRE FIGHTING BACKPACK #define EXTINGUISHER 0 @@ -377,7 +410,7 @@ //Todo : cache these. /obj/item/reagent_containers/chemtank/worn_overlays(isinhands = FALSE) //apply chemcolor and level - . = list() + . = ..() //inhands + reagent_filling if(!isinhands && reagents.total_volume) var/mutable_appearance/filling = mutable_appearance('icons/obj/reagentfillings.dmi', "backpackmob-10") diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm index 3e4ab0d15de1..7c35ddd67d62 100644 --- a/code/game/objects/items/tools/screwdriver.dm +++ b/code/game/objects/items/tools/screwdriver.dm @@ -53,7 +53,7 @@ . += base_overlay /obj/item/screwdriver/worn_overlays(isinhands = FALSE, icon_file) - . = list() + . = ..() if(isinhands && random_color) var/mutable_appearance/M = mutable_appearance(icon_file, "screwdriver_head") M.appearance_flags = RESET_COLOR diff --git a/code/game/objects/items/tools/weldingtool.dm b/code/game/objects/items/tools/weldingtool.dm index c792af38486a..f953a3604367 100644 --- a/code/game/objects/items/tools/weldingtool.dm +++ b/code/game/objects/items/tools/weldingtool.dm @@ -39,6 +39,7 @@ var/acti_sound = 'sound/items/welderactivate.ogg' var/deac_sound = 'sound/items/welderdeactivate.ogg' var/start_full = TRUE + wall_decon_damage = 50 /obj/item/weldingtool/empty start_full = FALSE @@ -96,8 +97,6 @@ /obj/item/weldingtool/attackby(obj/item/I, mob/user, params) if(I.tool_behaviour == TOOL_SCREWDRIVER) flamethrower_screwdriver(I, user) - else if(istype(I, /obj/item/stack/rods)) - flamethrower_rods(I, user) else . = ..() update_appearance() @@ -281,24 +280,10 @@ to_chat(user, "You resecure [src] and close the fuel tank.") reagents.flags &= ~(OPENCONTAINER) else - to_chat(user, "[src] can now be attached, modified, and refuelled.") + to_chat(user, "[src] can now be refuelled.") reagents.flags |= OPENCONTAINER add_fingerprint(user) -/obj/item/weldingtool/proc/flamethrower_rods(obj/item/I, mob/user) - if(!status) - var/obj/item/stack/rods/R = I - if (R.use(1)) - var/obj/item/flamethrower/F = new /obj/item/flamethrower(user.loc) - if(!remove_item_from_storage(F)) - user.transferItemToLoc(src, F, TRUE) - F.weldtool = src - add_fingerprint(user) - to_chat(user, "You add a rod to a welder, starting to build a flamethrower.") - user.put_in_hands(F) - else - to_chat(user, "You need one rod to start building a flamethrower!") - /obj/item/weldingtool/ignition_effect(atom/A, mob/user) if(use_tool(A, user, 0, amount=1)) return "[user] casually lights [A] with [src], what a badass." @@ -348,6 +333,7 @@ light_system = NO_LIGHT_SUPPORT light_range = 0 change_icons = 0 + wall_decon_damage = 500 /obj/item/weldingtool/abductor/process() if(get_fuel() <= max_fuel) @@ -378,6 +364,7 @@ can_off_process = 1 light_range = 1 toolspeed = 0.5 + wall_decon_damage = 100 var/last_gen = 0 var/nextrefueltick = 0 diff --git a/code/game/objects/items/toy_mechs.dm b/code/game/objects/items/toy_mechs.dm index 2a821c7a8317..738cfa83c0f5 100644 --- a/code/game/objects/items/toy_mechs.dm +++ b/code/game/objects/items/toy_mechs.dm @@ -535,10 +535,10 @@ special_attack_type = SPECIAL_ATTACK_DAMAGE special_attack_cry = "ROCKET BARRAGE" -/obj/item/toy/prize/mauler - name = "toy Mauler" +/obj/item/toy/prize/touro + name = "toy Touro" desc = "9/13" - icon_state = "maulertoy" + icon_state = "tourotoy" max_combat_health = 7 //500 integrity special_attack_type = SPECIAL_ATTACK_DAMAGE special_attack_cry = "BULLET STORM" diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 5ce082d79dc9..6d6d258b5b0c 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -265,7 +265,7 @@ /obj/item/toy/sword name = "toy sword" desc = "A cheap, plastic replica of an energy sword. Realistic sounds! Ages 8 and up." - icon = 'icons/obj/transforming_energy.dmi' + icon = 'icons/obj/weapon/energy.dmi' icon_state = "sword" item_state = "sword" lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' @@ -348,7 +348,7 @@ lefthand_file = 'icons/mob/inhands/equipment/toolbox_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/toolbox_righthand.dmi' var/active = FALSE - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' hitsound = 'sound/weapons/smash.ogg' attack_verb = list("robusted") @@ -407,7 +407,7 @@ /obj/item/toy/katana name = "replica katana" desc = "Woefully underpowered in D20." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/weapon/sword.dmi' icon_state = "katana" item_state = "katana" lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' @@ -542,31 +542,6 @@ /obj/item/toy/talking/AI/generate_messages() return list(generate_ion_law()) -/obj/item/toy/talking/codex_gigas - name = "Toy Codex Gigas" - desc = "A tool to help you write fictional devils!" - icon = 'icons/obj/library.dmi' - icon_state = "demonomicon" - lefthand_file = 'icons/mob/inhands/misc/books_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/books_righthand.dmi' - w_class = WEIGHT_CLASS_SMALL - recharge_time = 60 - -/obj/item/toy/talking/codex_gigas/activation_message(mob/user) - user.visible_message( - "[user] presses the button on \the [src].", - "You press the button on \the [src].", - "You hear a soft click.") - -/obj/item/toy/talking/codex_gigas/generate_messages() - var/datum/fakeDevil/devil = new - var/list/messages = list() - messages += "Some fun facts about: [devil.truename]" - messages += "[GLOB.lawlorify[LORE][devil.obligation]]" - messages += "[GLOB.lawlorify[LORE][devil.ban]]" - messages += "[GLOB.lawlorify[LORE][devil.banish]]" - return messages - /obj/item/toy/talking/owl name = "owl action figure" desc = "An action figure modeled after 'The Owl', defender of justice." @@ -1285,7 +1260,6 @@ /obj/item/toy/figure/curator name = "Curator action figure" icon_state = "curator" - toysay = "One day while..." /obj/item/toy/figure/md name = "Medical Doctor action figure" diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm deleted file mode 100644 index a76334a0b7ea..000000000000 --- a/code/game/objects/items/weaponry.dm +++ /dev/null @@ -1,759 +0,0 @@ -/obj/item/banhammer - desc = "A banhammer." - name = "banhammer" - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "toyhammer" - slot_flags = ITEM_SLOT_BELT - throwforce = 0 - force = 1 - w_class = WEIGHT_CLASS_TINY - throw_speed = 3 - throw_range = 7 - attack_verb = list("banned") - max_integrity = 200 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 70) - resistance_flags = FIRE_PROOF - -/* -oranges says: This is a meme relating to the english translation of the ss13 russian wiki page on lurkmore. -mrdoombringer sez: and remember kids, if you try and PR a fix for this item's grammar, you are admitting that you are, indeed, a newfriend. -for further reading, please see: https://github.com/tgstation/tgstation/pull/30173 and https://translate.google.com/translate?sl=auto&tl=en&js=y&prev=_t&hl=en&ie=UTF-8&u=%2F%2Flurkmore.to%2FSS13&edit-text=&act=url -*/ -/obj/item/banhammer/attack(mob/M, mob/user) - if(user.zone_selected == BODY_ZONE_HEAD) - M.visible_message("[user] is stroking the head of [M] with a banhammer.", "[user] is stroking your head with a banhammer.", "You hear a banhammer stroking a head.") - else - M.visible_message("[M] has been banned FOR NO REISIN by [user]!", "You have been banned FOR NO REISIN by [user]!", "You hear a banhammer banning someone.") - playsound(loc, 'sound/effects/adminhelp.ogg', 15) //keep it at 15% volume so people don't jump out of their skin too much - if(user.a_intent != INTENT_HELP) - return ..(M, user) - -/obj/item/sord - name = "\improper SORD" - desc = "This thing is so unspeakably shitty you are having a hard time even holding it." - icon_state = "sord" - item_state = "sord" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - slot_flags = ITEM_SLOT_BELT - force = 2 - throwforce = 1 - w_class = WEIGHT_CLASS_NORMAL - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - -/obj/item/claymore - name = "claymore" - desc = "What are you standing around staring at this for? Get to killing!" - icon_state = "claymore" - item_state = "claymore" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - pickup_sound = 'sound/items/handling/knife2_pickup.ogg' - drop_sound = 'sound/items/handling/metal_drop.ogg' - hitsound = 'sound/weapons/bladeslice.ogg' - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK - force = 40 - throwforce = 10 - w_class = WEIGHT_CLASS_NORMAL - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - block_chance = 40 - sharpness = IS_SHARP - max_integrity = 200 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) - resistance_flags = FIRE_PROOF - -/obj/item/claymore/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 40, 105) - -/obj/item/claymore/highlander //ALL COMMENTS MADE REGARDING THIS SWORD MUST BE MADE IN ALL CAPS - desc = "THERE CAN BE ONLY ONE, AND IT WILL BE YOU!!!\nActivate it in your hand to point to the nearest victim." - flags_1 = CONDUCT_1 - item_flags = DROPDEL //WOW BRO YOU LOST AN ARM, GUESS WHAT YOU DONT GET YOUR SWORD ANYMORE //I CANT BELIEVE SPOOKYDONUT WOULD BREAK THE REQUIREMENTS - slot_flags = null - block_chance = 0 //RNG WON'T HELP YOU NOW, PANSY - light_range = 3 - attack_verb = list("brutalized", "eviscerated", "disemboweled", "hacked", "carved", "cleaved") //ONLY THE MOST VISCERAL ATTACK VERBS - var/notches = 0 //HOW MANY PEOPLE HAVE BEEN SLAIN WITH THIS BLADE - var/obj/item/disk/nuclear/nuke_disk //OUR STORED NUKE DISK - -/obj/item/claymore/highlander/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, HIGHLANDER) - START_PROCESSING(SSobj, src) - -/obj/item/claymore/highlander/Destroy() - if(nuke_disk) - nuke_disk.forceMove(get_turf(src)) - nuke_disk.visible_message("The nuke disk is vulnerable!") - nuke_disk = null - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/claymore/highlander/process() - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - loc.layer = LARGE_MOB_LAYER //NO HIDING BEHIND PLANTS FOR YOU, DICKWEED (HA GET IT, BECAUSE WEEDS ARE PLANTS) - H.bleedsuppress = TRUE //AND WE WON'T BLEED OUT LIKE COWARDS - else - if(!(flags_1 & ADMIN_SPAWNED_1)) - qdel(src) - - -/obj/item/claymore/highlander/pickup(mob/living/user) - . = ..() - to_chat(user, "The power of Scotland protects you! You are shielded from all stuns and knockdowns.") - user.add_stun_absorption("highlander", INFINITY, 1, " is protected by the power of Scotland!", "The power of Scotland absorbs the stun!", " is protected by the power of Scotland!") - user.ignore_slowdown(HIGHLANDER) - -/obj/item/claymore/highlander/dropped(mob/living/user) - . = ..() - user.unignore_slowdown(HIGHLANDER) - -/obj/item/claymore/highlander/examine(mob/user) - . = ..() - . += "It has [!notches ? "nothing" : "[notches] notches"] scratched into the blade." - if(nuke_disk) - . += "It's holding the nuke disk!" - -/obj/item/claymore/highlander/attack(mob/living/target, mob/living/user) - . = ..() - if(!QDELETED(target) && iscarbon(target) && target.stat == DEAD && target.mind && target.mind.special_role == "highlander") - user.fully_heal(admin_revive = FALSE) //STEAL THE LIFE OF OUR FALLEN FOES - add_notch(user) - target.visible_message("[target] crumbles to dust beneath [user]'s blows!", "As you fall, your body crumbles to dust!") - target.dust() - -/obj/item/claymore/highlander/attack_self(mob/living/user) - var/closest_victim - var/closest_distance = 255 - for(var/mob/living/carbon/human/H in GLOB.player_list - user) - if(H.mind.special_role == "highlander" && (!closest_victim || get_dist(user, closest_victim) < closest_distance)) - closest_victim = H - if(!closest_victim) - to_chat(user, "[src] thrums for a moment and falls dark. Perhaps there's nobody nearby.") - return - to_chat(user, "[src] thrums and points to the [dir2text(get_dir(user, closest_victim))].") - -/obj/item/claymore/highlander/IsReflect() - return 1 //YOU THINK YOUR PUNY LASERS CAN STOP ME? - -/obj/item/claymore/highlander/proc/add_notch(mob/living/user) //DYNAMIC CLAYMORE PROGRESSION SYSTEM - THIS IS THE FUTURE - notches++ - force++ - var/new_name = name - switch(notches) - if(1) - to_chat(user, "Your first kill - hopefully one of many. You scratch a notch into [src]'s blade.") - to_chat(user, "You feel your fallen foe's soul entering your blade, restoring your wounds!") - new_name = "notched claymore" - if(2) - to_chat(user, "Another falls before you. Another soul fuses with your own. Another notch in the blade.") - new_name = "double-notched claymore" - add_atom_colour(rgb(255, 235, 235), ADMIN_COLOUR_PRIORITY) - if(3) - to_chat(user, "You're beginning to relish the thrill of battle.") - new_name = "triple-notched claymore" - add_atom_colour(rgb(255, 215, 215), ADMIN_COLOUR_PRIORITY) - if(4) - to_chat(user, "You've lost count of how many you've killed.") - new_name = "many-notched claymore" - add_atom_colour(rgb(255, 195, 195), ADMIN_COLOUR_PRIORITY) - if(5) - to_chat(user, "Five voices now echo in your mind, cheering the slaughter.") - new_name = "battle-tested claymore" - add_atom_colour(rgb(255, 175, 175), ADMIN_COLOUR_PRIORITY) - if(6) - to_chat(user, "Is this what the vikings felt like? Visions of glory fill your head as you slay your sixth foe.") - new_name = "battle-scarred claymore" - add_atom_colour(rgb(255, 155, 155), ADMIN_COLOUR_PRIORITY) - if(7) - to_chat(user, "Kill. Butcher. Conquer.") - new_name = "vicious claymore" - add_atom_colour(rgb(255, 135, 135), ADMIN_COLOUR_PRIORITY) - if(8) - to_chat(user, "IT NEVER GETS OLD. THE SCREAMING. THE BLOOD AS IT SPRAYS ACROSS YOUR FACE.") - new_name = "bloodthirsty claymore" - add_atom_colour(rgb(255, 115, 115), ADMIN_COLOUR_PRIORITY) - if(9) - to_chat(user, "ANOTHER ONE FALLS TO YOUR BLOWS. ANOTHER WEAKLING UNFIT TO LIVE.") - new_name = "gore-stained claymore" - add_atom_colour(rgb(255, 95, 95), ADMIN_COLOUR_PRIORITY) - if(10) - user.visible_message("[user]'s eyes light up with a vengeful fire!", \ - "YOU FEEL THE POWER OF VALHALLA FLOWING THROUGH YOU! THERE CAN BE ONLY ONE!!!") - user.update_icons() - new_name = "GORE-DRENCHED CLAYMORE OF [pick("THE WHIMSICAL SLAUGHTER", "A THOUSAND SLAUGHTERED CATTLE", "GLORY AND VALHALLA", "ANNIHILATION", "OBLITERATION")]" - icon_state = "claymore_gold" - item_state = "cultblade" - remove_atom_colour(ADMIN_COLOUR_PRIORITY) - - name = new_name - playsound(user, 'sound/items/screwdriver2.ogg', 50, TRUE) - -/obj/item/katana - name = "katana" - desc = "Woefully underpowered in D20." - icon_state = "katana" - item_state = "katana" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - pickup_sound = 'sound/items/handling/knife2_pickup.ogg' - drop_sound = 'sound/items/handling/metal_drop.ogg' - flags_1 = CONDUCT_1 - slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK - force = 40 - throwforce = 10 - w_class = WEIGHT_CLASS_HUGE - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - block_chance = 10 - sharpness = IS_SHARP - max_integrity = 200 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) - resistance_flags = FIRE_PROOF - supports_variations = VOX_VARIATION - -/obj/item/katana/cursed - name = "ominous katana" - desc = "A japanese single-edged blade, once used to contain an ancient evil. The being within is grateful for being released, but beware: generosity has a price.
    " - icon_state = "ominous_katana" - item_state = "ominous_katana" - icon = 'icons/obj/lavaland/artefacts.dmi' - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - force = 35 - armour_penetration = 30 - max_integrity = 500 - resistance_flags = FIRE_PROOF | ACID_PROOF - var/essence = 0//Used for blade abilities, mainly heals(If I can safely implement this I will nerf the damage slightly, and boost the selfdam) - var/list/nemesis_factions = list("mining", "boss") - var/faction_bonus_force = 25 - - -/obj/item/katana/cursed/examine(mob/user) - . = ..() - . += "To cut into the flesh of your target with this weapon is to feed the gluttonous emptiness within. Burn the blood of your enemies to replenish your own spent essence." - -/obj/item/katana/cursed/attack(mob/living/target, mob/living/user) - . = ..() - if(isliving(target) && target.stat != DEAD) - essence += rand(15, 20) - -/obj/item/katana/cursed/attack(mob/living/target, mob/living/carbon/human/user) - var/nemesis_faction = FALSE - if(LAZYLEN(nemesis_factions)) - for(var/F in target.faction) - if(F in nemesis_factions) - nemesis_faction = TRUE - force += faction_bonus_force - nemesis_effects(user, target) - break - . = ..() - if(nemesis_faction) - force -= faction_bonus_force - -/obj/item/katana/cursed/proc/nemesis_effects(mob/living/user, mob/living/target) - return - -/obj/item/katana/cursed/attack(mob/target, mob/living/carbon/human/user) - if(user.mind && user.owns_soul()) - to_chat(user, "You feel a terrible chill as the emptiness within [src] devours on your life force!") - user.apply_damage(rand(2,3), BURN, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_CHEST, BODY_ZONE_HEAD, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG, BODY_ZONE_PRECISE_GROIN)) - user.apply_damage(rand(2,3), BURN, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_CHEST, BODY_ZONE_HEAD, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG, BODY_ZONE_PRECISE_GROIN)) - user.apply_damage(rand(2,3), BURN, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_CHEST, BODY_ZONE_HEAD, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG, BODY_ZONE_PRECISE_GROIN)) - user.apply_damage(rand(2,3), BURN, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_CHEST, BODY_ZONE_HEAD, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG, BODY_ZONE_PRECISE_GROIN)) - ..() - -/obj/item/wirerod - name = "wired rod" - desc = "A rod with some wire wrapped around the top. It'd be easy to attach something to the top bit." - icon_state = "wiredrod" - item_state = "rods" - flags_1 = CONDUCT_1 - force = 9 - throwforce = 10 - w_class = WEIGHT_CLASS_NORMAL - custom_materials = list(/datum/material/iron=1150, /datum/material/glass=75) - attack_verb = list("hit", "bludgeoned", "whacked", "bonked") - -/obj/item/wirerod/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/shard)) - var/obj/item/spear/S = new /obj/item/spear - - remove_item_from_storage(user) - if (!user.transferItemToLoc(I, S)) - return - S.CheckParts(list(I)) - qdel(src) - - user.put_in_hands(S) - to_chat(user, "You fasten the glass shard to the top of the rod with the cable.") - - else if(istype(I, /obj/item/assembly/igniter) && !(HAS_TRAIT(I, TRAIT_NODROP))) - var/obj/item/melee/baton/cattleprod/P = new /obj/item/melee/baton/cattleprod - - remove_item_from_storage(user) - - to_chat(user, "You fasten [I] to the top of the rod with the cable.") - - qdel(I) - qdel(src) - - user.put_in_hands(P) - else - return ..() - - -/obj/item/throwing_star - name = "throwing star" - desc = "An ancient weapon still used to this day, due to its ease of lodging itself into its victim's body parts." - icon_state = "throwingstar" - item_state = "eshield0" - lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' - force = 2 - throwforce = 20 //20 + 2 (WEIGHT_CLASS_SMALL) * 4 (EMBEDDED_IMPACT_PAIN_MULTIPLIER) = 28 damage on hit due to guaranteed embedding - throw_speed = 4 - embedding = list("pain_mult" = 4, "embed_chance" = 100, "fall_chance" = 0, "embed_chance_turf_mod" = 15) - armour_penetration = 40 - - w_class = WEIGHT_CLASS_SMALL - sharpness = IS_SHARP - custom_materials = list(/datum/material/iron=500, /datum/material/glass=500) - resistance_flags = FIRE_PROOF - -/obj/item/throwing_star/stamina - name = "shock throwing star" - desc = "An aerodynamic disc designed to cause excruciating pain when stuck inside fleeing targets, hopefully without causing fatal harm." - throwforce = 5 - embedding = list("pain_chance" = 5, "embed_chance" = 100, "fall_chance" = 0, "jostle_chance" = 10, "pain_stam_pct" = 0.8, "jostle_pain_mult" = 3) - -/obj/item/throwing_star/toy - name = "toy throwing star" - desc = "An aerodynamic disc strapped with adhesive for sticking to people, good for playing pranks and getting yourself killed by security." - sharpness = IS_BLUNT - force = 0 - throwforce = 0 - embedding = list("pain_mult" = 0, "jostle_pain_mult" = 0, "embed_chance" = 100, "fall_chance" = 0) - -/obj/item/throwing_star/magspear - name = "magnetic spear" - desc = "A reusable spear that is typically loaded into kinetic spearguns." - icon = 'icons/obj/ammo_bullets.dmi' - icon_state = "magspear" - throwforce = 25 //kills regular carps in one hit - force = 10 - throw_range = 0 //throwing these invalidates the speargun - attack_verb = list("stabbed", "ripped", "gored", "impaled") - embedding = list("pain_mult" = 8, "embed_chance" = 100, "fall_chance" = 0, "impact_pain_mult" = 15) //55 damage+embed on hit - -/obj/item/phone - name = "red phone" - desc = "Should anything ever go wrong..." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "red_phone" - force = 3 - throwforce = 2 - throw_speed = 3 - throw_range = 4 - w_class = WEIGHT_CLASS_SMALL - attack_verb = list("called", "rang") - hitsound = 'sound/weapons/ring.ogg' - - -/obj/item/cane - name = "cane" - desc = "A cane used by a true gentleman. Or a clown." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "cane" - item_state = "stick" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - force = 5 - throwforce = 5 - w_class = WEIGHT_CLASS_SMALL - custom_materials = list(/datum/material/iron=50) - attack_verb = list("bludgeoned", "whacked", "disciplined", "thrashed") - -/obj/item/staff - name = "wizard staff" - desc = "Apparently a staff used by the wizard." - icon = 'icons/obj/wizard.dmi' - icon_state = "staff" - lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' - force = 3 - throwforce = 5 - throw_speed = 2 - throw_range = 5 - w_class = WEIGHT_CLASS_SMALL - armour_penetration = 100 - attack_verb = list("bludgeoned", "whacked", "disciplined") - resistance_flags = FLAMMABLE - -/obj/item/staff/broom - name = "broom" - desc = "Used for sweeping, and flying into the night while cackling. Black cat not included." - icon = 'icons/obj/wizard.dmi' - icon_state = "broom" - resistance_flags = FLAMMABLE - -/obj/item/staff/stick - name = "stick" - desc = "A great tool to drag someone else's drinks across the bar." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "cane" - item_state = "stick" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - force = 3 - throwforce = 5 - throw_speed = 2 - throw_range = 5 - w_class = WEIGHT_CLASS_SMALL - -/obj/item/ectoplasm - name = "ectoplasm" - desc = "Spooky." - gender = PLURAL - icon = 'icons/obj/wizard.dmi' - icon_state = "ectoplasm" - - -/obj/item/ectoplasm/angelic - icon = 'icons/obj/wizard.dmi' - icon_state = "angelplasm" - -/obj/item/mounted_chainsaw - name = "mounted chainsaw" - desc = "A chainsaw that has replaced your arm." - icon_state = "chainsaw_on" - item_state = "mounted_chainsaw" - lefthand_file = 'icons/mob/inhands/weapons/chainsaw_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/chainsaw_righthand.dmi' - item_flags = ABSTRACT | DROPDEL - w_class = WEIGHT_CLASS_HUGE - force = 24 - throwforce = 0 - throw_range = 0 - throw_speed = 0 - sharpness = IS_SHARP - attack_verb = list("sawed", "torn", "cut", "chopped", "diced") - hitsound = 'sound/weapons/chainsawhit.ogg' - tool_behaviour = TOOL_SAW - toolspeed = 1 - -/obj/item/mounted_chainsaw/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT) - -/obj/item/mounted_chainsaw/Destroy() - var/obj/item/bodypart/part - new /obj/item/chainsaw(get_turf(src)) - if(iscarbon(loc)) - var/mob/living/carbon/holder = loc - var/index = holder.get_held_index_of_item(src) - if(index) - part = holder.hand_bodyparts[index] - . = ..() - if(part) - part.drop_limb() - -/obj/item/statuebust - name = "bust" - desc = "A priceless ancient marble bust, the kind that belongs in a museum." //or you can hit people with it - icon = 'icons/obj/statue.dmi' - icon_state = "bust" - force = 15 - throwforce = 10 - throw_speed = 5 - throw_range = 2 - attack_verb = list("busted") - var/impressiveness = 45 - -/obj/item/statuebust/Initialize() - . = ..() - AddComponent(/datum/component/art, impressiveness) - AddElement(/datum/element/beauty, 1000) - -/obj/item/statuebust/hippocratic - name = "hippocrates bust" - desc = "A bust of the famous Greek physician Hippocrates of Kos, often referred to as the father of western medicine." - icon_state = "hippocratic" - impressiveness = 50 - -/obj/item/melee/skateboard - name = "improvised skateboard" - desc = "A skateboard. It can be placed on its wheels and ridden, or used as a strong weapon." - icon_state = "skateboard" - item_state = "skateboard" - force = 12 - throwforce = 4 - w_class = WEIGHT_CLASS_NORMAL - attack_verb = list("smacked", "whacked", "slammed", "smashed") - ///The vehicle counterpart for the board - var/board_item_type = /obj/vehicle/ridden/scooter/skateboard - -/obj/item/melee/skateboard/attack_self(mob/user) - var/obj/vehicle/ridden/scooter/skateboard/S = new board_item_type(get_turf(user))//this probably has fucky interactions with telekinesis but for the record it wasnt my fault - S.buckle_mob(user) - qdel(src) - -/obj/item/melee/skateboard/pro - name = "skateboard" - desc = "A RaDSTORMz brand professional skateboard. It looks sturdy and well made." - icon_state = "skateboard2" - item_state = "skateboard2" - board_item_type = /obj/vehicle/ridden/scooter/skateboard/pro - custom_premium_price = 500 - -/obj/item/melee/skateboard/hoverboard - name = "hoverboard" - desc = "A blast from the past, so retro!" - icon_state = "hoverboard_red" - item_state = "hoverboard_red" - board_item_type = /obj/vehicle/ridden/scooter/skateboard/hoverboard - custom_premium_price = 2015 - -/obj/item/melee/skateboard/hoverboard/admin - name = "\improper Board Of Directors" - desc = "The engineering complexity of a spaceship concentrated inside of a board. Just as expensive, too." - icon_state = "hoverboard_nt" - item_state = "hoverboard_nt" - board_item_type = /obj/vehicle/ridden/scooter/skateboard/hoverboard/admin - -/obj/item/melee/baseball_bat - name = "baseball bat" - desc = "There ain't a skull in the league that can withstand a swatter." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "baseball_bat" - item_state = "baseball_bat" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - force = 12 - throwforce = 12 - attack_verb = list("beat", "smacked") - custom_materials = list(/datum/material/wood = MINERAL_MATERIAL_AMOUNT * 3.5) - w_class = WEIGHT_CLASS_HUGE - var/homerun_ready = 0 - var/homerun_able = 0 - -/obj/item/melee/baseball_bat/homerun - name = "home run bat" - desc = "This thing looks dangerous... Dangerously good at baseball, that is." - homerun_able = 1 - -/obj/item/melee/baseball_bat/attack_self(mob/user) - if(!homerun_able) - ..() - return - if(homerun_ready) - to_chat(user, "You're already ready to do a home run!") - ..() - return - to_chat(user, "You begin gathering strength...") - playsound(get_turf(src), 'sound/magic/lightning_chargeup.ogg', 65, TRUE) - if(do_after(user, 90, target = src)) - to_chat(user, "You gather power! Time for a home run!") - homerun_ready = 1 - ..() - -/obj/item/melee/baseball_bat/attack(mob/living/target, mob/living/user) - . = ..() - var/atom/throw_target = get_edge_target_turf(target, user.dir) - if(homerun_ready) - user.visible_message("It's a home run!") - target.throw_at(throw_target, rand(8,10), 14, user) - SSexplosions.medturf += throw_target - playsound(get_turf(src), 'sound/weapons/homerun.ogg', 100, TRUE) - homerun_ready = 0 - return - else if(!target.anchored) - target.throw_at(throw_target, rand(1,2), 2, user, gentle = TRUE) - -/obj/item/melee/baseball_bat/ablative - name = "metal baseball bat" - desc = "This bat is made of highly reflective, highly armored material." - icon_state = "baseball_bat_metal" - item_state = "baseball_bat_metal" - force = 12 - throwforce = 15 - -/obj/item/melee/baseball_bat/bone - name = "bone club" - desc = "A long and hard shaft of rock solid bone." // I am the master of comedy - icon_state = "baseball_bat_bone" - item_state = "baseball_bat_bone" - -/obj/item/melee/baseball_bat/ablative/IsReflect()//some day this will reflect thrown items instead of lasers - var/picksound = rand(1,2) - var/turf = get_turf(src) - if(picksound == 1) - playsound(turf, 'sound/weapons/effects/batreflect1.ogg', 50, TRUE) - if(picksound == 2) - playsound(turf, 'sound/weapons/effects/batreflect2.ogg', 50, TRUE) - return 1 - -/obj/item/melee/flyswatter - name = "flyswatter" - desc = "Useful for killing insects of all sizes." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "flyswatter" - item_state = "flyswatter" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - force = 1 - throwforce = 1 - attack_verb = list("swatted", "smacked") - hitsound = 'sound/effects/snap.ogg' - w_class = WEIGHT_CLASS_SMALL - //Things in this list will be instantly splatted. Flyman weakness is handled in the flyman species weakness proc. - var/list/strong_against - -/obj/item/melee/flyswatter/Initialize() - . = ..() - strong_against = typecacheof(list( - /mob/living/simple_animal/hostile/poison/bees/, - /mob/living/simple_animal/butterfly, - /mob/living/simple_animal/hostile/cockroach, - /obj/item/queen_bee - )) - - -/obj/item/melee/flyswatter/afterattack(atom/target, mob/user, proximity_flag) - . = ..() - if(proximity_flag) - if(is_type_in_typecache(target, strong_against)) - new /obj/effect/decal/cleanable/insectguts(target.drop_location()) - to_chat(user, "You easily splat the [target].") - if(istype(target, /mob/living/)) - var/mob/living/bug = target - bug.death(1) - else - qdel(target) - -/obj/item/proc/can_trigger_gun(mob/living/user) - if(!user.can_use_guns(src)) - return FALSE - return TRUE - -/obj/item/extendohand - name = "extendo-hand" - desc = "Futuristic tech has allowed these classic spring-boxing toys to essentially act as a fully functional hand-operated hand prosthetic." - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "extendohand" - item_state = "extendohand" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - force = 0 - throwforce = 5 - reach = 2 - var/min_reach = 2 - -/obj/item/extendohand/acme - name = "\improper ACME Extendo-Hand" - desc = "A novelty extendo-hand produced by the ACME corporation. Originally designed to knock out roadrunners." - -/obj/item/extendohand/attack(atom/M, mob/living/carbon/human/user) - var/dist = get_dist(M, user) - if(dist < min_reach) - to_chat(user, "[M] is too close to use [src] on.") - return - M.attack_hand(user) - -/obj/item/gohei - name = "gohei" - desc = "A wooden stick with white streamers at the end. Originally used by shrine maidens to purify things. Now used by the station's valued weeaboos." - force = 5 - throwforce = 5 - hitsound = "swing_hit" - attack_verb = list("whacked", "thwacked", "walloped", "socked") - icon = 'icons/obj/items_and_weapons.dmi' - icon_state = "gohei" - item_state = "gohei" - lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' - -//HF blade -/obj/item/vibro_weapon - icon_state = "hfrequency0" - base_icon_state = "hfrequency" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - name = "vibro sword" - desc = "A potent weapon capable of cutting through nearly anything. Wielding it in two hands will allow you to deflect gunfire." - armour_penetration = 100 - block_chance = 30 - force = 20 - throwforce = 20 - throw_speed = 4 - sharpness = IS_SHARP - attack_verb = list("cut", "sliced", "diced") - w_class = WEIGHT_CLASS_BULKY - slot_flags = ITEM_SLOT_BACK - hitsound = 'sound/weapons/bladeslice.ogg' - var/wielded = FALSE // track wielded status on item - -/obj/item/vibro_weapon/Initialize() - . = ..() - RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(on_wield)) - RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(on_unwield)) - -/obj/item/vibro_weapon/ComponentInitialize() - . = ..() - AddComponent(/datum/component/butchering, 20, 105) - AddComponent(/datum/component/two_handed, force_multiplier=2, icon_wielded="[base_icon_state]1") - -/// triggered on wield of two handed item -/obj/item/vibro_weapon/proc/on_wield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = TRUE - -/// triggered on unwield of two handed item -/obj/item/vibro_weapon/proc/on_unwield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = FALSE - -/obj/item/vibro_weapon/update_icon_state() - icon_state = "[base_icon_state]0" - return ..() - -/obj/item/vibro_weapon/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(wielded) - final_block_chance *= 2 - if(wielded || attack_type != PROJECTILE_ATTACK) - if(prob(final_block_chance)) - if(attack_type == PROJECTILE_ATTACK) - owner.visible_message("[owner] deflects [attack_text] with [src]!") - playsound(src, pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 75, TRUE) - return 1 - else - owner.visible_message("[owner] parries [attack_text] with [src]!") - return 1 - return 0 - -/obj/item/claymore/bone - name = "Bone Sword" - desc = "Jagged pieces of bone are tied to what looks like a goliaths femur." - icon_state = "bone_sword" - item_state = "bone_sword" - icon = 'icons/obj/items_and_weapons.dmi' - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - mob_overlay_icon = 'icons/mob/clothing/back.dmi' - force = 15 - throwforce = 10 - armour_penetration = 15 - - -/obj/item/vibro_weapon/weak - armour_penetration = 10 - block_chance = 10 - force = 15 - throwforce = 20 - diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index 78cfa10a2e0b..e0e115b81d01 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -90,13 +90,6 @@ take_damage(hulk_damage(), BRUTE, "melee", 0, get_dir(src, user)) return TRUE -/obj/blob_act(obj/structure/blob/B) - if(isturf(loc)) - var/turf/T = loc - if(T.intact && HAS_TRAIT(src, TRAIT_T_RAY_VISIBLE)) - return - take_damage(400, BRUTE, "melee", 0, get_dir(src, B)) - /obj/proc/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, armor_penetration = 0) //used by attack_alien, attack_animal, and attack_slime user.do_attack_animation(src) user.changeNext_move(CLICK_CD_MELEE) @@ -210,6 +203,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e take_damage(clamp(0.02 * exposed_temperature, 0, 20), BURN, "fire", 0) if(!(resistance_flags & ON_FIRE) && (resistance_flags & FLAMMABLE) && !(resistance_flags & FIRE_PROOF)) resistance_flags |= ON_FIRE + burning_particles = new(src, /particles/smoke/burning) SSfire_burning.processing[src] = src update_appearance() return 1 @@ -226,6 +220,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e if(resistance_flags & ON_FIRE) resistance_flags &= ~ON_FIRE update_appearance() + QDEL_NULL(burning_particles) SSfire_burning.processing -= src ///Called when the obj is hit by a tesla bolt. diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index d4ad3f0e679e..0ffeaa673b53 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -43,6 +43,8 @@ vis_flags = VIS_INHERIT_PLANE //when this be added to vis_contents of something it inherit something.plane, important for visualisation of obj in openspace. + var/obj/effect/abstract/particle_holder/burning_particles + FASTDMM_PROP(\ pinned_vars = list("name", "dir")\ ) diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm index f59e29dd3b9a..dba1c510767d 100644 --- a/code/game/objects/structures/ai_core.dm +++ b/code/game/objects/structures/ai_core.dm @@ -61,8 +61,6 @@ return FALSE var/turf/T = get_turf(src) var/area/A = get_area(src) - if(!(A.area_flags & BLOBS_ALLOWED)) - return FALSE if(!A.power_equip) return FALSE if(!T.virtual_level_trait(ZTRAIT_STATION)) @@ -222,7 +220,6 @@ to_chat(user, "You connect the monitor.") if(brain) var/mob/living/brain/B = brain.brainmob - SSticker.mode.remove_antag_for_borging(B.mind) var/mob/living/silicon/ai/A = null diff --git a/code/game/objects/structures/beds_chairs/alien_nest.dm b/code/game/objects/structures/beds_chairs/alien_nest.dm index 4f132b11af99..ecc050aa8f77 100644 --- a/code/game/objects/structures/beds_chairs/alien_nest.dm +++ b/code/game/objects/structures/beds_chairs/alien_nest.dm @@ -14,6 +14,7 @@ buildstacktype = null flags_1 = NODECONSTRUCT_1 bolts = FALSE + swap_lying_with_dir = FALSE var/static/mutable_appearance/nest_overlay = mutable_appearance('icons/mob/alien.dmi', "nestoverlay", LYING_MOB_LAYER) /obj/structure/bed/nest/user_unbuckle_mob(mob/living/buckled_mob, mob/living/user) diff --git a/code/game/objects/structures/beds_chairs/bed.dm b/code/game/objects/structures/beds_chairs/bed.dm index 6c5f46e94a3b..533f58bdf2ac 100644 --- a/code/game/objects/structures/beds_chairs/bed.dm +++ b/code/game/objects/structures/beds_chairs/bed.dm @@ -18,10 +18,44 @@ resistance_flags = FLAMMABLE max_integrity = 100 integrity_failure = 0.35 + var/buildstacktype = /obj/item/stack/sheet/metal var/buildstackamount = 2 var/bolts = TRUE + /// Whether the bed changes its buckle_lying direction + /// (and accordingly the direction in which mobs lie down) based on its current direction. + var/swap_lying_with_dir = TRUE + /// If non-null, some items (bedsheets) which can be tucked into beds + /// will set their layer to this value when they are tucked in, until they are picked up again. + var/suggested_tuck_layer = null + /// The amount added to the pixel_x value of a tucked-in item. + var/tucked_x_shift = 0 + /// The amount added to the pixel_y value of a tucked-in item. + var/tucked_y_shift = 0 + +/obj/structure/bed/Initialize(...) + . = ..() + if(swap_lying_with_dir) + buckle_lying = get_buckle_angle_from_dir(dir) + +/obj/structure/bed/setDir(newdir) + . = ..() + if(swap_lying_with_dir) + buckle_lying = get_buckle_angle_from_dir(newdir) + // shuttle rotation etc... ugh. + if(has_buckled_mobs()) + for(var/mob/living/M as anything in buckled_mobs) + // this proc already checks to see if the new angle is different from the old one, + // so this shouldn't cause any duplicate work or unnecessary animations. + M.set_lying_angle(buckle_lying) + +/obj/structure/bed/proc/get_buckle_angle_from_dir(some_dir) + if(some_dir & (SOUTH|WEST)) + return 90 + else + return 270 + /obj/structure/bed/examine(mob/user) . = ..() if(bolts) @@ -37,7 +71,7 @@ return attack_hand(user) /obj/structure/bed/attackby(obj/item/W, mob/user, params) - if(W.tool_behaviour == TOOL_WRENCH && !(flags_1&NODECONSTRUCT_1)) + if((W.tool_behaviour == TOOL_WRENCH || W.tool_behaviour == TOOL_DECONSTRUCT) && !(flags_1&NODECONSTRUCT_1)) W.play_tool_sound(src) deconstruct(TRUE) else @@ -52,6 +86,9 @@ icon_state = "down" anchored = FALSE resistance_flags = NONE + + // no dir states + swap_lying_with_dir = FALSE var/foldabletype = /obj/item/roller /obj/structure/bed/roller/attackby(obj/item/W, mob/user, params) @@ -161,8 +198,9 @@ else to_chat(user, "The dock is empty!") -//Dog bed - +/* + * "Dog" beds + */ /obj/structure/bed/dogbed name = "dog bed" icon_state = "dogbed" @@ -170,6 +208,9 @@ anchored = TRUE buildstacktype = /obj/item/stack/sheet/mineral/wood buildstackamount = 10 + + // no dir states + swap_lying_with_dir = FALSE var/mob/living/owner = null /obj/structure/bed/dogbed/ian @@ -206,7 +247,9 @@ . = ..() update_owner(M) -//Double Beds, for luxurious sleeping, i.e. the captain and maybe heads - no quirky refrence here. Move along +/* + * Double beds, for luxurious sleeping, i.e. the captain and maybe heads - no quirky refrence here. Move along + */ /obj/structure/bed/double name = "double bed" desc = "A luxurious double bed, for those too important for small dreams." @@ -232,3 +275,84 @@ name = "double dirty mattress" desc = "An old grubby king sized mattress. You really try to not think about what could be the cause of those stains." icon_state = "dirty_mattress_double" + +/* + * Bunk beds. Comes with an /obj/effect spawner that lets mappers place them down easily. + * The base type is the bottom bunk, with the top bunk as a derived type. + * Like other beds, the pillow may be on the left or right depending on the direction. + */ +/obj/structure/bed/bunk + name = "bottom bunk" + desc = "The oft-maligned bottom bunk of a compact bunk bed. Heavy sleepers only." + icon_state = "bottom_bunk" + // just below the top bunk's main layer + suggested_tuck_layer = LYING_MOB_LAYER + 0.005 + /// The amount added to the pixel_y value of mobs lying down, relative to the default shift for that position. + var/mob_y_shift = -1 + // i think it looks best without shifting the bedsheet down, even though the mob gets shifted down some + +// alter their pixel offset when they lie down... +/obj/structure/bed/bunk/post_buckle_mob(mob/living/M) + // we shift the lying mob a little so that they line up better with the pillow, but the shift direction changes + // depending on the direction they lie down in, controlled by buckle_lying + // (which is in turn based on our direction, but we don't need to worry about that directly) + var/horz_offset + if(buckle_lying == 90) + horz_offset = 2 + else + horz_offset = -2 + + M.pixel_x = M.get_standard_pixel_x_offset(M.body_position == LYING_DOWN) + horz_offset + M.pixel_y = M.get_standard_pixel_y_offset(M.body_position == LYING_DOWN) + mob_y_shift + +// ...and reset it when they get off +/obj/structure/bed/bunk/post_unbuckle_mob(mob/living/M) + M.pixel_x = M.get_standard_pixel_x_offset(M.body_position == LYING_DOWN) + M.pixel_y = M.get_standard_pixel_y_offset(M.body_position == LYING_DOWN) + + +/obj/structure/bed/bunk/top + name = "top bunk" + desc = "The top bunk of a compact bunk bed. Few other sleeping accommodations can match its luxury." + icon_state = "top_bunk" + + // higher layer, so that it renders on top of people on the bottom bunk + layer = LYING_MOB_LAYER + 0.01 + mob_y_shift = 13 + + // above the lying mob, but below the ladder + suggested_tuck_layer = LYING_MOB_LAYER + 0.025 + tucked_y_shift = 14 + +/obj/structure/bed/bunk/top/Initialize(...) + . = ..() + // the ladder needs to render above the mob + overlays += image(icon = 'icons/obj/objects.dmi', icon_state = "top_bunk_ladder", layer = LYING_MOB_LAYER + 0.03) + // and the posts need to render below the bottom bunk + overlays += image(icon = 'icons/obj/objects.dmi', icon_state = "top_bunk_posts", layer = TABLE_LAYER) + +/obj/structure/bed/bunk/top/post_buckle_mob(mob/living/M) + . = ..() + M.layer = LYING_MOB_LAYER + 0.02 + +/obj/structure/bed/bunk/top/post_unbuckle_mob(mob/living/M) + . = ..() + // honestly not really confident in this, but since standing up takes a do_after + // (and thus happens afterwards, resetting the layer), it should be fine... + // i'm more worried about altering layers via + and -, since if you figured out ways + // of stacking those you could layer yourself under, like, the floor. + M.layer = LYING_MOB_LAYER + + +// the spawner +/obj/effect/spawner/bunk_bed + name = "bunk bed spawner" + icon_state = "bunk_bed_spawner" + +/obj/effect/spawner/bunk_bed/Initialize(...) + . = ..() + var/obj/structure/bed/bunk/bottom_bunk = new(loc) + var/obj/structure/bed/bunk/top/top_bunk = new(loc) + + bottom_bunk.setDir(dir) + top_bunk.setDir(dir) diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index 045bf39ae9b6..40e0d9388515 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -60,7 +60,7 @@ qdel(src) /obj/structure/chair/attackby(obj/item/W, mob/user, params) - if(W.tool_behaviour == TOOL_WRENCH && !(flags_1&NODECONSTRUCT_1)) + if((W.tool_behaviour == TOOL_WRENCH || W.tool_behaviour == TOOL_DECONSTRUCT) && !(flags_1&NODECONSTRUCT_1)) W.play_tool_sound(src) deconstruct() else if(istype(W, /obj/item/assembly/shock_kit)) diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index d57e31ce9514..8ee8d8214f80 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -28,7 +28,7 @@ LINEN BINS /obj/item/bedsheet/Initialize(mapload) . = ..() - AddElement(/datum/element/bed_tuckable, 0, 0, 0) + AddElement(/datum/element/bed_tuckable, 0, 0, 0, TRUE, TRUE) /obj/item/bedsheet/attack_self(mob/user) if(!user.CanReach(src)) //No telekenetic grabbing. @@ -132,7 +132,7 @@ LINEN BINS desc = "It appears to have a beaker emblem, and is made out of fire-resistant material, although it probably won't protect you in the event of fires you're familiar with every day." icon_state = "sheetrd" item_state = "sheetrd" - dream_messages = list("authority", "a silvery ID", "a bomb", "a mech", "a facehugger", "maniacal laughter", "the research director") + dream_messages = list("authority", "a silvery ID", "a bomb", "an exosuit", "a facehugger", "maniacal laughter", "the research director") /obj/item/bedsheet/medical name = "medical blanket" @@ -209,7 +209,7 @@ LINEN BINS /obj/item/bedsheet/cult name = "cultist's bedsheet" - desc = "You might dream of Nar'Sie if you sleep with this. It seems rather tattered and glows of an eldritch presence." + desc = "You might dream of elder gods if you sleep with this. It seems rather tattered." icon_state = "sheetcult" item_state = "sheetcult" dream_messages = list("a tome", "a floating red crystal", "a glowing sword", "a bloody symbol", "a massive humanoid figure") @@ -353,7 +353,7 @@ LINEN BINS name = "double research director's bedsheet" icon_state = "double_sheetrd" item_state = "sheetrd" - dream_messages = list("authority", "a silvery ID", "a bomb", "a mech", "a facehugger", "maniacal laughter", "the research director") + dream_messages = list("authority", "a silvery ID", "a bomb", "an exosuit", "a facehugger", "maniacal laughter", "the research director") desc = "It appears to have a beaker emblem, and is made out of fire-resistant material, although it probably won't protect you in the event of fires you're familiar with every day." /obj/item/bedsheet/double/solgov diff --git a/code/game/objects/structures/cabinet.dm b/code/game/objects/structures/cabinet.dm new file mode 100644 index 000000000000..bc89cf1d0bbe --- /dev/null +++ b/code/game/objects/structures/cabinet.dm @@ -0,0 +1,214 @@ +/obj/structure/cabinet + name = "\improper cabinet" + desc = "There is a small label that reads \"For Emergency use only\". Yeah right." + icon = 'icons/obj/wallmounts.dmi' + icon_state = "fireaxe" + anchored = TRUE + density = FALSE + armor = list("melee" = 50, "bullet" = 20, "laser" = 0, "energy" = 100, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 50) + max_integrity = 150 + integrity_failure = 0.33 + req_one_access_txt = "0" + var/locked = TRUE + var/open = FALSE + var/start_empty = FALSE + var/obj/item/stored + var/allowed_type + var/stored_sprite = "axe" + +/obj/structure/cabinet/Initialize() + . = ..() + if(allowed_type && !start_empty) + stored = new allowed_type(src) + update_appearance() + +/obj/structure/cabinet/Destroy() + if(istype(stored)) + qdel(stored) + stored = null + return ..() + +/obj/structure/cabinet/examine(mob/user) + . = ..() + if(!open) + . += span_notice("Alt-click to [locked ? "unlock" : "lock"] [src]") + if(stored) + . += span_notice("[stored] is sitting inside, ripe for the taking.") + +/obj/structure/cabinet/attackby(obj/item/I, mob/user, params) + if(iscyborg(user) || I.tool_behaviour == TOOL_MULTITOOL) + hack_lock(user) + else if(I.tool_behaviour == TOOL_WELDER && user.a_intent == INTENT_HELP && !broken) + if(obj_integrity < max_integrity) + if(!I.tool_start_check(user, amount=2)) + return + to_chat(user, span_notice("You begin repairing [src]")) + if(I.use_tool(src, user, 40, volume=50, amount=2)) + obj_integrity = max_integrity + update_appearance() + to_chat(user, span_notice("You repair [src]")) + else + to_chat(user, span_warning("[src] is already in good condition!")) + return + else if(istype(I, /obj/item/stack/sheet/glass) && broken) + var/obj/item/stack/sheet/glass/G = I + if(G.get_amount() < 2) + to_chat(user, span_warning("You need two [G.singular_name] to fix [src]!")) + return + to_chat(user, span_notice("You start fixing [src]...")) + if(do_after(user, 20, target = src) && G.use(2)) + broken = 0 + obj_integrity = max_integrity + update_appearance() + else if(open || broken) + if(istype(I, allowed_type) && !stored) + var/obj/item/storee = I + SIGNAL_HANDLER + if(storee && HAS_TRAIT(storee, TRAIT_WIELDED)) + to_chat(user, span_warning("Unwield the [storee.name] first.")) + return + if(!user.transferItemToLoc(I, src)) + return + stored = storee + to_chat(user, span_notice("You place the [storee.name] back in the [name].")) + update_appearance() + return + else if(!broken) + toggle_open() + else + return ..() + +/obj/structure/cabinet/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) + switch(damage_type) + if(BRUTE) + if(broken) + playsound(loc, 'sound/effects/hit_on_shattered_glass.ogg', 90, TRUE) + else + playsound(loc, 'sound/effects/glasshit.ogg', 90, TRUE) + if(BURN) + playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE) + +/obj/structure/cabinet/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) + if(open) + return + . = ..() + if(.) + update_appearance() + +/obj/structure/cabinet/obj_break(damage_flag) + if(!broken && !(flags_1 & NODECONSTRUCT_1)) + update_appearance() + broken = TRUE + playsound(src, 'sound/effects/glassbr3.ogg', 100, TRUE) + new /obj/item/shard(loc) + new /obj/item/shard(loc) + +/obj/structure/cabinet/deconstruct(disassembled = TRUE) + if(!(flags_1 & NODECONSTRUCT_1)) + if(stored && loc) + stored.forceMove(loc) + stored = null + new /obj/item/stack/sheet/metal(loc, 2) + qdel(src) + +/obj/structure/cabinet/attack_hand(mob/user) + . = ..() + if(.) + return + if(open || broken) + if(stored) + to_chat(user, span_notice("You take [stored] from [name].")) + user.put_in_hands(stored) + stored = null + src.add_fingerprint(user) + update_appearance() + return + if(locked) + to_chat(user, span_warning("[name] won't budge!")) + return + else + open = !open + update_appearance() + return + +/obj/structure/cabinet/attack_paw(mob/living/user) + return attack_hand(user) + +/obj/structure/cabinet/attack_ai(mob/user) + toggle_lock(user) + return + +/obj/structure/cabinet/attack_tk(mob/user) + if(locked) + to_chat(user, span_warning("[name] won't budge!")) + return + else + open = !open + update_appearance() + return + +/obj/structure/cabinet/update_overlays() + . = ..() + if(stored) + . += "[stored_sprite]" + if(open) + . += "glass_raised" + return + var/hp_percent = obj_integrity/max_integrity * 100 + if(broken) + . += "glass4" + else + switch(hp_percent) + if(-INFINITY to 40) + . += "glass3" + if(40 to 60) + . += "glass2" + if(60 to 80) + . += "glass1" + if(80 to INFINITY) + . += "glass" + + . += locked ? "locked" : "unlocked" + +/obj/structure/cabinet/proc/toggle_lock(mob/user) + if(!broken) + if(allowed(user)) + if(iscarbon(user)) + add_fingerprint(user) + locked = !locked + user.visible_message( + span_notice("[user] [locked ? "locks" : "unlocks"][src]."), + span_notice("You [locked ? "lock" : "unlock"] [src].")) + update_appearance() + else + to_chat(user, span_warning("Access denied!")) + else if(broken) + to_chat(user, span_warning("\The [src] is broken!")) + +/obj/structure/cabinet/AltClick(mob/user) + ..() + if(!user.canUseTopic(src, BE_CLOSE) || !isturf(loc) || open) + return + else + toggle_lock(user) + +/obj/structure/cabinet/proc/hack_lock(mob/user) + to_chat(user, span_notice("Resetting circuitry...")) + playsound(src, 'sound/machines/locktoggle.ogg', 50, TRUE) + if(do_after(user, 20, target = src)) + to_chat(user, span_notice("You [locked ? "disable" : "re-enable"] the locking modules.")) + locked = !locked + update_appearance() + +/obj/structure/cabinet/verb/toggle_open() + set name = "Open/Close" + set category = "Object" + set src in oview(1) + + if(locked) + visible_message(span_warning("[name] won't budge!")) + return + else + open = !open + update_appearance() + return diff --git a/code/game/objects/structures/cabinet_types.dm b/code/game/objects/structures/cabinet_types.dm new file mode 100644 index 000000000000..347e1954ded4 --- /dev/null +++ b/code/game/objects/structures/cabinet_types.dm @@ -0,0 +1,10 @@ +/obj/structure/cabinet/fireaxe + name = "\improper fire axe cabinet" + desc = "There is a small label that reads \"For Emergency use only\" along with details for safe use of the axe. As if." + icon = 'icons/obj/wallmounts.dmi' + icon_state = "fireaxe" + anchored = TRUE + density = FALSE + stored_sprite = "axe" + allowed_type = /obj/item/melee/axe/fire + req_one_access_txt = "24" diff --git a/code/game/objects/structures/catwalk.dm b/code/game/objects/structures/catwalk.dm index 20986f9e6c27..2202e84d70e4 100644 --- a/code/game/objects/structures/catwalk.dm +++ b/code/game/objects/structures/catwalk.dm @@ -57,7 +57,7 @@ . += "The supporting rods look like they could be welded." /obj/structure/catwalk/attackby(obj/item/C, mob/user, params) - if(C.tool_behaviour == TOOL_WELDER && !(resistance_flags & INDESTRUCTIBLE)) + if((C.tool_behaviour == TOOL_WELDER || C.tool_behaviour == TOOL_DECONSTRUCT) && !(resistance_flags & INDESTRUCTIBLE)) to_chat(user, "You slice off [src]") deconstruct() return diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 714129498e4c..cd1c880eae74 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 @@ -254,34 +255,43 @@ if(user in src) return if(src.tool_interact(W,user)) - return 1 // No afterattack + return TRUE // No afterattack else return ..() +/obj/structure/closet/proc/try_deconstruct(obj/item/W, mob/user) + if(W.tool_behaviour == cutting_tool || W.tool_behaviour == TOOL_DECONSTRUCT) + if(!W.tool_start_check(user, amount = 0)) + return + to_chat(user, span_notice("You begin cutting \the [src] apart...")) + if(W.use_tool(src, user, 40, volume = 50)) + if(!opened) + return + user.visible_message(span_notice("[user] slices apart \the [src]."), + span_notice("You cut \the [src] apart with \the [W]."), + span_hear("You hear welding.")) + deconstruct(TRUE) + return TRUE + /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 @@ -304,6 +314,13 @@ user.visible_message("[user] [anchored ? "anchored" : "unanchored"] \the [src] [anchored ? "to" : "from"] the ground.", \ "You [anchored ? "anchored" : "unanchored"] \the [src] [anchored ? "to" : "from"] the ground.", \ "You hear a ratchet.") + + else if(W.tool_behaviour == TOOL_DECONSTRUCT && locked) + user.visible_message("[user] is cutting \the [src] open !", "You begin to cut \the [src] open.") + if (W.use_tool(src, user, 10 SECONDS, volume=0)) + bust_open() + user.visible_message("[user] busted \the [src] open !", "You finish cutting \the [src] open.") + else if(user.a_intent != INTENT_HARM) var/item_is_id = W.GetID() if(!item_is_id) diff --git a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm index a5d7531b0aa8..b0674a2d2b60 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 @@ -20,6 +20,13 @@ var/move_delay = FALSE var/egged = 0 +/obj/structure/closet/cardboard/try_deconstruct(obj/item/W, mob/user) + if(W.tool_behaviour == cutting_tool) + user.visible_message(span_notice("[user] cut apart \the [src]."), \ + span_notice("You cut \the [src] apart with \the [W].")) + deconstruct(TRUE) + return TRUE + /obj/structure/closet/cardboard/relaymove(mob/living/user, direction) if(opened || move_delay || user.incapacitated() || !isturf(loc) || !has_gravity(loc)) return @@ -70,7 +77,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/job_closets.dm b/code/game/objects/structures/crates_lockers/closets/job_closets.dm index dac919bb428c..6e7de98b21de 100644 --- a/code/game/objects/structures/crates_lockers/closets/job_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/job_closets.dm @@ -98,14 +98,9 @@ icon_door = "black" /obj/structure/closet/wardrobe/chaplain_black/PopulateContents() - new /obj/item/storage/box/holy(src) new /obj/item/clothing/accessory/pocketprotector/cosmetology(src) new /obj/item/clothing/under/rank/civilian/chaplain(src) new /obj/item/clothing/shoes/sneakers/black(src) - new /obj/item/clothing/suit/chaplainsuit/nun(src) - new /obj/item/clothing/head/nun_hood(src) - new /obj/item/clothing/suit/hooded/chaplainsuit/monkhabit(src) - new /obj/item/clothing/suit/chaplainsuit/holidaypriest(src) new /obj/item/storage/backpack/cultpack(src) new /obj/item/storage/fancy/candle_box(src) new /obj/item/storage/fancy/candle_box(src) @@ -250,8 +245,7 @@ /obj/item/clothing/under/rank/medical/geneticist = 2, /obj/item/clothing/shoes/sneakers/white = 2, /obj/item/clothing/suit/toggle/labcoat/genetics = 2, - /obj/item/storage/backpack/genetics = 2, - /obj/item/storage/backpack/satchel/gen = 2) + /obj/item/storage/backpack/genetics = 2) generate_items_inside(items_inside,src) return diff --git a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm index 0e7ab6e0a526..2bdc4f762dc0 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm @@ -33,9 +33,9 @@ /obj/structure/closet/secure_closet/freezer/kitchen/PopulateContents() ..() for(var/i = 0, i < 3, i++) - new /obj/item/reagent_containers/food/condiment/flour(src) - new /obj/item/reagent_containers/food/condiment/rice(src) - new /obj/item/reagent_containers/food/condiment/sugar(src) + new /obj/item/reagent_containers/condiment/flour(src) + new /obj/item/reagent_containers/condiment/rice(src) + new /obj/item/reagent_containers/condiment/sugar(src) /obj/structure/closet/secure_closet/freezer/kitchen/maintenance name = "maintenance refrigerator" @@ -45,9 +45,9 @@ /obj/structure/closet/secure_closet/freezer/kitchen/maintenance/PopulateContents() ..() for(var/i = 0, i < 5, i++) - new /obj/item/reagent_containers/food/condiment/milk(src) + new /obj/item/reagent_containers/condiment/milk(src) for(var/i = 0, i < 5, i++) - new /obj/item/reagent_containers/food/condiment/soymilk(src) + new /obj/item/reagent_containers/condiment/soymilk(src) for(var/i = 0, i < 2, i++) new /obj/item/storage/fancy/egg_box(src) @@ -82,9 +82,9 @@ /obj/structure/closet/secure_closet/freezer/fridge/PopulateContents() ..() for(var/i = 0, i < 5, i++) - new /obj/item/reagent_containers/food/condiment/milk(src) + new /obj/item/reagent_containers/condiment/milk(src) for(var/i = 0, i < 5, i++) - new /obj/item/reagent_containers/food/condiment/soymilk(src) + new /obj/item/reagent_containers/condiment/soymilk(src) for(var/i = 0, i < 2, i++) new /obj/item/storage/fancy/egg_box(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 8ccc632dbac5..23aa2df0ab5a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -25,12 +25,10 @@ new /obj/item/clothing/head/caphat(src) new /obj/item/clothing/head/caphat/parade(src) new /obj/item/clothing/suit/armor/vest/capcarapace/captunic(src) - new /obj/item/clothing/head/crown/fancy(src) new /obj/item/cartridge/captain(src) new /obj/item/storage/box/silver_ids(src) new /obj/item/radio/headset/heads/captain/alt(src) new /obj/item/radio/headset/heads/captain(src) - new /obj/item/clothing/glasses/sunglasses/gar/supergar(src) new /obj/item/clothing/gloves/color/captain(src) new /obj/item/storage/belt/sabre(src) new /obj/item/gun/energy/e_gun(src) @@ -50,7 +48,6 @@ new /obj/item/clothing/head/beret/hop(src) //WS edit - More Berets new /obj/item/clothing/under/rank/command/head_of_personnel(src) //WS Edit - Better Command Uniforms new /obj/item/clothing/under/rank/command/head_of_personnel/skirt(src) //WS Edit - Better Command Uniforms - new /obj/item/clothing/head/hopcap(src) new /obj/item/cartridge/head_of_personnel(src) new /obj/item/radio/headset/heads/head_of_personnel(src) new /obj/item/clothing/shoes/sneakers/brown(src) @@ -92,7 +89,6 @@ new /obj/item/clothing/under/rank/security/head_of_security/alt/skirt(src) new /obj/item/clothing/head/HoS(src) new /obj/item/clothing/glasses/hud/security/sunglasses/eyepatch(src) - new /obj/item/clothing/glasses/hud/security/sunglasses/gars/supergars(src) new /obj/item/clothing/suit/armor/vest/security/hos(src) //WS Edit - Better security jumpsuit sprites new /obj/item/storage/lockbox/medal/sec(src) new /obj/item/megaphone/sec(src) @@ -259,7 +255,6 @@ new /obj/item/paper/fluff/jobs/security/court_judgement (src) new /obj/item/pen (src) new /obj/item/clothing/suit/judgerobe (src) - new /obj/item/clothing/head/powdered_wig (src) new /obj/item/storage/briefcase(src) /obj/structure/closet/secure_closet/contraband/armory diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm index fc0aae860782..23c5e83e3c57 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/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index bca315340a4d..e3a8339dce46 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -37,8 +37,6 @@ new /obj/item/clothing/under/color/jumpskirt/black(src) if(prob(25)) new /obj/item/clothing/suit/jacket/leather(src) - if(prob(20)) - new /obj/item/clothing/suit/jacket/leather/overcoat(src) for(var/i in 1 to 3) new /obj/item/clothing/shoes/sneakers/black(src) for(var/i in 1 to 3) diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 3729f41af36e..3cd9cd13796e 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -293,3 +293,21 @@ new /obj/item/clothing/mask/breath(src) for(var/i in 1 to 3) new /obj/item/tank/internals/oxygen(src) + +/obj/structure/closet/crate/cyborg + name = "Cyborg Construction Crate" + desc = "A crate containing the parts to build a cyborg frame." + icon_state = "scicrate" + +/obj/structure/closet/crate/cyborg/PopulateContents() + . = ..() + new /obj/item/bodypart/l_arm/robot(src) + new /obj/item/bodypart/r_arm/robot(src) + new /obj/item/bodypart/leg/left/robot(src) + new /obj/item/bodypart/leg/right/robot(src) + new /obj/item/bodypart/chest/robot(src) + new /obj/item/bodypart/head/robot(src) + new /obj/item/robot_suit(src) + new /obj/item/stock_parts/cell/high(src) + for(var/i in 1 to 2) + new /obj/item/assembly/flash/handheld(src) diff --git a/code/game/objects/structures/crates_lockers/crates/graves.dm b/code/game/objects/structures/crates_lockers/crates/graves.dm new file mode 100644 index 000000000000..dc7eee343d01 --- /dev/null +++ b/code/game/objects/structures/crates_lockers/crates/graves.dm @@ -0,0 +1,112 @@ +/obj/structure/closet/crate/grave + name = "burial mound" + desc = "A marked patch of soil, adorned with a wooden cross" + icon_state = "grave" + dense_when_open = TRUE + material_drop = /obj/item/stack/ore/glass/basalt + material_drop_amount = 5 + opened = TRUE + anchorable = FALSE + anchored = TRUE + locked = TRUE + breakout_time = 900 + cutting_tool = TOOL_SHOVEL + +/obj/structure/closet/crate/grave/attackby(obj/item/W, mob/user, params) + .=..() + if(istype(W, /obj/item/screwdriver)) + if(!user.is_literate()) + to_chat(user, "You scratch illegibly on [src]!") + return + var/t = stripped_input(user, "What would you like the inscription to be?", name, null, 53) + if(user.get_active_held_item() != W) + return + if(!user.canUseTopic(src, BE_CLOSE)) + return + if(t) + desc = "[t]" + return + +/obj/structure/closet/crate/grave/open(mob/living/user, obj/item/S, force = FALSE) + if(!opened) + to_chat(user, "The ground here is too hard to dig up with your bare hands. You'll need a shovel.") + else + to_chat(user, "The grave has already been dug up.") + +/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(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 + locked = TRUE + dump_contents() + update_appearance() + SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "graverobbing", /datum/mood_event/graverobbing) + return TRUE + return TRUE + else + to_chat(user, "You can't dig up a grave with \the [S.name].") + return TRUE + else + to_chat(user, "The grave has already been dug up.") + return TRUE + + else if((user.a_intent != INTENT_HELP) && opened) //checks to attempt to remove the grave entirely. + 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.") + SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "graverobbing", /datum/mood_event/graverobbing) + deconstruct(TRUE) + return TRUE + return + +/obj/structure/closet/crate/grave/bust_open() + ..() + opened = TRUE + update_appearance() + dump_contents() + return + +/obj/structure/closet/crate/grave/stone + name = "burial mound" + desc = "A marked patch of soil, adorned with a sandstone slab" + icon_state = "grave_lead" + +/obj/structure/closet/crate/grave/loot + name = "burial mound" + desc = "A marked patch of soil, showing signs of a burial long ago. You wouldn't disturb a grave... right?" + opened = FALSE + +/obj/structure/closet/crate/grave/loot/PopulateContents() //GRAVEROBBING IS NOW A FEATURE + ..() + new /obj/effect/decal/remains/human/grave(src) + switch(rand(1,7)) + if(1) + new /obj/item/spacecash/bundle/smallrand(src) + new /obj/item/card/id + new /obj/item/storage/wallet(src) + if(2) + new /obj/item/clothing/head/papersack/smiley(src) + if(3) + new /obj/item/clothing/under/nanotrasen(src) + new /obj/item/clothing/head/nanotrasen(src) + if(4) + new /obj/item/storage/book/bible/booze(src) + if(5) + new /obj/item/clothing/neck/stethoscope(src) + new /obj/item/scalpel(src) + new /obj/item/hemostat(src) + + if(6) + new /obj/item/reagent_containers/glass/beaker/large/napalm(src) + new /obj/item/clothing/under/frontiersmen(src) + if(7) + new /obj/item/clothing/glasses/sunglasses(src) + new /obj/item/clothing/mask/cigarette/rollie(src) + new /obj/item/lighter(src) + +/obj/effect/decal/remains/human/grave + turf_loc_check = FALSE diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index 4246075e49f6..43052f1f0dbb 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -333,6 +333,14 @@ new mineral_path(T, 2) qdel(src) +/obj/structure/door_assembly/deconstruct_act(mob/living/user, obj/item/I) + . = ..() + if(!I.tool_start_check(user, amount=0)) + return FALSE + if (I.use_tool(src, user, 3 SECONDS, volume=100)) + to_chat(user, "You slice [src] apart.") + deconstruct(FALSE) + return TRUE /obj/structure/door_assembly/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) if(the_rcd.mode == RCD_DECONSTRUCT) diff --git a/code/game/objects/structures/door_assembly_types.dm b/code/game/objects/structures/door_assembly_types.dm index d2bcf77cfda7..b77f86be469f 100644 --- a/code/game/objects/structures/door_assembly_types.dm +++ b/code/game/objects/structures/door_assembly_types.dm @@ -141,20 +141,6 @@ airlock_type = /obj/machinery/door/airlock/shuttle glass_type = /obj/machinery/door/airlock/shuttle/glass -/obj/structure/door_assembly/door_assembly_cult - name = "cult airlock assembly" - icon = 'icons/obj/doors/airlocks/cult/runed/cult.dmi' - base_name = "cult airlock" - overlays_file = 'icons/obj/doors/airlocks/cult/runed/overlays.dmi' - airlock_type = /obj/machinery/door/airlock/cult - glass_type = /obj/machinery/door/airlock/cult/glass - -/obj/structure/door_assembly/door_assembly_cult/unruned - icon = 'icons/obj/doors/airlocks/cult/unruned/cult.dmi' - overlays_file = 'icons/obj/doors/airlocks/cult/unruned/overlays.dmi' - airlock_type = /obj/machinery/door/airlock/cult/unruned - glass_type = /obj/machinery/door/airlock/cult/unruned/glass - /obj/structure/door_assembly/door_assembly_viro name = "virology airlock assembly" icon = 'icons/obj/doors/airlocks/station/virology.dmi' diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index d5a8c3e496c1..48bf8817e1e7 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -107,9 +107,6 @@ else if(W.tool_behaviour == TOOL_WELDER) if(W.use_tool(src, user, 0, volume=50)) dismantle(user, TRUE) - else if(istype(W, /obj/item/pickaxe/drill/jackhammer)) - W.play_tool_sound(src) - dismantle(user, TRUE) else return ..() diff --git a/code/game/objects/structures/fireaxe.dm b/code/game/objects/structures/fireaxe.dm deleted file mode 100644 index f6de885caf77..000000000000 --- a/code/game/objects/structures/fireaxe.dm +++ /dev/null @@ -1,185 +0,0 @@ -/obj/structure/fireaxecabinet - name = "fire axe cabinet" - desc = "There is a small label that reads \"For Emergency use only\" along with details for safe use of the axe. As if." - icon = 'icons/obj/wallmounts.dmi' - icon_state = "fireaxe" - anchored = TRUE - density = FALSE - armor = list("melee" = 50, "bullet" = 20, "laser" = 0, "energy" = 100, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 50) - max_integrity = 150 - integrity_failure = 0.33 - var/locked = TRUE - var/open = FALSE - var/obj/item/fireaxe/fireaxe - -/obj/structure/fireaxecabinet/Initialize() - . = ..() - fireaxe = new - update_appearance() - -/obj/structure/fireaxecabinet/Destroy() - if(fireaxe) - QDEL_NULL(fireaxe) - return ..() - -/obj/structure/fireaxecabinet/attackby(obj/item/I, mob/user, params) - if(iscyborg(user) || I.tool_behaviour == TOOL_MULTITOOL) - toggle_lock(user) - else if(I.tool_behaviour == TOOL_WELDER && user.a_intent == INTENT_HELP && !broken) - if(obj_integrity < max_integrity) - if(!I.tool_start_check(user, amount=2)) - return - - to_chat(user, "You begin repairing [src].") - if(I.use_tool(src, user, 40, volume=50, amount=2)) - obj_integrity = max_integrity - update_appearance() - to_chat(user, "You repair [src].") - else - to_chat(user, "[src] is already in good condition!") - return - else if(istype(I, /obj/item/stack/sheet/glass) && broken) - var/obj/item/stack/sheet/glass/G = I - if(G.get_amount() < 2) - to_chat(user, "You need two glass sheets to fix [src]!") - return - to_chat(user, "You start fixing [src]...") - if(do_after(user, 20, target = src) && G.use(2)) - broken = 0 - obj_integrity = max_integrity - update_appearance() - else if(open || broken) - if(istype(I, /obj/item/fireaxe) && !fireaxe) - var/obj/item/fireaxe/F = I - if(F && F.wielded) - to_chat(user, "Unwield the [F.name] first.") - return - if(!user.transferItemToLoc(F, src)) - return - fireaxe = F - to_chat(user, "You place the [F.name] back in the [name].") - update_appearance() - return - else if(!broken) - toggle_open() - else - return ..() - -/obj/structure/fireaxecabinet/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) - switch(damage_type) - if(BRUTE) - if(broken) - playsound(loc, 'sound/effects/hit_on_shattered_glass.ogg', 90, TRUE) - else - playsound(loc, 'sound/effects/glasshit.ogg', 90, TRUE) - if(BURN) - playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE) - -/obj/structure/fireaxecabinet/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) - if(open) - return - . = ..() - if(.) - update_appearance() - -/obj/structure/fireaxecabinet/obj_break(damage_flag) - if(!broken && !(flags_1 & NODECONSTRUCT_1)) - update_appearance() - broken = TRUE - playsound(src, 'sound/effects/glassbr3.ogg', 100, TRUE) - new /obj/item/shard(loc) - new /obj/item/shard(loc) - -/obj/structure/fireaxecabinet/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - if(fireaxe && loc) - fireaxe.forceMove(loc) - fireaxe = null - new /obj/item/stack/sheet/metal(loc, 2) - qdel(src) - -/obj/structure/fireaxecabinet/blob_act(obj/structure/blob/B) - if(fireaxe) - fireaxe.forceMove(loc) - fireaxe = null - qdel(src) - -/obj/structure/fireaxecabinet/attack_hand(mob/user) - . = ..() - if(.) - return - if(open || broken) - if(fireaxe) - user.put_in_hands(fireaxe) - fireaxe = null - to_chat(user, "You take the fire axe from the [name].") - src.add_fingerprint(user) - update_appearance() - return - if(locked) - to_chat(user, "The [name] won't budge!") - return - else - open = !open - update_appearance() - return - -/obj/structure/fireaxecabinet/attack_paw(mob/living/user) - return attack_hand(user) - -/obj/structure/fireaxecabinet/attack_ai(mob/user) - toggle_lock(user) - return - -/obj/structure/fireaxecabinet/attack_tk(mob/user) - if(locked) - to_chat(user, "The [name] won't budge!") - return - else - open = !open - update_appearance() - return - -/obj/structure/fireaxecabinet/update_overlays() - . = ..() - if(fireaxe) - . += "axe" - if(open) - . += "glass_raised" - return - var/hp_percent = obj_integrity/max_integrity * 100 - if(broken) - . += "glass4" - else - switch(hp_percent) - if(-INFINITY to 40) - . += "glass3" - if(40 to 60) - . += "glass2" - if(60 to 80) - . += "glass1" - if(80 to INFINITY) - . += "glass" - - . += locked ? "locked" : "unlocked" - -/obj/structure/fireaxecabinet/proc/toggle_lock(mob/user) - to_chat(user, "Resetting circuitry...") - playsound(src, 'sound/machines/locktoggle.ogg', 50, TRUE) - if(do_after(user, 20, target = src)) - to_chat(user, "You [locked ? "disable" : "re-enable"] the locking modules.") - locked = !locked - update_appearance() - -/obj/structure/fireaxecabinet/verb/toggle_open() - set name = "Open/Close" - set category = "Object" - set src in oview(1) - - if(locked) - to_chat(usr, "The [name] won't budge!") - return - else - open = !open - update_appearance() - return diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index 0fca2bcca6ee..1698f90ec7cd 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -1056,3 +1056,39 @@ T.air.adjust_moles(GAS_CO2, -amt) T.atmos_spawn_air("o2=[amt];TEMP=293.15") lastcycle = world.time + +/obj/structure/fluff/steam_vent + name = "steam vent" + desc = "A outlet for steam, usually for water coming in contact with steam pipes." + icon = 'icons/obj/structures.dmi' + icon_state = "steamvent" + deconstructible = FALSE + layer = GAS_PUMP_LAYER + + var/particle_to_spawn = /particles/smoke/steam/vent + var/obj/effect/particle_holder/part_hold + +/obj/structure/fluff/steam_vent/Initialize() + . = ..() + part_hold = new(get_turf(src)) + part_hold.layer = EDGED_TURF_LAYER + part_hold.particles = new particle_to_spawn() + underlays.Cut() + +/obj/structure/fluff/steam_vent/Destroy() + . = ..() + QDEL_NULL(part_hold) + +/obj/structure/fluff/steam_vent/low + particle_to_spawn = /particles/smoke/steam/vent/low + +/obj/structure/fluff/steam_vent/high + particle_to_spawn = /particles/smoke/steam/vent/high + +/obj/effect/particle_holder + name = "" + anchored = TRUE + mouse_opacity = 0 + +/obj/effect/particle_emitter/Initialize(mapload, time) + . = ..() diff --git a/code/game/objects/structures/fluff.dm b/code/game/objects/structures/fluff.dm index 6a53024a81a0..32d6f02721c5 100644 --- a/code/game/objects/structures/fluff.dm +++ b/code/game/objects/structures/fluff.dm @@ -258,3 +258,13 @@ /obj/structure/fluff/hedge/opaque //useful for mazes and such opacity = TRUE + +/obj/structure/fluff/glowshroom + name = "glowshroom" + desc = "Mycena bregprox, a species of mushroom that glows in the dark." + icon = 'icons/obj/lighting.dmi' + icon_state = "glowshroom" + layer = ABOVE_NORMAL_TURF_LAYER + light_color = "#C3E381" + light_range = 2 + light_power = 1 diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm index aed3ae724c59..f8893a3e3bc9 100644 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ b/code/game/objects/structures/ghost_role_spawners.dm @@ -102,58 +102,6 @@ head = /obj/item/clothing/head/helmet/gladiator uniform = /obj/item/clothing/under/costume/gladiator/ash_walker -/obj/effect/mob_spawn/human/demonic_friend - name = "Essence of friendship" - desc = "Oh boy! Oh boy! A friend!" - mob_name = "Demonic friend" - icon = 'icons/obj/cardboard_cutout.dmi' - icon_state = "cutout_basic" - outfit = /datum/outfit/demonic_friend - death = FALSE - roundstart = FALSE - random = TRUE - id_job = "SuperFriend" - var/obj/effect/proc_holder/spell/targeted/summon_friend/spell - var/datum/mind/owner - assignedrole = "SuperFriend" - -/obj/effect/mob_spawn/human/demonic_friend/Initialize(mapload, datum/mind/owner_mind, obj/effect/proc_holder/spell/targeted/summon_friend/summoning_spell) - . = ..() - owner = owner_mind - flavour_text = "You have been given a reprieve from your eternity of torment, to be [owner.name]'s friend for [owner.p_their()] short mortal coil." - important_info = "Be aware that if you do not live up to [owner.name]'s expectations, they can send you back to hell with a single thought. [owner.name]'s death will also return you to hell." - var/area/A = get_area(src) - if(!mapload && A) - notify_ghosts("\A friendship shell has been completed in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE) - objectives = "Be [owner.name]'s friend, and keep [owner.name] alive, so you don't get sent back to hell." - spell = summoning_spell - - -/obj/effect/mob_spawn/human/demonic_friend/special(mob/living/L) - if(!QDELETED(owner.current) && owner.current.stat != DEAD) - L.fully_replace_character_name(null,"[owner.name]'s best friend") - soullink(/datum/soullink/oneway, owner.current, L) - spell.friend = L - spell.charge_counter = spell.charge_max - L.mind.hasSoul = FALSE - var/mob/living/carbon/human/H = L - var/obj/item/worn = H.wear_id - var/obj/item/card/id/id = worn.GetID() - id.registered_name = L.real_name - id.update_label() - else - to_chat(L, "Your owner is already dead! You will soon perish.") - addtimer(CALLBACK(L, TYPE_PROC_REF(/mob, dust), 150)) //Give em a few seconds as a mercy. - -/datum/outfit/demonic_friend - name = "Demonic Friend" - uniform = /obj/item/clothing/under/misc/assistantformal - shoes = /obj/item/clothing/shoes/laceup - r_pocket = /obj/item/radio - back = /obj/item/storage/backpack - implants = list(/obj/item/implant/mindshield) //No revolutionaries, he's MY friend. - id = /obj/item/card/id - /obj/effect/mob_spawn/human/syndicate name = "Syndicate Operative" roundstart = FALSE diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 6463282eb6df..5f35e69d098e 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -36,26 +36,7 @@ playsound(src, 'sound/machines/clockcult/integration_cog_install.ogg', 50, TRUE) add_fingerprint(user) - 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)) - to_chat(user, "You slice apart the girder.") - var/obj/item/stack/sheet/metal/M = new (loc, 2) - M.add_fingerprint(user) - qdel(src) - - return - - else if(istype(W, /obj/item/pickaxe/drill/jackhammer)) - to_chat(user, "You smash through the girder!") - new /obj/item/stack/sheet/metal(get_turf(src)) - W.play_tool_sound(src) - qdel(src) - - return - - - else if(istype(W, /obj/item/stack)) + if(istype(W, /obj/item/stack)) if(iswallturf(loc)) to_chat(user, "There is already a wall present!") return @@ -231,6 +212,15 @@ else return ..() +/obj/structure/girder/deconstruct_act(mob/living/user, obj/item/I) + . = ..() + if(!I.tool_start_check(user, amount=0)) + return FALSE + if(I.use_tool(src, user, 3 SECONDS, volume=0)) + to_chat(user, "You cut apart \the [src].", "You cut apart \the [src].") + deconstruct() + return TRUE + // Screwdriver behavior for girders /obj/structure/girder/screwdriver_act(mob/user, obj/item/tool) if(..()) @@ -324,10 +314,6 @@ new remains(loc) qdel(src) -/obj/structure/girder/narsie_act() - new /obj/structure/girder/cult(loc) - qdel(src) - /obj/structure/girder/displaced name = "displaced girder" icon_state = "displaced" @@ -349,68 +335,6 @@ new remains(loc, 2) qdel(src) - - -//////////////////////////////////////////// cult girder ////////////////////////////////////////////// - -/obj/structure/girder/cult - name = "runed girder" - desc = "Framework made of a strange and shockingly cold metal. It doesn't seem to have any bolts." - icon = 'icons/obj/cult.dmi' - icon_state= "cultgirder" - can_displace = FALSE - -/obj/structure/girder/cult/attackby(obj/item/W, mob/user, params) - add_fingerprint(user) - if(istype(W, /obj/item/melee/cultblade/dagger) && iscultist(user)) //Cultists can demolish cult girders instantly with their tomes - user.visible_message("[user] strikes [src] with [W]!", "You demolish [src].") - new /obj/item/stack/sheet/mineral/hidden/hellstone(drop_location(), 1) - qdel(src) - - else if(W.tool_behaviour == TOOL_WELDER) - if(!W.tool_start_check(user, amount=0)) - return - - to_chat(user, "You start slicing apart the girder...") - if(W.use_tool(src, user, 40, volume=50)) - to_chat(user, "You slice apart the girder.") - var/obj/item/stack/sheet/mineral/hidden/hellstone/R = new(drop_location(), 1) - transfer_fingerprints_to(R) - qdel(src) - - else if(istype(W, /obj/item/pickaxe/drill/jackhammer)) - to_chat(user, "Your jackhammer smashes through the girder!") - var/obj/item/stack/sheet/mineral/hidden/hellstone/R = new(drop_location(), 2) - transfer_fingerprints_to(R) - W.play_tool_sound(src) - qdel(src) - - else if(istype(W, /obj/item/stack/sheet/mineral/hidden/hellstone)) - var/obj/item/stack/sheet/mineral/hidden/hellstone/R = W - if(R.get_amount() < 1) - to_chat(user, "You need at least one sheet of runed metal to construct a runed wall!") - return 0 - user.visible_message("[user] begins laying runed metal on [src]...", "You begin constructing a runed wall...") - if(do_after(user, 50, target = src)) - if(R.get_amount() < 1) - return - user.visible_message("[user] plates [src] with runed metal.", "You construct a runed wall.") - R.use(1) - var/turf/T = get_turf(src) - T.PlaceOnTop(/turf/closed/wall/mineral/cult) - qdel(src) - - else - return ..() - -/obj/structure/girder/cult/narsie_act() - return - -/obj/structure/girder/cult/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - new /obj/item/stack/sheet/mineral/hidden/hellstone(drop_location(), 1) - qdel(src) - /obj/structure/girder/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) switch(the_rcd.mode) if(RCD_FLOORWALL) @@ -452,13 +376,6 @@ transfer_fingerprints_to(B) qdel(src) - else if(istype(W, /obj/item/pickaxe/drill/jackhammer)) - to_chat(user, "Your jackhammer smashes through the girder!") - var/obj/item/stack/tile/bronze/B = new(drop_location(), 2) - transfer_fingerprints_to(B) - W.play_tool_sound(src) - qdel(src) - else if(istype(W, /obj/item/stack/tile/bronze)) var/obj/item/stack/tile/bronze/B = W if(B.get_amount() < 2) diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 5bca53e84dd6..b1897ee661d4 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -227,6 +227,15 @@ qdel(src) ..() +/obj/structure/grille/deconstruct_act(mob/living/user, obj/item/I) + . = ..() + if(!I.tool_start_check(user, amount=0)) + return FALSE + if (I.use_tool(src, user, 1 SECONDS, volume=100)) + to_chat(user, "You slice [src] apart.") + deconstruct(FALSE) + return TRUE + /obj/structure/grille/obj_break() if(!broken && !(flags_1 & NODECONSTRUCT_1)) new broken_type(src.loc) diff --git a/code/game/objects/structures/headpike.dm b/code/game/objects/structures/headpike.dm index c42983a5e0e5..5dbaa4a1e7c3 100644 --- a/code/game/objects/structures/headpike.dm +++ b/code/game/objects/structures/headpike.dm @@ -6,7 +6,7 @@ density = FALSE anchored = TRUE var/bonespear = FALSE - var/obj/item/spear/spear + var/obj/item/melee/spear/spear var/obj/item/bodypart/head/victim /obj/structure/headpike/bone //for bone spears @@ -24,9 +24,9 @@ victim = new(src) victim.real_name = random_unique_name(prob(50)) - spear = locate(bonespear ? /obj/item/spear/bonespear : /obj/item/spear) in parts_list + spear = locate(bonespear ? /obj/item/melee/spear/bone : /obj/item/melee/spear) in parts_list if(!spear) - spear = bonespear ? new/obj/item/spear/bonespear(src) : new/obj/item/spear(src) + spear = bonespear ? new/obj/item/melee/spear/bone(src) : new/obj/item/melee/spear(src) update_appearance() return ..() diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index 5815bcc475e3..9aaefb8c014e 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -30,9 +30,6 @@ if(LAT != src) QDEL_IN(LAT, 0) -/obj/structure/lattice/blob_act(obj/structure/blob/B) - return - /obj/structure/lattice/attackby(obj/item/C, mob/user, params) if(resistance_flags & INDESTRUCTIBLE) return @@ -43,6 +40,15 @@ var/turf/T = get_turf(src) return T.attackby(C, user) //hand this off to the turf instead (for building plating, catwalks, etc) +/obj/structure/lattice/deconstruct_act(mob/living/user, obj/item/I) + . = ..() + if(!I.tool_start_check(user, amount=0)) + return FALSE + if(I.use_tool(src, user, 1 SECONDS, volume=0)) + to_chat(user, "You cut apart \the [src].", "You cut apart \the [src].") + deconstruct() + return TRUE + /obj/structure/lattice/deconstruct(disassembled = TRUE) if(!(flags_1 & NODECONSTRUCT_1)) new build_material(get_turf(src), number_of_mats) diff --git a/code/game/objects/structures/manned_turret.dm b/code/game/objects/structures/manned_turret.dm index e0f6e22f3e7e..637f2deeb515 100644 --- a/code/game/objects/structures/manned_turret.dm +++ b/code/game/objects/structures/manned_turret.dm @@ -214,7 +214,7 @@ /obj/item/gun_control name = "turret controls" - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "offhand" w_class = WEIGHT_CLASS_HUGE item_flags = ABSTRACT | NOBLUDGEON | DROPDEL diff --git a/code/game/objects/structures/plaques/static_plaques.dm b/code/game/objects/structures/plaques/static_plaques.dm index 1ac3ec7546da..00944c197415 100644 --- a/code/game/objects/structures/plaques/static_plaques.dm +++ b/code/game/objects/structures/plaques/static_plaques.dm @@ -47,3 +47,11 @@ name = "\improper Mr. Deempisi portrait" desc = "Under the painting a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'" icon_state = "monkey_painting" + +/obj/structure/plaque/listeningpost + name = "Listening Post Commemoration Plaque" + engraved = TRUE + +/obj/structure/plaque/listeningpost/Initialize() + . = ..() + desc = "Cybersun Virtual Solutions - Field Listening Post #[rand(107,356)]. Proudly built in [rand(478, 497)]." diff --git a/code/game/objects/structures/railings.dm b/code/game/objects/structures/railings.dm index 95c24145399f..d8f5c543a168 100644 --- a/code/game/objects/structures/railings.dm +++ b/code/game/objects/structures/railings.dm @@ -65,6 +65,15 @@ deconstruct() return TRUE +/obj/structure/railing/deconstruct_act(mob/living/user, obj/item/I) + . = ..() + if(!I.tool_start_check(user, amount=0)) + return FALSE + if (I.use_tool(src, user, 3 SECONDS, volume=0)) + to_chat(user, "You cut apart the railing.") + deconstruct() + return TRUE + /obj/structure/railing/deconstruct(disassembled) . = ..() if(!loc) //quick check if it's qdeleted already. diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index 0df440340eed..44a9f7f94717 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -75,13 +75,17 @@ FLOOR SAFES if(istype(I, /obj/item/clothing/neck/stethoscope)) attack_hand(user) return + + else if(I.tool_behaviour == TOOL_DECONSTRUCT) + user.visible_message("[user] begin to cut through the lock of \the [src].","You start cutting trough the lock of [src].") + if(I.use_tool(src, user, 60 SECONDS)) + broken = TRUE + user.visible_message("[user] successfully cuts trough the lock of \the [src].","You successfully cut trough the lock of [src].") + else to_chat(user, "You can't put [I] into the safe while it is closed!") return -/obj/structure/safe/blob_act(obj/structure/blob/B) - return - /obj/structure/safe/ex_act(severity, target) if(((severity == 2 && target == src) || severity == 1) && explosion_count < BROKEN_THRESHOLD) explosion_count++ diff --git a/code/game/objects/structures/salvaging.dm b/code/game/objects/structures/salvaging.dm index d373f8eb94a9..f4aad715db19 100644 --- a/code/game/objects/structures/salvaging.dm +++ b/code/game/objects/structures/salvaging.dm @@ -34,6 +34,16 @@ qdel(src) return TRUE +/obj/structure/salvageable/deconstruct_act(mob/living/user, obj/item/tool) + . = ..() + user.visible_message("[user] starts slicing [src].", \ + "You start salvaging anything useful from [src]...") + if(tool.use_tool(src, user, 6 SECONDS)) + user.visible_message("[user] dismantles [src].", \ + "You salvage [src].") + dismantle(user) + qdel(src) + return TRUE //Types themself, use them, but not the parent object @@ -242,7 +252,6 @@ /obj/item/research_notes/loot/medium = 20, /obj/item/research_notes/loot/big = 5, //you have a chance at summoning god damn ripley lobster from this thing, might as well - /obj/item/disk/tech_disk/major = 3, /obj/item/disk/tech_disk = 20, /obj/item/disk/data = 20, /obj/item/disk/holodisk = 20, @@ -303,7 +312,6 @@ /obj/item/research_notes/loot/medium = 20, /obj/item/research_notes/loot/big = 5, - /obj/item/disk/tech_disk/major = 3, /obj/item/disk/tech_disk = 20, /obj/item/disk/data = 20, /obj/item/disk/holodisk = 20, @@ -591,7 +599,6 @@ /obj/effect/spawner/lootdrop/random_machine_circuit_common loot = list( /obj/item/circuitboard/machine/autolathe = 5, - /obj/item/circuitboard/machine/bepis = 5, /obj/item/circuitboard/machine/biogenerator = 5, /obj/item/circuitboard/machine/cell_charger = 5, /obj/item/circuitboard/machine/chem_heater = 5, @@ -683,7 +690,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/objects/structures/showcase.dm b/code/game/objects/structures/showcase.dm index 475f2e00bcbc..5165e9ed649f 100644 --- a/code/game/objects/structures/showcase.dm +++ b/code/game/objects/structures/showcase.dm @@ -69,14 +69,14 @@ icon_state = "showcase_7" /obj/structure/showcase/mecha/marauder - name = "combat mech exhibit" - desc = "A stand with an empty old Nanotrasen Corporation combat mech bolted to it. It is described as the premier unit used to defend corporate interests and employees." + name = "combat exosuit exhibit" + desc = "A stand with an empty old Nanotrasen Corporation combat exosuit bolted to it. It is described as the premier unit used to defend corporate interests and employees." icon = 'icons/mecha/mecha.dmi' icon_state = "marauder" /obj/structure/showcase/mecha/ripley - name = "construction mech exhibit" - desc = "A stand with a retired construction mech bolted to it. The clamps are rated at 9300PSI. It seems to be falling apart." + name = "construction exosuit exhibit" + desc = "A stand with a retired construction exosuit bolted to it. The clamps are rated at 9300PSI. It seems to be falling apart." icon = 'icons/mecha/mecha.dmi' icon_state = "firefighter" diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm index 9f51ba34476a..68c99d6649a5 100644 --- a/code/game/objects/structures/statues.dm +++ b/code/game/objects/structures/statues.dm @@ -299,3 +299,31 @@ name = "\improper Karl Marx bust" desc = "A bust depicting a certain 19th century economist. You get the feeling a specter is haunting the sector." icon_state = "marx" + +/// bone +/obj/structure/statue/bone + anchored = TRUE + max_integrity = 120 + material_drop_type = /obj/item/stack/sheet/bone + impressiveness = 18 // Carved from the bones of a massive creature, it's going to be a specticle to say the least + layer = ABOVE_ALL_MOB_LAYER + +/obj/structure/statue/bone/rib + name = "collosal rib" + desc = "It's staggering to think that something this big could have lived, let alone died." + oreAmount = 4 + icon = 'icons/obj/statuelarge.dmi' + icon_state = "rib" + +/obj/structure/statue/bone/skull + name = "collosal skull" + desc = "The gaping maw of a dead, titanic monster." + oreAmount = 12 + icon = 'icons/obj/statuelarge.dmi' + icon_state = "skull" + +/obj/structure/statue/bone/skull/half + desc = "The gaping maw of a dead, titanic monster. This one is cracked in half." + oreAmount = 6 + icon = 'icons/obj/statuelarge.dmi' + icon_state = "skull-half" diff --git a/code/game/objects/structures/table_flipped.dm b/code/game/objects/structures/table_flipped.dm index c006695a7df0..28af5d0b63bd 100644 --- a/code/game/objects/structures/table_flipped.dm +++ b/code/game/objects/structures/table_flipped.dm @@ -17,10 +17,22 @@ AddElement(/datum/element/connect_loc, loc_connections) +/obj/structure/flippedtable/examine(mob/user) + . = ..() + . += span_notice("You could right the [name] by control shift-clicking it.") + +/obj/structure/flippedtable/proc/check_dir() + if(dir == NORTHEAST || dir == SOUTHEAST) + return EAST + if(dir == NORTHWEST || dir == SOUTHWEST) + return WEST + return dir + /obj/structure/flippedtable/CanAllowThrough(atom/movable/mover, turf/target) . = ..() - var/attempted_dir = get_dir(loc, target) - if(table_type == /obj/structure/table/glass) //Glass table, jolly ranchers pass + var/table_dir = check_dir() + var/attempted_dir = get_dir(loc, mover) + if(table_type == /obj/structure/table/glass) //Glass table, lasers can pass if(istype(mover) && (mover.pass_flags & PASSGLASS)) return TRUE if(istype(mover, /obj/projectile)) @@ -29,20 +41,20 @@ if(proj_obj.trajectory && angle2dir_cardinal(proj_obj.trajectory.angle) == dir) return TRUE return FALSE - return attempted_dir != dir + return attempted_dir != table_dir /obj/structure/flippedtable/proc/on_exit(datum/source, atom/movable/exiter, direction) SIGNAL_HANDLER - + var/table_dir = check_dir() if(exiter == src) return // Let's not block ourselves. - if(table_type == /obj/structure/table/glass) //Glass table, jolly ranchers pass + if(table_type == /obj/structure/table/glass) //Glass table, lasers pass if(istype(exiter) && (exiter.pass_flags & PASSGLASS)) return if(istype(exiter, /obj/projectile)) return - if(direction == dir) + if(direction == table_dir) exiter.Bump(src) return COMPONENT_ATOM_BLOCK_EXIT return @@ -51,10 +63,10 @@ . = ..() if(!istype(user) || !user.can_interact_with(src)) return FALSE - user.visible_message("[user] starts flipping [src]!", "You start flipping over the [src]!") + user.visible_message(span_danger("[user] starts flipping [src]!"), span_notice("You start flipping over the [src]!")) if(do_after(user, max_integrity/4)) var/obj/structure/table/table_unflip = new table_type(src.loc) table_unflip.obj_integrity = obj_integrity - user.visible_message("[user] flips over the [src]!", "You flip over the [src]!") + user.visible_message(span_danger("[user] flips over the [src]!"), span_notice("You flip over the [src]!")) playsound(src, 'sound/items/trayhit2.ogg', 100) qdel(src) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 4ebd416675b8..d5b1710b6296 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -162,7 +162,7 @@ /obj/structure/table/attackby(obj/item/I, mob/user, params) var/list/modifiers = params2list(params) if(!(flags_1 & NODECONSTRUCT_1) && user.a_intent != INTENT_HELP) - if(I.tool_behaviour == TOOL_SCREWDRIVER && deconstruction_ready) + if((I.tool_behaviour == TOOL_SCREWDRIVER) && deconstruction_ready) to_chat(user, "You start disassembling [src]...") if(I.use_tool(src, user, 20, volume=50)) deconstruct(TRUE) @@ -227,6 +227,15 @@ else return ..() +/obj/structure/table/deconstruct_act(mob/living/user, obj/item/I) + . = ..() + if(!I.tool_start_check(user, amount=0)) + return FALSE + if (I.use_tool(src, user, 1 SECONDS, volume=0)) + to_chat(user, span_warning("You cut [src] into sheets.")) + deconstruct(wrench_disassembly = TRUE) + return TRUE + /obj/structure/table/proc/AfterPutItemOnTable(obj/item/I, mob/living/user) return @@ -726,7 +735,6 @@ /obj/item/rack_parts name = "rack parts" desc = "Parts of a rack." - icon = 'icons/obj/items_and_weapons.dmi' icon_state = "rack_parts" flags_1 = CONDUCT_1 custom_materials = list(/datum/material/iron=2000) diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index 1be5f857e155..c0604dd5e09b 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -28,10 +28,10 @@ /obj/structure/tank_dispenser/update_overlays() . = ..() switch(oxygentanks) - if(1 to 3) + if(1 to 4) . += "oxygen-[oxygentanks]" - if(4 to TANK_DISPENSER_CAPACITY) - . += "oxygen-4" + if(5 to TANK_DISPENSER_CAPACITY) + . += "oxygen-5" switch(plasmatanks) if(1 to 4) . += "plasma-[plasmatanks]" diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index c22858ea591d..6db5f18e31b9 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -218,7 +218,7 @@ /obj/item/reagent_containers/food/snacks/urinalcake name = "urinal cake" desc = "The noble urinal cake, protecting the people's pipes from the people's pee. Edibility is suggested to be low." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "urinalcake" w_class = WEIGHT_CLASS_TINY list_reagents = list(/datum/reagent/chlorine = 3, /datum/reagent/ammonia = 1) @@ -397,6 +397,49 @@ icon_state = "puddle" resistance_flags = UNACIDABLE +//***Oil well puddles. +/obj/structure/sink/oil_well + name = "oil well" + desc = "A bubbling pool of oil.This would probably be valuable, had bluespace technology not destroyed the need for fossil fuels 200 years ago." + icon = 'icons/obj/watercloset.dmi' + icon_state = "puddle-oil" + dispensedreagent = /datum/reagent/fuel/oil + +/obj/structure/sink/oil_well/Initialize() + .=..() + create_reagents(20) + reagents.add_reagent(dispensedreagent, 20) + +/obj/structure/sink/oil_well/attack_hand(mob/M) + flick("puddle-oil-splash",src) + reagents.expose(M, TOUCH, 20) //Covers target in 20u of oil. + to_chat(M, "You touch the pool of oil, only to get oil all over yourself. It would be wise to wash this off with water.") + +/obj/structure/sink/oil_well/attackby(obj/item/O, mob/user, params) + flick("puddle-oil-splash",src) + if(O.tool_behaviour == TOOL_SHOVEL && !(flags_1&NODECONSTRUCT_1)) //attempt to deconstruct the puddle with a shovel + to_chat(user, "You fill in the oil well with soil.") + O.play_tool_sound(src) + deconstruct() + return 1 + if(istype(O, /obj/item/reagent_containers)) //Refilling bottles with oil + var/obj/item/reagent_containers/RG = O + if(RG.is_refillable()) + if(!RG.reagents.holder_full()) + RG.reagents.add_reagent(dispensedreagent, min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this)) + to_chat(user, "You fill [RG] from [src].") + return TRUE + to_chat(user, "\The [RG] is full.") + return FALSE + if(user.a_intent != INTENT_HARM) + to_chat(user, "You won't have any luck getting \the [O] out if you drop it in the oil.") + return 1 + else + return ..() + +/obj/structure/sink/oil_well/drop_materials() + new /obj/effect/decal/cleanable/oil(loc) + //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/structure/sink/puddle/attack_hand(mob/M) icon_state = "puddle-splash" diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 49c3823cf1ce..5064883c5de9 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -27,11 +27,15 @@ var/real_explosion_block //ignore this, just use explosion_block var/breaksound = "shatter" var/hitsound = 'sound/effects/Glasshit.ogg' + var/decon_time = 5 SECONDS flags_ricochet = RICOCHET_HARD ricochet_chance_mod = 0.4 hitsound_type = PROJECTILE_HITSOUND_GLASS + /// If some inconsiderate jerk has had their blood spilled on this window, thus making it cleanable + var/bloodied = FALSE + /obj/structure/window/examine(mob/user) . = ..() if(flags_1 & NODECONSTRUCT_1) @@ -286,6 +290,15 @@ qdel(src) update_nearby_icons() +/obj/structure/window/deconstruct_act(mob/living/user, obj/item/I) + . = ..() + if(!I.tool_start_check(user, amount=0)) + return FALSE + if (I.use_tool(src, user, decon_time, volume=100)) + to_chat(user, span_warning("You shatter [src] with the [I].")) + deconstruct(FALSE) + return TRUE + /obj/structure/window/proc/spawnDebris(location) . = list() . += new /obj/item/shard(location) @@ -396,6 +409,7 @@ glass_type = /obj/item/stack/sheet/rglass rad_insulation = RAD_HEAVY_INSULATION ricochet_chance_mod = 0.8 + decon_time = 20 SECONDS //this is shitcode but all of construction is shitcode and needs a refactor, it works for now //If you find this like 4 years later and construction still hasn't been refactored, I'm so sorry for this @@ -405,7 +419,7 @@ switch(state) if(RWINDOW_SECURE) - if(I.tool_behaviour == TOOL_WELDER && user.a_intent == INTENT_HARM) + if((I.tool_behaviour == TOOL_WELDER) && user.a_intent == INTENT_HARM) user.visible_message("[user] holds \the [I] to the security screws on \the [src]...", "You begin heating the security screws on \the [src]...") if(I.use_tool(src, user, 150, volume = 100)) @@ -528,6 +542,7 @@ damage_deflection = 11 //WS Edit - Weakens R-Windows explosion_block = 2 glass_type = /obj/item/stack/sheet/plasmarglass + decon_time = 25 SECONDS //entirely copypasted code //take this out when construction is made a component or otherwise modularized in some way @@ -743,6 +758,7 @@ glass_type = /obj/item/stack/sheet/plastitaniumglass glass_amount = 2 rad_insulation = RAD_HEAVY_INSULATION + decon_time = 30 SECONDS /obj/structure/window/plasma/reinforced/plastitanium/unanchored anchored = FALSE diff --git a/code/game/say.dm b/code/game/say.dm index 2d53eea65e75..cac8bafe5365 100644 --- a/code/game/say.dm +++ b/code/game/say.dm @@ -72,7 +72,7 @@ GLOBAL_LIST_INIT(freqcolor, list()) namepart = "[known_name]" else var/mob/living/carbon/human/human_narrator = reliable_narrator - namepart = "[human_narrator.get_generic_name(prefixed = TRUE, lowercase = FALSE)]" + namepart = "[human_narrator.get_generic_name(prefixed = TRUE, lowercase = TRUE)]" //End name span. var/endspanpart = "
    " diff --git a/code/game/turfs/closed/_closed.dm b/code/game/turfs/closed/_closed.dm index 2b7d93ae2590..ea0c0d4ed4b1 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,229 @@ /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) + if(!isclosedturf(src)) + return + //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) + var/act_duration = breakdown_duration + 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...") + while(I.use_tool(src, user, act_duration, volume=50)) + if(iswallturf(src)) + to_chat(user, "You slice through some of the outer plating...") + if(!alter_integrity(-(I.wall_decon_damage),user,FALSE,TRUE)) + return TRUE + else + break -/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) + return FALSE -/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/deconstruct_act(mob/living/user, obj/item/I) + var/act_duration = breakdown_duration + if(!I.tool_start_check(user, amount=0)) + return FALSE + to_chat(user, "You begin slicing through the outer plating...") + while(I.use_tool(src, user, act_duration, volume=100)) + if(iswallturf(src)) + to_chat(user, "You slice through some of the outer plating...") + if(!alter_integrity(-(I.wall_decon_damage),user,FALSE,TRUE)) + return TRUE + else + break -/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 FALSE + +/turf/closed/mech_melee_attack(obj/mecha/M) + M.do_attack_animation(src) + switch(M.damtype) + if(BRUTE) + playsound(src, 'sound/weapons/punch4.ogg', 50, TRUE) + if(BURN) + playsound(src, 'sound/items/welder.ogg', 100, TRUE) + if(TOX) + playsound(src, 'sound/effects/spray2.ogg', 100, TRUE) + + + if(prob(hardness + M.force) && M.force > 20) + M.visible_message("[M.name] hits [src] with great force!", \ + "You hit [src] with incredible force!", null, COMBAT_MESSAGE_RANGE) + dismantle_wall(TRUE) + playsound(src, 'sound/effects/meteorimpact.ogg', 100, TRUE) + else + M.visible_message("[M.name] hits [src]!", \ + "You hit [src]!", null, COMBAT_MESSAGE_RANGE) + alter_integrity(M.force * 20) + +/turf/closed/attack_hulk(mob/living/carbon/user) + ..() + var/obj/item/bodypart/arm = user.hand_bodyparts[user.active_hand_index] + if(!arm || arm.bodypart_disabled) + return + alter_integrity(-250,user) + user.visible_message("[user] smashes \the [src]!", \ + "You smash \the [src]!", \ + "You hear a booming smash!") return TRUE -/turf/closed/indestructible/riveted/hierophant - name = "wall" - desc = "A wall made out of a strange metal. The squares on it pulse in a predictable pattern." - icon = 'icons/turf/walls/hierophant_wall.dmi' - icon_state = "wall" - smoothing_flags = SMOOTH_CORNERS - smoothing_groups = list(SMOOTH_GROUP_HIERO_WALL) - canSmoothWith = list(SMOOTH_GROUP_HIERO_WALL) - -/turf/closed/indestructible/blank - name = "space" - desc = "It's the end of the world every day, for someone." - icon = 'icons/turf/space.dmi' - icon_state = "black" - explosion_block = 1000 // fuck it, let's go higher +/turf/closed/attack_animal(mob/living/simple_animal/M) + M.changeNext_move(CLICK_CD_MELEE) + M.do_attack_animation(src) + if((M.environment_smash & mob_smash_flags)) + playsound(src, 'sound/effects/meteorimpact.ogg', 100, TRUE) + alter_integrity(-400) + return diff --git a/code/game/turfs/closed/indestructible.dm b/code/game/turfs/closed/indestructible.dm new file mode 100644 index 000000000000..5c3b554c98dd --- /dev/null +++ b/code/game/turfs/closed/indestructible.dm @@ -0,0 +1,308 @@ +/turf/closed/indestructible + name = "wall" + desc = "Effectively impervious to conventional methods of destruction." + icon = 'icons/turf/walls.dmi' + explosion_block = 50 + max_integrity = 10000000 + +/turf/closed/indestructible/TerraformTurf(path, new_baseturf, flags, defer_change = FALSE, ignore_air = FALSE) + return + +/turf/closed/indestructible/acid_act(acidpwr, acid_volume, acid_id) + return 0 + +/turf/closed/indestructible/ex_act(severity, target) + return + +/turf/closed/indestructible/alter_integrity(damage, mob/user, devastate, safe_decon) + return FALSE + +/turf/closed/indestructible/set_integrity(amount, devastate, mob/user) + return + +/turf/closed/indestructible/dismantle_wall(devastate, mob/user) + return + +/turf/closed/indestructible/try_decon(obj/item/I, mob/user, turf/T) + return FALSE + +/turf/closed/indestructible/try_destroy(obj/item/W, mob/user, turf/T) + user.do_attack_animation(src) + to_chat(user, "[W] isn't strong enough to damage [src]!") + playsound(src, 'sound/weapons/tap.ogg', 50, TRUE) + return TRUE + +/turf/closed/indestructible/mech_melee_attack(obj/mecha/M) + M.do_attack_animation(src) + switch(M.damtype) + if(BRUTE) + playsound(src, 'sound/weapons/punch4.ogg', 50, TRUE) + if(BURN) + playsound(src, 'sound/items/welder.ogg', 100, TRUE) + if(TOX) + playsound(src, 'sound/effects/spray2.ogg', 100, TRUE) + M.visible_message("[M.name] hits [src] and doesn't even leave a mark!", \ + "You hit [src] and fail to damage it.", null, COMBAT_MESSAGE_RANGE) + +/turf/closed/indestructible/attack_hulk(mob/living/carbon/user) + return FALSE + +/turf/closed/indestructible/attack_animal(mob/living/simple_animal/M) + M.changeNext_move(CLICK_CD_MELEE) + M.do_attack_animation(src) + return + +/turf/closed/indestructible/Melt() + to_be_destroyed = FALSE + return src + +/turf/closed/indestructible/singularity_act() + return + +/turf/closed/indestructible/sandstone + name = "sandstone wall" + desc = "A wall with sandstone plating. Rough." + icon = 'icons/turf/walls/sandstone_wall.dmi' + icon_state = "sandstone_wall-0" + base_icon_state = "sandstone_wall" + baseturfs = /turf/closed/indestructible/sandstone + smoothing_flags = SMOOTH_BITMASK + +/turf/closed/indestructible/splashscreen + name = "Space Station 13" + icon = 'icons/blank_title.png' + icon_state = "" + layer = SPLASHSCREEN_LAYER + plane = SPLASHSCREEN_PLANE + bullet_bounce_sound = null + +/turf/closed/indestructible/splashscreen/New() + SStitle.splash_turf = src + if(SStitle.icon) + icon = SStitle.icon + ..() + +/turf/closed/indestructible/splashscreen/vv_edit_var(var_name, var_value) + . = ..() + if(.) + switch(var_name) + if(NAMEOF(src, icon)) + SStitle.icon = icon + + +/turf/closed/indestructible/reinforced + name = "reinforced wall" + desc = "A huge chunk of reinforced metal used to separate rooms. Effectively impervious to conventional methods of destruction." + icon = 'icons/turf/walls/rwalls/reinforced_wall.dmi' + icon_state = "reinforced_wall-0" + base_icon_state = "reinforced_wall" + smoothing_flags = SMOOTH_BITMASK + smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_AIRLOCK) + canSmoothWith = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_WINDOW_FULLTILE, SMOOTH_GROUP_AIRLOCK) + +/turf/closed/indestructible/titanium + name = "wall" + desc = "A light-weight titanium wall used in shuttles. Effectively impervious to conventional methods of destruction." + icon = 'icons/turf/walls/shuttle_wall.dmi' + icon_state = "shuttle_wall-0" + base_icon_state = "shuttle_wall" + flags_ricochet = RICOCHET_SHINY | RICOCHET_HARD + smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS + smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_TITANIUM_WALLS) + canSmoothWith = list(SMOOTH_GROUP_TITANIUM_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTLE_PARTS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_WINDOW_FULLTILE) + +/turf/closed/indestructible/riveted + icon = 'icons/turf/walls/riveted.dmi' + icon_state = "riveted-0" + base_icon_state = "riveted" + smoothing_flags = SMOOTH_BITMASK + smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS) + canSmoothWith = list(SMOOTH_GROUP_CLOSED_TURFS) + +/turf/closed/indestructible/syndicate + icon = 'icons/turf/walls/plastitanium_wall.dmi' + icon_state = "plastitanium_wall-0" + base_icon_state = "plastitanium_wall" + smoothing_flags = SMOOTH_BITMASK + smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_SYNDICATE_WALLS) + canSmoothWith = list(SMOOTH_GROUP_SYNDICATE_WALLS, SMOOTH_GROUP_PLASTITANIUM_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTLE_PARTS) + +/turf/closed/indestructible/riveted/uranium + icon = 'icons/turf/walls/uranium_wall.dmi' + icon_state = "uranium_wall-0" + base_icon_state = "uranium_wall" + smoothing_flags = SMOOTH_BITMASK + +/turf/closed/indestructible/riveted/plastinum + name = "plastinum wall" + desc = "A luxurious wall made out of a plasma-platinum alloy. Effectively impervious to conventional methods of destruction." + icon = 'icons/turf/walls/plastinum_wall.dmi' + icon_state = "plastinum_wall-0" + base_icon_state = "plastinum_wall" + smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS + +/turf/closed/indestructible/wood + icon = 'icons/turf/walls/wood_wall.dmi' + icon_state = "wood_wall-0" + base_icon_state = "wood_wall" + smoothing_flags = SMOOTH_BITMASK + smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_AIRLOCK) + canSmoothWith = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_WINDOW_FULLTILE, SMOOTH_GROUP_AIRLOCK) + + +/turf/closed/indestructible/alien + name = "alien wall" + desc = "A wall with alien alloy plating." + icon = 'icons/turf/walls/abductor_wall.dmi' + icon_state = "abductor_wall-0" + base_icon_state = "abductor_wall" + smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS + smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_ABDUCTOR_WALLS) + canSmoothWith = list(SMOOTH_GROUP_ABDUCTOR_WALLS) + + +/turf/closed/indestructible/cult + name = "runed metal wall" + desc = "A cold metal wall engraved with indecipherable symbols. Studying them causes your head to pound. Effectively impervious to conventional methods of destruction." + icon = 'icons/turf/walls/cult_wall.dmi' + icon_state = "cult_wall-0" + base_icon_state = "cult_wall" + smoothing_flags = SMOOTH_BITMASK + smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS) + canSmoothWith = list(SMOOTH_GROUP_WALLS) + + +/turf/closed/indestructible/abductor + icon_state = "alien1" + +/turf/closed/indestructible/opshuttle + icon_state = "wall3" + + +/turf/closed/indestructible/fakeglass + name = "window" + icon = 'icons/obj/smooth_structures/reinforced_window.dmi' + icon_state = "fake_window" + base_icon_state = "reinforced_window" + opacity = FALSE + smoothing_flags = SMOOTH_BITMASK + smoothing_groups = list(SMOOTH_GROUP_WINDOW_FULLTILE) + canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE) + +/turf/closed/indestructible/fakeglass/Initialize(mapload, inherited_virtual_z) + . = ..() + underlays += mutable_appearance('icons/obj/structures.dmi', "grille") //add a grille underlay + underlays += mutable_appearance('icons/turf/floors.dmi', "plating") //add the plating underlay, below the grille + + +/turf/closed/indestructible/opsglass + name = "window" + icon = 'icons/obj/smooth_structures/plastitanium_window.dmi' + icon_state = "plastitanium_window-0" + base_icon_state = "plastitanium_window" + opacity = FALSE + smoothing_flags = SMOOTH_BITMASK + smoothing_groups = list(SMOOTH_GROUP_SHUTTLE_PARTS, SMOOTH_GROUP_WINDOW_FULLTILE_PLASTITANIUM) + canSmoothWith = list(SMOOTH_GROUP_WINDOW_FULLTILE_PLASTITANIUM) + +/turf/closed/indestructible/opsglass/Initialize() + . = ..() + icon_state = null + underlays += mutable_appearance('icons/obj/structures.dmi', "grille") + underlays += mutable_appearance('icons/turf/floors.dmi', "plating") + +/turf/closed/indestructible/fakedoor + name = "CentCom Access" + icon = 'icons/obj/doors/airlocks/centcom/centcom.dmi' + icon_state = "fakedoor" + +/turf/closed/indestructible/rock + name = "dense rock" + desc = "An extremely densely-packed rock, most mining tools or explosives would never get through this." + icon = 'icons/turf/walls/rock_wall.dmi' + icon_state = "rock_wall-0" + base_icon_state = "rock_wall" + smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER | SMOOTH_CONNECTORS + smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_MINERAL_WALLS) + canSmoothWith = list(SMOOTH_GROUP_MINERAL_WALLS) + no_connector_typecache = list(/turf/closed/mineral, /turf/closed/indestructible/rock) + connector_icon = 'icons/turf/connectors/smoothrocks_connector.dmi' + connector_icon_state = "smoothrocks_connector" + pixel_x = -4 + pixel_y = -4 + +/turf/closed/indestructible/rock/snow + name = "mountainside" + desc = "Extremely densely-packed sheets of ice and rock, forged over the years of the harsh cold." + icon = 'icons/turf/walls/icerock_wall.dmi' + icon_state = "icerock_wall-0" + base_icon_state = "icerock_wall" + smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER + smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_MINERAL_WALLS) + canSmoothWith = list(SMOOTH_GROUP_MINERAL_WALLS) + pixel_x = -4 + pixel_y = -4 + bullet_sizzle = TRUE + bullet_bounce_sound = null + +/turf/closed/indestructible/rock/schist + name = "schist" + desc = "Extremely densely-packed layers of schist. Say it ten times fast." + icon = 'icons/turf/walls/rockwall_icemoon.dmi' + icon_state = "rockwall_icemoon-0" + base_icon_state = "rockwall_icemoon" + +/turf/closed/indestructible/paper + name = "thick paper wall" + desc = "A wall layered with impenetrable sheets of paper." + icon = 'icons/turf/walls.dmi' + icon_state = "paperwall" + +/turf/closed/indestructible/necropolis + name = "necropolis wall" + desc = "A seemingly impenetrable wall." + icon = 'icons/turf/walls.dmi' + icon_state = "necro" + explosion_block = 50 + baseturfs = /turf/closed/indestructible/necropolis + +/turf/closed/indestructible/necropolis/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) + underlay_appearance.icon = 'icons/turf/floors.dmi' + underlay_appearance.icon_state = "necro1" + return TRUE + +/turf/closed/indestructible/riveted/boss + name = "thick stone wall" + desc = "A thick, seemingly indestructible stone wall." + icon = 'icons/turf/walls/boss_wall.dmi' + icon_state = "boss_wall-0" + base_icon_state = "boss_wall" + smoothing_flags = SMOOTH_BITMASK + smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_BOSS_WALLS) + canSmoothWith = list(SMOOTH_GROUP_BOSS_WALLS) + explosion_block = 50 + baseturfs = /turf/closed/indestructible/riveted/boss + +/turf/closed/indestructible/riveted/boss/see_through + opacity = FALSE + +/turf/closed/indestructible/riveted/boss/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) + underlay_appearance.icon = 'icons/turf/floors.dmi' + underlay_appearance.icon_state = "basalt" + return TRUE + +/turf/closed/indestructible/riveted/hierophant + name = "wall" + desc = "A wall made out of a strange metal. The squares on it pulse in a predictable pattern." + icon = 'icons/turf/walls/hierophant_wall.dmi' + icon_state = "wall" + smoothing_flags = SMOOTH_CORNERS + smoothing_groups = list(SMOOTH_GROUP_HIERO_WALL) + canSmoothWith = list(SMOOTH_GROUP_HIERO_WALL) + +/turf/closed/indestructible/blank + name = "space" + desc = "It's the end of the world every day, for someone." + icon = 'icons/turf/space.dmi' + icon_state = "black" + explosion_block = 1000 // fuck it, let's go higher diff --git a/code/game/turfs/closed/minerals.dm b/code/game/turfs/closed/minerals.dm index 33fcf315fc52..3970cc403d73 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,42 @@ 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) + var/act_duration = breakdown_duration if(I.tool_behaviour == TOOL_MINING) - var/turf/T = user.loc - if (!isturf(T)) - return - - if(last_act + (40 * I.toolspeed) > world.time)//prevents message spam - return - last_act = world.time - balloon_alert(user, "digging...") + if(!I.tool_start_check(user, amount=0)) + return FALSE - if(I.use_tool(src, user, 40, volume=50)) + to_chat(user, "You begin breaking through the rock...") + while(I.use_tool(src, user, act_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) + if(!alter_integrity(-(I.wall_decon_damage),user,FALSE,TRUE)) + return TRUE + else + break + + 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 +127,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 +150,10 @@ var/mob/living/carbon/human/H = AM var/obj/item/I = H.is_holding_tool_quality(TOOL_MINING) if(I) - attackby(I, H) + if(last_act + (40 * I.toolspeed) > world.time)//prevents message spam + return + last_act = world.time + try_decon(I, H) return else if(iscyborg(AM)) var/mob/living/silicon/robot/R = AM diff --git a/code/game/turfs/closed/wall/conc_walls.dm b/code/game/turfs/closed/wall/conc_walls.dm index 6f0487ff39b7..aa5845b1144b 100644 --- a/code/game/turfs/closed/wall/conc_walls.dm +++ b/code/game/turfs/closed/wall/conc_walls.dm @@ -11,34 +11,26 @@ hardness = 30 // doesn't matter much; everything that uses it gets overridden explosion_block = 3 break_sound = 'sound/effects/break_stone.ogg' + attack_hitsound = 'sound/effects/hit_stone.ogg' + hitsound_type = PROJECTILE_HITSOUND_STONE sheet_type = null girder_type = /obj/structure/grille - // The wall will ignore damage from weak items, depending on their - // force, damage type, tool behavior, and sharpness. This is the minimum - // amount of force that a blunt, brute item must have to damage the wall. - var/min_dam = 8 - // This should all be handled by integrity should that ever be expanded to walls. - var/max_health = 650 - var/health - // used to give mining projectiles a bit of an edge against conc walls - var/static/list/extra_dam_proj = typecacheof(list( - /obj/projectile/kinetic, - /obj/projectile/destabilizer, - /obj/projectile/plasma - )) - var/time_to_harden = 30 SECONDS // fraction ranging from 0 to 1 -- 0 is fully soft, 1 is fully hardened // don't change this in subtypes unless you want them to spawn in soft on maps var/harden_lvl = 1 - var/mutable_appearance/crack_overlay + burn_mod = 0.66 + repair_amount = 0 + //mining projectiles do extra damage + extra_dam_proj = list( + /obj/projectile/kinetic, + /obj/projectile/destabilizer, + /obj/projectile/plasma) /turf/closed/wall/concrete/Initialize(mapload, ...) . = ..() - if(health == null) - health = max_health check_harden() update_stats() @@ -46,9 +38,9 @@ . = ..() // by this point it's guaranteed to be a concrete wall var/turf/closed/wall/concrete/conc_wall = T - if(conc_wall.health != health || conc_wall.harden_lvl != harden_lvl) + if(conc_wall.integrity != integrity || conc_wall.harden_lvl != harden_lvl) conc_wall.harden_lvl = harden_lvl - conc_wall.health = health + conc_wall.integrity = integrity // very much not a fan of all the repetition here, // but there's unfortunately no easy way around it conc_wall.check_harden() @@ -68,17 +60,7 @@ add_filter("harden", 1, color_matrix_filter(col_filter, FILTER_COLOR_RGB)) return -/turf/closed/wall/concrete/update_overlays() - . = ..() - var/adj_dam_pct = 1 - (health/(max_health*0.7)) - if(adj_dam_pct <= 0) - return - if(!crack_overlay) - crack_overlay = mutable_appearance('icons/effects/concrete_damage.dmi', "cracks", BULLET_HOLE_LAYER) - crack_overlay.alpha = adj_dam_pct*255 - . += crack_overlay - -// we use this to show health + drying percentage +// we use this to show integrity + drying percentage /turf/closed/wall/concrete/deconstruction_hints(mob/user) . = list() . += "[p_they(TRUE)] look[p_s()] like you could smash [p_them()]." @@ -89,19 +71,12 @@ . += "[p_they(TRUE)] look[p_s()] a little wet." if(0 to 0.4) . += "[p_they(TRUE)] look[p_s()] freshly poured." - switch(health / max_health) - if(0.5 to 0.99) - . += "[p_they(TRUE)] look[p_s()] slightly damaged." - if(0.25 to 0.5) - . += "[p_they(TRUE)] appear[p_s()] heavily damaged." - if(0 to 0.25) - . += "[p_theyre(TRUE)] falling apart!" return /turf/closed/wall/concrete/create_girder() var/obj/girder = ..() - if(health < 0) - girder.take_damage(min(abs(health), 50)) + if(integrity < 0) + girder.take_damage(min(abs(integrity), 50)) return girder /turf/closed/wall/concrete/proc/check_harden() @@ -115,66 +90,16 @@ STOP_PROCESSING(SSobj, src) update_stats() -/turf/closed/wall/concrete/proc/update_stats() +/turf/closed/wall/concrete/update_stats() + .= .. () // explosion block is diminished on a damaged / soft wall - explosion_block = (health / max_health) * harden_lvl * initial(explosion_block) - update_appearance() + explosion_block = (integrity / max_integrity) * harden_lvl * initial(explosion_block) -/turf/closed/wall/concrete/proc/alter_health(delta) +/turf/closed/wall/concrete/alter_integrity(damage) // 8x as vulnerable when unhardened - if(delta < 0) - delta *= 1 + 7*(1-harden_lvl) - health += delta - if(health <= 0) - // if damage put us 50 points or more below 0, we got proper demolished - dismantle_wall(health <= -50 ? TRUE : FALSE) - return FALSE - health = min(health, max_health) - update_stats() - return health - -/turf/closed/wall/concrete/ex_act(severity, target) - if(target == src || !density) - return ..() - switch(severity) - if(EXPLODE_DEVASTATE) - alter_health(-2000) - if(EXPLODE_HEAVY) - alter_health(rand(-500, -800)) - if(EXPLODE_LIGHT) - alter_health(rand(-200, -700)) - -/turf/closed/wall/concrete/bullet_act(obj/projectile/P) - . = ..() - var/dam = get_proj_damage(P) - if(!dam) - return - if(P.suppressed != SUPPRESSED_VERY) - visible_message("[src] is hit by \a [P]!", null, null, COMBAT_MESSAGE_RANGE) - if(!QDELETED(src)) - alter_health(-dam) - -/turf/closed/wall/concrete/attack_animal(mob/living/simple_animal/M) - M.changeNext_move(CLICK_CD_MELEE) - M.do_attack_animation(src) - if((M.environment_smash & ENVIRONMENT_SMASH_WALLS) || (M.environment_smash & ENVIRONMENT_SMASH_RWALLS)) - playsound(src, 'sound/effects/meteorimpact.ogg', 100, TRUE) - alter_health(-400) - return - -/turf/closed/wall/concrete/attack_hulk(mob/living/carbon/user) - SEND_SIGNAL(src, COMSIG_ATOM_HULK_ATTACK, user) - log_combat(user, src, "attacked") - var/obj/item/bodypart/arm = user.hand_bodyparts[user.active_hand_index] - if(!arm || arm.bodypart_disabled) - return FALSE - playsound(src, 'sound/effects/meteorimpact.ogg', 100, TRUE) - user.visible_message("[user] smashes \the [src]!", \ - "You smash \the [src]!", \ - "You hear a booming smash!") - user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ), forced = "hulk") - alter_health(-250) - return TRUE + if(damage < 0) + damage *= 1 + 7*(1-harden_lvl) + .= ..() /turf/closed/wall/concrete/mech_melee_attack(obj/mecha/M) M.do_attack_animation(src) @@ -184,7 +109,7 @@ "You hit [src]!", null, COMBAT_MESSAGE_RANGE) playsound(src, 'sound/weapons/punch4.ogg', 50, TRUE) playsound(src, 'sound/effects/meteorimpact.ogg', 100, TRUE) - alter_health(M.force * -20) + alter_integrity(M.force * -20) if(BURN) playsound(src, 'sound/items/welder.ogg', 100, TRUE) if(TOX) @@ -198,60 +123,14 @@ /turf/closed/wall/concrete/try_decon(obj/item/W, mob/user, turf/T) return null -// catch-all for using most items on the wall -- attempt to smash -/turf/closed/wall/concrete/try_destroy(obj/item/W, mob/user, turf/T) - var/dam = get_item_damage(W) - user.do_attack_animation(src) - if(!dam) - to_chat(user, "[W] isn't strong enough to damage [src]!") - playsound(src, 'sound/weapons/tap.ogg', 50, TRUE) - return TRUE - log_combat(user, src, "attacked", W) - user.visible_message("[user] hits [src] with [W]!", \ - "You hit [src] with [W]!", null, COMBAT_MESSAGE_RANGE) - switch(W.damtype) - if(BRUTE) - playsound(src, 'sound/effects/hit_stone.ogg', 50, TRUE) - if(BURN) - playsound(src, 'sound/items/welder.ogg', 100, TRUE) - alter_health(-dam) - return TRUE +/turf/closed/wall/concrete/get_item_damage(obj/item/I, t_min = min_dam) + t_min = min_dam / (1 + 7*(1-harden_lvl)) // drying walls are more vulnerable + . = .. () -/turf/closed/wall/concrete/proc/get_item_damage(obj/item/I) - var/dam = I.force - if(istype(I, /obj/item/clothing/gloves/gauntlets)) - dam = 20 - else if(I.tool_behaviour == TOOL_MINING) - dam *= (4/3) - else - switch(I.damtype) - if(BRUTE) - if(I.get_sharpness()) - dam *= 2/3 - if(BURN) - dam *= 2/3 - else - return 0 - var/t_min = min_dam / (1 + 7*(1-harden_lvl)) // drying walls are more vulnerable - // if dam is below t_min, then the hit has no effect - return (dam < t_min ? 0 : dam) -/turf/closed/wall/concrete/proc/get_proj_damage(obj/projectile/P) - var/dam = P.damage - // mining projectiles have an edge - if(is_type_in_typecache(P, extra_dam_proj)) - dam = max(dam, 30) - else - switch(P.damage_type) - if(BRUTE) - dam *= 1 - if(BURN) - dam *= 2/3 - else - return 0 - var/t_min = min_dam / (1 + 7*(1-harden_lvl)) // drying walls are more vulnerable - // if dam is below t_min, then the hit has no effect - return (dam < t_min ? 0 : dam) +/turf/closed/wall/concrete/get_proj_damage(obj/projectile/P, t_min = min_dam) + t_min = min_dam / (1 + 7*(1-harden_lvl)) // drying walls are more vulnerable + . = ..() /turf/closed/wall/concrete/reinforced name = "hexacrete wall" @@ -266,7 +145,7 @@ girder_type = /obj/structure/girder min_dam = 13 - max_health = 1300 + max_integrity = 1300 time_to_harden = 60 SECONDS // requires ENVIRONMENT_SMASH_RWALLS for simplemobs to break @@ -276,7 +155,7 @@ if(!M.environment_smash) return if(M.environment_smash & ENVIRONMENT_SMASH_RWALLS) - alter_health(-600) // 3 hits to kill + alter_integrity(-600) // 3 hits to kill playsound(src, 'sound/effects/meteorimpact.ogg', 100, TRUE) else playsound(src, 'sound/effects/bang.ogg', 50, TRUE) diff --git a/code/game/turfs/closed/wall/mineral_walls.dm b/code/game/turfs/closed/wall/mineral_walls.dm index 53dbb9479f3b..1ca5a1cc527c 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" @@ -230,7 +243,7 @@ /turf/closed/wall/mineral/wood/attackby(obj/item/W, mob/user) if(W.get_sharpness() && W.force) var/duration = (48/W.force) * 2 //In seconds, for now. - if(istype(W, /obj/item/hatchet) || istype(W, /obj/item/fireaxe)) + if(istype(W, /obj/item/hatchet) || istype(W, /obj/item/melee/axe/fire)) duration /= 4 //Much better with hatchets and axes. if(do_after(user, duration*10, target=src)) //Into deciseconds. dismantle_wall(devastated = FALSE) @@ -260,6 +273,8 @@ connector_icon_state = "iron_wall_connector" no_connector_typecache = list(/turf/closed/wall/mineral/iron, /obj/structure/falsewall/iron) + max_integrity = 300 + /turf/closed/wall/mineral/iron/yesdiag icon_state = "iron_wall-255" smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS @@ -278,7 +293,7 @@ no_connector_typecache = list(/turf/closed/wall/mineral/snow) hardness = 80 explosion_block = 0 - slicing_duration = 30 + breakdown_duration = 30 sheet_type = /obj/item/stack/sheet/mineral/snow canSmoothWith = null girder_type = null @@ -287,6 +302,11 @@ hitsound_type = PROJECTILE_HITSOUND_SNOW + max_integrity = 50 + burn_mod = 3 + brute_mod = 1.5 + min_dam = 1 + /turf/closed/wall/mineral/snow/yesdiag icon_state = "snow_wall-255" smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS @@ -298,12 +318,14 @@ icon_state = "abductor_wall-0" base_icon_state = "abductor_wall" sheet_type = /obj/item/stack/sheet/mineral/abductor - slicing_duration = 200 //alien wall takes twice as much time to slice + breakdown_duration = 100 //alien wall takes twice as much time to slice explosion_block = 3 smoothing_flags = SMOOTH_BITMASK | SMOOTH_DIAGONAL_CORNERS smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_ABDUCTOR_WALLS) canSmoothWith = list(SMOOTH_GROUP_ABDUCTOR_WALLS,SMOOTH_GROUP_AIRLOCK) + max_integrity = 1000 + /////////////////////Titanium walls///////////////////// /turf/closed/wall/mineral/titanium //has to use this path due to how building walls works @@ -322,6 +344,8 @@ hitsound_type = PROJECTILE_HITSOUND_NON_LIVING + max_integrity = 450 + /turf/closed/wall/mineral/titanium/exterior smoothing_groups = list(SMOOTH_GROUP_CLOSED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_TITANIUM_WALLS_EXTERIOR) canSmoothWith = list(SMOOTH_GROUP_TITANIUM_WALLS_EXTERIOR, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTLE_PARTS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_WINDOW_FULLTILE) @@ -400,6 +424,8 @@ hitsound_type = PROJECTILE_HITSOUND_NON_LIVING + max_integrity = 500 + /turf/closed/wall/mineral/plastitanium/nodiagonal icon = 'icons/turf/walls/plastitanium_wall.dmi' icon_state = "map-shuttle_nd" diff --git a/code/game/turfs/closed/wall/misc_walls.dm b/code/game/turfs/closed/wall/misc_walls.dm index 7fbcab55504a..6bbe3c623be0 100644 --- a/code/game/turfs/closed/wall/misc_walls.dm +++ b/code/game/turfs/closed/wall/misc_walls.dm @@ -8,22 +8,12 @@ canSmoothWith = null sheet_type = /obj/item/stack/sheet/mineral/hidden/hellstone 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) . = ..() -/turf/closed/wall/mineral/cult/Exited(atom/movable/AM, atom/newloc) - . = ..() - if(istype(AM, /mob/living/simple_animal/hostile/construct/harvester)) //harvesters can go through cult walls, dragging something with - var/mob/living/simple_animal/hostile/construct/harvester/H = AM - var/atom/movable/stored_pulling = H.pulling - if(stored_pulling) - stored_pulling.setDir(get_dir(stored_pulling.loc, newloc)) - stored_pulling.forceMove(src) - H.start_pulling(stored_pulling, supress_message = TRUE) - /turf/closed/wall/mineral/cult/artificer name = "runed stone wall" desc = "A cold stone wall engraved with indecipherable symbols. Studying them causes your head to pound." @@ -47,8 +37,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 +49,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 +64,8 @@ base_icon_state = "rusty_reinforced_wall" smoothing_flags = SMOOTH_BITMASK hardness = 15 + integrity = 1000 + min_dam = 5 /turf/closed/wall/r_wall/rust/yesdiag icon_state = "rusty_reinforced_wall-255" diff --git a/code/game/turfs/closed/wall/reinf_walls.dm b/code/game/turfs/closed/wall/reinf_walls.dm index 1bd8f6783fd5..c0fb9232ad28 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,38 @@ 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...") + if(!alter_integrity(-(W.wall_decon_damage))) + return TRUE + 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 +99,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 +121,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 +131,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 +142,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 +154,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 +165,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 +175,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 +188,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 +199,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 +221,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 7be9fb0e21d6..1d8f242e216a 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,124 +84,27 @@ return new girder_type(src) return null -/turf/closed/wall/ex_act(severity, target) - if(target == src) - dismantle_wall(devastated = TRUE) +/turf/closed/wall/attack_override(obj/item/W, mob/user, turf/loc) + if(!iswallturf(src)) 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/blob_act(obj/structure/blob/B) - if(prob(50)) - dismantle_wall() - else - add_dent(WALL_DENT_HIT) - -/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) + if(try_clean(W, user, loc) || try_wallmount(W, user, loc) || try_decon(W, user, loc) || try_destroy(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 @@ -232,33 +123,6 @@ return FALSE -/turf/closed/wall/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 - - to_chat(user, "You begin slicing through the outer plating...") - if(I.use_tool(src, user, slicing_duration, volume=100)) - if(iswallturf(src)) - to_chat(user, "You remove the outer plating.") - dismantle_wall() - return 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) @@ -302,20 +166,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/game/turfs/open/acid.dm b/code/game/turfs/open/acid.dm index 50c7ee7bf98c..86260871c522 100644 --- a/code/game/turfs/open/acid.dm +++ b/code/game/turfs/open/acid.dm @@ -1,8 +1,8 @@ -/turf/open/acid +/turf/open/water/acid name = "acid lake" + desc = "A lake of acid." icon_state = "acid" - gender = PLURAL - baseturfs = /turf/open/acid + baseturfs = /turf/open/water/acid slowdown = 2 light_range = 2 @@ -10,90 +10,77 @@ light_color = LIGHT_COLOR_SLIME_LAMP bullet_bounce_sound = 'sound/items/welder2.ogg' + planetary_atmos = FALSE footstep = FOOTSTEP_LAVA barefootstep = FOOTSTEP_LAVA clawfootstep = FOOTSTEP_LAVA heavyfootstep = FOOTSTEP_LAVA -/turf/open/acid/CanAllowThrough(atom/movable/passing_atom, turf/target) + reagent_to_extract = /datum/reagent/toxin/acid + extracted_reagent_visible_name = "acid" + +/turf/open/water/acid/CanAllowThrough(atom/movable/passing_atom, turf/target) if(ishostile(passing_atom)) return FALSE return ..() -/turf/open/acid/ex_act(severity, target) +/turf/open/water/acid/ex_act(severity, target) contents_explosion(severity, target) -/turf/open/acid/MakeSlippery(wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent) - return - -/turf/open/acid/Melt() +/turf/open/water/acid/Melt() to_be_destroyed = FALSE return src -/turf/open/acid/acid_act(acidpwr, acid_volume) +/turf/open/water/acid/acid_act(acidpwr, acid_volume) return -/turf/open/acid/MakeDry(wet_setting = TURF_WET_WATER) +/turf/open/water/acid/MakeDry(wet_setting = TURF_WET_WATER) return -/turf/open/acid/airless +/turf/open/water/acid/airless initial_gas_mix = AIRLESS_ATMOS -/turf/open/acid/Entered(atom/movable/AM) +/turf/open/water/acid/Entered(atom/movable/AM) . = ..() if(melt_stuff(AM)) START_PROCESSING(SSobj, src) -/turf/open/acid/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) +/turf/open/water/acid/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) if(melt_stuff(AM)) START_PROCESSING(SSobj, src) -/turf/open/acid/process() +/turf/open/water/acid/process() if(!melt_stuff()) STOP_PROCESSING(SSobj, src) -/turf/open/acid/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd) - switch(the_rcd.mode) - if(RCD_FLOORWALL) - return list("mode" = RCD_FLOORWALL, "delay" = 0, "cost" = 3) - return FALSE - -/turf/open/acid/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode) - switch(passed_mode) - if(RCD_FLOORWALL) - to_chat(user, "You build a floor.") - PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) - return TRUE - return FALSE - -/turf/open/acid/singularity_act() +/turf/open/water/acid/singularity_act() return -/turf/open/acid/singularity_pull(S, current_size) +/turf/open/water/acid/singularity_pull(S, current_size) return -/turf/open/acid/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir) +/turf/open/water/acid/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/open/acid/attackby(obj/item/C, mob/user, params) +/turf/open/water/acid/attackby(obj/item/_item, mob/user, params) ..() - if(istype(C, /obj/item/stack/rods)) - var/obj/item/stack/rods/R = C + if(istype(_item, /obj/item/stack/rods)) + var/obj/item/stack/rods/R = _item var/obj/structure/lattice/H = locate(/obj/structure/lattice, src) if(H) - to_chat(user, "There is already a lattice here!") + to_chat(user, span_warning("There is already a lattice here!")) return if(R.use(2)) - to_chat(user, "You construct a catwalk.") + to_chat(user, span_notice("You construct a catwalk.")) playsound(src, 'sound/weapons/genhit.ogg', 50, TRUE) new /obj/structure/lattice/catwalk(locate(x, y, z)) else - to_chat(user, "You need one rod to build a lattice.") + to_chat(user, span_warning("You need one rod to build a lattice.")) return -/turf/open/acid/proc/is_safe_to_cross() +/turf/open/water/acid/proc/is_safe_to_cross() //if anything matching this typecache is found in the lava, we don't burn things var/static/list/acid_safeties_typecache = typecacheof(list(/obj/structure/catwalk, /obj/structure/stone_tile, /obj/structure/lattice/)) var/list/found_safeties = typecache_filter_list(contents, acid_safeties_typecache) @@ -103,7 +90,7 @@ return LAZYLEN(found_safeties) -/turf/open/acid/proc/melt_stuff(thing_to_melt) +/turf/open/water/acid/proc/melt_stuff(thing_to_melt) if(is_safe_to_cross()) return FALSE . = FALSE @@ -156,6 +143,6 @@ if(L) //mobs turning into object corpses could get deleted here. L.acid_act(50, 100) -/turf/open/acid/whitesands +/turf/open/water/acid/whitesands planetary_atmos = TRUE initial_gas_mix = WHITESANDS_ATMOS diff --git a/code/game/turfs/open/floor.dm b/code/game/turfs/open/floor.dm index d74edb27a658..23fdfcc6d998 100644 --- a/code/game/turfs/open/floor.dm +++ b/code/game/turfs/open/floor.dm @@ -78,9 +78,6 @@ for(var/obj/structure/A in contents) return 1 -/turf/open/floor/blob_act(obj/structure/blob/B) - return - /turf/open/floor/update_icon() . = ..() update_visuals() @@ -183,11 +180,6 @@ else if(prob(50)) ReplaceWithLattice() -/turf/open/floor/narsie_act(force, ignore_mobs, probability = 20) - . = ..() - if(.) - ChangeTurf(/turf/open/floor/engine/cult, flags = CHANGETURF_INHERIT_AIR) - /turf/open/floor/acid_melt() ScrapeAway(flags = CHANGETURF_INHERIT_AIR) diff --git a/code/game/turfs/open/floor/plasteel_floor.dm b/code/game/turfs/open/floor/plasteel_floor.dm index 61a90ff0da86..1feb9d0921e0 100644 --- a/code/game/turfs/open/floor/plasteel_floor.dm +++ b/code/game/turfs/open/floor/plasteel_floor.dm @@ -151,6 +151,13 @@ base_icon_state = "plaque" tiled_dirt = FALSE +/turf/open/floor/plasteel/lightgrey + name = "light grey floor" + icon_state = "corner_white_full" + base_icon_state = "corner_white_full" + icon = 'icons/turf/decals/decals.dmi' + color = "#a8b2b6" + /turf/open/floor/plasteel/cult/narsie_act() return diff --git a/code/game/turfs/open/floor/plating/rockplanet.dm b/code/game/turfs/open/floor/plating/rockplanet.dm index eb0caa6485b1..b6324ebbb3d8 100644 --- a/code/game/turfs/open/floor/plating/rockplanet.dm +++ b/code/game/turfs/open/floor/plating/rockplanet.dm @@ -65,15 +65,63 @@ initial_gas_mix = ROCKPLANET_DEFAULT_ATMOS name = "exterior plating" +/turf/open/floor/plating/rockplanet/lit + light_range = 2 + light_power = 0.6 + light_color = COLOR_VERY_LIGHT_GRAY /turf/open/floor/plasteel/stairs/rockplanet initial_gas_mix = ROCKPLANET_DEFAULT_ATMOS name = "exterior stairs" - /turf/open/floor/engine/hull/rockplanet initial_gas_mix = ROCKPLANET_DEFAULT_ATMOS /turf/open/floor/plasteel/rockplanet initial_gas_mix = ROCKPLANET_DEFAULT_ATMOS name = "exterior floor" + +/turf/open/floor/plasteel/patterned/rockplanet + initial_gas_mix = ROCKPLANET_DEFAULT_ATMOS + +/turf/open/floor/plasteel/patterned/rockplanet/lit + light_range = 2 + light_power = 0.6 + light_color = COLOR_VERY_LIGHT_GRAY + name = "exterior floor" + +/turf/open/floor/plasteel/patterned/brushed/rockplanet + initial_gas_mix = ROCKPLANET_DEFAULT_ATMOS + +/turf/open/floor/plasteel/patterned/brushed/rockplanet/lit + light_range = 2 + light_power = 0.6 + light_color = COLOR_VERY_LIGHT_GRAY + name = "exterior floor" + +/turf/open/floor/plasteel/patterned/ridged/rockplanet + initial_gas_mix = ROCKPLANET_DEFAULT_ATMOS + +/turf/open/floor/plasteel/patterned/ridged/rockplanet/lit + light_range = 2 + light_power = 0.6 + light_color = COLOR_VERY_LIGHT_GRAY + name = "exterior floor" + +/turf/open/floor/plating/rust/rockplanet + initial_gas_mix = ROCKPLANET_DEFAULT_ATMOS + +/turf/open/floor/plating/rust/rockplanet/lit + light_range = 2 + light_power = 0.6 + light_color = COLOR_VERY_LIGHT_GRAY + name = "exterior plating" + +/turf/open/floor/wood/rockplanet + initial_gas_mix = ROCKPLANET_DEFAULT_ATMOS + +/turf/open/floor/pod/rockplanet + initial_gas_mix = ROCKPLANET_DEFAULT_ATMOS + +/turf/open/floor/engine/hull/reinforced/rockplanet + initial_gas_mix = ROCKPLANET_DEFAULT_ATMOS diff --git a/code/game/turfs/open/floor/plating/wasteplanet.dm b/code/game/turfs/open/floor/plating/wasteplanet.dm index 011cab93d28a..7d839b66932d 100644 --- a/code/game/turfs/open/floor/plating/wasteplanet.dm +++ b/code/game/turfs/open/floor/plating/wasteplanet.dm @@ -58,6 +58,54 @@ initial_gas_mix = WASTEPLANET_DEFAULT_ATMOS planetary_atmos = TRUE +/turf/open/floor/plasteel/wasteplanet + initial_gas_mix = WASTEPLANET_DEFAULT_ATMOS + +/turf/open/floor/plasteel/wasteplanet/MakeSlippery(wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent) + return + +/turf/open/floor/plasteel/dark/wasteplanet + initial_gas_mix = WASTEPLANET_DEFAULT_ATMOS + +/turf/open/floor/plasteel/dark/wasteplanet/MakeSlippery(wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent) + return +//cement + +/turf/open/floor/concrete/wasteplanet + initial_gas_mix = WASTEPLANET_DEFAULT_ATMOS + planetary_atmos = TRUE + baseturfs = /turf/open/floor/plating/asteroid/wasteplanet + +/turf/open/floor/concrete/wasteplanet/Initialize() + . = ..() + icon_state = pick(list( + "conc_smooth", + "conc_slab_1", + "conc_slab_2", + "conc_slab_3", + "conc_slab_4", + "conc_tiles" + )) + +/turf/open/floor/concrete/wasteplanet/MakeSlippery(wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent) + return + +/turf/open/floor/concrete/reinforced/wasteplanet + initial_gas_mix = WASTEPLANET_DEFAULT_ATMOS + planetary_atmos = TRUE + baseturfs = /turf/open/floor/plating/asteroid/wasteplanet + +/turf/open/floor/concrete/reinforced/wasteplanet/MakeSlippery(wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent) + return + +/turf/open/floor/concrete/pavement/wasteplanet + initial_gas_mix = WASTEPLANET_DEFAULT_ATMOS + planetary_atmos = TRUE + baseturfs = /turf/open/floor/plating/asteroid/wasteplanet + +/turf/open/floor/concrete/pavement/wasteplanet/MakeSlippery(wet_setting, min_wet_time, wet_time_to_add, max_wet_time, permanent) + return + //open turfs then open lits. /turf/open/floor/plating/wasteplanet/lit @@ -94,3 +142,37 @@ light_range = 2 light_power = 0.2 light_color = LIGHT_COLOR_FLARE + +/turf/open/floor/concrete/wasteplanet/lit + light_range = 2 + light_power = 0.2 + light_color = LIGHT_COLOR_FLARE + +/turf/open/floor/concrete/reinforced/wasteplanet/lit + light_range = 2 + light_power = 0.2 + light_color = LIGHT_COLOR_FLARE + +/turf/open/floor/concrete/pavement/wasteplanet/lit + light_range = 2 + light_power = 0.2 + light_color = LIGHT_COLOR_FLARE + +//closed turfs are a thing +/turf/closed/wall/r_wall/wasteplanet + baseturfs = /turf/open/floor/plating/wasteplanet + +/turf/closed/wall/r_wall/rust/wasteplanet + baseturfs = /turf/open/floor/plating/wasteplanet/rust + +/turf/closed/wall/wasteplanet + baseturfs = /turf/open/floor/plating/wasteplanet + +/turf/closed/wall/rust/wasteplanet + baseturfs = /turf/open/floor/plating/wasteplanet/rust + +/turf/closed/wall/concrete/wasteplanet + baseturfs = /turf/open/floor/concrete/wasteplanet + +/turf/closed/wall/concrete/reinforced/wasteplanet + baseturfs = /turf/open/floor/concrete/wasteplanet diff --git a/code/game/turfs/open/floor/reinf_floor.dm b/code/game/turfs/open/floor/reinf_floor.dm index 7fb94e541bda..9094b0a3238f 100644 --- a/code/game/turfs/open/floor/reinf_floor.dm +++ b/code/game/turfs/open/floor/reinf_floor.dm @@ -141,36 +141,6 @@ name = "hydrogen mix floor" initial_gas_mix = ATMOS_TANK_HYDROGEN_FUEL -/turf/open/floor/engine/cult - name = "engraved floor" - desc = "The air smells strange over this sinister flooring." - icon_state = "plating" - floor_tile = null - var/obj/effect/cult_turf/overlay/floor/bloodcult/realappearance - - -/turf/open/floor/engine/cult/Initialize(mapload, inherited_virtual_z) - . = ..() - new /obj/effect/temp_visual/cult/turf/floor(src) - realappearance = new /obj/effect/cult_turf/overlay/floor/bloodcult(src) - realappearance.linked = src - -/turf/open/floor/engine/cult/Destroy() - be_removed() - return ..() - -/turf/open/floor/engine/cult/ChangeTurf(path, new_baseturf, flags) - if(path != type) - be_removed() - return ..() - -/turf/open/floor/engine/cult/proc/be_removed() - qdel(realappearance) - realappearance = null - -/turf/open/floor/engine/cult/airless - initial_gas_mix = AIRLESS_ATMOS - /turf/open/floor/engine/vacuum name = "vacuum floor" initial_gas_mix = AIRLESS_ATMOS diff --git a/code/game/turfs/open/lava.dm b/code/game/turfs/open/lava.dm index eb2132940bd9..90fd6610721c 100644 --- a/code/game/turfs/open/lava.dm +++ b/code/game/turfs/open/lava.dm @@ -220,19 +220,13 @@ /turf/open/lava/smooth/airless initial_gas_mix = AIRLESS_ATMOS -/particles/lava - width = 700 - height = 700 - count = 1000 - spawning = 1 - lifespan = 3 SECONDS - fade = 2 SECONDS - position = generator("circle", 16, 24, NORMAL_RAND) - drift = generator("vector", list(-0.2, -0.2), list(0.2, 0.2)) - velocity = generator("circle", -6, 6, NORMAL_RAND) - friction = 0.15 - gradient = list(0,LIGHT_COLOR_FLARE , 0.75, COLOR_ALMOST_BLACK) - color_change = 0.125 +/obj/effect/particle_holder + name = "" + anchored = TRUE + mouse_opacity = 0 + +/obj/effect/particle_emitter/Initialize(mapload, time) + . = ..() /obj/effect/particle_emitter/lava - particles = new/particles/lava + particles = new/particles/embers/lava diff --git a/code/game/turfs/open/water.dm b/code/game/turfs/open/water.dm index 9128844e1a2f..f94db41d4713 100644 --- a/code/game/turfs/open/water.dm +++ b/code/game/turfs/open/water.dm @@ -18,27 +18,33 @@ var/datum/reagent/reagent_to_extract = /datum/reagent/water var/extracted_reagent_visible_name = "water" -/* -/turf/open/water/attackby(obj/item/tool, mob/user, params) +/turf/open/water/examine(mob/user) + . = ..() + if(reagent_to_extract) + . += span_notice("You could probably scoop some of the [extracted_reagent_visible_name] if you had a beaker...") + +/turf/open/water/attackby(obj/item/_item, mob/user, params) + if(istype(_item, /obj/item/fish)) + to_chat(user, span_notice("You toss the [_item.name] into the [name].")) + playsound(_item, "sound/effects/bigsplash.ogg", 90) + qdel(_item) + if(istype(_item, /obj/item/reagent_containers/glass)) + extract_reagents(_item,user,params) + + . = ..() + +/turf/open/water/proc/extract_reagents(obj/item/reagent_containers/glass/container, mob/user, params) if(!reagent_to_extract) - return ..() - var/obj/item/reagent_containers/glass/container = tool - if(!istype(tool, /obj/item/reagent_containers)) - return ..() + return FALSE + if(!container.is_refillable()) + to_chat(user, span_danger("\The [container]'s cap is on! Take it off first.")) + return FALSE if(container.reagents.total_volume >= container.volume) - to_chat(user, "[container] is full.") - return + to_chat(user, span_danger("\The [container] is full.")) + return FALSE container.reagents.add_reagent(reagent_to_extract, rand(5, 10)) - user.visible_message("[user] scoops [extracted_reagent_visible_name] from the [src] with \the [container].", "You scoop out [extracted_reagent_visible_name] from the [src] using \the [container].") + user.visible_message(span_notice("[user] scoops [extracted_reagent_visible_name] from the [src] with \the [container]."), span_notice("You scoop out [extracted_reagent_visible_name] from the [src] using \the [container].")) return TRUE -*/ - -/turf/open/water/attackby(obj/item/fish, mob/user, params) - . = ..() - if(istype(fish, /obj/item/fish)) - to_chat(user, "You toss the [fish.name] into the water.") - playsound(fish, "sound/effects/bigsplash.ogg", 90) - qdel(fish) /turf/open/water/can_have_cabling() return FALSE @@ -52,7 +58,7 @@ /turf/open/water/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode) switch(passed_mode) if(RCD_FLOORWALL) - to_chat(user, "You build a floor.") + to_chat(user, span_notice("You build a floor.")) PlaceOnTop(/turf/open/floor/plating, flags = CHANGETURF_INHERIT_AIR) return TRUE return FALSE @@ -85,7 +91,7 @@ /turf/open/water/tar name = "tar pit" - desc = "Shallow tar. Will slow you down significantly. You could use a beaker to scoop some out..." + desc = "Shallow tar. Will slow you down significantly." color = "#473a3a" light_range = 0 slowdown = 2 diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 82e75d63b30e..b62a7830cc0d 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -153,7 +153,6 @@ body += "Make Robot" body += "Make Alien" body += "Make Slime" - body += "Make Blob" //Simple Animals if(isanimal(M)) @@ -851,22 +850,6 @@ if(!ai_number) to_chat(usr, "No AIs located" , confidential = TRUE) -/datum/admins/proc/output_all_devil_info() - var/devil_number = 0 - for(var/datum/mind/D in SSticker.mode.devils) - devil_number++ - var/datum/antagonist/devil/devil = D.has_antag_datum(/datum/antagonist/devil) - to_chat(usr, "Devil #[devil_number]:

    " + devil.printdevilinfo(), confidential = TRUE) - if(!devil_number) - to_chat(usr, "No Devils located" , confidential = TRUE) - -/datum/admins/proc/output_devil_info(mob/living/M) - if(is_devil(M)) - var/datum/antagonist/devil/devil = M.mind.has_antag_datum(/datum/antagonist/devil) - to_chat(usr, devil.printdevilinfo(), confidential = TRUE) - else - to_chat(usr, "[M] is not a devil.", confidential = TRUE) - /datum/admins/proc/dynamic_mode_options(mob/user) var/dat = {"

    Dynamic Mode Options


    diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 9c4f15b9d460..42193738319e 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -103,6 +103,7 @@ GLOBAL_LIST_INIT(admin_verbs_fun, list( /client/proc/cmd_admin_gib_self, /client/proc/cmd_change_command_name, /client/proc/cmd_admin_create_centcom_report, + /client/proc/cmd_admin_distress_signal, /client/proc/drop_bomb, /client/proc/set_dynex_scale, /client/proc/drop_dynex_bomb, @@ -254,6 +255,7 @@ GLOBAL_LIST_INIT(admin_verbs_hideable, list( /client/proc/cinematic, /client/proc/cmd_admin_add_freeform_ai_law, /client/proc/cmd_admin_create_centcom_report, + /client/proc/cmd_admin_distress_signal, /client/proc/cmd_change_command_name, /client/proc/object_say, /client/proc/toggle_random_events, diff --git a/code/modules/admin/fun_balloon.dm b/code/modules/admin/fun_balloon.dm index 04e84097f6d1..0be2f41696e6 100644 --- a/code/modules/admin/fun_balloon.dm +++ b/code/modules/admin/fun_balloon.dm @@ -136,8 +136,3 @@ /obj/effect/forcefield/arena_shuttle_entrance/proc/do_bloodbath(mob/living/L) var/obj/item/mine/pressure/pickup/bloodbath/B = new (L) B.mine_effect(L) - -/area/shuttle_arena - name = "arena" - has_gravity = STANDARD_GRAVITY - requires_power = FALSE diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index cf834c9f9c5d..e5888f8088df 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -216,9 +216,10 @@ "} - var/list/mobs = sortmobs() + var/list/mobs = SSpoints_of_interest.get_mob_pois() var/i = 1 - for(var/mob/M in mobs) + for(var/mob_name in mobs) + var/mob/M = mobs[mob_name] if(M.ckey) var/color = "#e6e6e6" @@ -254,12 +255,7 @@ M_job = "Silicon-based" else if(isanimal(M)) //simple animals - if(iscorgi(M)) - M_job = "Corgi" - else if(isslime(M)) - M_job = "slime" - else - M_job = "Animal" + M_job = "Animal" else M_job = "Living" diff --git a/code/modules/admin/sql_ban_system.dm b/code/modules/admin/sql_ban_system.dm index bde0a7676fac..bd3d189f85eb 100644 --- a/code/modules/admin/sql_ban_system.dm +++ b/code/modules/admin/sql_ban_system.dm @@ -284,9 +284,9 @@ output += "" var/list/long_job_lists = list("Service" = GLOB.service_positions, "Ghost and Other Roles" = list(ROLE_BRAINWASHED, ROLE_DEATHSQUAD, ROLE_DRONE, ROLE_LAVALAND, ROLE_MIND_TRANSFER, ROLE_POSIBRAIN, ROLE_SENTIENCE), - "Antagonist Positions" = list(ROLE_ABDUCTOR, ROLE_ALIEN, ROLE_BLOB, - ROLE_BROTHER, ROLE_CHANGELING, ROLE_CULTIST, - ROLE_DEVIL, ROLE_INTERNAL_AFFAIRS, ROLE_MALF, + "Antagonist Positions" = list(ROLE_ABDUCTOR, ROLE_ALIEN, + ROLE_BROTHER, ROLE_CHANGELING, + ROLE_INTERNAL_AFFAIRS, ROLE_MALF, ROLE_MONKEY, ROLE_NINJA, ROLE_OPERATIVE, ROLE_OVERTHROW, ROLE_REV, ROLE_REVENANT, ROLE_REV_HEAD, ROLE_SYNDICATE, diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 2e4b1c60acdd..5123eed0be58 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -78,13 +78,6 @@ else message_admins("[key_name_admin(usr)] tried to create changelings. Unfortunately, there were no candidates available.") log_admin("[key_name(usr)] failed to create changelings.") - if("cult") - if(src.makeCult()) - message_admins("[key_name(usr)] started a cult.") - log_admin("[key_name(usr)] started a cult.") - else - message_admins("[key_name_admin(usr)] tried to start a cult. Unfortunately, there were no candidates available.") - log_admin("[key_name(usr)] failed to start a cult.") if("wizard") message_admins("[key_name(usr)] is creating a wizard...") if(src.makeWizard()) @@ -117,13 +110,6 @@ else message_admins("[key_name_admin(usr)] tried to create a death squad. Unfortunately, there were not enough candidates available.") log_admin("[key_name(usr)] failed to create a death squad.") - if("blob") - var/strength = input("Set Blob Resource Gain Rate","Set Resource Rate",1) as num|null - if(!strength) - return - message_admins("[key_name(usr)] spawned a blob with base resource gain [strength].") - log_admin("[key_name(usr)] spawned a blob with base resource gain [strength].") - new/datum/round_event/ghost_role/blob(TRUE, strength) if("centcom") message_admins("[key_name(usr)] is creating a response team...") if(src.makeEmergencyresponseteam()) @@ -357,14 +343,6 @@ M.change_mob_type(/mob/living/simple_animal/parrot , null, null, delmob) if("polyparrot") M.change_mob_type(/mob/living/simple_animal/parrot/Polly , null, null, delmob) - if("constructjuggernaut") - M.change_mob_type(/mob/living/simple_animal/hostile/construct/juggernaut , null, null, delmob) - if("constructartificer") - M.change_mob_type(/mob/living/simple_animal/hostile/construct/artificer , null, null, delmob) - if("constructwraith") - M.change_mob_type(/mob/living/simple_animal/hostile/construct/wraith , null, null, delmob) - if("shade") - M.change_mob_type(/mob/living/simple_animal/shade , null, null, delmob) else if(href_list["boot2"]) if(!check_rights(R_ADMIN)) @@ -1077,18 +1055,6 @@ usr.client.cmd_admin_slimeize(H) - else if(href_list["makeblob"]) - if(!check_rights(R_SPAWN)) - return - - var/mob/living/carbon/human/H = locate(href_list["makeblob"]) - if(!istype(H)) - to_chat(usr, "This can only be used on instances of type /mob/living/carbon/human.", confidential = TRUE) - return - - usr.client.cmd_admin_blobize(H) - - else if(href_list["makerobot"]) if(!check_rights(R_SPAWN)) return @@ -1159,12 +1125,6 @@ return output_ai_laws() - else if(href_list["admincheckdevilinfo"]) - if(!check_rights(R_ADMIN)) - return - var/mob/M = locate(href_list["admincheckdevilinfo"]) - output_devil_info(M) - else if(href_list["adminmoreinfo"]) var/mob/M = locate(href_list["adminmoreinfo"]) in GLOB.mob_list if(!ismob(M)) @@ -1236,9 +1196,9 @@ //milk to plasmemes and skeletons, meat to lizards, electricity bars to ethereals, cookies to everyone else var/obj/item/reagent_containers/food/cookiealt = /obj/item/reagent_containers/food/snacks/cookie if(isskeleton(H)) - cookiealt = /obj/item/reagent_containers/food/condiment/milk + cookiealt = /obj/item/reagent_containers/condiment/milk else if(isplasmaman(H)) - cookiealt = /obj/item/reagent_containers/food/condiment/milk + cookiealt = /obj/item/reagent_containers/condiment/milk else if(iselzuose(H)) cookiealt = /obj/item/reagent_containers/food/snacks/energybar // WS - More fun with cookies - Start @@ -1992,7 +1952,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/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm index 9b84224317a9..708448cf52cd 100644 --- a/code/modules/admin/verbs/adminjump.dm +++ b/code/modules/admin/verbs/adminjump.dm @@ -140,7 +140,7 @@ usr.forceMove(M.loc) SSblackbox.record_feedback("tally", "admin_verb", 1, "Get Key") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/sendmob(mob/M in sortmobs()) +/client/proc/sendmob(mob/M in SSpoints_of_interest.get_mob_pois()) set category = "Admin.Game" set name = "Send Mob" if(!src.holder) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 9a226bbcb617..2c269ce1ee9a 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -52,21 +52,6 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that else alert("Invalid mob") -/client/proc/cmd_admin_blobize(mob/M in GLOB.mob_list) - set category = "Event.Fun" - set name = "Make Blob" - - if(!SSticker.HasRoundStarted()) - alert("Wait until the game starts") - return - if(ishuman(M)) - log_admin("[key_name(src)] has blobized [M.key].") - var/mob/living/carbon/human/H = M - H.become_overmind() - else - alert("Invalid mob") - - /client/proc/cmd_admin_animalize(mob/M in GLOB.mob_list) set category = "Event.Fun" set name = "Make Simple Animal" diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 028c9729131a..e30519342ffb 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -16,8 +16,6 @@ var/dat = {" Make Traitors
    Make Changelings
    - Make Cult
    - Make Blob
    Make Wizard (Requires Ghosts)
    Make Nuke Team (Requires Ghosts)
    Make Response Team (Requires Ghosts)
    @@ -114,38 +112,6 @@ new_character.mind.make_Wizard() return TRUE - -/datum/admins/proc/makeCult() - var/datum/game_mode/cult/temp = new - if(CONFIG_GET(flag/protect_roles_from_antagonist)) - temp.restricted_jobs += temp.protected_jobs - - if(CONFIG_GET(flag/protect_assistant_from_antagonist)) - temp.restricted_jobs += "Assistant" - - var/list/mob/living/carbon/human/candidates = list() - var/mob/living/carbon/human/H = null - - for(var/mob/living/carbon/human/applicant in GLOB.player_list) - if(isReadytoRumble(applicant, ROLE_CULTIST)) - if(temp.age_check(applicant.client)) - if(!(applicant.job in temp.restricted_jobs)) - candidates += applicant - - if(candidates.len) - var/numCultists = min(candidates.len, 4) - - for(var/i = 0, iYou feel bloated.") - -/datum/antagonist/blob/on_gain() - create_objectives() - . = ..() - -/datum/antagonist/blob/proc/create_objectives() - var/datum/objective/blob_takeover/main = new - main.owner = owner - objectives += main - -/datum/antagonist/blob/apply_innate_effects(mob/living/mob_override) - if(!isovermind(owner.current)) - if(!pop_action) - pop_action = new - pop_action.Grant(owner.current) - -/datum/objective/blob_takeover - explanation_text = "Reach critical mass!" - -//Non-overminds get this on blob antag assignment -/datum/action/innate/blobpop - name = "Pop" - desc = "Unleash the blob" - icon_icon = 'icons/mob/blob.dmi' - button_icon_state = "blob" - -/datum/action/innate/blobpop/Activate() - var/mob/old_body = owner - var/datum/antagonist/blob/blobtag = owner.mind.has_antag_datum(/datum/antagonist/blob) - if(!blobtag) - Remove() - return - var/mob/camera/blob/B = new /mob/camera/blob(get_turf(old_body), blobtag.starting_points_human_blob) - owner.mind.transfer_to(B) - old_body.gib() - B.place_blob_core(blobtag.point_rate_human_blob, pop_override = TRUE) - -/datum/antagonist/blob/antag_listing_status() - . = ..() - if(owner && owner.current) - var/mob/camera/blob/B = owner.current - if(istype(B)) - . += "(Progress: [B.blobs_legit.len]/[B.blobwincount])" diff --git a/code/modules/antagonists/blob/blob_mobs.dm b/code/modules/antagonists/blob/blob_mobs.dm deleted file mode 100644 index 639017e100f3..000000000000 --- a/code/modules/antagonists/blob/blob_mobs.dm +++ /dev/null @@ -1,333 +0,0 @@ - -//////////////// -// BASE TYPE // -//////////////// - -//Do not spawn -/mob/living/simple_animal/hostile/blob - icon = 'icons/mob/blob.dmi' - pass_flags = PASSBLOB - faction = list(ROLE_BLOB) - bubble_icon = "blob" - speak_emote = null //so we use verb_yell/verb_say/etc - 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) - minbodytemp = 0 - maxbodytemp = 360 - unique_name = 1 - a_intent = INTENT_HARM - see_in_dark = 8 - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - initial_language_holder = /datum/language_holder/empty - var/mob/camera/blob/overmind = null - var/obj/structure/blob/factory/factory = null - var/independent = FALSE - -/mob/living/simple_animal/hostile/blob/update_icons() - if(overmind) - add_atom_colour(overmind.blobstrain.color, FIXED_COLOUR_PRIORITY) - else - remove_atom_colour(FIXED_COLOUR_PRIORITY) - -/mob/living/simple_animal/hostile/blob/Initialize() - . = ..() - if(!independent) //no pulling people deep into the blob - remove_verb(src, /mob/living/verb/pulled) - else - pass_flags &= ~PASSBLOB - -/mob/living/simple_animal/hostile/blob/Destroy() - if(overmind) - overmind.blob_mobs -= src - return ..() - -/mob/living/simple_animal/hostile/blob/get_status_tab_items() - . = ..() - if(overmind) - . += "Blobs to Win: [overmind.blobs_legit.len]/[overmind.blobwincount]" - -/mob/living/simple_animal/hostile/blob/blob_act(obj/structure/blob/B) - if(stat != DEAD && health < maxHealth) - for(var/i in 1 to 2) - var/obj/effect/temp_visual/heal/H = new /obj/effect/temp_visual/heal(get_turf(src)) //hello yes you are being healed - if(overmind) - H.color = overmind.blobstrain.complementary_color - else - H.color = "#000000" - adjustHealth(-maxHealth*0.0125) - -/mob/living/simple_animal/hostile/blob/fire_act(exposed_temperature, exposed_volume) - ..() - if(exposed_temperature) - adjustFireLoss(clamp(0.01 * exposed_temperature, 1, 5)) - else - adjustFireLoss(5) - -/mob/living/simple_animal/hostile/blob/CanAllowThrough(atom/movable/mover, border_dir) - . = ..() - if(istype(mover, /obj/structure/blob)) - return TRUE - -/mob/living/simple_animal/hostile/blob/Process_Spacemove(movement_dir = 0) - for(var/obj/structure/blob/B in range(1, src)) - return 1 - return ..() - -/mob/living/simple_animal/hostile/blob/say(message, bubble_type, list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null) - if(!overmind) - ..() - return - var/spanned_message = say_quote(message) - var/rendered = "\[Blob Telepathy\] [real_name] [spanned_message]" - for(var/M in GLOB.mob_list) - if(isovermind(M) || istype(M, /mob/living/simple_animal/hostile/blob)) - to_chat(M, rendered) - if(isobserver(M)) - var/link = FOLLOW_LINK(M, src) - to_chat(M, "[link] [rendered]") - -//////////////// -// BLOB SPORE // -//////////////// - -/mob/living/simple_animal/hostile/blob/blobspore - name = "blob spore" - desc = "A floating, fragile spore." - icon_state = "blobpod" - icon_living = "blobpod" - health_doll_icon = "blobpod" - health = 30 - maxHealth = 30 - verb_say = "psychically pulses" - verb_ask = "psychically probes" - verb_exclaim = "psychically yells" - verb_yell = "psychically screams" - melee_damage_lower = 2 - melee_damage_upper = 4 - obj_damage = 20 - environment_smash = ENVIRONMENT_SMASH_STRUCTURES - attack_verb_continuous = "hits" - attack_verb_simple = "hit" - attack_sound = 'sound/weapons/genhit1.ogg' - movement_type = FLYING - del_on_death = TRUE - deathmessage = "explodes into a cloud of gas!" - gold_core_spawnable = HOSTILE_SPAWN - var/death_cloud_size = 1 //size of cloud produced from a dying spore - var/mob/living/carbon/human/oldguy - var/is_zombie = FALSE - -/mob/living/simple_animal/hostile/blob/blobspore/Initialize(mapload, obj/structure/blob/factory/linked_node) - if(!istype(linked_node)) - return INITIALIZE_HINT_QDEL - factory = linked_node - factory.spores += src - . = ..() - if(linked_node.overmind && istype(linked_node.overmind.blobstrain, /datum/blobstrain/reagent/distributed_neurons) && !istype(src, /mob/living/simple_animal/hostile/blob/blobspore/weak)) - notify_ghosts("A controllable spore has been created in \the [get_area(src)].", source = src, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Sentient Spore Created") - -/mob/living/simple_animal/hostile/blob/blobspore/Life() - if(!is_zombie && isturf(src.loc)) - for(var/mob/living/carbon/human/H in view(src,1)) //Only for corpse right next to/on same tile - if(H.stat == DEAD) - Zombify(H) - break - if(factory && z != factory.z) - death() - ..() - -/mob/living/simple_animal/hostile/blob/blobspore/attack_ghost(mob/user) - . = ..() - if(.) - return - humanize_pod(user) - -/mob/living/simple_animal/hostile/blob/blobspore/proc/humanize_pod(mob/user) - if((!overmind || istype(src, /mob/living/simple_animal/hostile/blob/blobspore/weak) || !istype(overmind.blobstrain, /datum/blobstrain/reagent/distributed_neurons)) && !is_zombie) - return - if(key || stat) - return - var/pod_ask = alert("Become a blob spore?", "Are you bulbous enough?", "Yes", "No") - if(pod_ask == "No" || !src || QDELETED(src)) - return - if(key) - to_chat(user, "Someone else already took this spore!") - return - key = user.key - log_game("[key_name(src)] took control of [name].") - -/mob/living/simple_animal/hostile/blob/blobspore/proc/Zombify(mob/living/carbon/human/H) - is_zombie = 1 - if(H.wear_suit) - var/obj/item/clothing/suit/armor/A = H.wear_suit - maxHealth += A.armor.melee //That zombie's got armor, I want armor! - maxHealth += 40 - health = maxHealth - name = "blob zombie" - desc = "A shambling corpse animated by the blob." - mob_biotypes |= MOB_HUMANOID - melee_damage_lower += 8 - melee_damage_upper += 11 - movement_type = GROUND - death_cloud_size = 0 - icon = H.icon - icon_state = "zombie" - H.hairstyle = null - H.update_hair() - H.forceMove(src) - oldguy = H - update_icons() - visible_message("The corpse of [H.name] suddenly rises!") - if(!key) - notify_ghosts("\A [src] has been created in \the [get_area(src)].", source = src, action = NOTIFY_ORBIT, flashwindow = FALSE, header = "Blob Zombie Created") - -/mob/living/simple_animal/hostile/blob/blobspore/death(gibbed) - // On death, create a small smoke of harmful gas (s-Acid) - var/datum/effect_system/smoke_spread/chem/S = new - var/turf/location = get_turf(src) - - // Create the reagents to put into the air - create_reagents(10) - - - - if(overmind && overmind.blobstrain) - overmind.blobstrain.on_sporedeath(src) - else - reagents.add_reagent(/datum/reagent/toxin/spore, 10) - - // Attach the smoke spreader and setup/start it. - S.attach(location) - S.set_up(reagents, death_cloud_size, location, silent = TRUE) - S.start() - if(factory) - factory.spore_delay = world.time + factory.spore_cooldown //put the factory on cooldown - - ..() - -/mob/living/simple_animal/hostile/blob/blobspore/Destroy() - if(factory) - factory.spores -= src - factory = null - if(oldguy) - oldguy.forceMove(get_turf(src)) - oldguy = null - return ..() - -/mob/living/simple_animal/hostile/blob/blobspore/update_icons() - if(overmind) - add_atom_colour(overmind.blobstrain.complementary_color, FIXED_COLOUR_PRIORITY) - else - remove_atom_colour(FIXED_COLOUR_PRIORITY) - if(is_zombie) - copy_overlays(oldguy, TRUE) - var/mutable_appearance/blob_head_overlay = mutable_appearance('icons/mob/blob.dmi', "blob_head") - if(overmind) - blob_head_overlay.color = overmind.blobstrain.complementary_color - color = initial(color)//looks better. - add_overlay(blob_head_overlay) - -/mob/living/simple_animal/hostile/blob/blobspore/weak - name = "fragile blob spore" - health = 15 - maxHealth = 15 - melee_damage_lower = 1 - melee_damage_upper = 2 - death_cloud_size = 0 - -///////////////// -// BLOBBERNAUT // -///////////////// - -/mob/living/simple_animal/hostile/blob/blobbernaut - name = "blobbernaut" - desc = "A hulking, mobile chunk of blobmass." - icon_state = "blobbernaut" - icon_living = "blobbernaut" - icon_dead = "blobbernaut_dead" - health = 200 - maxHealth = 200 - damage_coeff = list(BRUTE = 0.5, BURN = 1, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) - melee_damage_lower = 20 - melee_damage_upper = 20 - obj_damage = 60 - attack_verb_continuous = "slams" - attack_verb_simple = "slam" - attack_sound = 'sound/effects/blobattack.ogg' - verb_say = "gurgles" - verb_ask = "demands" - verb_exclaim = "roars" - verb_yell = "bellows" - force_threshold = 10 - pressure_resistance = 50 - mob_size = MOB_SIZE_LARGE - hud_type = /datum/hud/blobbernaut - -/mob/living/simple_animal/hostile/blob/blobbernaut/Life() - if(..()) - var/list/blobs_in_area = range(2, src) - if(independent) - return // strong independent blobbernaut that don't need no blob - var/damagesources = 0 - if(!(locate(/obj/structure/blob) in blobs_in_area)) - damagesources++ - if(!factory) - damagesources++ - else - if(locate(/obj/structure/blob/core) in blobs_in_area) - adjustHealth(-maxHealth*0.1) - var/obj/effect/temp_visual/heal/H = new /obj/effect/temp_visual/heal(get_turf(src)) //hello yes you are being healed - if(overmind) - H.color = overmind.blobstrain.complementary_color - else - H.color = "#000000" - if(locate(/obj/structure/blob/node) in blobs_in_area) - adjustHealth(-maxHealth*0.05) - var/obj/effect/temp_visual/heal/H = new /obj/effect/temp_visual/heal(get_turf(src)) - if(overmind) - H.color = overmind.blobstrain.complementary_color - else - H.color = "#000000" - if(damagesources) - for(var/i in 1 to damagesources) - adjustHealth(maxHealth*0.025) //take 2.5% of max health as damage when not near the blob or if the naut has no factory, 5% if both - var/image/I = new('icons/mob/blob.dmi', src, "nautdamage", MOB_LAYER+0.01) - I.appearance_flags = RESET_COLOR - if(overmind) - I.color = overmind.blobstrain.complementary_color - flick_overlay_view(I, src, 8) - -/mob/living/simple_animal/hostile/blob/blobbernaut/adjustHealth(amount, updating_health = TRUE, forced = FALSE) - . = ..() - if(updating_health) - update_health_hud() - -/mob/living/simple_animal/hostile/blob/blobbernaut/update_health_hud() - if(hud_used) - hud_used.healths.maptext = "
    [round((health / maxHealth) * 100, 0.5)]%
    " - -/mob/living/simple_animal/hostile/blob/blobbernaut/AttackingTarget() - . = ..() - if(. && isliving(target) && overmind) - overmind.blobstrain.blobbernaut_attack(target, src) - -/mob/living/simple_animal/hostile/blob/blobbernaut/update_icons() - ..() - if(overmind) //if we have an overmind, we're doing chemical reactions instead of pure damage - melee_damage_lower = 4 - melee_damage_upper = 4 - attack_verb_continuous = overmind.blobstrain.blobbernaut_message - else - melee_damage_lower = initial(melee_damage_lower) - melee_damage_upper = initial(melee_damage_upper) - attack_verb_continuous = initial(attack_verb_continuous) - -/mob/living/simple_animal/hostile/blob/blobbernaut/death(gibbed) - ..(gibbed) - if(factory) - factory.naut = null //remove this naut from its factory - factory.max_integrity = initial(factory.max_integrity) - flick("blobbernaut_death", src) - -/mob/living/simple_animal/hostile/blob/blobbernaut/independent - independent = TRUE - gold_core_spawnable = HOSTILE_SPAWN diff --git a/code/modules/antagonists/blob/blob_report.dm b/code/modules/antagonists/blob/blob_report.dm deleted file mode 100644 index 10e77fdb3ee4..000000000000 --- a/code/modules/antagonists/blob/blob_report.dm +++ /dev/null @@ -1,72 +0,0 @@ -/datum/station_state - var/floor = 0 - var/wall = 0 - var/r_wall = 0 - var/window = 0 - var/door = 0 - var/grille = 0 - var/mach = 0 - -/datum/station_state/proc/count() - floor = 0 - wall = 0 - r_wall = 0 - window = 0 - door = 0 - grille = 0 - mach = 0 - for(var/Z in SSmapping.virtual_levels_by_trait(ZTRAIT_STATION)) - for(var/turf/T in block(locate(1,1,Z), locate(world.maxx,world.maxy,Z))) - // don't count shuttles since they may have just left - if(istype(T.loc, /area/shuttle)) - continue - - if(isfloorturf(T)) - var/turf/open/floor/TF = T - if(!(TF.burnt)) - floor += 12 - else - floor += 1 - - if(iswallturf(T)) - var/turf/closed/wall/TW = T - if(TW.intact) - wall += 2 - else - wall += 1 - - if(istype(T, /turf/closed/wall/r_wall)) - var/turf/closed/wall/r_wall/TRW = T - if(TRW.intact) - r_wall += 2 - else - r_wall += 1 - - - for(var/obj/O in T.contents) - if(istype(O, /obj/structure/window)) - window += 1 - else if(istype(O, /obj/structure/grille)) - var/obj/structure/grille/GR = O - if(!GR.broken) - grille += 1 - else if(istype(O, /obj/machinery/door)) - door += 1 - else if(ismachinery(O)) - mach += 1 - CHECK_TICK - CHECK_TICK - CHECK_TICK - -/datum/station_state/proc/score(datum/station_state/result) - if(!result) - return 0 - var/output = 0 - output += (result.floor / max(floor,1)) - output += (result.r_wall/ max(r_wall,1)) - output += (result.wall / max(wall,1)) - output += (result.window / max(window,1)) - output += (result.door / max(door,1)) - output += (result.grille / max(grille,1)) - output += (result.mach / max(mach,1)) - return (output/7) diff --git a/code/modules/antagonists/blob/blobstrains/_blobstrain.dm b/code/modules/antagonists/blob/blobstrains/_blobstrain.dm deleted file mode 100644 index 29060afd8f6a..000000000000 --- a/code/modules/antagonists/blob/blobstrains/_blobstrain.dm +++ /dev/null @@ -1,81 +0,0 @@ -GLOBAL_LIST_INIT(valid_blobstrains, subtypesof(/datum/blobstrain) - list(/datum/blobstrain/reagent, /datum/blobstrain/multiplex)) - -/datum/blobstrain - var/name - var/description - var/color = "#000000" - var/complementary_color = "#000000" //a color that's complementary to the normal blob color - var/shortdesc = null //just damage and on_mob effects, doesn't include special, blob-tile only effects - var/effectdesc = null //any long, blob-tile specific effects - var/analyzerdescdamage = "Unknown. Report this bug to a coder, or just adminhelp." - var/analyzerdesceffect = "N/A" - var/blobbernaut_message = "slams" //blobbernaut attack verb - var/message = "The blob strikes you" //message sent to any mob hit by the blob - var/message_living = null //extension to first mob sent to only living mobs i.e. silicons have no skin to be burnt - var/core_regen = 2 - var/resource_delay = 0 - var/point_rate = 2 - var/mob/camera/blob/overmind - -/datum/blobstrain/New(mob/camera/blob/new_overmind) - if (!istype(new_overmind)) - stack_trace("blobstrain created without overmind") - overmind = new_overmind - -/datum/blobstrain/Destroy() - overmind = null - return ..() - -/datum/blobstrain/proc/on_gain() - overmind.color = complementary_color - for(var/BL in GLOB.blobs) - var/obj/structure/blob/B = BL - B.update_appearance() - for(var/BLO in overmind.blob_mobs) - var/mob/living/simple_animal/hostile/blob/BM = BLO - BM.update_icons() //If it's getting a new strain, tell it what it does! - to_chat(BM, "Your overmind's blob strain is now: [name]!") - to_chat(BM, "The [name] strain [shortdesc ? "[shortdesc]" : "[description]"]") - -/datum/blobstrain/proc/on_lose() - -/datum/blobstrain/proc/on_sporedeath(mob/living/spore) - -/datum/blobstrain/proc/send_message(mob/living/M) - var/totalmessage = message - if(message_living && !issilicon(M)) - totalmessage += message_living - totalmessage += "!" - to_chat(M, "[totalmessage]") - -/datum/blobstrain/proc/core_process() - if(resource_delay <= world.time) - resource_delay = world.time + 10 // 1 second - overmind.add_points(point_rate) - overmind.blob_core.obj_integrity = min(overmind.blob_core.max_integrity, overmind.blob_core.obj_integrity+core_regen) - -/datum/blobstrain/proc/attack_living(mob/living/L, list/nearby_blobs) // When the blob attacks people - send_message(L) - -/datum/blobstrain/proc/blobbernaut_attack(mob/living/L, blobbernaut) // When this blob's blobbernaut attacks people - -/datum/blobstrain/proc/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag, coefficient = 1) //when the blob takes damage, do this - return coefficient*damage - -/datum/blobstrain/proc/death_reaction(obj/structure/blob/B, damage_flag, coefficient = 1) //when a blob dies, do this - return - -/datum/blobstrain/proc/expand_reaction(obj/structure/blob/B, obj/structure/blob/newB, turf/T, mob/camera/blob/O, coefficient = 1) //when the blob expands, do this - return - -/datum/blobstrain/proc/tesla_reaction(obj/structure/blob/B, power, coefficient = 1) //when the blob is hit by a tesla bolt, do this - return 1 //return 0 to ignore damage - -/datum/blobstrain/proc/extinguish_reaction(obj/structure/blob/B, coefficient = 1) //when the blob is hit with water, do this - return - -/datum/blobstrain/proc/emp_reaction(obj/structure/blob/B, severity, coefficient = 1) //when the blob is hit with an emp, do this - return - -/datum/blobstrain/proc/examine(mob/user) - return list("Progress to Critical Mass: [overmind.blobs_legit.len]/[overmind.blobwincount].") diff --git a/code/modules/antagonists/blob/blobstrains/_reagent.dm b/code/modules/antagonists/blob/blobstrains/_reagent.dm deleted file mode 100644 index 3d210188d9b6..000000000000 --- a/code/modules/antagonists/blob/blobstrains/_reagent.dm +++ /dev/null @@ -1,33 +0,0 @@ -/datum/blobstrain/reagent // Blobs that mess with reagents, all "legacy" ones - var/datum/reagent/reagent - -/datum/blobstrain/reagent/New(mob/camera/blob/new_overmind) - . = ..() - reagent = new reagent() - - -/datum/blobstrain/reagent/attack_living(mob/living/L) - var/mob_protection = L.get_permeability_protection() - reagent.expose_mob(L, VAPOR, 25, 1, mob_protection, overmind) - send_message(L) - -/datum/blobstrain/reagent/blobbernaut_attack(mob/living/L) - var/mob_protection = L.get_permeability_protection() - reagent.expose_mob(L, VAPOR, 20, 0, mob_protection, overmind)//this will do between 10 and 20 damage(reduced by mob protection), depending on chemical, plus 4 from base brute damage. - -/datum/blobstrain/reagent/on_sporedeath(mob/living/spore) - spore.reagents.add_reagent(reagent.type, 10) - -// These can only be applied by blobs. They are what (reagent) blobs are made out of. -/datum/reagent/blob - name = "Unknown" - description = "shouldn't exist and you should adminhelp immediately." - color = "#FFFFFF" - taste_description = "bad code and slime" - can_synth = FALSE - - -/datum/reagent/blob/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O) - if(M.stat == DEAD || istype(M, /mob/living/simple_animal/hostile/blob)) - return 0 //the dead, and blob mobs, don't cause reactions - return round(reac_volume * min(1.5 - touch_protection, 1), 0.1) //full touch protection means 50% volume, any prot below 0.5 means 100% volume. diff --git a/code/modules/antagonists/blob/blobstrains/blazing_oil.dm b/code/modules/antagonists/blob/blobstrains/blazing_oil.dm deleted file mode 100644 index d34ed8041ac7..000000000000 --- a/code/modules/antagonists/blob/blobstrains/blazing_oil.dm +++ /dev/null @@ -1,41 +0,0 @@ - -//sets you on fire, does burn damage, explodes into flame when burnt, weak to water -/datum/blobstrain/reagent/blazing_oil - name = "Blazing Oil" - description = "will do medium burn damage and set targets on fire." - effectdesc = "will also release bursts of flame when burnt, but takes damage from water." - analyzerdescdamage = "Does medium burn damage and sets targets on fire." - analyzerdesceffect = "Releases fire when burnt, but takes damage from water and other extinguishing liquids." - color = "#B68D00" - complementary_color = "#BE5532" - blobbernaut_message = "splashes" - message = "The blob splashes you with burning oil" - message_living = ", and you feel your skin char and melt" - reagent = /datum/reagent/blob/blazing_oil - -/datum/blobstrain/reagent/blazing_oil/extinguish_reaction(obj/structure/blob/B) - B.take_damage(1.5, BURN, "energy") - -/datum/blobstrain/reagent/blazing_oil/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) - if(damage_type == BURN && damage_flag != "energy") - for(var/turf/open/T in range(1, B)) - var/obj/structure/blob/C = locate() in T - if(!(C && C.overmind && C.overmind.blobstrain.type == B.overmind.blobstrain.type) && prob(80)) - new /obj/effect/hotspot(T) - if(damage_flag == "fire") - return 0 - return ..() - -/datum/reagent/blob/blazing_oil - name = "Blazing Oil" - taste_description = "burning oil" - color = "#B68D00" - -/datum/reagent/blob/blazing_oil/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O) - reac_volume = ..() - M.adjust_fire_stacks(round(reac_volume/10)) - M.IgniteMob() - if(M) - M.apply_damage(0.8*reac_volume, BURN) - if(iscarbon(M)) - M.emote("scream") diff --git a/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm b/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm deleted file mode 100644 index 6f86417e8d42..000000000000 --- a/code/modules/antagonists/blob/blobstrains/cryogenic_poison.dm +++ /dev/null @@ -1,32 +0,0 @@ -//does brute, burn, and toxin damage, and cools targets down -/datum/blobstrain/reagent/cryogenic_poison - name = "Cryogenic Poison" - description = "will inject targets with a freezing poison that does high damage over time." - analyzerdescdamage = "Injects targets with a freezing poison that will gradually solidify the target's internal organs." - color = "#8BA6E9" - complementary_color = "#7D6EB4" - blobbernaut_message = "injects" - message = "The blob stabs you" - message_living = ", and you feel like your insides are solidifying" - reagent = /datum/reagent/blob/cryogenic_poison - -/datum/reagent/blob/cryogenic_poison - name = "Cryogenic Poison" - description = "will inject targets with a freezing poison that does high damage over time." - color = "#8BA6E9" - taste_description = "brain freeze" - -/datum/reagent/blob/cryogenic_poison/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O) - reac_volume = ..() - if(M.reagents) - M.reagents.add_reagent(/datum/reagent/consumable/frostoil, 0.3*reac_volume) - M.reagents.add_reagent(/datum/reagent/consumable/ice, 0.3*reac_volume) - M.reagents.add_reagent(/datum/reagent/blob/cryogenic_poison, 0.3*reac_volume) - M.apply_damage(0.2*reac_volume, BRUTE) - -/datum/reagent/blob/cryogenic_poison/on_mob_life(mob/living/carbon/M) - M.adjustBruteLoss(0.3*REAGENTS_EFFECT_MULTIPLIER, 0) - M.adjustFireLoss(0.3*REAGENTS_EFFECT_MULTIPLIER, 0) - M.adjustToxLoss(0.3*REAGENTS_EFFECT_MULTIPLIER, 0) - . = 1 - ..() diff --git a/code/modules/antagonists/blob/blobstrains/debris_devourer.dm b/code/modules/antagonists/blob/blobstrains/debris_devourer.dm deleted file mode 100644 index c39f2ce3d37a..000000000000 --- a/code/modules/antagonists/blob/blobstrains/debris_devourer.dm +++ /dev/null @@ -1,63 +0,0 @@ -#define DEBRIS_DENSITY (length(core.contents) / length(overmind.blobs_legit)) // items per blob - -// Accumulates junk liberally -/datum/blobstrain/debris_devourer - name = "Debris Devourer" - description = "will launch accumulated debris into targets." - analyzerdescdamage = "Does medium brute damage and may grab onto melee weapons." - analyzerdesceffect = "Devours loose items left on the floor, and releases them when attacking or attacked." - color = "#8B1000" - complementary_color = "#00558B" - blobbernaut_message = "blasts" - message = "The blob blasts you" - - -/datum/blobstrain/debris_devourer/attack_living(mob/living/L, list/nearby_blobs) - send_message(L) - for (var/obj/structure/blob/blob in nearby_blobs) - debris_attack(L, blob) - -/datum/blobstrain/debris_devourer/on_sporedeath(mob/living/spore) - for(var/i in 1 to 3) - var/obj/item/I = locate() in overmind.blob_core - if (I && !QDELETED(I)) - I.forceMove(get_turf(spore)) - I.throw_at(get_edge_target_turf(spore,pick(GLOB.alldirs)), 3, 5) - -/datum/blobstrain/debris_devourer/expand_reaction(obj/structure/blob/B, obj/structure/blob/newB, turf/T, mob/camera/blob/O, coefficient = 1) //when the blob expands, do this - for (var/obj/item/I in T) - I.forceMove(overmind.blob_core) - -/datum/blobstrain/debris_devourer/proc/debris_attack(mob/living/L, source) - var/obj/structure/blob/core/core = overmind.blob_core - if (prob(20 * DEBRIS_DENSITY)) // Pretend the items are spread through the blob and its mobs and not in the core. - var/obj/item/I = locate() in core - if (I && !QDELETED(I)) - I.forceMove(get_turf(source)) - I.throw_at(L, 2, 5) - -/datum/blobstrain/debris_devourer/blobbernaut_attack(mob/living/L, mob/living/blobbernaut) // When this blob's blobbernaut attacks people - debris_attack(L,blobbernaut) - -/datum/blobstrain/debris_devourer/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag, coefficient = 1) //when the blob takes damage, do this - var/obj/structure/blob/core/core = overmind.blob_core - return round(max((coefficient*damage)-min(coefficient*DEBRIS_DENSITY, 10), 0)) // reduce damage taken by items per blob, up to 10 - -/datum/blobstrain/debris_devourer/examine(mob/user) - . = ..() - var/obj/structure/blob/core/core = overmind.blob_core - if (isobserver(user)) - . += "Absorbed debris is currently reducing incoming damage by [round(max(min(DEBRIS_DENSITY, 10),0))]" - else - switch (round(max(min(DEBRIS_DENSITY, 10),0))) - if (0) - . += "There is not currently enough absorbed debris to reduce damage." - if (1 to 3) - . += "Absorbed debris is currently reducing incoming damage by a very low amount." // these roughly correspond with force description strings - if (4 to 7) - . += "Absorbed debris is currently reducing incoming damage by a low amount." - if (8 to 10) - . += "Absorbed debris is currently reducing incoming damage by a medium amount." - - -#undef DEBRIS_DENSITY diff --git a/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm b/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm deleted file mode 100644 index 80aa0e3d8db2..000000000000 --- a/code/modules/antagonists/blob/blobstrains/distributed_neurons.dm +++ /dev/null @@ -1,39 +0,0 @@ -//kills unconscious targets and turns them into blob zombies, produces fragile spores when killed. Spore produced by factories are sentient. -/datum/blobstrain/reagent/distributed_neurons - name = "Distributed Neurons" - description = "will do very low toxin damage and turns unconscious targets into blob zombies." - effectdesc = "will also produce fragile spores when killed. Spores produced by factories are sentient." - shortdesc = "will do very low toxin damage and will turn unconscious targets into blob zombies for additional resources(for your overmind). Spores produced by factories are sentient." - analyzerdescdamage = "Does very low toxin damage and kills unconscious humans, turning them into blob zombies." - analyzerdesceffect = "Produces spores when killed. Spores produced by factories are sentient." - color = "#E88D5D" - complementary_color = "#823ABB" - message_living = ", and you feel tired" - reagent = /datum/reagent/blob/distributed_neurons - -/datum/blobstrain/reagent/distributed_neurons/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) - if((damage_flag == "melee" || damage_flag == "bullet" || damage_flag == "laser") && damage <= 20 && B.obj_integrity - damage <= 0 && prob(15)) //if the cause isn't fire or a bomb, the damage is less than 21, we're going to die from that damage, 15% chance of a shitty spore. - B.visible_message("A spore floats free of the blob!") - var/mob/living/simple_animal/hostile/blob/blobspore/weak/BS = new/mob/living/simple_animal/hostile/blob/blobspore/weak(B.loc) - BS.overmind = B.overmind - BS.update_icons() - B.overmind.blob_mobs.Add(BS) - return ..() - -/datum/reagent/blob/distributed_neurons - name = "Distributed Neurons" - color = "#E88D5D" - -/datum/reagent/blob/distributed_neurons/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O) - reac_volume = ..() - M.apply_damage(0.6*reac_volume, TOX) - if(O && ishuman(M) && (M.stat == UNCONSCIOUS || M.stat == HARD_CRIT)) - M.death() //sleeping in a fight? bad plan. - var/points = rand(5, 10) - var/mob/living/simple_animal/hostile/blob/blobspore/BS = new/mob/living/simple_animal/hostile/blob/blobspore/weak(get_turf(M)) - BS.overmind = O - BS.update_icons() - O.blob_mobs.Add(BS) - BS.Zombify(M) - O.add_points(points) - to_chat(O, "Gained [points] resources from the zombification of [M].") diff --git a/code/modules/antagonists/blob/blobstrains/electromagnetic_web.dm b/code/modules/antagonists/blob/blobstrains/electromagnetic_web.dm deleted file mode 100644 index f307a077f888..000000000000 --- a/code/modules/antagonists/blob/blobstrains/electromagnetic_web.dm +++ /dev/null @@ -1,37 +0,0 @@ -//does burn damage and EMPs, slightly fragile -/datum/blobstrain/reagent/electromagnetic_web - name = "Electromagnetic Web" - color = "#83ECEC" - complementary_color = "#EC8383" - description = "will do high burn damage and EMP targets." - effectdesc = "will also take massively increased damage and release an EMP when killed." - analyzerdescdamage = "Does low burn damage and EMPs targets." - analyzerdesceffect = "Is fragile to all types of damage, but takes massive damage from brute. In addition, releases a small EMP when killed." - reagent = /datum/reagent/blob/electromagnetic_web - -/datum/blobstrain/reagent/electromagnetic_web/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) - if(damage_type == BRUTE) //take full brute - switch(B.brute_resist) - if(0.5) - return damage * 2 - if(0.25) - return damage * 4 - if(0.1) - return damage * 10 - return damage * 1.25 //a laser will do 25 damage, which will kill any normal blob - -/datum/blobstrain/reagent/electromagnetic_web/death_reaction(obj/structure/blob/B, damage_flag) - if(damage_flag == "melee" || damage_flag == "bullet" || damage_flag == "laser") - empulse(B.loc, 1, 3) //less than screen range, so you can stand out of range to avoid it - -/datum/reagent/blob/electromagnetic_web - name = "Electromagnetic Web" - taste_description = "pop rocks" - color = "#83ECEC" - -/datum/reagent/blob/electromagnetic_web/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O) - reac_volume = ..() - if(prob(reac_volume*2)) - M.emp_act(EMP_LIGHT) - if(M) - M.apply_damage(reac_volume, BURN) diff --git a/code/modules/antagonists/blob/blobstrains/energized_jelly.dm b/code/modules/antagonists/blob/blobstrains/energized_jelly.dm deleted file mode 100644 index 56a4aca744eb..000000000000 --- a/code/modules/antagonists/blob/blobstrains/energized_jelly.dm +++ /dev/null @@ -1,34 +0,0 @@ -//does tons of oxygen damage and a little stamina, immune to tesla bolts, weak to EMP -/datum/blobstrain/reagent/energized_jelly - name = "Energized Jelly" - description = "will cause low stamina and high oxygen damage, and cause targets to be unable to breathe." - effectdesc = "will also conduct electricity, but takes damage from EMPs." - analyzerdescdamage = "Does low stamina damage, high oxygen damage, and prevents targets from breathing." - analyzerdesceffect = "Is immune to electricity and will easily conduct it, but is weak to EMPs." - color = "#EFD65A" - complementary_color = "#00E5B1" - reagent = /datum/reagent/blob/energized_jelly - -/datum/blobstrain/reagent/energized_jelly/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) - if((damage_flag == "melee" || damage_flag == "bullet" || damage_flag == "laser") && B.obj_integrity - damage <= 0 && prob(10)) - do_sparks(rand(2, 4), FALSE, B) - return ..() - -/datum/blobstrain/reagent/energized_jelly/tesla_reaction(obj/structure/blob/B, power) - return 0 - -/datum/blobstrain/reagent/energized_jelly/emp_reaction(obj/structure/blob/B, severity) - var/damage = rand(30, 50) - severity * rand(10, 15) - B.take_damage(damage, BURN, "energy") - -/datum/reagent/blob/energized_jelly - name = "Blob Energized Jelly" - taste_description = "gelatin" - color = "#EFD65A" - -/datum/reagent/blob/energized_jelly/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O) - reac_volume = ..() - M.losebreath += round(0.2*reac_volume) - M.adjustStaminaLoss(reac_volume) - if(M) - M.apply_damage(0.6*reac_volume, OXY) diff --git a/code/modules/antagonists/blob/blobstrains/explosive_lattice.dm b/code/modules/antagonists/blob/blobstrains/explosive_lattice.dm deleted file mode 100644 index ef07676a2301..000000000000 --- a/code/modules/antagonists/blob/blobstrains/explosive_lattice.dm +++ /dev/null @@ -1,40 +0,0 @@ -//does aoe brute damage when hitting targets, is immune to explosions -/datum/blobstrain/reagent/explosive_lattice - name = "Explosive Lattice" - description = "will do brute damage in an area around targets." - effectdesc = "will also resist explosions, but takes increased damage from fire and other energy sources." - analyzerdescdamage = "Does medium brute damage and causes damage to everyone near its targets." - analyzerdesceffect = "Is highly resistant to explosions, but takes increased damage from fire and other energy sources." - color = "#8B2500" - complementary_color = "#00668B" - blobbernaut_message = "blasts" - message = "The blob blasts you" - reagent = /datum/reagent/blob/explosive_lattice - -/datum/blobstrain/reagent/explosive_lattice/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) - if(damage_flag == "bomb") - return 0 - else if(damage_flag != "melee" && damage_flag != "bullet" && damage_flag != "laser") - return damage * 1.5 - return ..() - -/datum/reagent/blob/explosive_lattice - name = "Explosive Lattice" - taste_description = "the bomb" - color = "#8B2500" - -/datum/reagent/blob/explosive_lattice/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O) - var/initial_volume = reac_volume - reac_volume = ..() - if(reac_volume >= 10) //if it's not a spore cloud, bad time incoming - var/obj/effect/temp_visual/explosion/fast/E = new /obj/effect/temp_visual/explosion/fast(get_turf(M)) - E.alpha = 150 - for(var/mob/living/L in orange(get_turf(M), 1)) - if(ROLE_BLOB in L.faction) //no friendly fire - continue - var/aoe_volume = ..(L, TOUCH, initial_volume, 0, L.get_permeability_protection(), O) - L.apply_damage(0.4*aoe_volume, BRUTE) - if(M) - M.apply_damage(0.6*reac_volume, BRUTE) - else - M.apply_damage(0.6*reac_volume, BRUTE) diff --git a/code/modules/antagonists/blob/blobstrains/multiplex.dm b/code/modules/antagonists/blob/blobstrains/multiplex.dm deleted file mode 100644 index aaebf1d0526b..000000000000 --- a/code/modules/antagonists/blob/blobstrains/multiplex.dm +++ /dev/null @@ -1,40 +0,0 @@ -/datum/blobstrain/multiplex - var/list/blobstrains - var/typeshare - -/datum/blobstrain/multiplex/New(mob/camera/blob/new_overmind, list/blobstrains) - . = ..() - for (var/bt in blobstrains) - if (ispath(bt, /datum/blobstrain)) - src.blobstrains += new bt(overmind) - else if (istype(bt, /datum/blobstrain)) - var/datum/blobstrain/bts = bt - bts.overmind = overmind - src.blobstrains += bt - typeshare = (0.8 * length(src.blobstrains)) - (length(src.blobstrains)-1) // 1 is 80%, 2 are 60% etc - -/datum/blobstrain/multiplex/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag, coefficient = 1) //when the blob takes damage, do this - for (var/datum/blobstrain/bt in blobstrains) - . += bt.damage_reaction(B, damage, damage_type, damage_flag, coefficient*typeshare) - -/datum/blobstrain/multiplex/death_reaction(obj/structure/blob/B, damage_flag, coefficient = 1) //when a blob dies, do this - for (var/datum/blobstrain/bt in blobstrains) - . += bt.death_reaction(B, damage_flag, coefficient*typeshare) - -/datum/blobstrain/multiplex/expand_reaction(obj/structure/blob/B, obj/structure/blob/newB, turf/T, mob/camera/blob/O, coefficient = 1) //when the blob expands, do this - for (var/datum/blobstrain/bt in blobstrains) - . += bt.expand_reaction(B, newB, T, O, coefficient*typeshare) - -/datum/blobstrain/multiplex/tesla_reaction(obj/structure/blob/B, power, coefficient = 1) //when the blob is hit by a tesla bolt, do this - for (var/datum/blobstrain/bt in blobstrains) - . += bt.tesla_reaction(B, power, coefficient*typeshare) - if (prob(. / length(blobstrains) * 100)) - return 1 - -/datum/blobstrain/multiplex/extinguish_reaction(obj/structure/blob/B, coefficient = 1) //when the blob is hit with water, do this - for (var/datum/blobstrain/bt in blobstrains) - . += bt.extinguish_reaction(B, coefficient*typeshare) - -/datum/blobstrain/multiplex/emp_reaction(obj/structure/blob/B, severity, coefficient = 1) //when the blob is hit with an emp, do this - for (var/datum/blobstrain/bt in blobstrains) - . += bt.emp_reaction(B, severity, coefficient*typeshare) diff --git a/code/modules/antagonists/blob/blobstrains/networked_fibers.dm b/code/modules/antagonists/blob/blobstrains/networked_fibers.dm deleted file mode 100644 index d3997aa8ce82..000000000000 --- a/code/modules/antagonists/blob/blobstrains/networked_fibers.dm +++ /dev/null @@ -1,38 +0,0 @@ -//does massive brute and burn damage, but can only expand manually -/datum/blobstrain/reagent/networked_fibers - name = "Networked Fibers" - description = "will do high brute and burn damage and will generate resources quicker, but can only expand manually." - shortdesc = "will do high brute and burn damage." - effectdesc = "will move your core when manually expanding near it." - analyzerdescdamage = "Does high brute and burn damage." - analyzerdesceffect = "Is highly mobile and generates resources rapidly." - color = "#4F4441" - complementary_color = "#414C4F" - reagent = /datum/reagent/blob/networked_fibers - -/datum/blobstrain/reagent/networked_fibers/expand_reaction(obj/structure/blob/B, obj/structure/blob/newB, turf/T, mob/camera/blob/O) - if(!O && newB.overmind) - if(!istype(B, /obj/structure/blob/node)) - newB.overmind.add_points(1) - qdel(newB) - else - var/area/A = get_area(T) - if(!isspaceturf(T) && !istype(A, /area/shuttle)) - for(var/obj/structure/blob/core/C in range(1, newB)) - if(C.overmind == O) - newB.forceMove(get_turf(C)) - C.forceMove(T) - C.setDir(get_dir(newB, C)) - O.add_points(1) - -//does massive brute and burn damage, but can only expand manually -/datum/reagent/blob/networked_fibers - name = "Networked Fibers" - taste_description = "efficiency" - color = "#4F4441" - -/datum/reagent/blob/networked_fibers/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O) - reac_volume = ..() - M.apply_damage(0.6*reac_volume, BRUTE) - if(!QDELETED(M)) - M.apply_damage(0.6*reac_volume, BURN) diff --git a/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm b/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm deleted file mode 100644 index d1d3768acb74..000000000000 --- a/code/modules/antagonists/blob/blobstrains/pressurized_slime.dm +++ /dev/null @@ -1,51 +0,0 @@ -//does low brute damage, oxygen damage, and stamina damage and wets tiles when damaged -/datum/blobstrain/reagent/pressurized_slime - name = "Pressurized Slime" - description = "will do low brute, oxygen, and stamina damage, and wet tiles under targets." - effectdesc = "will also wet tiles near blobs that are attacked or killed." - analyzerdescdamage = "Does low brute damage, low oxygen damage, drains stamina, and wets tiles under targets, extinguishing them." - analyzerdesceffect = "When attacked or killed, lubricates nearby tiles, extinguishing anything on them." - color = "#AAAABB" - complementary_color = "#BBBBAA" - blobbernaut_message = "emits slime at" - message = "The blob splashes into you" - message_living = ", and you gasp for breath" - reagent = /datum/reagent/blob/pressurized_slime - -/datum/blobstrain/reagent/pressurized_slime/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) - if((damage_flag == "melee" || damage_flag == "bullet" || damage_flag == "laser") || damage_type != BURN) - extinguisharea(B, damage) - return ..() - -/datum/blobstrain/reagent/pressurized_slime/death_reaction(obj/structure/blob/B, damage_flag) - if(damage_flag == "melee" || damage_flag == "bullet" || damage_flag == "laser") - B.visible_message("The blob ruptures, spraying the area with liquid!") - extinguisharea(B, 50) - -/datum/blobstrain/reagent/pressurized_slime/proc/extinguisharea(obj/structure/blob/B, probchance) - for(var/turf/open/T in range(1, B)) - if(prob(probchance)) - T.MakeSlippery(TURF_WET_LUBE, min_wet_time = 10 SECONDS, wet_time_to_add = 5 SECONDS) - for(var/obj/O in T) - O.extinguish() - for(var/mob/living/L in T) - L.adjust_fire_stacks(-2.5) - L.ExtinguishMob() - -/datum/reagent/blob/pressurized_slime - name = "Pressurized Slime" - taste_description = "a sponge" - color = "#AAAABB" - -/datum/reagent/blob/pressurized_slime/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O) - reac_volume = ..() - var/turf/open/T = get_turf(M) - if(istype(T) && prob(reac_volume)) - T.MakeSlippery(TURF_WET_LUBE, min_wet_time = 10 SECONDS, wet_time_to_add = 5 SECONDS) - M.adjust_fire_stacks(-(reac_volume / 10)) - M.ExtinguishMob() - M.apply_damage(0.4*reac_volume, BRUTE) - if(M) - M.apply_damage(0.4*reac_volume, OXY) - if(M) - M.adjustStaminaLoss(reac_volume) diff --git a/code/modules/antagonists/blob/blobstrains/reactive_spines.dm b/code/modules/antagonists/blob/blobstrains/reactive_spines.dm deleted file mode 100644 index 9849c1177a71..000000000000 --- a/code/modules/antagonists/blob/blobstrains/reactive_spines.dm +++ /dev/null @@ -1,30 +0,0 @@ -//does brute damage through armor and bio resistance -/datum/blobstrain/reagent/reactive_spines - name = "Reactive Spines" - description = "will do medium brute damage through armor and bio resistance." - effectdesc = "will also react when attacked with brute damage, attacking all near the attacked blob." - analyzerdescdamage = "Does medium brute damage, ignoring armor and bio resistance." - analyzerdesceffect = "When attacked with brute damage, will lash out, attacking everything near it." - color = "#9ACD32" - complementary_color = "#FFA500" - blobbernaut_message = "stabs" - message = "The blob stabs you" - reagent = /datum/reagent/blob/reactive_spines - -/datum/blobstrain/reagent/reactive_spines/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) - if(damage && damage_type == BRUTE && B.obj_integrity - damage > 0) //is there any damage, is it brute, and will we be alive - if(damage_flag == "melee") - B.visible_message("The blob retaliates, lashing out!") - for(var/atom/A in range(1, B)) - A.blob_act(B) - return ..() - -/datum/reagent/blob/reactive_spines - name = "Reactive Spines" - taste_description = "rock" - color = "#9ACD32" - -/datum/reagent/blob/reactive_spines/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O) - if(M.stat == DEAD || istype(M, /mob/living/simple_animal/hostile/blob)) - return 0 //the dead, and blob mobs, don't cause reactions - M.adjustBruteLoss(0.8*reac_volume) diff --git a/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm b/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm deleted file mode 100644 index 500418b7be6d..000000000000 --- a/code/modules/antagonists/blob/blobstrains/regenerative_materia.dm +++ /dev/null @@ -1,33 +0,0 @@ -//does toxin damage, hallucination, targets think they're not hurt at all -/datum/blobstrain/reagent/regenerative_materia - name = "Regenerative Materia" - description = "will do toxin damage and cause targets to believe they are fully healed." - analyzerdescdamage = "Does toxin damage and injects a toxin that causes the target to believe they are fully healed." - color = "#A88FB7" - complementary_color = "#AF7B8D" - message_living = ", and you feel alive" - reagent = /datum/reagent/blob/regenerative_materia - -/datum/reagent/blob/regenerative_materia - name = "Regenerative Materia" - taste_description = "heaven" - color = "#A88FB7" - -/datum/reagent/blob/regenerative_materia/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O) - reac_volume = ..() - M.adjust_drugginess(reac_volume) - if(M.reagents) - M.reagents.add_reagent(/datum/reagent/blob/regenerative_materia, 0.2*reac_volume) - M.reagents.add_reagent(/datum/reagent/toxin/spore, 0.2*reac_volume) - M.apply_damage(0.7*reac_volume, TOX) - -/datum/reagent/blob/regenerative_materia/on_mob_life(mob/living/carbon/C) - C.adjustToxLoss(1*REAGENTS_EFFECT_MULTIPLIER) - C.hal_screwyhud = SCREWYHUD_HEALTHY //fully healed, honest - ..() - -/datum/reagent/blob/regenerative_materia/on_mob_end_metabolize(mob/living/M) - if(iscarbon(M)) - var/mob/living/carbon/N = M - N.hal_screwyhud = 0 - ..() diff --git a/code/modules/antagonists/blob/blobstrains/replicating_foam.dm b/code/modules/antagonists/blob/blobstrains/replicating_foam.dm deleted file mode 100644 index 4800aed698d2..000000000000 --- a/code/modules/antagonists/blob/blobstrains/replicating_foam.dm +++ /dev/null @@ -1,35 +0,0 @@ -/datum/blobstrain/reagent/replicating_foam - name = "Replicating Foam" - description = "will do medium brute damage and occasionally expand again when expanding." - shortdesc = "will do medium brute damage." - effectdesc = "will also expand when attacked with burn damage, but takes more brute damage." - color = "#7B5A57" - complementary_color = "#57787B" - analyzerdescdamage = "Does medium brute damage." - analyzerdesceffect = "Expands when attacked with burn damage, will occasionally expand again when expanding, and is fragile to brute damage." - reagent = /datum/reagent/blob/replicating_foam - - -/datum/blobstrain/reagent/replicating_foam/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) - if(damage_type == BRUTE) - damage = damage * 2 - else if(damage_type == BURN && damage > 0 && B.obj_integrity - damage > 0 && prob(60)) - var/obj/structure/blob/newB = B.expand(null, null, 0) - if(newB) - newB.obj_integrity = B.obj_integrity - damage - newB.update_appearance() - return ..() - - -/datum/blobstrain/reagent/replicating_foam/expand_reaction(obj/structure/blob/B, obj/structure/blob/newB, turf/T, mob/camera/blob/O) - if(prob(30)) - newB.expand(null, null, 0) //do it again! - -/datum/reagent/blob/replicating_foam - name = "Replicating Foam" - taste_description = "duplication" - color = "#7B5A57" - -/datum/reagent/blob/replicating_foam/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O) - reac_volume = ..() - M.apply_damage(0.7*reac_volume, BRUTE) diff --git a/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm b/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm deleted file mode 100644 index c615427463f6..000000000000 --- a/code/modules/antagonists/blob/blobstrains/shifting_fragments.dm +++ /dev/null @@ -1,36 +0,0 @@ -//does brute damage, shifts away when damaged -/datum/blobstrain/reagent/shifting_fragments - name = "Shifting Fragments" - description = "will do medium brute damage." - effectdesc = "will also cause blob parts to shift away when attacked." - analyzerdescdamage = "Does medium brute damage." - analyzerdesceffect = "When attacked, may shift away from the attacker." - color = "#C8963C" - complementary_color = "#3C6EC8" - reagent = /datum/reagent/blob/shifting_fragments - -/datum/blobstrain/reagent/shifting_fragments/expand_reaction(obj/structure/blob/B, obj/structure/blob/newB, turf/T, mob/camera/blob/O) - if(istype(B, /obj/structure/blob/normal) || (istype(B, /obj/structure/blob/shield) && prob(25))) - newB.forceMove(get_turf(B)) - B.forceMove(T) - -/datum/blobstrain/reagent/shifting_fragments/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) - if((damage_flag == "melee" || damage_flag == "bullet" || damage_flag == "laser") && damage > 0 && B.obj_integrity - damage > 0 && prob(60-damage)) - var/list/blobstopick = list() - for(var/obj/structure/blob/OB in orange(1, B)) - if((istype(OB, /obj/structure/blob/normal) || (istype(OB, /obj/structure/blob/shield) && prob(25))) && OB.overmind && OB.overmind.blobstrain.type == B.overmind.blobstrain.type) - blobstopick += OB //as long as the blob picked is valid; ie, a normal or shield blob that has the same chemical as we do, we can swap with it - if(blobstopick.len) - var/obj/structure/blob/targeted = pick(blobstopick) //randomize the blob chosen, because otherwise it'd tend to the lower left - var/turf/T = get_turf(targeted) - targeted.forceMove(get_turf(B)) - B.forceMove(T) //swap the blobs - return ..() - -/datum/reagent/blob/shifting_fragments - name = "Shifting Fragments" - color = "#C8963C" - -/datum/reagent/blob/shifting_fragments/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O) - reac_volume = ..() - M.apply_damage(0.7*reac_volume, BRUTE) diff --git a/code/modules/antagonists/blob/blobstrains/synchronous_mesh.dm b/code/modules/antagonists/blob/blobstrains/synchronous_mesh.dm deleted file mode 100644 index 02ee0cb1941a..000000000000 --- a/code/modules/antagonists/blob/blobstrains/synchronous_mesh.dm +++ /dev/null @@ -1,39 +0,0 @@ -//does brute damage, bonus damage for each nearby blob, and spreads damage out -/datum/blobstrain/reagent/synchronous_mesh - name = "Synchronous Mesh" - description = "will do massively increased brute damage for each blob near the target." - effectdesc = "will also spread damage between each blob near the attacked blob." - analyzerdescdamage = "Does brute damage, increasing for each blob near the target." - analyzerdesceffect = "When attacked, spreads damage between all blobs near the attacked blob." - color = "#65ADA2" - complementary_color = "#AD6570" - blobbernaut_message = "synchronously strikes" - message = "The blobs strike you" - reagent = /datum/reagent/blob/synchronous_mesh - -/datum/blobstrain/reagent/synchronous_mesh/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag) - if(damage_flag == "melee" || damage_flag == "bullet" || damage_flag == "laser") //the cause isn't fire or bombs, so split the damage - var/damagesplit = 1 //maximum split is 9, reducing the damage each blob takes to 11% but doing that damage to 9 blobs - for(var/obj/structure/blob/C in orange(1, B)) - if(!istype(C, /obj/structure/blob/core) && !istype(C, /obj/structure/blob/node) && C.overmind && C.overmind.blobstrain.type == B.overmind.blobstrain.type) //if it doesn't have the same chemical or is a core or node, don't split damage to it - damagesplit += 1 - for(var/obj/structure/blob/C in orange(1, B)) - if(!istype(C, /obj/structure/blob/core) && !istype(C, /obj/structure/blob/node) && C.overmind && C.overmind.blobstrain.type == B.overmind.blobstrain.type) //only hurt blobs that have the same overmind chemical and aren't cores or nodes - C.take_damage(damage/damagesplit, CLONE, 0, 0) - return damage / damagesplit - else - return damage * 1.25 - -/datum/reagent/blob/synchronous_mesh - name = "Synchronous Mesh" - taste_description = "toxic mold" - color = "#65ADA2" - -/datum/reagent/blob/synchronous_mesh/expose_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection, mob/camera/blob/O) - reac_volume = ..() - M.apply_damage(0.2*reac_volume, BRUTE) - if(M && reac_volume) - for(var/obj/structure/blob/B in range(1, M)) //if the target is completely surrounded, this is 2.4*reac_volume bonus damage, total of 2.6*reac_volume - if(M) - B.blob_attack_animation(M) //show them they're getting a bad time - M.apply_damage(0.3*reac_volume, BRUTE) diff --git a/code/modules/antagonists/blob/overmind.dm b/code/modules/antagonists/blob/overmind.dm deleted file mode 100644 index 3255b4aea69c..000000000000 --- a/code/modules/antagonists/blob/overmind.dm +++ /dev/null @@ -1,288 +0,0 @@ -//Few global vars to track the blob -GLOBAL_LIST_EMPTY(blobs) //complete list of all blobs made. -GLOBAL_LIST_EMPTY(blob_cores) -GLOBAL_LIST_EMPTY(overminds) -GLOBAL_LIST_EMPTY(blob_nodes) - - -/mob/camera/blob - name = "Blob Overmind" - real_name = "Blob Overmind" - desc = "The overmind. It controls the blob." - icon = 'icons/mob/cameramob.dmi' - icon_state = "marker" - mouse_opacity = MOUSE_OPACITY_ICON - move_on_shuttle = 1 - see_in_dark = 8 - invisibility = INVISIBILITY_OBSERVER - layer = FLY_LAYER - - pass_flags = PASSBLOB - faction = list(ROLE_BLOB) - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - hud_type = /datum/hud/blob_overmind - var/obj/structure/blob/core/blob_core = null // The blob overmind's core - var/blob_points = 0 - var/max_blob_points = 100 - var/last_attack = 0 - var/datum/blobstrain/blobstrain - var/list/blob_mobs = list() - var/list/resource_blobs = list() - var/free_strain_rerolls = 1 //one free strain reroll - var/last_reroll_time = 0 //time since we last rerolled, used to give free rerolls - var/nodes_required = 1 //if the blob needs nodes to place resource and factory blobs - var/placed = 0 - var/manualplace_min_time = 600 //in deciseconds //a minute, to get bearings - var/autoplace_max_time = 3600 //six minutes, as long as should be needed - var/list/blobs_legit = list() - var/max_count = 0 //The biggest it got before death - var/blobwincount = 400 - var/victory_in_progress = FALSE - var/rerolling = FALSE - var/announcement_size = 75 - var/announcement_time - var/has_announced = FALSE - -/mob/camera/blob/Initialize(mapload, starting_points = 60) - validate_location() - blob_points = starting_points - manualplace_min_time += world.time - autoplace_max_time += world.time - GLOB.overminds += src - var/new_name = "[initial(name)] ([rand(1, 999)])" - name = new_name - real_name = new_name - last_attack = world.time - var/datum/blobstrain/BS = pick(GLOB.valid_blobstrains) - set_strain(BS) - color = blobstrain.complementary_color - if(blob_core) - blob_core.update_appearance() - announcement_time = world.time + 6000 - . = ..() - START_PROCESSING(SSobj, src) - -/mob/camera/blob/proc/validate_location() - var/turf/T = get_turf(src) - if(!is_valid_turf(T) && LAZYLEN(GLOB.blobstart)) - var/list/blobstarts = shuffle(GLOB.blobstart) - for(var/_T in blobstarts) - if(is_valid_turf(_T)) - T = _T - break - if(!T) - CRASH("No blobspawnpoints and blob spawned in nullspace.") - forceMove(T) - -/mob/camera/blob/proc/set_strain(datum/blobstrain/new_strain) - if (ispath(new_strain)) - var/hadstrain = FALSE - if (istype(blobstrain)) - blobstrain.on_lose() - qdel(blobstrain) - hadstrain = TRUE - blobstrain = new new_strain(src) - blobstrain.on_gain() - if (hadstrain) - to_chat(src, "Your strain is now: [blobstrain.name]!") - to_chat(src, "The [blobstrain.name] strain [blobstrain.description]") - if(blobstrain.effectdesc) - to_chat(src, "The [blobstrain.name] strain [blobstrain.effectdesc]") - - -/mob/camera/blob/proc/is_valid_turf(turf/T) - var/area/A = get_area(T) - if(!T || (A && !(A.area_flags & BLOBS_ALLOWED)) || isspaceturf(T)) - return FALSE - return TRUE - -/mob/camera/blob/process() - if(!blob_core) - if(!placed) - if(manualplace_min_time && world.time >= manualplace_min_time) - to_chat(src, "You may now place your blob core.") - to_chat(src, "You will automatically place your blob core in [DisplayTimeText(autoplace_max_time - world.time)].") - manualplace_min_time = 0 - if(autoplace_max_time && world.time >= autoplace_max_time) - place_blob_core(1) - else - qdel(src) - else if(!victory_in_progress && (blobs_legit.len >= blobwincount)) - victory_in_progress = TRUE - priority_announce("Biohazard has reached critical mass. Sector loss is imminent.", "Biohazard Alert") - set_security_level("delta") - SSredbot.send_discord_message("admin","A blob has reached critical mass.","round ending event") - max_blob_points = INFINITY - blob_points = INFINITY - addtimer(CALLBACK(src, PROC_REF(victory)), 450) - else if(!free_strain_rerolls && (last_reroll_time + BLOB_REROLL_TIMEYou have gained another free strain re-roll.") - free_strain_rerolls = 1 - - if(!victory_in_progress && max_count < blobs_legit.len) - max_count = blobs_legit.len - - if((world.time >= announcement_time || blobs_legit.len >= announcement_size) && !has_announced) - priority_announce("Confirmed outbreak of level 5 biohazard in [station_name()]. All able individuals must assist in containing the outbreak.", "Biohazard Alert", 'sound/ai/outbreak5.ogg') - has_announced = TRUE - - if((world.time >= announcement_time || blobs_legit.len >= announcement_size) && !has_announced) - priority_announce("Confirmed outbreak of level 5 biohazard in [station_name()]. All able individuals must assist in containing the outbreak.", "Biohazard Alert", 'sound/ai/outbreak5.ogg') - has_announced = TRUE - -/mob/camera/blob/proc/victory() - sound_to_playing_players('sound/machines/alarm.ogg') - sleep(100) - for(var/i in GLOB.mob_living_list) - var/mob/living/L = i - var/turf/T = get_turf(L) - if(L.virtual_z() != virtual_z()) - continue - - if(L in GLOB.overminds || (L.pass_flags & PASSBLOB)) - continue - - var/area/Ablob = get_area(T) - - if(!(Ablob.area_flags & BLOBS_ALLOWED)) - continue - - if(!(ROLE_BLOB in L.faction)) - playsound(L, 'sound/effects/splat.ogg', 50, TRUE) - L.death() - new/mob/living/simple_animal/hostile/blob/blobspore(T) - else - L.fully_heal(admin_revive = FALSE) - - for(var/area/A in GLOB.sortedAreas) - if(!(A.area_flags & BLOBS_ALLOWED)) - continue - A.color = blobstrain.color - A.name = "blob" - A.icon = 'icons/mob/blob.dmi' - A.icon_state = "blob_shield" - A.layer = BELOW_MOB_LAYER - A.invisibility = 0 - A.blend_mode = 0 - var/datum/antagonist/blob/B = mind.has_antag_datum(/datum/antagonist/blob) - if(B) - var/datum/objective/blob_takeover/main_objective = locate() in B.objectives - if(main_objective) - main_objective.completed = TRUE - to_chat(world, "[real_name] consumed the sector in an unstoppable tide!") - SSticker.news_report = BLOB_WIN - SSticker.force_ending = 1 - -/mob/camera/blob/Destroy() - QDEL_NULL(blobstrain) - for(var/BL in GLOB.blobs) - var/obj/structure/blob/B = BL - if(B && B.overmind == src) - B.overmind = null - B.update_appearance() //reset anything that was ours - for(var/BLO in blob_mobs) - var/mob/living/simple_animal/hostile/blob/BM = BLO - if(BM) - BM.overmind = null - BM.update_icons() - GLOB.overminds -= src - - STOP_PROCESSING(SSobj, src) - - return ..() - -/mob/camera/blob/Login() - . = ..() - if(!. || !client) - return FALSE - to_chat(src, "You are the overmind!") - blob_help() - update_health_hud() - add_points(0) - -/mob/camera/blob/examine(mob/user) - . = ..() - if(blobstrain) - . += "Its strain is [blobstrain.name]." - -/mob/camera/blob/update_health_hud() - if(blob_core) - hud_used.healths.maptext = "
    [round(blob_core.obj_integrity)]
    " - for(var/mob/living/simple_animal/hostile/blob/blobbernaut/B in blob_mobs) - if(B.hud_used && B.hud_used.blobpwrdisplay) - B.hud_used.blobpwrdisplay.maptext = "
    [round(blob_core.obj_integrity)]
    " - -/mob/camera/blob/proc/add_points(points) - blob_points = clamp(blob_points + points, 0, max_blob_points) - hud_used.blobpwrdisplay.maptext = "
    [round(blob_points)]
    " - -/mob/camera/blob/say(message, bubble_type, list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null) - if (!message) - return - - if (src.client) - if(client.prefs.muted & MUTE_IC) - to_chat(src, "You cannot send IC messages (muted).") - return - if (!(ignore_spam || forced) && src.client.handle_spam_prevention(message,MUTE_IC)) - return - - if (stat) - return - - blob_talk(message) - -/mob/camera/blob/proc/blob_talk(message) - - message = trim(copytext_char(sanitize(message), 1, MAX_MESSAGE_LEN)) - - if (!message) - return - - src.log_talk(message, LOG_SAY) - - var/message_a = say_quote(message) - var/rendered = "\[Blob Telepathy\] [name]([blobstrain.name]) [message_a]" - - for(var/mob/M in GLOB.mob_list) - if(isovermind(M) || istype(M, /mob/living/simple_animal/hostile/blob)) - to_chat(M, rendered) - if(isobserver(M)) - var/link = FOLLOW_LINK(M, src) - to_chat(M, "[link] [rendered]") - -/mob/camera/blob/blob_act(obj/structure/blob/B) - return - -/mob/camera/blob/get_status_tab_items() - . = ..() - if(blob_core) - . += "Core Health: [blob_core.obj_integrity]" - . += "Power Stored: [blob_points]/[max_blob_points]" - . += "Blobs to Win: [blobs_legit.len]/[blobwincount]" - if(free_strain_rerolls) - . += "You have [free_strain_rerolls] Free Strain Reroll\s Remaining" - if(!placed) - if(manualplace_min_time) - . += "Time Before Manual Placement: [max(round((manualplace_min_time - world.time)*0.1, 0.1), 0)]" - . += "Time Before Automatic Placement: [max(round((autoplace_max_time - world.time)*0.1, 0.1), 0)]" - -/mob/camera/blob/Move(NewLoc, Dir = 0) - if(placed) - var/obj/structure/blob/B = locate() in range("3x3", NewLoc) - if(B) - forceMove(NewLoc) - else - return 0 - else - var/area/A = get_area(NewLoc) - if(isspaceturf(NewLoc) || istype(A, /area/shuttle)) //if unplaced, can't go on shuttles or space tiles - return 0 - forceMove(NewLoc) - return 1 - -/mob/camera/blob/mind_initialize() - . = ..() - var/datum/antagonist/blob/B = mind.has_antag_datum(/datum/antagonist/blob) - if(!B) - mind.add_antag_datum(/datum/antagonist/blob) diff --git a/code/modules/antagonists/blob/powers.dm b/code/modules/antagonists/blob/powers.dm deleted file mode 100644 index 2fba8e460e22..000000000000 --- a/code/modules/antagonists/blob/powers.dm +++ /dev/null @@ -1,394 +0,0 @@ -/mob/camera/blob/proc/can_buy(cost = 15) - if(blob_points < cost) - to_chat(src, "You cannot afford this, you need at least [cost] resources!") - return 0 - add_points(-cost) - return 1 - -// Power verbs - -/mob/camera/blob/proc/place_blob_core(placement_override, pop_override = FALSE) - if(placed && placement_override != -1) - return 1 - if(!placement_override) - if(!pop_override) - for(var/mob/living/M in range(7, src)) - if(ROLE_BLOB in M.faction) - continue - if(M.client) - to_chat(src, "There is someone too close to place your blob core!") - return 0 - for(var/mob/living/M in view(13, src)) - if(ROLE_BLOB in M.faction) - continue - if(M.client) - to_chat(src, "Someone could see your blob core from here!") - return 0 - var/turf/T = get_turf(src) - if(T.density) - to_chat(src, "This spot is too dense to place a blob core on!") - return 0 - var/area/A = get_area(T) - if(isspaceturf(T) || A && !(A.area_flags & BLOBS_ALLOWED)) - to_chat(src, "You cannot place your core here!") - return 0 - for(var/obj/O in T) - if(istype(O, /obj/structure/blob)) - if(istype(O, /obj/structure/blob/normal)) - qdel(O) - else - to_chat(src, "There is already a blob here!") - return 0 - else if(O.density) - to_chat(src, "This spot is too dense to place a blob core on!") - return 0 - if(!pop_override && world.time <= manualplace_min_time && world.time <= autoplace_max_time) - to_chat(src, "It is too early to place your blob core!") - return 0 - else if(placement_override == 1) - var/turf/T = pick(GLOB.blobstart) - forceMove(T) //got overrided? you're somewhere random, motherfucker - if(placed && blob_core) - blob_core.forceMove(loc) - else - var/obj/structure/blob/core/core = new(get_turf(src), src, 1) - core.overmind = src - blobs_legit += src - blob_core = core - core.update_appearance() - update_health_hud() - placed = 1 - return 1 - -/mob/camera/blob/verb/transport_core() - set category = "Blob" - set name = "Jump to Core" - set desc = "Move your camera to your core." - if(blob_core) - forceMove(blob_core.drop_location()) - -/mob/camera/blob/verb/jump_to_node() - set category = "Blob" - set name = "Jump to Node" - set desc = "Move your camera to a selected node." - if(GLOB.blob_nodes.len) - var/list/nodes = list() - for(var/i in 1 to GLOB.blob_nodes.len) - var/obj/structure/blob/node/B = GLOB.blob_nodes[i] - nodes["Blob Node #[i] ([get_area_name(B)])"] = B - var/node_name = input(src, "Choose a node to jump to.", "Node Jump") in nodes - var/obj/structure/blob/node/chosen_node = nodes[node_name] - if(chosen_node) - forceMove(chosen_node.loc) - -/mob/camera/blob/proc/createSpecial(price, blobstrain, nearEquals, needsNode, turf/T) - if(!T) - T = get_turf(src) - var/obj/structure/blob/B = (locate(/obj/structure/blob) in T) - if(!B) - to_chat(src, "There is no blob here!") - return - if(!istype(B, /obj/structure/blob/normal)) - to_chat(src, "Unable to use this blob, find a normal one.") - return - if(needsNode) - var/area/A = get_area(src) - if(!(A.area_flags & BLOBS_ALLOWED)) //factory and resource blobs must be legit - to_chat(src, "This type of blob must be placed on the station!") - return - if(nodes_required && !(locate(/obj/structure/blob/node) in orange(3, T)) && !(locate(/obj/structure/blob/core) in orange(4, T))) - to_chat(src, "You need to place this blob closer to a node or core!") - return //handholdotron 2000 - if(nearEquals) - for(var/obj/structure/blob/L in orange(nearEquals, T)) - if(L.type == blobstrain) - to_chat(src, "There is a similar blob nearby, move more than [nearEquals] tiles away from it!") - return - if(!can_buy(price)) - return - var/obj/structure/blob/N = B.change_to(blobstrain, src) - return N - -/mob/camera/blob/verb/toggle_node_req() - set category = "Blob" - set name = "Toggle Node Requirement" - set desc = "Toggle requiring nodes to place resource and factory blobs." - nodes_required = !nodes_required - if(nodes_required) - to_chat(src, "You now require a nearby node or core to place factory and resource blobs.") - else - to_chat(src, "You no longer require a nearby node or core to place factory and resource blobs.") - -/mob/camera/blob/verb/create_shield_power() - set category = "Blob" - set name = "Create/Upgrade Shield Blob (15)" - set desc = "Create a shield blob, which will block fire and is hard to kill. Using this on an existing shield blob turns it into a reflective blob, capable of reflecting most projectiles but making it twice as weak to brute attacks." - create_shield() - -/mob/camera/blob/proc/create_shield(turf/T) - var/obj/structure/blob/shield/S = locate(/obj/structure/blob/shield) in T - if(S) - if(!can_buy(BLOB_REFLECTOR_COST)) - return - if(S.obj_integrity < S.max_integrity * 0.5) - add_points(BLOB_REFLECTOR_COST) - to_chat(src, "This shield blob is too damaged to be modified properly!") - return - to_chat(src, "You secrete a reflective ooze over the shield blob, allowing it to reflect projectiles at the cost of reduced integrity.") - S.change_to(/obj/structure/blob/shield/reflective, src) - else - createSpecial(15, /obj/structure/blob/shield, 0, 0, T) - -/mob/camera/blob/verb/create_resource() - set category = "Blob" - set name = "Create Resource Blob (40)" - set desc = "Create a resource tower which will generate resources for you." - createSpecial(40, /obj/structure/blob/resource, 4, 1) - -/mob/camera/blob/verb/create_node() - set category = "Blob" - set name = "Create Node Blob (50)" - set desc = "Create a node, which will power nearby factory and resource blobs." - createSpecial(50, /obj/structure/blob/node, 5, 0) - -/mob/camera/blob/verb/create_factory() - set category = "Blob" - set name = "Create Factory Blob (60)" - set desc = "Create a spore tower that will spawn spores to harass your enemies." - createSpecial(60, /obj/structure/blob/factory, 7, 1) - -/mob/camera/blob/verb/create_blobbernaut() - set category = "Blob" - set name = "Create Blobbernaut (40)" - set desc = "Create a powerful blobbernaut which is mildly smart and will attack enemies." - var/turf/T = get_turf(src) - var/obj/structure/blob/factory/B = locate(/obj/structure/blob/factory) in T - if(!B) - to_chat(src, "You must be on a factory blob!") - return - if(B.naut) //if it already made a blobbernaut, it can't do it again - to_chat(src, "This factory blob is already sustaining a blobbernaut.") - return - if(B.obj_integrity < B.max_integrity * 0.5) - to_chat(src, "This factory blob is too damaged to sustain a blobbernaut.") - return - if(!can_buy(40)) - return - - B.naut = TRUE //temporary placeholder to prevent creation of more than one per factory. - to_chat(src, "You attempt to produce a blobbernaut.") - var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to play as a [blobstrain.name] blobbernaut?", ROLE_BLOB, null, ROLE_BLOB, 50) //players must answer rapidly - if(LAZYLEN(candidates)) //if we got at least one candidate, they're a blobbernaut now. - B.max_integrity = initial(B.max_integrity) * 0.25 //factories that produced a blobbernaut have much lower health - B.obj_integrity = min(B.obj_integrity, B.max_integrity) - B.update_appearance() - B.visible_message("The blobbernaut [pick("rips", "tears", "shreds")] its way out of the factory blob!") - playsound(B.loc, 'sound/effects/splat.ogg', 50, TRUE) - var/mob/living/simple_animal/hostile/blob/blobbernaut/blobber = new /mob/living/simple_animal/hostile/blob/blobbernaut(get_turf(B)) - flick("blobbernaut_produce", blobber) - B.naut = blobber - blobber.factory = B - blobber.overmind = src - blobber.update_icons() - blobber.adjustHealth(blobber.maxHealth * 0.5) - blob_mobs += blobber - var/mob/dead/observer/C = pick(candidates) - blobber.key = C.key - SEND_SOUND(blobber, sound('sound/effects/blobattack.ogg')) - SEND_SOUND(blobber, sound('sound/effects/attackblob.ogg')) - to_chat(blobber, "You are a blobbernaut!") - to_chat(blobber, "You are powerful, hard to kill, and slowly regenerate near nodes and cores, but will slowly die if not near the blob or if the factory that made you is killed.") - to_chat(blobber, "You can communicate with other blobbernauts and overminds via :b") - to_chat(blobber, "Your overmind's blob reagent is: [blobstrain.name]!") - to_chat(blobber, "The [blobstrain.name] reagent [blobstrain.shortdesc ? "[blobstrain.shortdesc]" : "[blobstrain.description]"]") - else - to_chat(src, "You could not conjure a sentience for your blobbernaut. Your points have been refunded. Try again later.") - add_points(40) - B.naut = null - -/mob/camera/blob/verb/relocate_core() - set category = "Blob" - set name = "Relocate Core (80)" - set desc = "Swaps the locations of your core and the selected node." - var/turf/T = get_turf(src) - var/obj/structure/blob/node/B = locate(/obj/structure/blob/node) in T - if(!B) - to_chat(src, "You must be on a blob node!") - return - if(!blob_core) - to_chat(src, "You have no core and are about to die! May you rest in peace.") - return - var/area/A = get_area(T) - if(isspaceturf(T) || A && !(A.area_flags & BLOBS_ALLOWED)) - to_chat(src, "You cannot relocate your core here!") - return - if(!can_buy(80)) - return - var/turf/old_turf = get_turf(blob_core) - var/olddir = blob_core.dir - blob_core.forceMove(T) - blob_core.setDir(B.dir) - B.forceMove(old_turf) - B.setDir(olddir) - -/mob/camera/blob/verb/revert() - set category = "Blob" - set name = "Remove Blob" - set desc = "Removes a blob, giving you back some resources." - var/turf/T = get_turf(src) - remove_blob(T) - -/mob/camera/blob/proc/remove_blob(turf/T) - var/obj/structure/blob/B = locate() in T - if(!B) - to_chat(src, "There is no blob there!") - return - if(B.point_return < 0) - to_chat(src, "Unable to remove this blob.") - return - if(max_blob_points < B.point_return + blob_points) - to_chat(src, "You have too many resources to remove this blob!") - return - if(B.point_return) - add_points(B.point_return) - to_chat(src, "Gained [B.point_return] resources from removing \the [B].") - qdel(B) - -// commented out to fix errors with non-constant name/desc. Do we even need this code? -// /mob/camera/blob/verb/expand_blob_power() -// set category = "Blob" -// set name = "Expand/Attack Blob ([BLOB_SPREAD_COST])" -// set desc = "Attempts to create a new blob in this tile. If the tile isn't clear, instead attacks it, damaging mobs and objects and refunding [BLOB_ATTACK_REFUND] points." -// var/turf/T = get_turf(src) -// expand_blob(T) - -/mob/camera/blob/proc/expand_blob(turf/T) - if(world.time < last_attack) - return - var/list/possibleblobs = list() - for(var/obj/structure/blob/AB in range(T, 1)) - possibleblobs += AB - if(!possibleblobs.len) - to_chat(src, "There is no blob adjacent to the target tile!") - return - if(can_buy(BLOB_SPREAD_COST)) - var/attacksuccess = FALSE - for(var/mob/living/L in T) - if(ROLE_BLOB in L.faction) //no friendly/dead fire - continue - if(L.stat != DEAD) - attacksuccess = TRUE - blobstrain.attack_living(L, possibleblobs) - var/obj/structure/blob/B = locate() in T - if(B) - if(attacksuccess) //if we successfully attacked a turf with a blob on it, only give an attack refund - B.blob_attack_animation(T, src) - add_points(BLOB_ATTACK_REFUND) - else - to_chat(src, "There is a blob there!") - add_points(BLOB_SPREAD_COST) //otherwise, refund all of the cost - else - var/list/cardinalblobs = list() - var/list/diagonalblobs = list() - for(var/I in possibleblobs) - var/obj/structure/blob/IB = I - if(get_dir(IB, T) in GLOB.cardinals) - cardinalblobs += IB - else - diagonalblobs += IB - var/obj/structure/blob/OB - if(cardinalblobs.len) - OB = pick(cardinalblobs) - if(!OB.expand(T, src)) - add_points(BLOB_ATTACK_REFUND) //assume it's attacked SOMETHING, possibly a structure - else - OB = pick(diagonalblobs) - if(attacksuccess) - OB.blob_attack_animation(T, src) - playsound(OB, 'sound/effects/splat.ogg', 50, TRUE) - add_points(BLOB_ATTACK_REFUND) - else - add_points(BLOB_SPREAD_COST) //if we're attacking diagonally and didn't hit anything, refund - if(attacksuccess) - last_attack = world.time + CLICK_CD_MELEE - else - last_attack = world.time + CLICK_CD_RAPID - -/mob/camera/blob/verb/rally_spores_power() - set category = "Blob" - set name = "Rally Spores" - set desc = "Rally your spores to move to a target location." - var/turf/T = get_turf(src) - rally_spores(T) - -/mob/camera/blob/proc/rally_spores(turf/T) - to_chat(src, "You rally your spores.") - var/list/surrounding_turfs = block(locate(T.x - 1, T.y - 1, T.z), locate(T.x + 1, T.y + 1, T.z)) - if(!surrounding_turfs.len) - return - for(var/mob/living/simple_animal/hostile/blob/blobspore/BS in blob_mobs) - if(isturf(BS.loc) && get_dist(BS, T) <= 35 && !BS.key) - BS.LoseTarget() - BS.Goto(pick(surrounding_turfs), BS.move_to_delay) - -/mob/camera/blob/verb/blob_broadcast() - set category = "Blob" - set name = "Blob Broadcast" - set desc = "Speak with your blob spores and blobbernauts as your mouthpieces." - var/speak_text = stripped_input(src, "What would you like to say with your minions?", "Blob Broadcast", null) - if(!speak_text) - return - else - to_chat(src, "You broadcast with your minions, [speak_text]") - for(var/BLO in blob_mobs) - var/mob/living/simple_animal/hostile/blob/BM = BLO - if(BM.stat == CONSCIOUS) - BM.say(speak_text) - -/mob/camera/blob/verb/strain_reroll() - set category = "Blob" - set name = "Reactive Strain Adaptation (40)" - set desc = "Replaces your strain with a random, different one." - if(!rerolling && (free_strain_rerolls || can_buy(40))) - rerolling = TRUE - reroll_strain() - rerolling = FALSE - if(free_strain_rerolls) - free_strain_rerolls-- - last_reroll_time = world.time - -/mob/camera/blob/proc/reroll_strain() - var/list/choices = list() - while (length(choices) < 4) - var/datum/blobstrain/bs = pick((GLOB.valid_blobstrains)) - choices[initial(bs.name)] = bs - - var/choice = input(usr, "Please choose a new strain","Strain") as anything in sortList(choices, /proc/cmp_typepaths_asc) - if (choice && choices[choice] && !QDELETED(src)) - var/datum/blobstrain/bs = choices[choice] - set_strain(bs) - - -/mob/camera/blob/verb/blob_help() - set category = "Blob" - set name = "*Blob Help*" - set desc = "Help on how to blob." - to_chat(src, "As the overmind, you can control the blob!") - to_chat(src, "Your blob reagent is: [blobstrain.name]!") - to_chat(src, "The [blobstrain.name] reagent [blobstrain.description]") - if(blobstrain.effectdesc) - to_chat(src, "The [blobstrain.name] reagent [blobstrain.effectdesc]") - to_chat(src, "You can expand, which will attack people, damage objects, or place a Normal Blob if the tile is clear.") - to_chat(src, "Normal Blobs will expand your reach and can be upgraded into special blobs that perform certain functions.") - to_chat(src, "You can upgrade normal blobs into the following types of blob:") - to_chat(src, "Shield Blobs are strong and expensive blobs which take more damage. In additon, they are fireproof and can block air, use these to protect yourself from station fires. Upgrading them again will result in a reflective blob, capable of reflecting most projectiles at the cost of the strong blob's extra health.") - to_chat(src, "Resource Blobs are blobs which produce more resources for you, build as many of these as possible to consume the station. This type of blob must be placed near node blobs or your core to work.") - to_chat(src, "Factory Blobs are blobs that spawn blob spores which will attack nearby enemies. This type of blob must be placed near node blobs or your core to work.") - to_chat(src, "Blobbernauts can be produced from factories for a cost, and are hard to kill, powerful, and moderately smart. The factory used to create one will become fragile and briefly unable to produce spores.") - to_chat(src, "Node Blobs are blobs which grow, like the core. Like the core it can activate resource and factory blobs.") - to_chat(src, "In addition to the buttons on your HUD, there are a few click shortcuts to speed up expansion and defense.") - to_chat(src, "Shortcuts: Click = Expand Blob | Middle Mouse Click = Rally Spores | Ctrl Click = Create Shield Blob | Alt Click = Remove Blob") - to_chat(src, "Attempting to talk will send a message to all other overminds, allowing you to coordinate with them.") - if(!placed && autoplace_max_time <= world.time) - to_chat(src, "You will automatically place your blob core in [DisplayTimeText(autoplace_max_time - world.time)].") - to_chat(src, "You [manualplace_min_time ? "will be able to":"can"] manually place your blob core by pressing the Place Blob Core button in the bottom right corner of the screen.") diff --git a/code/modules/antagonists/blob/structures/_blob.dm b/code/modules/antagonists/blob/structures/_blob.dm deleted file mode 100644 index 31401dab8bb6..000000000000 --- a/code/modules/antagonists/blob/structures/_blob.dm +++ /dev/null @@ -1,361 +0,0 @@ -//I will need to recode parts of this but I am way too tired atm //I don't know who left this comment but they never did come back -/obj/structure/blob - name = "blob" - icon = 'icons/mob/blob.dmi' - light_range = 2 - desc = "A thick wall of writhing tendrils." - density = FALSE //this being false causes two bugs, being able to attack blob tiles behind other blobs and being unable to move on blob tiles in no gravity, but turning it to 1 causes the blob mobs to be unable to path through blobs, which is probably worse. - opacity = FALSE - anchored = TRUE - layer = BELOW_MOB_LAYER - pass_flags_self = PASSBLOB - CanAtmosPass = ATMOS_PASS_PROC - var/point_return = 0 //How many points the blob gets back when it removes a blob of that type. If less than 0, blob cannot be removed. - max_integrity = 30 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70) - var/health_regen = 2 //how much health this blob regens when pulsed - var/pulse_timestamp = 0 //we got pulsed when? - var/heal_timestamp = 0 //we got healed when? - var/brute_resist = 0.5 //multiplies brute damage by this - var/fire_resist = 1 //multiplies burn damage by this - var/atmosblock = FALSE //if the blob blocks atmos and heat spread - var/mob/camera/blob/overmind - -/obj/structure/blob/Initialize(mapload, owner_overmind) - . = ..() - if(owner_overmind) - overmind = owner_overmind - var/area/Ablob = get_area(src) - if(Ablob.area_flags & BLOBS_ALLOWED) //Is this area allowed for winning as blob? - overmind.blobs_legit += src - GLOB.blobs += src //Keep track of the blob in the normal list either way - setDir(pick(GLOB.cardinals)) - update_appearance() - if(atmosblock) - air_update_turf(TRUE) - ConsumeTile() - -/obj/structure/blob/proc/creation_action() //When it's created by the overmind, do this. - return - -/obj/structure/blob/Destroy() - if(atmosblock) - atmosblock = FALSE - air_update_turf(TRUE) - if(overmind) - overmind.blobs_legit -= src //if it was in the legit blobs list, it isn't now - GLOB.blobs -= src //it's no longer in the all blobs list either - playsound(src.loc, 'sound/effects/splat.ogg', 50, TRUE) //Expand() is no longer broken, no check necessary. - return ..() - -/obj/structure/blob/blob_act() - return - -/obj/structure/blob/Adjacent(atom/neighbour) - . = ..() - if(.) - var/result = 0 - var/direction = get_dir(src, neighbour) - var/list/dirs = list("[NORTHWEST]" = list(NORTH, WEST), "[NORTHEAST]" = list(NORTH, EAST), "[SOUTHEAST]" = list(SOUTH, EAST), "[SOUTHWEST]" = list(SOUTH, WEST)) - for(var/A in dirs) - if(direction == text2num(A)) - for(var/B in dirs[A]) - var/C = locate(/obj/structure/blob) in get_step(src, B) - if(C) - result++ - . -= result - 1 - -/obj/structure/blob/BlockThermalConductivity() - return atmosblock - -/obj/structure/blob/CanAtmosPass(turf/T) - return !atmosblock - -/obj/structure/blob/update_icon() //Updates color based on overmind color if we have an overmind. - . = ..() - if(overmind) - add_atom_colour(overmind.blobstrain.color, FIXED_COLOUR_PRIORITY) - else - remove_atom_colour(FIXED_COLOUR_PRIORITY) - -/obj/structure/blob/proc/Pulse_Area(mob/camera/blob/pulsing_overmind, claim_range = 10, pulse_range = 3, expand_range = 2) - if(QDELETED(pulsing_overmind)) - pulsing_overmind = overmind - Be_Pulsed() - var/expanded = FALSE - if(prob(70) && expand()) - expanded = TRUE - var/list/blobs_to_affect = list() - for(var/obj/structure/blob/B in urange(claim_range, src, 1)) - blobs_to_affect += B - shuffle_inplace(blobs_to_affect) - for(var/L in blobs_to_affect) - var/obj/structure/blob/B = L - if(!B.overmind && !istype(B, /obj/structure/blob/core) && prob(30)) - B.overmind = pulsing_overmind //reclaim unclaimed, non-core blobs. - B.update_appearance() - var/distance = get_dist(get_turf(src), get_turf(B)) - var/expand_probablity = max(20 - distance * 8, 1) - if(B.Adjacent(src)) - expand_probablity = 20 - if(distance <= expand_range) - var/can_expand = TRUE - if(blobs_to_affect.len >= 120 && B.heal_timestamp > world.time) - can_expand = FALSE - if(can_expand && B.pulse_timestamp <= world.time && prob(expand_probablity)) - var/obj/structure/blob/newB = B.expand(null, null, !expanded) //expansion falls off with range but is faster near the blob causing the expansion - if(newB) - if(expanded) - qdel(newB) - expanded = TRUE - if(distance <= pulse_range) - B.Be_Pulsed() - -/obj/structure/blob/proc/Be_Pulsed() - if(pulse_timestamp <= world.time) - ConsumeTile() - if(heal_timestamp <= world.time) - obj_integrity = min(max_integrity, obj_integrity+health_regen) - heal_timestamp = world.time + 20 - update_appearance() - pulse_timestamp = world.time + 10 - return 1 //we did it, we were pulsed! - return 0 //oh no we failed - -/obj/structure/blob/proc/ConsumeTile() - for(var/atom/A in loc) - A.blob_act(src) - if(iswallturf(loc)) - loc.blob_act(src) //don't ask how a wall got on top of the core, just eat it - -/obj/structure/blob/proc/blob_attack_animation(atom/A = null, controller) //visually attacks an atom - var/obj/effect/temp_visual/blob/O = new /obj/effect/temp_visual/blob(src.loc) - O.setDir(dir) - if(controller) - var/mob/camera/blob/BO = controller - O.color = BO.blobstrain.color - O.alpha = 200 - else if(overmind) - O.color = overmind.blobstrain.color - if(A) - O.do_attack_animation(A) //visually attack the whatever - return O //just in case you want to do something to the animation. - -/obj/structure/blob/proc/expand(turf/T = null, controller = null, expand_reaction = 1) - if(!T) - var/list/dirs = list(1,2,4,8) - for(var/i = 1 to 4) - var/dirn = pick(dirs) - dirs.Remove(dirn) - T = get_step(src, dirn) - if(!(locate(/obj/structure/blob) in T)) - break - else - T = null - if(!T) - return 0 - var/make_blob = TRUE //can we make a blob? - - if(isspaceturf(T) && !(locate(/obj/structure/lattice) in T) && prob(80)) - make_blob = FALSE - playsound(src.loc, 'sound/effects/splat.ogg', 50, TRUE) //Let's give some feedback that we DID try to spawn in space, since players are used to it - - ConsumeTile() //hit the tile we're in, making sure there are no border objects blocking us - if(!T.CanPass(src, get_dir(T, src))) //is the target turf impassable - make_blob = FALSE - T.blob_act(src) //hit the turf if it is - for(var/atom/A in T) - if(!A.CanPass(src, get_dir(T, src))) //is anything in the turf impassable - make_blob = FALSE - A.blob_act(src) //also hit everything in the turf - - if(make_blob) //well, can we? - var/obj/structure/blob/B = new /obj/structure/blob/normal(src.loc, (controller || overmind)) - B.density = TRUE - if(T.Enter(B,src)) //NOW we can attempt to move into the tile - B.density = initial(B.density) - B.forceMove(T) - B.update_appearance() - if(B.overmind && expand_reaction) - B.overmind.blobstrain.expand_reaction(src, B, T, controller) - return B - else - blob_attack_animation(T, controller) - T.blob_act(src) //if we can't move in hit the turf again - qdel(B) //we should never get to this point, since we checked before moving in. destroy the blob so we don't have two blobs on one tile - return null - else - blob_attack_animation(T, controller) //if we can't, animate that we attacked - return null - -/obj/structure/blob/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - if(severity > 0) - if(overmind) - overmind.blobstrain.emp_reaction(src, severity) - if(prob(100 - severity * 30)) - new /obj/effect/temp_visual/emp(get_turf(src)) - -/obj/structure/blob/zap_act(power) - . = ..() - if(overmind) - if(overmind.blobstrain.tesla_reaction(src, power)) - take_damage(power/400, BURN, "energy") - else - take_damage(power/400, BURN, "energy") - -/obj/structure/blob/extinguish() - ..() - if(overmind) - overmind.blobstrain.extinguish_reaction(src) - -/obj/structure/blob/hulk_damage() - return 15 - -/obj/structure/blob/attackby(obj/item/I, mob/user, params) - if(I.tool_behaviour == TOOL_ANALYZER) - user.changeNext_move(CLICK_CD_MELEE) - to_chat(user, "The analyzer beeps once, then reports:
    ") - SEND_SOUND(user, sound('sound/machines/ping.ogg')) - if(overmind) - to_chat(user, "Progress to Critical Mass: [overmind.blobs_legit.len]/[overmind.blobwincount].") - to_chat(user, chemeffectreport(user).Join("\n")) - else - to_chat(user, "Blob core neutralized. Critical mass no longer attainable.") - to_chat(user, typereport(user).Join("\n")) - else - return ..() - -/obj/structure/blob/proc/chemeffectreport(mob/user) - RETURN_TYPE(/list) - . = list() - if(overmind) - . += list("Material: [overmind.blobstrain.name].", - "Material Effects: [overmind.blobstrain.analyzerdescdamage]", - "Material Properties: [overmind.blobstrain.analyzerdesceffect]") - else - . += "No Material Detected!" - -/obj/structure/blob/proc/typereport(mob/user) - RETURN_TYPE(/list) - return list("Blob Type: [uppertext(initial(name))]", - "Health: [obj_integrity]/[max_integrity]", - "Effects: [scannerreport()]") - - -/obj/structure/blob/attack_animal(mob/living/simple_animal/M) - if(ROLE_BLOB in M.faction) //sorry, but you can't kill the blob as a blobbernaut - return - ..() - -/obj/structure/blob/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) - switch(damage_type) - if(BRUTE) - if(damage_amount) - playsound(src.loc, 'sound/effects/attackblob.ogg', 50, TRUE) - else - playsound(src, 'sound/weapons/tap.ogg', 50, TRUE) - if(BURN) - playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE) - -/obj/structure/blob/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) - switch(damage_type) - if(BRUTE) - damage_amount *= brute_resist - if(BURN) - damage_amount *= fire_resist - if(CLONE) - else - return 0 - var/armor_protection = 0 - if(damage_flag) - armor_protection = armor.getRating(damage_flag) - damage_amount = round(damage_amount * (100 - armor_protection)*0.01, 0.1) - if(overmind && damage_flag) - damage_amount = overmind.blobstrain.damage_reaction(src, damage_amount, damage_type, damage_flag) - return damage_amount - -/obj/structure/blob/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) - . = ..() - if(. && obj_integrity > 0) - update_appearance() - -/obj/structure/blob/obj_destruction(damage_flag) - if(overmind) - overmind.blobstrain.death_reaction(src, damage_flag) - ..() - -/obj/structure/blob/proc/change_to(type, controller) - if(!ispath(type)) - CRASH("change_to(): invalid type for blob") - var/obj/structure/blob/B = new type(src.loc, controller) - B.creation_action() - B.update_appearance() - B.setDir(dir) - qdel(src) - return B - -/obj/structure/blob/examine(mob/user) - . = ..() - var/datum/atom_hud/hud_to_check = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED] - if(user.research_scanner || hud_to_check.hudusers[user]) - . += "Your HUD displays an extensive report...
    " - if(overmind) - . += overmind.blobstrain.examine(user) - else - . += "Core neutralized. Critical mass no longer attainable." - . += chemeffectreport(user) - . += typereport(user) - else - if((user == overmind || isobserver(user)) && overmind) - . += overmind.blobstrain.examine(user) - . += "It seems to be made of [get_chem_name()]." - -/obj/structure/blob/proc/scannerreport() - return "A generic blob. Looks like someone forgot to override this proc, adminhelp this." - -/obj/structure/blob/proc/get_chem_name() - if(overmind) - return overmind.blobstrain.name - return "some kind of organic tissue" - -/obj/structure/blob/normal - name = "normal blob" - icon_state = "blob" - light_range = 0 - obj_integrity = 21 //doesn't start at full health - max_integrity = 25 - health_regen = 1 - brute_resist = 0.25 - -/obj/structure/blob/normal/scannerreport() - if(obj_integrity <= 15) - return "Currently weak to brute damage." - return "N/A" - -/obj/structure/blob/normal/update_name() - . = ..() - name = "[(obj_integrity <= 15) ? "fragile " : (overmind ? null : "dead ")][initial(name)]" - -/obj/structure/blob/normal/update_desc() - . = ..() - if(obj_integrity <= 15) - desc = "A thin lattice of slightly twitching tendrils." - else if(overmind) - desc = "A thick wall of writhing tendrils." - else - desc = "A thick wall of lifeless tendrils." - -/obj/structure/blob/normal/update_icon_state() - icon_state = "blob[(obj_integrity <= 15) ? "_damaged" : null]" - - /// - [] TODO: Move this elsewhere - if(obj_integrity <= 15) - brute_resist = 0.5 - else if (overmind) - brute_resist = 0.25 - else - brute_resist = 0.25 - return ..() diff --git a/code/modules/antagonists/blob/structures/core.dm b/code/modules/antagonists/blob/structures/core.dm deleted file mode 100644 index 6a1ccb1dd465..000000000000 --- a/code/modules/antagonists/blob/structures/core.dm +++ /dev/null @@ -1,70 +0,0 @@ -/obj/structure/blob/core - name = "blob core" - icon = 'icons/mob/blob.dmi' - icon_state = "blank_blob" - desc = "A huge, pulsating yellow mass." - max_integrity = 400 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 75, "acid" = 90) - explosion_block = 6 - point_return = -1 - health_regen = 0 //we regen in Life() instead of when pulsed - resistance_flags = LAVA_PROOF - -/obj/structure/blob/core/Initialize(mapload, client/new_overmind = null, placed = 0) - GLOB.blob_cores += src - START_PROCESSING(SSobj, src) - GLOB.poi_list |= src - update_appearance() //so it atleast appears - if(!placed && !overmind) - return INITIALIZE_HINT_QDEL - if(overmind) - update_appearance() - . = ..() - -/obj/structure/blob/core/Destroy() - GLOB.blob_cores -= src - GLOB.poi_list -= src - if(overmind) - overmind.blob_core = null - overmind = null - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/structure/blob/core/scannerreport() - return "Directs the blob's expansion, gradually expands, and sustains nearby blob spores and blobbernauts." - -/obj/structure/blob/core/update_overlays() - . = ..() - var/mutable_appearance/blob_overlay = mutable_appearance('icons/mob/blob.dmi', "blob") - if(overmind) - blob_overlay.color = overmind.blobstrain.color - . += blob_overlay - . += mutable_appearance('icons/mob/blob.dmi', "blob_core_overlay") - -/obj/structure/blob/core/update_appearance() - color = null - return ..() - -/obj/structure/blob/core/ex_act(severity, target) - var/damage = 50 - 10 * severity //remember, the core takes half brute damage, so this is 20/15/10 damage based on severity - take_damage(damage, BRUTE, "bomb", 0) - -/obj/structure/blob/core/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir, overmind_reagent_trigger = 1) - . = ..() - if(obj_integrity > 0) - if(overmind) //we should have an overmind, but... - overmind.update_health_hud() - -/obj/structure/blob/core/process() - if(QDELETED(src)) - return - if(!overmind) - qdel(src) - if(overmind) - overmind.blobstrain.core_process() - overmind.update_health_hud() - Pulse_Area(overmind, 12, 4, 3) - for(var/obj/structure/blob/normal/B in range(1, src)) - if(prob(5)) - B.change_to(/obj/structure/blob/shield/core, overmind) - ..() diff --git a/code/modules/antagonists/blob/structures/factory.dm b/code/modules/antagonists/blob/structures/factory.dm deleted file mode 100644 index 138a359e72e8..000000000000 --- a/code/modules/antagonists/blob/structures/factory.dm +++ /dev/null @@ -1,47 +0,0 @@ -/obj/structure/blob/factory - name = "factory blob" - icon = 'icons/mob/blob.dmi' - icon_state = "blob_factory" - desc = "A thick spire of tendrils." - max_integrity = 200 - health_regen = 1 - point_return = 25 - resistance_flags = LAVA_PROOF - var/list/spores = list() - var/mob/living/simple_animal/hostile/blob/blobbernaut/naut = null - var/max_spores = 3 - var/spore_delay = 0 - var/spore_cooldown = 80 //8 seconds between spores and after spore death - - -/obj/structure/blob/factory/scannerreport() - if(naut) - return "It is currently sustaining a blobbernaut, making it fragile and unable to produce blob spores." - return "Will produce a blob spore every few seconds." - -/obj/structure/blob/factory/Destroy() - for(var/mob/living/simple_animal/hostile/blob/blobspore/spore in spores) - if(spore.factory == src) - spore.factory = null - if(naut) - naut.factory = null - to_chat(naut, "Your factory was destroyed! You feel yourself dying!") - naut.throw_alert("nofactory", /atom/movable/screen/alert/nofactory) - spores = null - return ..() - -/obj/structure/blob/factory/Be_Pulsed() - . = ..() - if(naut) - return - if(spores.len >= max_spores) - return - if(spore_delay > world.time) - return - flick("blob_factory_glow", src) - spore_delay = world.time + spore_cooldown - var/mob/living/simple_animal/hostile/blob/blobspore/BS = new/mob/living/simple_animal/hostile/blob/blobspore(src.loc, src) - if(overmind) //if we don't have an overmind, we don't need to do anything but make a spore - BS.overmind = overmind - BS.update_icons() - overmind.blob_mobs.Add(BS) diff --git a/code/modules/antagonists/blob/structures/node.dm b/code/modules/antagonists/blob/structures/node.dm deleted file mode 100644 index de7c674b807c..000000000000 --- a/code/modules/antagonists/blob/structures/node.dm +++ /dev/null @@ -1,40 +0,0 @@ -/obj/structure/blob/node - name = "blob node" - icon = 'icons/mob/blob.dmi' - icon_state = "blank_blob" - desc = "A large, pulsating yellow mass." - max_integrity = 200 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 65, "acid" = 90) - health_regen = 3 - point_return = 25 - resistance_flags = LAVA_PROOF - - -/obj/structure/blob/node/Initialize() - GLOB.blob_nodes += src - START_PROCESSING(SSobj, src) - . = ..() - -/obj/structure/blob/node/scannerreport() - return "Gradually expands and sustains nearby blob spores and blobbernauts." - -/obj/structure/blob/node/update_icon() - color = null - return ..() - -/obj/structure/blob/special/node/update_overlays() - . = ..() - var/mutable_appearance/blob_overlay = mutable_appearance('icons/mob/blob.dmi', "blob") - if(overmind) - blob_overlay.color = overmind.blobstrain.color - . += blob_overlay - . += mutable_appearance('icons/mob/blob.dmi', "blob_node_overlay") - -/obj/structure/blob/node/Destroy() - GLOB.blob_nodes -= src - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/structure/blob/node/process() - if(overmind) - Pulse_Area(overmind, 10, 3, 2) diff --git a/code/modules/antagonists/blob/structures/resource.dm b/code/modules/antagonists/blob/structures/resource.dm deleted file mode 100644 index 81eda7f4edde..000000000000 --- a/code/modules/antagonists/blob/structures/resource.dm +++ /dev/null @@ -1,32 +0,0 @@ -/obj/structure/blob/resource - name = "resource blob" - icon = 'icons/mob/blob.dmi' - icon_state = "blob_resource" - desc = "A thin spire of slightly swaying tendrils." - max_integrity = 60 - point_return = 15 - resistance_flags = LAVA_PROOF - var/resource_delay = 0 - -/obj/structure/blob/resource/scannerreport() - return "Gradually supplies the blob with resources, increasing the rate of expansion." - -/obj/structure/blob/resource/creation_action() - if(overmind) - overmind.resource_blobs += src - -/obj/structure/blob/resource/Destroy() - if(overmind) - overmind.resource_blobs -= src - return ..() - -/obj/structure/blob/resource/Be_Pulsed() - . = ..() - if(resource_delay > world.time) - return - flick("blob_resource_glow", src) - if(overmind) - overmind.add_points(1) - resource_delay = world.time + 40 + overmind.resource_blobs.len * 2.5 //4 seconds plus a quarter second for each resource blob the overmind has - else - resource_delay = world.time + 40 diff --git a/code/modules/antagonists/blob/structures/shield.dm b/code/modules/antagonists/blob/structures/shield.dm deleted file mode 100644 index f0a01f70e1a8..000000000000 --- a/code/modules/antagonists/blob/structures/shield.dm +++ /dev/null @@ -1,49 +0,0 @@ -/obj/structure/blob/shield - name = "strong blob" - icon = 'icons/mob/blob.dmi' - icon_state = "blob_shield" - desc = "A solid wall of slightly twitching tendrils." - var/damaged_desc = "A wall of twitching tendrils." - max_integrity = 150 - brute_resist = 0.25 - explosion_block = 3 - point_return = 4 - atmosblock = TRUE - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90) - -/obj/structure/blob/shield/scannerreport() - if(atmosblock) - return "Will prevent the spread of atmospheric changes." - return "N/A" - -/obj/structure/blob/shield/core - point_return = 0 - -/obj/structure/blob/shield/update_name(updates) - . = ..() - name = "[(obj_integrity < (max_integrity * 0.5)) ? "weakened " : null][initial(name)]" - -/obj/structure/blob/shield/update_desc(updates) - . = ..() - desc = (obj_integrity < (max_integrity * 0.5)) ? "[damaged_desc]" : initial(desc) - -/obj/structure/blob/shield/take_damage(damage_amount, damage_type, damage_flag, sound_effect, attack_dir) - . = ..() - if(. && obj_integrity > 0) - atmosblock = obj_integrity < (max_integrity * 0.5) - air_update_turf(TRUE, atmosblock) - -/obj/structure/blob/shield/update_icon_state() - icon_state = "[initial(icon_state)][(obj_integrity < (max_integrity * 0.5)) ? "_damaged" : null]" - return ..() - -/obj/structure/blob/shield/reflective - name = "reflective blob" - desc = "A solid wall of slightly twitching tendrils with a reflective glow." - damaged_desc = "A wall of twitching tendrils with a reflective glow." - icon_state = "blob_glow" - flags_ricochet = RICOCHET_SHINY - point_return = 8 - max_integrity = 100 - brute_resist = 0.5 - explosion_block = 2 diff --git a/code/modules/antagonists/blood_contract/blood_contract.dm b/code/modules/antagonists/blood_contract/blood_contract.dm index edd8aba60422..c56ef47db93a 100644 --- a/code/modules/antagonists/blood_contract/blood_contract.dm +++ b/code/modules/antagonists/blood_contract/blood_contract.dm @@ -36,6 +36,6 @@ continue to_chat(P, "You have an overwhelming desire to kill [H]. [H.p_theyve(TRUE)] been marked red! Whoever [H.p_they()] [H.p_were()], friend or foe, go kill [H.p_them()]!") - var/obj/item/I = new /obj/item/kitchen/knife/butcher(get_turf(P)) + var/obj/item/I = new /obj/item/melee/knife/butcher(get_turf(P)) P.put_in_hands(I, del_on_fail=TRUE) QDEL_IN(I, duration) diff --git a/code/modules/antagonists/borer/borer.dm b/code/modules/antagonists/borer/borer.dm index 92a1e728dc8b..71877dd61f8b 100644 --- a/code/modules/antagonists/borer/borer.dm +++ b/code/modules/antagonists/borer/borer.dm @@ -683,10 +683,6 @@ GLOBAL_VAR_INIT(total_borer_hosts_needed, 3) if(docile) to_chat(src, "You are feeling far too docile to do that.") return - if(iscultist(victim) || HAS_TRAIT(victim, TRAIT_MINDSHIELD)) - to_chat(src, "[victim]'s mind seems to be blocked by some unknown force!") - return - else log_game("[src]/([src.ckey]) assumed control of [victim]/([victim.ckey] with borer powers.") diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm deleted file mode 100644 index c9232857a547..000000000000 --- a/code/modules/antagonists/cult/blood_magic.dm +++ /dev/null @@ -1,849 +0,0 @@ -/datum/action/innate/cult/blood_magic //Blood magic handles the creation of blood spells (formerly talismans) - name = "Prepare Blood Magic" - button_icon_state = "carve" - desc = "Prepare blood magic by carving runes into your flesh. This is easier with an empowering rune." - var/list/spells = list() - var/channeling = FALSE - -/datum/action/innate/cult/blood_magic/Grant() - ..() - button.screen_loc = DEFAULT_BLOODSPELLS - button.moved = DEFAULT_BLOODSPELLS - button.ordered = FALSE - -/datum/action/innate/cult/blood_magic/Remove() - for(var/X in spells) - qdel(X) - ..() - -/datum/action/innate/cult/blood_magic/IsAvailable() - if(!iscultist(owner)) - return FALSE - return ..() - -/datum/action/innate/cult/blood_magic/proc/Positioning() - var/list/screen_loc_split = splittext(button.screen_loc,",") - var/list/screen_loc_X = splittext(screen_loc_split[1],":") - var/list/screen_loc_Y = splittext(screen_loc_split[2],":") - var/pix_X = text2num(screen_loc_X[2]) - for(var/datum/action/innate/cult/blood_spell/B in spells) - if(B.button.locked) - var/order = pix_X+spells.Find(B)*31 - B.button.screen_loc = "[screen_loc_X[1]]:[order],[screen_loc_Y[1]]:[screen_loc_Y[2]]" - B.button.moved = B.button.screen_loc - -/datum/action/innate/cult/blood_magic/Activate() - var/rune = FALSE - var/limit = RUNELESS_MAX_BLOODCHARGE - for(var/obj/effect/rune/empower/R in range(1, owner)) - rune = TRUE - break - if(rune) - limit = MAX_BLOODCHARGE - if(spells.len >= limit) - if(rune) - to_chat(owner, "You cannot store more than [MAX_BLOODCHARGE] spells. Pick a spell to remove.") - else - to_chat(owner, "You cannot store more than [RUNELESS_MAX_BLOODCHARGE] spells without an empowering rune! Pick a spell to remove.") - var/nullify_spell = input(owner, "Choose a spell to remove.", "Current Spells") as null|anything in spells - if(nullify_spell) - qdel(nullify_spell) - return - var/entered_spell_name - var/datum/action/innate/cult/blood_spell/BS - var/list/possible_spells = list() - for(var/I in subtypesof(/datum/action/innate/cult/blood_spell)) - var/datum/action/innate/cult/blood_spell/J = I - var/cult_name = initial(J.name) - possible_spells[cult_name] = J - possible_spells += "(REMOVE SPELL)" - entered_spell_name = input(owner, "Pick a blood spell to prepare...", "Spell Choices") as null|anything in possible_spells - if(entered_spell_name == "(REMOVE SPELL)") - var/nullify_spell = input(owner, "Choose a spell to remove.", "Current Spells") as null|anything in spells - if(nullify_spell) - qdel(nullify_spell) - return - BS = possible_spells[entered_spell_name] - if(QDELETED(src) || owner.incapacitated() || !BS || (rune && !(locate(/obj/effect/rune/empower) in range(1, owner))) || (spells.len >= limit)) - return - to_chat(owner,"You begin to carve unnatural symbols into your flesh!") - SEND_SOUND(owner, sound('sound/weapons/slice.ogg',0,1,10)) - if(!channeling) - channeling = TRUE - else - to_chat(owner, "You are already invoking blood magic!") - return - if(do_after(owner, 100 - rune*60, target = owner)) - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - H.bleed(40 - rune*32) - var/datum/action/innate/cult/blood_spell/new_spell = new BS(owner) - new_spell.Grant(owner, src) - spells += new_spell - Positioning() - to_chat(owner, "Your wounds glow with power, you have prepared a [new_spell.name] invocation!") - channeling = FALSE - -/datum/action/innate/cult/blood_spell //The next generation of talismans, handles storage/creation of blood magic - name = "Blood Magic" - button_icon_state = "telerune" - desc = "Fear the Old Blood." - var/charges = 1 - var/magic_path = null - var/obj/item/melee/blood_magic/hand_magic - var/datum/action/innate/cult/blood_magic/all_magic - var/base_desc //To allow for updating tooltips - var/invocation - var/health_cost = 0 - -/datum/action/innate/cult/blood_spell/Grant(mob/living/owner, datum/action/innate/cult/blood_magic/BM) - if(health_cost) - desc += "
    Deals [health_cost] damage to your arm per use." - base_desc = desc - desc += "
    Has [charges] use\s remaining." - all_magic = BM - ..() - button.locked = TRUE - button.ordered = FALSE - -/datum/action/innate/cult/blood_spell/Remove() - if(all_magic) - all_magic.spells -= src - if(hand_magic) - qdel(hand_magic) - hand_magic = null - ..() - -/datum/action/innate/cult/blood_spell/IsAvailable() - if(!iscultist(owner) || owner.incapacitated() || !charges) - return FALSE - return ..() - -/datum/action/innate/cult/blood_spell/Activate() - if(magic_path) //If this spell flows from the hand - if(!hand_magic) - hand_magic = new magic_path(owner, src) - if(!owner.put_in_hands(hand_magic)) - qdel(hand_magic) - hand_magic = null - to_chat(owner, "You have no empty hand for invoking blood magic!") - return - to_chat(owner, "Your wounds glow as you invoke the [name].") - return - if(hand_magic) - qdel(hand_magic) - hand_magic = null - to_chat(owner, "You snuff out the spell, saving it for later.") - - -//Cult Blood Spells -/datum/action/innate/cult/blood_spell/stun - name = "Stun" - desc = "Empowers your hand to stun and mute a victim on contact." - button_icon_state = "hand" - magic_path = "/obj/item/melee/blood_magic/stun" - health_cost = 10 - -/datum/action/innate/cult/blood_spell/teleport - name = "Teleport" - desc = "Empowers your hand to teleport yourself or another cultist to a teleport rune on contact." - button_icon_state = "tele" - magic_path = "/obj/item/melee/blood_magic/teleport" - health_cost = 7 - -/datum/action/innate/cult/blood_spell/emp - name = "Electromagnetic Pulse" - desc = "Emits a large electromagnetic pulse." - button_icon_state = "emp" - health_cost = 10 - invocation = "Ta'gh fara'qha fel d'amar det!" - -/datum/action/innate/cult/blood_spell/emp/Activate() - owner.visible_message( - "[owner]'s hand flashes a bright blue!", \ - "You speak the cursed words, emitting an EMP blast from your hand.") - empulse(owner, 2, 5) - owner.whisper(invocation, language = /datum/language/common) - charges-- - if(charges<=0) - qdel(src) - -/datum/action/innate/cult/blood_spell/shackles - name = "Shadow Shackles" - desc = "Empowers your hand to start handcuffing victim on contact, and mute them if successful." - button_icon_state = "cuff" - charges = 4 - magic_path = "/obj/item/melee/blood_magic/shackles" - -/datum/action/innate/cult/blood_spell/construction - name = "Twisted Construction" - desc = "Empowers your hand to corrupt certain metalic objects.
    Converts:
    Plasteel into runed metal
    50 metal into a construct shell
    Living cyborgs into constructs after a delay
    Cyborg shells into construct shells
    Airlocks into brittle runed airlocks after a delay (harm intent)" - button_icon_state = "transmute" - magic_path = "/obj/item/melee/blood_magic/construction" - health_cost = 12 - -/datum/action/innate/cult/blood_spell/equipment - name = "Summon Equipment" - desc = "Allows you to summon a ritual dagger, or empowers your hand to summon combat gear onto a cultist you touch, including cult armor, a cult bola, and a cult sword." - button_icon_state = "equip" - magic_path = "/obj/item/melee/blood_magic/armor" - -/datum/action/innate/cult/blood_spell/equipment/Activate() - var/choice = alert(owner,"Choose your equipment type",,"Combat Equipment","Ritual Dagger","Cancel") - if(choice == "Ritual Dagger") - var/turf/T = get_turf(owner) - owner.visible_message("[owner]'s hand glows red for a moment.", \ - "Red light begins to shimmer and take form within your hand!") - var/obj/O = new /obj/item/melee/cultblade/dagger(T) - if(owner.put_in_hands(O)) - to_chat(owner, "A ritual dagger appears in your hand!") - else - owner.visible_message( - "A ritual dagger appears at [owner]'s feet!", \ - "A ritual dagger materializes at your feet.") - SEND_SOUND(owner, sound('sound/effects/magic.ogg',0,1,25)) - charges-- - desc = base_desc - desc += "
    Has [charges] use\s remaining." - if(charges<=0) - qdel(src) - else if(choice == "Combat Equipment") - ..() - -/datum/action/innate/cult/blood_spell/horror - name = "Hallucinations" - desc = "Gives hallucinations to a target at range. A silent and invisible spell." - button_icon_state = "horror" - var/obj/effect/proc_holder/horror/PH - charges = 4 - -/datum/action/innate/cult/blood_spell/horror/New() - PH = new() - PH.attached_action = src - ..() - -/datum/action/innate/cult/blood_spell/horror/Destroy() - var/obj/effect/proc_holder/horror/destroy = PH - . = ..() - if(destroy && !QDELETED(destroy)) - QDEL_NULL(destroy) - -/datum/action/innate/cult/blood_spell/horror/Activate() - PH.toggle(owner) //the important bit - return TRUE - -/obj/effect/proc_holder/horror - active = FALSE - ranged_mousepointer = 'icons/effects/mouse_pointers/cult_target.dmi' - var/datum/action/innate/cult/blood_spell/attached_action - -/obj/effect/proc_holder/horror/Destroy() - var/datum/action/innate/cult/blood_spell/AA = attached_action - . = ..() - if(AA && !QDELETED(AA)) - QDEL_NULL(AA) - -/obj/effect/proc_holder/horror/proc/toggle(mob/user) - if(active) - remove_ranged_ability("You dispel the magic...") - else - add_ranged_ability(user, "You prepare to horrify a target...") - -/obj/effect/proc_holder/horror/InterceptClickOn(mob/living/caller, params, atom/target) - if(..()) - return - if(ranged_ability_user.incapacitated() || !iscultist(caller)) - remove_ranged_ability() - return - var/turf/T = get_turf(ranged_ability_user) - if(!isturf(T)) - return FALSE - if(target in view(7, get_turf(ranged_ability_user))) - if(!ishuman(target) || iscultist(target)) - return - var/mob/living/carbon/human/H = target - H.hallucination = max(H.hallucination, 120) - SEND_SOUND(ranged_ability_user, sound('sound/effects/ghost.ogg',0,1,50)) - var/image/C = image('icons/effects/cult_effects.dmi',H,"bloodsparkles", ABOVE_MOB_LAYER) - add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/cult, "cult_apoc", C, NONE) - addtimer(CALLBACK(H, TYPE_PROC_REF(/atom, remove_alt_appearance),"cult_apoc",TRUE), 2400, TIMER_OVERRIDE|TIMER_UNIQUE) - to_chat(ranged_ability_user,"[H] has been cursed with living nightmares!") - attached_action.charges-- - attached_action.desc = attached_action.base_desc - attached_action.desc += "
    Has [attached_action.charges] use\s remaining." - attached_action.UpdateButtonIcon() - if(attached_action.charges <= 0) - remove_ranged_ability("You have exhausted the spell's power!") - qdel(src) - -/datum/action/innate/cult/blood_spell/veiling - name = "Conceal Presence" - desc = "Alternates between hiding and revealing nearby cult structures and runes." - invocation = "Kla'atu barada nikt'o!" - button_icon_state = "gone" - charges = 10 - var/revealing = FALSE //if it reveals or not - -/datum/action/innate/cult/blood_spell/veiling/Activate() - if(!revealing) - owner.visible_message("Thin grey dust falls from [owner]'s hand!", \ - "You invoke the veiling spell, hiding nearby runes.") - charges-- - SEND_SOUND(owner, sound('sound/magic/smoke.ogg',0,1,25)) - owner.whisper(invocation, language = /datum/language/common) - for(var/obj/effect/rune/R in range(5,owner)) - R.conceal() - for(var/obj/structure/destructible/cult/S in range(5,owner)) - S.conceal() - for(var/turf/open/floor/engine/cult/T in range(5,owner)) - T.realappearance.alpha = 0 - for(var/obj/machinery/door/airlock/cult/AL in range(5, owner)) - AL.conceal() - revealing = TRUE - name = "Reveal Runes" - button_icon_state = "back" - else - owner.visible_message( - "A flash of light shines from [owner]'s hand!", \ - "You invoke the counterspell, revealing nearby runes.") - charges-- - owner.whisper(invocation, language = /datum/language/common) - SEND_SOUND(owner, sound('sound/magic/enter_blood.ogg',0,1,25)) - for(var/obj/effect/rune/R in range(7,owner)) //More range in case you weren't standing in exactly the same spot - R.reveal() - for(var/obj/structure/destructible/cult/S in range(6,owner)) - S.reveal() - for(var/turf/open/floor/engine/cult/T in range(6,owner)) - T.realappearance.alpha = initial(T.realappearance.alpha) - for(var/obj/machinery/door/airlock/cult/AL in range(6, owner)) - AL.reveal() - revealing = FALSE - name = "Conceal Runes" - button_icon_state = "gone" - if(charges<= 0) - qdel(src) - desc = base_desc - desc += "
    Has [charges] use\s remaining." - UpdateButtonIcon() - -/datum/action/innate/cult/blood_spell/manipulation - name = "Blood Rites" - desc = "Empowers your hand to absorb blood to be used for advanced rites, or heal a cultist on contact. Use the spell in-hand to cast advanced rites." - invocation = "Fel'th Dol Ab'orod!" - button_icon_state = "manip" - charges = 5 - magic_path = "/obj/item/melee/blood_magic/manipulator" - - -// The "magic hand" items -/obj/item/melee/blood_magic - name = "\improper magical aura" - desc = "A sinister looking aura that distorts the flow of reality around it." - icon = 'icons/obj/items_and_weapons.dmi' - lefthand_file = 'icons/mob/inhands/misc/touchspell_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/touchspell_righthand.dmi' - icon_state = "disintegrate" - item_state = "disintegrate" - item_flags = NEEDS_PERMIT | ABSTRACT | DROPDEL - - w_class = WEIGHT_CLASS_HUGE - throwforce = 0 - throw_range = 0 - throw_speed = 0 - var/invocation - var/uses = 1 - var/health_cost = 0 //The amount of health taken from the user when invoking the spell - var/datum/action/innate/cult/blood_spell/source - -/obj/item/melee/blood_magic/New(loc, spell) - if(spell) - source = spell - uses = source.charges - health_cost = source.health_cost - ..() - -/obj/item/melee/blood_magic/Destroy() - if(!QDELETED(source)) - if(uses <= 0) - source.hand_magic = null - qdel(source) - source = null - else - source.hand_magic = null - source.charges = uses - source.desc = source.base_desc - source.desc += "
    Has [uses] use\s remaining." - source.UpdateButtonIcon() - return ..() - -/obj/item/melee/blood_magic/attack_self(mob/living/user) - afterattack(user, user, TRUE) - -/obj/item/melee/blood_magic/attack(mob/living/M, mob/living/carbon/user) - if(!iscarbon(user) || !iscultist(user)) - uses = 0 - qdel(src) - return - log_combat(user, M, "used a cult spell on", source.name, "") - M.lastattacker = user.real_name - M.lastattackerckey = user.ckey - -/obj/item/melee/blood_magic/afterattack(atom/target, mob/living/carbon/user, proximity) - . = ..() - if(invocation) - user.whisper(invocation, language = /datum/language/common) - if(health_cost) - if(user.active_hand_index == 1) - user.apply_damage(health_cost, BRUTE, BODY_ZONE_L_ARM) - else - user.apply_damage(health_cost, BRUTE, BODY_ZONE_R_ARM) - if(uses <= 0) - qdel(src) - else if(source) - source.desc = source.base_desc - source.desc += "
    Has [uses] use\s remaining." - source.UpdateButtonIcon() - -//Stun -/obj/item/melee/blood_magic/stun - name = "Stunning Aura" - desc = "Will stun and mute a weak-minded victim on contact." - color = RUNE_COLOR_RED - invocation = "Fuu ma'jin!" - -/obj/item/melee/blood_magic/stun/afterattack(atom/target, mob/living/carbon/user, proximity) - if(!isliving(target) || !proximity) - return - var/mob/living/L = target - if(iscultist(target)) - return - if(iscultist(user)) - user.visible_message("[user] holds up [user.p_their()] hand, which explodes in a flash of red light!", \ - "You attempt to stun [L] with the spell!") - - user.mob_light(_range = 3, _color = LIGHT_COLOR_BLOOD_MAGIC, _duration = 0.2 SECONDS) - - var/anti_magic_source = L.anti_magic_check() - if(anti_magic_source) - - L.mob_light(_range = 2, _color = LIGHT_COLOR_HOLY_MAGIC, _duration = 10 SECONDS) - var/mutable_appearance/forbearance = mutable_appearance('icons/effects/genetics.dmi', "servitude", -MUTATIONS_LAYER) - L.add_overlay(forbearance) - addtimer(CALLBACK(L, TYPE_PROC_REF(/atom, cut_overlay), forbearance), 100) - - if(istype(anti_magic_source, /obj/item)) - var/obj/item/ams_object = anti_magic_source - target.visible_message( - "[L] starts to glow in a halo of light!", \ - "Your [ams_object.name] begins to glow, emitting a blanket of holy light which surrounds you and protects you from the flash of light!") - else - target.visible_message( - "[L] starts to glow in a halo of light!", \ - "A feeling of warmth washes over you, rays of holy light surround your body and protect you from the flash of light!") - - else - if(HAS_TRAIT(target, TRAIT_MINDSHIELD)) - var/mob/living/carbon/C = L - to_chat(user, "Their mind was stronger than expected, but you still managed to do some damage!") - C.stuttering += 8 - C.dizziness += 30 - C.Jitter(8) - C.drop_all_held_items() - C.bleed(40) - C.apply_damage(60, STAMINA, BODY_ZONE_CHEST) - else - to_chat(user, "In a brilliant flash of red, [L] falls to the ground!") - L.Paralyze(160) - L.flash_act(1,1) - if(issilicon(target)) - var/mob/living/silicon/S = L - S.emp_act(EMP_HEAVY) - else if(iscarbon(target)) - var/mob/living/carbon/C = L - C.silent += 6 - C.stuttering += 15 - C.cultslurring += 15 - C.Jitter(15) - uses-- - ..() - -//Teleportation -/obj/item/melee/blood_magic/teleport - name = "Teleporting Aura" - color = RUNE_COLOR_TELEPORT - desc = "Will teleport a cultist to a teleport rune on contact." - invocation = "Sas'so c'arta forbici!" - -/obj/item/melee/blood_magic/teleport/afterattack(atom/target, mob/living/carbon/user, proximity) - if(!iscultist(target) || !proximity) - to_chat(user, "You can only teleport adjacent cultists with this spell!") - return - if(iscultist(user)) - var/list/potential_runes = list() - var/list/teleportnames = list() - for(var/R in GLOB.teleport_runes) - var/obj/effect/rune/teleport/T = R - potential_runes[avoid_assoc_duplicate_keys(T.listkey, teleportnames)] = T - - if(!potential_runes.len) - to_chat(user, "There are no valid runes to teleport to!") - log_game("Teleport talisman failed - no other teleport runes") - return - - var/turf/T = get_turf(src) - if(is_away_level(T)) - to_chat(user, "You are not in the right dimension!") - log_game("Teleport spell failed - user in away mission") - return - - var/input_rune_key = input(user, "Choose a rune to teleport to.", "Rune to Teleport to") as null|anything in potential_runes //we know what key they picked - var/obj/effect/rune/teleport/actual_selected_rune = potential_runes[input_rune_key] //what rune does that key correspond to? - if(QDELETED(src) || !user || !user.is_holding(src) || user.incapacitated() || !actual_selected_rune || !proximity) - return - var/turf/dest = get_turf(actual_selected_rune) - if(dest.is_blocked_turf(TRUE)) - to_chat(user, "The target rune is blocked. You cannot teleport there.") - return - uses-- - var/turf/origin = get_turf(user) - var/mob/living/L = target - if(do_teleport(L, dest, channel = TELEPORT_CHANNEL_CULT)) - origin.visible_message("Dust flows from [user]'s hand, and [user.p_they()] disappear[user.p_s()] with a sharp crack!", \ - "You speak the words of the talisman and find yourself somewhere else!", "You hear a sharp crack.") - dest.visible_message("There is a boom of outrushing air as something appears above the rune!", null, "You hear a boom.") - ..() - -//Shackles -/obj/item/melee/blood_magic/shackles - name = "Shackling Aura" - desc = "Will start handcuffing a victim on contact, and mute them if successful." - invocation = "In'totum Lig'abis!" - color = "#000000" // black - -/obj/item/melee/blood_magic/shackles/afterattack(atom/target, mob/living/carbon/user, proximity) - if(iscultist(user) && iscarbon(target) && proximity) - var/mob/living/carbon/C = target - if(C.canBeHandcuffed()) - CuffAttack(C, user) - else - user.visible_message("This victim doesn't have enough arms to complete the restraint!") - return - ..() - -/obj/item/melee/blood_magic/shackles/proc/CuffAttack(mob/living/carbon/C, mob/living/user) - if(!C.handcuffed) - playsound(loc, 'sound/weapons/cablecuff.ogg', 30, TRUE, -2) - C.visible_message("[user] begins restraining [C] with dark magic!", \ - "[user] begins shaping dark magic shackles around your wrists!") - if(do_after(user, 3 SECONDS, C)) - if(!C.handcuffed) - C.set_handcuffed(new /obj/item/restraints/handcuffs/energy/cult/used(C)) - C.update_handcuffed() - C.silent += 5 - to_chat(user, "You shackle [C].") - log_combat(user, C, "shackled") - uses-- - else - to_chat(user, "[C] is already bound.") - else - to_chat(user, "You fail to shackle [C].") - else - to_chat(user, "[C] is already bound.") - - -/obj/item/restraints/handcuffs/energy/cult //For the shackling spell - name = "shadow shackles" - desc = "Shackles that bind the wrists with sinister magic." - trashtype = /obj/item/restraints/handcuffs/energy/used - item_flags = DROPDEL - -/obj/item/restraints/handcuffs/energy/cult/used/dropped(mob/user) - user.visible_message("[user]'s shackles shatter in a discharge of dark magic!", \ - "Your [src] shatters in a discharge of dark magic!") - . = ..() - - -//Construction: Converts 50 metal to a construct shell, plasteel to runed metal, airlock to brittle runed airlock, a borg to a construct, or borg shell to a construct shell -/obj/item/melee/blood_magic/construction - name = "Twisting Aura" - desc = "Corrupts certain metalic objects on contact." - invocation = "Ethra p'ni dedol!" - color = "#000000" // black - var/channeling = FALSE - -/obj/item/melee/blood_magic/construction/examine(mob/user) - . = ..() - . += {"A sinister spell used to convert:\n - Plasteel into runed metal\n - [METAL_TO_CONSTRUCT_SHELL_CONVERSION] metal into a construct shell\n - Living cyborgs into constructs after a delay\n - Cyborg shells into construct shells\n - Airlocks into brittle runed airlocks after a delay (harm intent)"} - -/obj/item/melee/blood_magic/construction/afterattack(atom/target, mob/user, proximity_flag, click_parameters) - if(proximity_flag && iscultist(user)) - if(channeling) - to_chat(user, "You are already invoking twisted construction!") - return - var/turf/T = get_turf(target) - if(istype(target, /obj/item/stack/sheet/metal)) - var/obj/item/stack/sheet/candidate = target - if(candidate.use(METAL_TO_CONSTRUCT_SHELL_CONVERSION)) - uses-- - to_chat(user, "A dark cloud emanates from your hand and swirls around the metal, twisting it into a construct shell!") - new /obj/structure/constructshell(T) - SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25)) - else - to_chat(user, "You need [METAL_TO_CONSTRUCT_SHELL_CONVERSION] metal to produce a construct shell!") - return - else if(istype(target, /obj/item/stack/sheet/plasteel)) - var/obj/item/stack/sheet/plasteel/candidate = target - var/quantity = candidate.amount - if(candidate.use(quantity)) - uses -- - new /obj/item/stack/sheet/mineral/hidden/hellstone(T,quantity) - to_chat(user, "A dark cloud emanates from you hand and swirls around the plasteel, transforming it into runed metal!") - SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25)) - else if(istype(target,/mob/living/silicon/robot)) - var/mob/living/silicon/robot/candidate = target - if(candidate.mmi) - channeling = TRUE - user.visible_message("A dark cloud emanates from [user]'s hand and swirls around [candidate]!") - playsound(T, 'sound/machines/creaking.ogg', 80, TRUE) - var/prev_color = candidate.color - candidate.color = "black" - if(do_after(user, 90, target = candidate)) - candidate.emp_act(EMP_HEAVY) - var/list/constructs = list( - "Juggernaut" = image(icon = 'icons/mob/cult.dmi', icon_state = "juggernaut"), - "Wraith" = image(icon = 'icons/mob/cult.dmi', icon_state = "wraith"), - "Artificer" = image(icon = 'icons/mob/cult.dmi', icon_state = "artificer") - ) - var/construct_class = show_radial_menu(user, src, constructs, custom_check = CALLBACK(src, PROC_REF(check_menu), user), require_near = TRUE, tooltips = TRUE) - if(!check_menu(user)) - return - if(QDELETED(candidate)) - channeling = FALSE - return - user.visible_message("The dark cloud recedes from what was formerly [candidate], revealing a\n [construct_class]!") - switch(construct_class) - if("Juggernaut") - makeNewConstruct(/mob/living/simple_animal/hostile/construct/juggernaut, candidate, user, 0, T) - if("Wraith") - makeNewConstruct(/mob/living/simple_animal/hostile/construct/wraith, candidate, user, 0, T) - if("Artificer") - makeNewConstruct(/mob/living/simple_animal/hostile/construct/artificer, candidate, user, 0, T) - else - return - uses-- - candidate.mmi = null - qdel(candidate) - channeling = FALSE - else - channeling = FALSE - candidate.color = prev_color - return - else - uses-- - to_chat(user, "A dark cloud emanates from you hand and swirls around [candidate] - twisting it into a construct shell!") - new /obj/structure/constructshell(T) - SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25)) - qdel(candidate) - else if(istype(target,/obj/machinery/door/airlock)) - channeling = TRUE - playsound(T, 'sound/machines/airlockforced.ogg', 50, TRUE) - do_sparks(5, TRUE, target) - if(do_after(user, 50, target = user)) - if(QDELETED(target)) - channeling = FALSE - return - target.narsie_act() - uses-- - user.visible_message("Black ribbons suddenly emanate from [user]'s hand and cling to the airlock - twisting and corrupting it!") - SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25)) - channeling = FALSE - else - channeling = FALSE - return - else - to_chat(user, "The spell will not work on [target]!") - return - ..() - -/obj/item/melee/blood_magic/construction/proc/check_menu(mob/user) - if(!istype(user)) - return FALSE - if(user.incapacitated() || !user.Adjacent(src)) - return FALSE - return TRUE - - -//Armor: Gives the target a basic cultist combat loadout -/obj/item/melee/blood_magic/armor - name = "Arming Aura" - desc = "Will equipt cult combat gear onto a cultist on contact." - color = "#33cc33" // green - -/obj/item/melee/blood_magic/armor/afterattack(atom/target, mob/living/carbon/user, proximity) - if(iscarbon(target) && proximity) - uses-- - var/mob/living/carbon/C = target - C.visible_message("Otherworldly armor suddenly appears on [C]!") - C.equip_to_slot_or_del(new /obj/item/clothing/under/color/black,ITEM_SLOT_ICLOTHING) - C.equip_to_slot_or_del(new /obj/item/clothing/suit/hooded/cultrobes/alt(user), ITEM_SLOT_OCLOTHING) - C.equip_to_slot_or_del(new /obj/item/clothing/shoes/cult/alt(user), ITEM_SLOT_FEET) - C.equip_to_slot_or_del(new /obj/item/storage/backpack/cultpack(user), ITEM_SLOT_BACK) - if(C == user) - qdel(src) //Clears the hands - C.put_in_hands(new /obj/item/melee/cultblade(user)) - C.put_in_hands(new /obj/item/restraints/legcuffs/bola/cult(user)) - ..() - -/obj/item/melee/blood_magic/manipulator - name = "Blood Rite Aura" - desc = "Absorbs blood from anything you touch. Touching cultists and constructs can heal them. Use in-hand to cast an advanced rite." - color = "#7D1717" - -/obj/item/melee/blood_magic/manipulator/examine(mob/user) - . = ..() - . += "Blood spear, blood bolt barrage, and blood beam cost [BLOOD_SPEAR_COST], [BLOOD_BARRAGE_COST], and [BLOOD_BEAM_COST] charges respectively." - -/obj/item/melee/blood_magic/manipulator/afterattack(atom/target, mob/living/carbon/human/user, proximity) - if(proximity) - if(ishuman(target)) - var/mob/living/carbon/human/H = target - if(NOBLOOD in H.dna.species.species_traits) - to_chat(user,"Blood rites do not work on species with no blood!") - return - if(iscultist(H)) - if(H.stat == DEAD) - to_chat(user,"Only a revive rune can bring back the dead!") - return - if(H.blood_volume < BLOOD_VOLUME_SAFE) - var/restore_blood = BLOOD_VOLUME_SAFE - H.blood_volume - if(uses*2 < restore_blood) - H.blood_volume += uses*2 - to_chat(user,"You use the last of your blood rites to restore what blood you could!") - uses = 0 - return ..() - else - H.blood_volume = BLOOD_VOLUME_SAFE - uses -= round(restore_blood/2) - to_chat(user,"Your blood rites have restored [H == user ? "your" : "[H.p_their()]"] blood to safe levels!") - var/overall_damage = H.getBruteLoss() + H.getFireLoss() + H.getToxLoss() + H.getOxyLoss() - if(overall_damage == 0) - to_chat(user,"That cultist doesn't require healing!") - else - var/ratio = uses/overall_damage - if(H == user) - to_chat(user,"Your blood healing is far less efficient when used on yourself!") - ratio *= 0.35 // Healing is half as effective if you can't perform a full heal - uses -= round(overall_damage) // Healing is 65% more "expensive" even if you can still perform the full heal - if(ratio>1) - ratio = 1 - uses -= round(overall_damage) - H.visible_message("[H] is fully healed by [H==user ? "[H.p_their()]":"[H]'s"]'s blood magic!") - else - H.visible_message("[H] is partially healed by [H==user ? "[H.p_their()]":"[H]'s"] blood magic.") - uses = 0 - ratio *= -1 - H.adjustOxyLoss((overall_damage*ratio) * (H.getOxyLoss() / overall_damage), 0) - H.adjustToxLoss((overall_damage*ratio) * (H.getToxLoss() / overall_damage), 0) - H.adjustFireLoss((overall_damage*ratio) * (H.getFireLoss() / overall_damage), 0) - H.adjustBruteLoss((overall_damage*ratio) * (H.getBruteLoss() / overall_damage), 0) - H.updatehealth() - playsound(get_turf(H), 'sound/magic/staff_healing.ogg', 25) - new /obj/effect/temp_visual/cult/sparks(get_turf(H)) - user.Beam(H,icon_state="sendbeam",time=15) - else - if(H.stat == DEAD) - to_chat(user,"[H.p_their(TRUE)] blood has stopped flowing, you'll have to find another way to extract it.") - return - if(H.cultslurring) - to_chat(user,"[H.p_their(TRUE)] blood has been tainted by an even stronger form of blood magic, it's no use to us like this!") - return - if(H.blood_volume > BLOOD_VOLUME_SAFE) - H.blood_volume -= 100 - uses += 50 - user.Beam(H,icon_state="drainbeam",time=10) - playsound(get_turf(H), 'sound/magic/enter_blood.ogg', 50) - H.visible_message("[user] drains some of [H]'s blood!") - to_chat(user,"Your blood rite gains 50 charges from draining [H]'s blood.") - new /obj/effect/temp_visual/cult/sparks(get_turf(H)) - else - to_chat(user,"[H.p_theyre(TRUE)] missing too much blood - you cannot drain [H.p_them()] further!") - return - if(isconstruct(target)) - var/mob/living/simple_animal/M = target - var/missing = M.maxHealth - M.health - if(missing) - if(uses > missing) - M.adjustHealth(-missing) - M.visible_message("[M] is fully healed by [user]'s blood magic!") - uses -= missing - else - M.adjustHealth(-uses) - M.visible_message("[M] is partially healed by [user]'s blood magic!") - uses = 0 - playsound(get_turf(M), 'sound/magic/staff_healing.ogg', 25) - user.Beam(M,icon_state="sendbeam",time=10) - if(istype(target, /obj/effect/decal/cleanable/blood)) - blood_draw(target, user) - ..() - -/obj/item/melee/blood_magic/manipulator/proc/blood_draw(atom/target, mob/living/carbon/human/user) - var/temp = 0 - var/turf/T = get_turf(target) - if(T) - for(var/obj/effect/decal/cleanable/blood/B in view(T, 2)) - if(B.blood_state == BLOOD_STATE_HUMAN) - if(B.bloodiness == 100) //Bonus for "pristine" bloodpools, also to prevent cheese with footprint spam - temp += 30 - else - temp += max((B.bloodiness**2)/800,1) - new /obj/effect/temp_visual/cult/turf/floor(get_turf(B)) - qdel(B) - if(temp) - user.Beam(T,icon_state="drainbeam",time=15) - new /obj/effect/temp_visual/cult/sparks(get_turf(user)) - playsound(T, 'sound/magic/enter_blood.ogg', 50) - to_chat(user, "Your blood rite has gained [round(temp)] charge\s from blood sources around you!") - uses += max(1, round(temp)) - -/obj/item/melee/blood_magic/manipulator/attack_self(mob/living/user) - if(iscultist(user)) - var/list/options = list("Blood Spear (150)", "Blood Beam (500)") - var/choice = input(user, "Choose a greater blood rite...", "Greater Blood Rites") as null|anything in options - if(!choice) - to_chat(user, "You decide against conducting a greater blood rite.") - return - switch(choice) - if("Blood Spear (150)") - if(uses < BLOOD_SPEAR_COST) - to_chat(user, "You need [BLOOD_SPEAR_COST] charges to perform this rite.") - else - uses -= BLOOD_SPEAR_COST - var/turf/T = get_turf(user) - qdel(src) - var/datum/action/innate/cult/spear/S = new(user) - var/obj/item/cult_spear/rite = new(T) - S.Grant(user, rite) - rite.spear_act = S - if(user.put_in_hands(rite)) - to_chat(user, "A [rite.name] appears in your hand!") - else - user.visible_message( - "A [rite.name] appears at [user]'s feet!", \ - "A [rite.name] materializes at your feet.") - if("Blood Beam (500)") - if(uses < BLOOD_BEAM_COST) - to_chat(user, "You need [BLOOD_BEAM_COST] charges to perform this rite.") - else - var/obj/rite = new /obj/item/blood_beam() - uses -= BLOOD_BEAM_COST - qdel(src) - if(user.put_in_hands(rite)) - to_chat(user, "Your hands glow with POWER OVERWHELMING!!!") - else - to_chat(user, "You need a free hand for this rite!") - qdel(rite) diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm deleted file mode 100644 index 406c51956035..000000000000 --- a/code/modules/antagonists/cult/cult.dm +++ /dev/null @@ -1,401 +0,0 @@ -#define SUMMON_POSSIBILITIES 3 -#define CULT_VICTORY 1 -#define CULT_LOSS 0 -#define CULT_NARSIE_KILLED -1 - -/datum/antagonist/cult - name = "Cultist" - roundend_category = "cultists" - antagpanel_category = "Cult" - antag_moodlet = /datum/mood_event/cult - var/datum/action/innate/cult/comm/communion = new - var/datum/action/innate/cult/mastervote/vote = new - var/datum/action/innate/cult/blood_magic/magic = new - job_rank = ROLE_CULTIST - antag_hud_type = ANTAG_HUD_CULT - antag_hud_name = "cult" - var/ignore_implant = FALSE - var/give_equipment = FALSE - var/datum/team/cult/cult_team - - -/datum/antagonist/cult/get_team() - return cult_team - -/datum/antagonist/cult/create_team(datum/team/cult/new_team) - if(!new_team) - //todo remove this and allow admin buttons to create more than one cult - for(var/datum/antagonist/cult/H in GLOB.antagonists) - if(!H.owner) - continue - if(H.cult_team) - cult_team = H.cult_team - return - cult_team = new /datum/team/cult - cult_team.setup_objectives() - return - if(!istype(new_team)) - stack_trace("Wrong team type passed to [type] initialization.") - cult_team = new_team - -/datum/antagonist/cult/proc/add_objectives() - objectives |= cult_team.objectives - -/datum/antagonist/cult/Destroy() - QDEL_NULL(communion) - QDEL_NULL(vote) - return ..() - -/datum/antagonist/cult/can_be_owned(datum/mind/new_owner) - . = ..() - if(. && !ignore_implant) - . = is_convertable_to_cult(new_owner.current,cult_team) - -/datum/antagonist/cult/greet() - to_chat(owner, "You are a member of the cult!") - owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/bloodcult.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE)//subject to change - owner.announce_objectives() - -/datum/antagonist/cult/on_gain() - . = ..() - var/mob/living/current = owner.current - add_objectives() - if(give_equipment) - equip_cultist() - SSticker.mode.cult += owner // Only add after they've been given objectives - current.log_message("has been converted to the cult of Nar'Sie!", LOG_ATTACK, color="#960000") - - if(cult_team.blood_target && cult_team.blood_target_image && current.client) - current.client.images += cult_team.blood_target_image - - -/datum/antagonist/cult/proc/equip_cultist() - var/mob/living/carbon/H = owner.current - if(!istype(H)) - return - . += cult_give_item(/obj/item/melee/cultblade/dagger, H) - to_chat(owner, "These will help you jumpstart a cult of your own in this sector. Use them well, and remember - you are not the only one.") - - -/datum/antagonist/cult/proc/cult_give_item(obj/item/item_path, mob/living/carbon/human/mob) - var/list/slots = list( - "backpack" = ITEM_SLOT_BACKPACK, - "left pocket" = ITEM_SLOT_LPOCKET, - "right pocket" = ITEM_SLOT_RPOCKET - ) - - var/T = new item_path(mob) - var/item_name = initial(item_path.name) - var/where = mob.equip_in_one_of_slots(T, slots) - if(!where) - to_chat(mob, "Unfortunately, you weren't able to get a [item_name]. This is very bad and you should adminhelp immediately (press F1).") - return 0 - else - to_chat(mob, "You have a [item_name] in your [where].") - if(where == "backpack") - SEND_SIGNAL(mob.back, COMSIG_TRY_STORAGE_SHOW, mob) - return TRUE - -/datum/antagonist/cult/apply_innate_effects(mob/living/mob_override) - . = ..() - var/mob/living/current = owner.current - if(mob_override) - current = mob_override - add_antag_hud(antag_hud_type, antag_hud_name, current) - handle_clown_mutation(current, mob_override ? null : "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself.") - current.faction |= "cult" - current.grant_language(/datum/language/narsie, TRUE, TRUE, LANGUAGE_CULTIST) - if(!cult_team.cult_master) - vote.Grant(current) - communion.Grant(current) - if(ishuman(current)) - magic.Grant(current) - current.throw_alert("bloodsense", /atom/movable/screen/alert/bloodsense) - if(cult_team.cult_risen) - cult_team.rise(current) - if(cult_team.cult_ascendent) - cult_team.ascend(current) - -/datum/antagonist/cult/remove_innate_effects(mob/living/mob_override) - . = ..() - var/mob/living/current = owner.current - if(mob_override) - current = mob_override - remove_antag_hud(antag_hud_type, current) - handle_clown_mutation(current, removing = FALSE) - current.faction -= "cult" - current.remove_language(/datum/language/narsie, TRUE, TRUE, LANGUAGE_CULTIST) - vote.Remove(current) - communion.Remove(current) - magic.Remove(current) - current.clear_alert("bloodsense") - if(ishuman(current)) - var/mob/living/carbon/human/H = current - H.eye_color = initial(H.eye_color) - H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK) - REMOVE_TRAIT(H, CULT_EYES, null) - H.remove_overlay(HALO_LAYER) - H.update_body() - -/datum/antagonist/cult/on_removal() - SSticker.mode.cult -= owner - if(!silent) - owner.current.visible_message("[owner.current] looks like [owner.current.p_theyve()] just reverted to [owner.current.p_their()] old faith!", null, null, null, owner.current) - to_chat(owner.current, "An unfamiliar white light flashes through your mind, cleansing the taint of the Geometer and all your memories as her servant.") - owner.current.log_message("has renounced the cult of Nar'Sie!", LOG_ATTACK, color="#960000") - if(cult_team.blood_target && cult_team.blood_target_image && owner.current.client) - owner.current.client.images -= cult_team.blood_target_image - . = ..() - -/datum/antagonist/cult/admin_add(datum/mind/new_owner,mob/admin) - give_equipment = FALSE - new_owner.add_antag_datum(src) - message_admins("[key_name_admin(admin)] has cult'ed [key_name_admin(new_owner)].") - log_admin("[key_name(admin)] has cult'ed [key_name(new_owner)].") - -/datum/antagonist/cult/admin_remove(mob/user) - message_admins("[key_name_admin(user)] has decult'ed [key_name_admin(owner)].") - log_admin("[key_name(user)] has decult'ed [key_name(owner)].") - SSticker.mode.remove_cultist(owner,silent=TRUE) //disgusting - -/datum/antagonist/cult/get_admin_commands() - . = ..() - .["Dagger"] = CALLBACK(src, PROC_REF(admin_give_dagger)) - .["Metal"] = CALLBACK(src, PROC_REF(admin_take_all)) - -/datum/antagonist/cult/proc/admin_give_dagger(mob/admin) - if(!equip_cultist()) - to_chat(admin, "Spawning dagger failed!") - -/datum/antagonist/cult/proc/admin_take_all(mob/admin) - var/mob/living/current = owner.current - for(var/o in current.GetAllContents()) - if(istype(o, /obj/item/melee/cultblade/dagger)) - qdel(o) - -/datum/antagonist/cult/master - ignore_implant = TRUE - show_in_antagpanel = FALSE //Feel free to add this later - var/datum/action/innate/cult/master/finalreck/reckoning = new - var/datum/action/innate/cult/master/cultmark/bloodmark = new - var/datum/action/innate/cult/master/pulse/throwing = new - -/datum/antagonist/cult/master/Destroy() - QDEL_NULL(reckoning) - QDEL_NULL(bloodmark) - QDEL_NULL(throwing) - return ..() - -/datum/antagonist/cult/master/on_gain() - . = ..() - var/mob/living/current = owner.current - set_antag_hud(current, "cultmaster") - -/datum/antagonist/cult/master/greet() - to_chat(owner.current, "You are the cult's Master. As the cult's Master, you have a unique title and loud voice when communicating, are capable of marking \ - targets, such as a location or a noncultist, to direct the cult to them, and, finally, you are capable of summoning the entire living cult to your location once.") - to_chat(owner.current, "Use these abilities to direct the cult to victory at any cost.") - -/datum/antagonist/cult/master/apply_innate_effects(mob/living/mob_override) - . = ..() - var/mob/living/current = owner.current - if(mob_override) - current = mob_override - if(!cult_team.reckoning_complete) - reckoning.Grant(current) - bloodmark.Grant(current) - throwing.Grant(current) - current.update_action_buttons_icon() - current.apply_status_effect(/datum/status_effect/cult_master) - if(cult_team.cult_risen) - cult_team.rise(current) - if(cult_team.cult_ascendent) - cult_team.ascend(current) - -/datum/antagonist/cult/master/remove_innate_effects(mob/living/mob_override) - . = ..() - var/mob/living/current = owner.current - if(mob_override) - current = mob_override - reckoning.Remove(current) - bloodmark.Remove(current) - throwing.Remove(current) - current.update_action_buttons_icon() - current.remove_status_effect(/datum/status_effect/cult_master) - - if(ishuman(current)) - var/mob/living/carbon/human/H = current - H.eye_color = initial(H.eye_color) - H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK) - REMOVE_TRAIT(H, CULT_EYES, null) - H.remove_overlay(HALO_LAYER) - H.update_body() - -/datum/team/cult - name = "Cult" - - var/blood_target - var/image/blood_target_image - var/blood_target_reset_timer - - var/cult_vote_called = FALSE - var/mob/living/cult_master - var/reckoning_complete = FALSE - var/cult_risen = FALSE - var/cult_ascendent = FALSE - -/datum/team/cult/proc/check_size() - if(cult_ascendent) - return - var/alive = 0 - var/cultplayers = 0 - for(var/I in GLOB.player_list) - var/mob/M = I - if(M.stat != DEAD) - if(iscultist(M)) - ++cultplayers - else - ++alive - var/ratio = cultplayers/alive - if(ratio > CULT_RISEN && !cult_risen) - for(var/datum/mind/B in members) - if(B.current) - SEND_SOUND(B.current, 'sound/hallucinations/i_see_you2.ogg') - to_chat(B.current, "The veil weakens as your cult grows, your eyes begin to glow...") - addtimer(CALLBACK(src, PROC_REF(rise), B.current), 200) - cult_risen = TRUE - - if(ratio > CULT_ASCENDENT && !cult_ascendent) - for(var/datum/mind/B in members) - if(B.current) - SEND_SOUND(B.current, 'sound/hallucinations/im_here1.ogg') - to_chat(B.current, "Your cult is ascendent and the red harvest approaches - you cannot hide your true nature for much longer!!") - addtimer(CALLBACK(src, PROC_REF(ascend), B.current), 200) - cult_ascendent = TRUE - - -/datum/team/cult/proc/rise(cultist) - if(ishuman(cultist)) - var/mob/living/carbon/human/H = cultist - H.eye_color = "f00" - H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK) - ADD_TRAIT(H, CULT_EYES, CULT_TRAIT) - H.update_body() - -/datum/team/cult/proc/ascend(cultist) - if(ishuman(cultist)) - var/mob/living/carbon/human/H = cultist - new /obj/effect/temp_visual/cult/sparks(get_turf(H), H.dir) - var/istate = pick("halo1","halo2","halo3","halo4","halo5","halo6") - var/mutable_appearance/new_halo_overlay = mutable_appearance('icons/effects/32x64.dmi', istate, -HALO_LAYER) - H.overlays_standing[HALO_LAYER] = new_halo_overlay - H.apply_overlay(HALO_LAYER) - -/datum/objective/sacrifice/find_target(dupe_search_range) - if(!istype(team, /datum/team/cult)) - return - var/datum/team/cult/C = team - var/list/target_candidates = list() - for(var/mob/living/carbon/human/player in GLOB.player_list) - if(player.mind && !player.mind.has_antag_datum(/datum/antagonist/cult) && !is_convertable_to_cult(player) && player.stat != DEAD) - target_candidates += player.mind - if(target_candidates.len == 0) - message_admins("Cult Sacrifice: Could not find unconvertible target, checking for convertible target.") - for(var/mob/living/carbon/human/player in GLOB.player_list) - if(player.mind && !player.mind.has_antag_datum(/datum/antagonist/cult) && player.stat != DEAD) - target_candidates += player.mind - listclearnulls(target_candidates) - if(LAZYLEN(target_candidates)) - target = pick(target_candidates) - update_explanation_text() - else - message_admins("Cult Sacrifice: Could not find unconvertible or convertible target. WELP!") - for(var/datum/mind/M in C.members) - if(M.current) - M.current.clear_alert("bloodsense") - M.current.throw_alert("bloodsense", /atom/movable/screen/alert/bloodsense) - -/datum/team/cult/proc/setup_objectives() - var/datum/objective/sacrifice/sac_objective = new - sac_objective.team = src - sac_objective.find_target() - objectives += sac_objective - - var/datum/objective/eldergod/summon_objective = new - summon_objective.team = src - objectives += summon_objective - - -/datum/objective/sacrifice - var/sacced = FALSE - var/sac_image - -/datum/objective/sacrifice/check_completion() - return sacced || completed - -/datum/objective/sacrifice/update_explanation_text() - if(target) - explanation_text = "Sacrifice [target], the [target.assigned_role] via invoking an Offer rune with [target.p_them()] on it and three acolytes around it." - else - explanation_text = "The veil has already been weakened here, proceed to the final objective." - -/datum/objective/eldergod - var/summoned = FALSE - var/killed = FALSE - var/list/summon_spots = list() - -/datum/objective/eldergod/New() - ..() - var/sanity = 0 - while(summon_spots.len < SUMMON_POSSIBILITIES && sanity < 100) - var/area/summon_area = pick(GLOB.sortedAreas - summon_spots) - if(summon_area && (summon_area.area_flags & VALID_TERRITORY)) - summon_spots += summon_area - sanity++ - update_explanation_text() - -/datum/objective/eldergod/update_explanation_text() - explanation_text = "Summon Nar'Sie by invoking the rune 'Summon Nar'Sie'. The summoning can only be accomplished in [english_list(summon_spots)] - where the veil is weak enough for the ritual to begin." - -/datum/objective/eldergod/check_completion() - if(killed) - return CULT_NARSIE_KILLED // You failed so hard that even the code went backwards. - return summoned || completed - -/datum/team/cult/proc/check_cult_victory() - for(var/datum/objective/O in objectives) - if(O.check_completion() == CULT_NARSIE_KILLED) - return CULT_NARSIE_KILLED - else if(!O.check_completion()) - return CULT_LOSS - return CULT_VICTORY - -/datum/team/cult/roundend_report() - var/list/parts = list() - var/victory = check_cult_victory() - - if(victory == CULT_NARSIE_KILLED) // Epic failure, you summoned your god and then someone killed it. - parts += "Nar'sie has been killed! The cult will haunt the universe no longer!" - else if(victory) - parts += "The cult has succeeded! Nar'Sie has snuffed out another torch in the void!" - else - parts += "The staff managed to stop the cult! Dark words and heresy are no match for Nanotrasen's finest!" - - if(objectives.len) - parts += "The cultists' objectives were:" - var/count = 1 - for(var/datum/objective/objective in objectives) - if(objective.check_completion()) - parts += "Objective #[count]: [objective.explanation_text] Success!" - else - parts += "Objective #[count]: [objective.explanation_text] Fail." - count++ - - if(members.len) - parts += "The cultists were:" - parts += printplayerlist(members) - - return "
    [parts.Join("
    ")]
    " - -/datum/team/cult/is_gamemode_hero() - return SSticker.mode.name == "cult" diff --git a/code/modules/antagonists/cult/cult_comms.dm b/code/modules/antagonists/cult/cult_comms.dm deleted file mode 100644 index 0c070e8e423f..000000000000 --- a/code/modules/antagonists/cult/cult_comms.dm +++ /dev/null @@ -1,461 +0,0 @@ -// Contains cult communion, guide, and cult master abilities - -/datum/action/innate/cult - icon_icon = 'icons/mob/actions/actions_cult.dmi' - background_icon_state = "bg_demon" - buttontooltipstyle = "cult" - check_flags = AB_CHECK_HANDS_BLOCKED|AB_CHECK_IMMOBILE|AB_CHECK_CONSCIOUS - -/datum/action/innate/cult/IsAvailable() - if(!iscultist(owner)) - return FALSE - return ..() - -/datum/action/innate/cult/comm - name = "Communion" - desc = "Whispered words that all cultists can hear.
    Warning:Nearby non-cultists can still hear you." - button_icon_state = "cult_comms" - -/datum/action/innate/cult/comm/Activate() - var/input = stripped_input(usr, "Please choose a message to tell to the other acolytes.", "Voice of Blood", "") - if(!input || !IsAvailable()) - return - if(CHAT_FILTER_CHECK(input)) - to_chat(usr, "You cannot send a message that contains a word prohibited in IC chat!") - return - cultist_commune(usr, input) - -/datum/action/innate/cult/comm/proc/cultist_commune(mob/living/user, message) - var/my_message - if(!message) - return - user.whisper("O bidai nabora se[pick("'","`")]sma!", language = /datum/language/common) - user.whisper(html_decode(message)) - var/title = "Acolyte" - var/span = "cult italic" - if(user.mind && user.mind.has_antag_datum(/datum/antagonist/cult/master)) - span = "cultlarge" - title = "Master" - else if(!ishuman(user)) - title = "Construct" - my_message = "[title] [findtextEx(user.name, user.real_name) ? user.name : "[user.real_name] (as [user.name])"]: [message]" - for(var/i in GLOB.player_list) - var/mob/M = i - if(iscultist(M)) - to_chat(M, my_message) - else if(M in GLOB.dead_mob_list) - var/link = FOLLOW_LINK(M, user) - to_chat(M, "[link] [my_message]") - - user.log_talk(message, LOG_SAY, tag="cult") - -/datum/action/innate/cult/comm/spirit - name = "Spiritual Communion" - desc = "Conveys a message from the spirit realm that all cultists can hear." - -/datum/action/innate/cult/comm/spirit/IsAvailable() - if(iscultist(owner.mind.current)) - return TRUE - -/datum/action/innate/cult/comm/spirit/cultist_commune(mob/living/user, message) - var/my_message - if(!message) - return - my_message = "The [user.name]: [message]" - for(var/i in GLOB.player_list) - var/mob/M = i - if(iscultist(M)) - to_chat(M, my_message) - else if(M in GLOB.dead_mob_list) - var/link = FOLLOW_LINK(M, user) - to_chat(M, "[link] [my_message]") - -/datum/action/innate/cult/mastervote - name = "Assert Leadership" - button_icon_state = "cultvote" - -/datum/action/innate/cult/mastervote/IsAvailable() - var/datum/antagonist/cult/C = owner.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - if(!C || C.cult_team.cult_vote_called || !ishuman(owner)) - return FALSE - return ..() - -/datum/action/innate/cult/mastervote/Activate() - var/choice = alert(owner, "The mantle of leadership is heavy. Success in this role requires an expert level of communication and experience. Are you sure?",, "Yes", "No") - if(choice == "Yes" && IsAvailable()) - var/datum/antagonist/cult/C = owner.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - pollCultists(owner,C.cult_team) - -/proc/pollCultists(mob/living/Nominee,datum/team/cult/team) //Cult Master Poll - if(world.time < CULT_POLL_WAIT) - to_chat(Nominee, "It would be premature to select a leader while everyone is still settling in, try again in [DisplayTimeText(CULT_POLL_WAIT-world.time)].") - return - team.cult_vote_called = TRUE //somebody's trying to be a master, make sure we don't let anyone else try - for(var/datum/mind/B in team.members) - if(B.current) - B.current.update_action_buttons_icon() - if(!B.current.incapacitated()) - SEND_SOUND(B.current, 'sound/hallucinations/im_here1.ogg') - to_chat(B.current, "Acolyte [Nominee] has asserted that [Nominee.p_theyre()] worthy of leading the cult. A vote will be called shortly.") - sleep(100) - var/list/asked_cultists = list() - for(var/datum/mind/B in team.members) - if(B.current && B.current != Nominee && !B.current.incapacitated()) - SEND_SOUND(B.current, 'sound/magic/exit_blood.ogg') - asked_cultists += B.current - var/list/yes_voters = pollCandidates("[Nominee] seeks to lead your cult, do you support [Nominee.p_them()]?", poll_time = 300, group = asked_cultists) - if(QDELETED(Nominee) || Nominee.incapacitated()) - team.cult_vote_called = FALSE - for(var/datum/mind/B in team.members) - if(B.current) - B.current.update_action_buttons_icon() - if(!B.current.incapacitated()) - to_chat(B.current,"[Nominee] has died in the process of attempting to win the cult's support!") - return FALSE - if(!Nominee.mind) - team.cult_vote_called = FALSE - for(var/datum/mind/B in team.members) - if(B.current) - B.current.update_action_buttons_icon() - if(!B.current.incapacitated()) - to_chat(B.current,"[Nominee] has gone catatonic in the process of attempting to win the cult's support!") - return FALSE - if(LAZYLEN(yes_voters) <= LAZYLEN(asked_cultists) * 0.5) - team.cult_vote_called = FALSE - for(var/datum/mind/B in team.members) - if(B.current) - B.current.update_action_buttons_icon() - if(!B.current.incapacitated()) - to_chat(B.current, "[Nominee] could not win the cult's support and shall continue to serve as an acolyte.") - return FALSE - team.cult_master = Nominee - SSticker.mode.remove_cultist(Nominee.mind, TRUE) - Nominee.mind.add_antag_datum(/datum/antagonist/cult/master) - for(var/datum/mind/B in team.members) - if(B.current) - for(var/datum/action/innate/cult/mastervote/vote in B.current.actions) - vote.Remove(B.current) - if(!B.current.incapacitated()) - to_chat(B.current,"[Nominee] has won the cult's support and is now their master. Follow [Nominee.p_their()] orders to the best of your ability!") - return TRUE - -/datum/action/innate/cult/master/IsAvailable() - if(!owner.mind || !owner.mind.has_antag_datum(/datum/antagonist/cult/master) || GLOB.cult_narsie) - return 0 - return ..() - -/datum/action/innate/cult/master/finalreck - name = "Final Reckoning" - desc = "A single-use spell that brings the entire cult to the master's location." - button_icon_state = "sintouch" - -/datum/action/innate/cult/master/finalreck/Activate() - var/datum/antagonist/cult/antag = owner.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - if(!antag) - return - for(var/i in 1 to 4) - chant(i) - var/list/destinations = list() - for(var/turf/T in orange(1, owner)) - if(!T.is_blocked_turf(TRUE)) - destinations += T - if(!LAZYLEN(destinations)) - to_chat(owner, "You need more space to summon your cult!") - return - if(do_after(owner, 30, target = owner)) - for(var/datum/mind/B in antag.cult_team.members) - if(B.current && B.current.stat != DEAD) - var/turf/mobloc = get_turf(B.current) - switch(i) - if(1) - new /obj/effect/temp_visual/cult/sparks(mobloc, B.current.dir) - playsound(mobloc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - if(2) - new /obj/effect/temp_visual/dir_setting/cult/phase/out(mobloc, B.current.dir) - playsound(mobloc, "sparks", 75, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - if(3) - new /obj/effect/temp_visual/dir_setting/cult/phase(mobloc, B.current.dir) - playsound(mobloc, "sparks", 100, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - if(4) - playsound(mobloc, 'sound/magic/exit_blood.ogg', 100, TRUE) - if(B.current != owner) - var/turf/final = pick(destinations) - if(istype(B.current.loc, /obj/item/soulstone)) - var/obj/item/soulstone/S = B.current.loc - S.release_shades(owner) - B.current.setDir(SOUTH) - new /obj/effect/temp_visual/cult/blood(final) - addtimer(CALLBACK(B.current, TYPE_PROC_REF(/mob, reckon), final), 10) - else - return - antag.cult_team.reckoning_complete = TRUE - Remove(owner) - -/mob/proc/reckon(turf/final) - new /obj/effect/temp_visual/cult/blood/out(get_turf(src)) - forceMove(final) - -/datum/action/innate/cult/master/finalreck/proc/chant(chant_number) - switch(chant_number) - if(1) - owner.say("C'arta forbici!", language = /datum/language/common, forced = "cult invocation") - if(2) - owner.say("Pleggh e'ntrath!", language = /datum/language/common, forced = "cult invocation") - playsound(get_turf(owner),'sound/magic/clockwork/narsie_attack.ogg', 50, TRUE) - if(3) - owner.say("Barhah hra zar'garis!", language = /datum/language/common, forced = "cult invocation") - playsound(get_turf(owner),'sound/magic/clockwork/narsie_attack.ogg', 75, TRUE) - if(4) - owner.say("N'ath reth sh'yro eth d'rekkathnor!!!", language = /datum/language/common, forced = "cult invocation") - playsound(get_turf(owner),'sound/magic/clockwork/narsie_attack.ogg', 100, TRUE) - -/datum/action/innate/cult/master/cultmark - name = "Mark Target" - desc = "Marks a target for the cult." - button_icon_state = "cult_mark" - var/obj/effect/proc_holder/cultmark/CM - var/cooldown = 0 - var/base_cooldown = 1200 - -/datum/action/innate/cult/master/cultmark/New(Target) - CM = new() - CM.attached_action = src - ..() - -/datum/action/innate/cult/master/cultmark/IsAvailable() - if(cooldown > world.time) - if(!CM.active) - to_chat(owner, "You need to wait [DisplayTimeText(cooldown - world.time)] before you can mark another target!") - return FALSE - return ..() - -/datum/action/innate/cult/master/cultmark/Destroy() - QDEL_NULL(CM) - return ..() - -/datum/action/innate/cult/master/cultmark/Activate() - CM.toggle(owner) //the important bit - return TRUE - -/obj/effect/proc_holder/cultmark - active = FALSE - ranged_mousepointer = 'icons/effects/mouse_pointers/cult_target.dmi' - var/datum/action/innate/cult/master/cultmark/attached_action - -/obj/effect/proc_holder/cultmark/Destroy() - attached_action = null - return ..() - -/obj/effect/proc_holder/cultmark/proc/toggle(mob/user) - if(active) - remove_ranged_ability("You cease the marking ritual.") - else - add_ranged_ability(user, "You prepare to mark a target for your cult...") - -/obj/effect/proc_holder/cultmark/InterceptClickOn(mob/living/caller, params, atom/target) - if(..()) - return - if(ranged_ability_user.incapacitated()) - remove_ranged_ability() - return - var/turf/T = get_turf(ranged_ability_user) - if(!isturf(T)) - return FALSE - - var/datum/antagonist/cult/C = caller.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - - if(target in view(7, get_turf(ranged_ability_user))) - if(C.cult_team.blood_target) - to_chat(ranged_ability_user, "The cult has already designated a target!") - return FALSE - C.cult_team.blood_target = target - var/area/A = get_area(target) - attached_action.cooldown = world.time + attached_action.base_cooldown - addtimer(CALLBACK(attached_action.owner, TYPE_PROC_REF(/mob, update_action_buttons_icon)), attached_action.base_cooldown) - C.cult_team.blood_target_image = image('icons/effects/mouse_pointers/cult_target.dmi', target, "glow", ABOVE_MOB_LAYER) - C.cult_team.blood_target_image.appearance_flags = RESET_COLOR - C.cult_team.blood_target_image.pixel_x = -target.pixel_x - C.cult_team.blood_target_image.pixel_y = -target.pixel_y - for(var/datum/mind/B in SSticker.mode.cult) - if(B.current && B.current.stat != DEAD && B.current.client) - to_chat(B.current, "[ranged_ability_user] has marked [C.cult_team.blood_target] in the [A.name] as the cult's top priority, get there immediately!") - SEND_SOUND(B.current, sound(pick('sound/hallucinations/over_here2.ogg','sound/hallucinations/over_here3.ogg'),0,1,75)) - B.current.client.images += C.cult_team.blood_target_image - attached_action.owner.update_action_buttons_icon() - remove_ranged_ability("The marking rite is complete! It will last for 90 seconds.") - C.cult_team.blood_target_reset_timer = addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(reset_blood_target),C.cult_team), 900, TIMER_STOPPABLE) - return TRUE - return FALSE - -/proc/reset_blood_target(datum/team/cult/team) - for(var/datum/mind/B in team.members) - if(B.current && B.current.stat != DEAD && B.current.client) - if(team.blood_target) - to_chat(B.current,"The blood mark has expired!") - B.current.client.images -= team.blood_target_image - QDEL_NULL(team.blood_target_image) - team.blood_target = null - - -/datum/action/innate/cult/master/cultmark/ghost - name = "Mark a Blood Target for the Cult" - desc = "Marks a target for the entire cult to track." - -/datum/action/innate/cult/master/cultmark/ghost/IsAvailable() - if(istype(owner, /mob/dead/observer) && iscultist(owner.mind.current)) - return TRUE - else - qdel(src) - -/datum/action/innate/cult/ghostmark //Ghost version - name = "Blood Mark your Target" - desc = "Marks whatever you are orbitting - for the entire cult to track." - button_icon_state = "cult_mark" - var/tracking = FALSE - var/cooldown = 0 - var/base_cooldown = 600 - -/datum/action/innate/cult/ghostmark/IsAvailable() - if(istype(owner, /mob/dead/observer) && iscultist(owner.mind.current)) - return TRUE - else - qdel(src) - -/datum/action/innate/cult/ghostmark/proc/reset_button() - if(owner) - name = "Blood Mark your Target" - desc = "Marks whatever you are orbitting - for the entire cult to track." - button_icon_state = "cult_mark" - owner.update_action_buttons_icon() - SEND_SOUND(owner, 'sound/magic/enter_blood.ogg') - to_chat(owner,"Your previous mark is gone - you are now ready to create a new blood mark.") - -/datum/action/innate/cult/ghostmark/Activate() - var/datum/antagonist/cult/C = owner.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - if(C.cult_team.blood_target) - if(cooldown>world.time) - reset_blood_target(C.cult_team) - to_chat(owner, "You have cleared the cult's blood target!") - deltimer(C.cult_team.blood_target_reset_timer) - return - else - to_chat(owner, "The cult has already designated a target!") - return - if(cooldown>world.time) - to_chat(owner, "You aren't ready to place another blood mark yet!") - return - target = owner.orbiting?.parent || get_turf(owner) - if(!target) - return - C.cult_team.blood_target = target - var/area/A = get_area(target) - cooldown = world.time + base_cooldown - addtimer(CALLBACK(owner, TYPE_PROC_REF(/mob, update_action_buttons_icon)), base_cooldown) - C.cult_team.blood_target_image = image('icons/effects/mouse_pointers/cult_target.dmi', target, "glow", ABOVE_MOB_LAYER) - C.cult_team.blood_target_image.appearance_flags = RESET_COLOR - C.cult_team.blood_target_image.pixel_x = -target.pixel_x - C.cult_team.blood_target_image.pixel_y = -target.pixel_y - SEND_SOUND(owner, sound(pick('sound/hallucinations/over_here2.ogg','sound/hallucinations/over_here3.ogg'),0,1,75)) - owner.client.images += C.cult_team.blood_target_image - for(var/datum/mind/B in SSticker.mode.cult) - if(B.current && B.current.stat != DEAD && B.current.client) - to_chat(B.current, "[owner] has marked [C.cult_team.blood_target] in the [A.name] as the cult's top priority, get there immediately!") - SEND_SOUND(B.current, sound(pick('sound/hallucinations/over_here2.ogg','sound/hallucinations/over_here3.ogg'),0,1,75)) - B.current.client.images += C.cult_team.blood_target_image - to_chat(owner,"You have marked the [target] for the cult! It will last for [DisplayTimeText(base_cooldown)].") - name = "Clear the Blood Mark" - desc = "Remove the Blood Mark you previously set." - button_icon_state = "emp" - owner.update_action_buttons_icon() - C.cult_team.blood_target_reset_timer = addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(reset_blood_target),C.cult_team), base_cooldown, TIMER_STOPPABLE) - addtimer(CALLBACK(src, PROC_REF(reset_button)), base_cooldown) - - -//////// ELDRITCH PULSE ///////// - - - -/datum/action/innate/cult/master/pulse - name = "Eldritch Pulse" - desc = "Seize upon a fellow cultist or cult structure and teleport it to a nearby location." - icon_icon = 'icons/mob/actions/actions_spells.dmi' - button_icon_state = "arcane_barrage" - var/obj/effect/proc_holder/pulse/PM - var/cooldown = 0 - var/base_cooldown = 150 - var/throwing = FALSE - var/mob/living/throwee - -/datum/action/innate/cult/master/pulse/New() - PM = new() - PM.attached_action = src - ..() - -/datum/action/innate/cult/master/pulse/IsAvailable() - if(!owner.mind || !owner.mind.has_antag_datum(/datum/antagonist/cult/master)) - return FALSE - if(cooldown > world.time) - if(!PM.active) - to_chat(owner, "You need to wait [DisplayTimeText(cooldown - world.time)] before you can pulse again!") - return FALSE - return ..() - -/datum/action/innate/cult/master/pulse/Destroy() - PM.attached_action = null //What the fuck is even going on here. - QDEL_NULL(PM) - return ..() - - -/datum/action/innate/cult/master/pulse/Activate() - PM.toggle(owner) //the important bit - return TRUE - -/obj/effect/proc_holder/pulse - active = FALSE - ranged_mousepointer = 'icons/effects/mouse_pointers/throw_target.dmi' - var/datum/action/innate/cult/master/pulse/attached_action - -/obj/effect/proc_holder/pulse/Destroy() - attached_action = null - return ..() - - -/obj/effect/proc_holder/pulse/proc/toggle(mob/user) - if(active) - remove_ranged_ability("You cease your preparations...") - attached_action.throwing = FALSE - else - add_ranged_ability(user, "You prepare to tear through the fabric of reality...") - -/obj/effect/proc_holder/pulse/InterceptClickOn(mob/living/caller, params, atom/target) - if(..()) - return - if(ranged_ability_user.incapacitated()) - remove_ranged_ability() - return - var/turf/T = get_turf(ranged_ability_user) - if(!isturf(T)) - return FALSE - if(target in view(7, get_turf(ranged_ability_user))) - if((!(iscultist(target) || istype(target, /obj/structure/destructible/cult)) || target == caller) && !(attached_action.throwing)) - return - if(!attached_action.throwing) - attached_action.throwing = TRUE - attached_action.throwee = target - SEND_SOUND(ranged_ability_user, sound('sound/weapons/thudswoosh.ogg')) - to_chat(ranged_ability_user,"You reach through the veil with your mind's eye and seize [target]!") - return - else - new /obj/effect/temp_visual/cult/sparks(get_turf(attached_action.throwee), ranged_ability_user.dir) - var/distance = get_dist(attached_action.throwee, target) - if(distance >= 16) - return - playsound(target,'sound/magic/exit_blood.ogg') - attached_action.throwee.Beam(target,icon_state="sendbeam",time=4) - attached_action.throwee.forceMove(get_turf(target)) - new /obj/effect/temp_visual/cult/sparks(get_turf(target), ranged_ability_user.dir) - attached_action.throwing = FALSE - attached_action.cooldown = world.time + attached_action.base_cooldown - remove_ranged_ability("A pulse of blood magic surges through you as you shift [attached_action.throwee] through time and space.") - caller.update_action_buttons_icon() - addtimer(CALLBACK(caller, TYPE_PROC_REF(/mob, update_action_buttons_icon)), attached_action.base_cooldown) diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm deleted file mode 100644 index 53d17bf325aa..000000000000 --- a/code/modules/antagonists/cult/cult_items.dm +++ /dev/null @@ -1,910 +0,0 @@ -/obj/item/tome - name = "arcane tome" - desc = "An old, dusty tome with frayed edges and a sinister-looking cover." - icon_state ="tome" - throw_speed = 2 - throw_range = 5 - w_class = WEIGHT_CLASS_SMALL - -/obj/item/melee/cultblade/dagger - name = "ritual dagger" - desc = "A strange dagger said to be used by sinister groups for \"preparing\" a corpse before sacrificing it to their dark gods." - icon = 'icons/obj/wizard.dmi' - icon_state = "render" - item_state = "cultdagger" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - inhand_x_dimension = 32 - inhand_y_dimension = 32 - w_class = WEIGHT_CLASS_SMALL - force = 15 - throwforce = 25 - armour_penetration = 35 - actions_types = list(/datum/action/item_action/cult_dagger) - var/drawing_rune = FALSE - -/obj/item/melee/cultblade/dagger/Initialize() - . = ..() - var/image/I = image(icon = 'icons/effects/blood.dmi' , icon_state = null, loc = src) - I.override = TRUE - add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/cult, "cult_dagger", I) - -/obj/item/melee/cultblade - name = "eldritch longsword" - desc = "A sword humming with unholy energy. It glows with a dim red light." - icon_state = "cultblade" - item_state = "cultblade" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - flags_1 = CONDUCT_1 - sharpness = IS_SHARP - w_class = WEIGHT_CLASS_BULKY - force = 30 - throwforce = 10 - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "rended") - -/obj/item/melee/cultblade/Initialize() - . = ..() - AddComponent(/datum/component/butchering, 40, 100) - -/obj/item/melee/cultblade/attack(mob/living/target, mob/living/carbon/human/user) - if(!iscultist(user)) - user.Paralyze(100) - user.dropItemToGround(src, TRUE) - user.visible_message( - "A powerful force shoves [user] away from [target]!", \ - "\"You shouldn't play with sharp things. You'll poke someone's eye out.\"") - if(ishuman(user)) - var/mob/living/carbon/human/H = user - H.apply_damage(rand(force/2, force), BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) - else - user.adjustBruteLoss(rand(force/2,force)) - return - ..() - -/obj/item/melee/cultblade/ghost - name = "eldritch sword" - force = 19 //can't break normal airlocks - item_flags = NEEDS_PERMIT | DROPDEL - flags_1 = NONE - -/obj/item/melee/cultblade/ghost/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT) - -/obj/item/melee/cultblade/pickup(mob/living/user) - ..() - if(!iscultist(user)) - to_chat(user, "\"I wouldn't advise that.\"") - -/obj/item/cult_bastard - name = "geometric bastard sword" - desc = "An enormous sword, once used by Nar'Sien cultists to rapidly harvest the souls of non-believers. It still yet hungers to taste inpure blood." - w_class = WEIGHT_CLASS_HUGE - block_chance = 50 - throwforce = 20 - force = 30 - armour_penetration = 45 - throw_speed = 1 - throw_range = 3 - sharpness = IS_SHARP - light_system = MOVABLE_LIGHT - light_range = 4 - light_color = COLOR_RED - attack_verb = list("cleaved", "bisected", "tore", "brutalized", "smashed", "ripped", "diced", "carved") - icon_state = "cultbastard" - item_state = "cultbastard" - hitsound = 'sound/weapons/bladeslice.ogg' - lefthand_file = 'icons/mob/inhands/64x64_lefthand.dmi' - righthand_file = 'icons/mob/inhands/64x64_righthand.dmi' - inhand_x_dimension = 64 - inhand_y_dimension = 64 - actions_types = list() - item_flags = SLOWS_WHILE_IN_HAND - var/datum/action/innate/dash/cult/jaunt - var/datum/action/innate/cult/spin2win/linked_action - var/spinning = FALSE - var/spin_cooldown = 250 - var/dash_toggled = TRUE - var/list/nemesis_factions = list("mining", "boss") - var/faction_bonus_force = 25 - -/obj/item/cult_bastard/Initialize() - . = ..() - jaunt = new(src) - linked_action = new(src) - AddComponent(/datum/component/butchering, 50, 120) - AddComponent(/datum/component/two_handed, require_twohands=TRUE) - -/obj/item/cult_bastard/attack(mob/living/target, mob/living/carbon/human/user) - var/nemesis_faction = FALSE - if(LAZYLEN(nemesis_factions)) - for(var/F in target.faction) - if(F in nemesis_factions) - nemesis_faction = TRUE - force += faction_bonus_force - throwforce += faction_bonus_force - nemesis_effects(user, target) - break - . = ..() - if(nemesis_faction) - force -= faction_bonus_force - throwforce -= faction_bonus_force - -/obj/item/cult_bastard/proc/nemesis_effects(mob/living/user, mob/living/target) - return - -/obj/item/cult_bastard/Destroy() - QDEL_NULL(jaunt) - QDEL_NULL(linked_action) - return ..() - -/obj/item/cult_bastard/examine(mob/user) - . = ..() - . += "This weapon will absorb the souls of unconscious human foes." - if(contents.len) - . += "There are [contents.len] souls trapped within the sword's core." - else - . += "The sword appears to be quite lifeless." - -/obj/item/cult_bastard/can_be_pulled(user) - return FALSE - -/obj/item/cult_bastard/attack_self(mob/user) - dash_toggled = !dash_toggled - if(dash_toggled) - to_chat(loc, "You raise [src] and prepare to jaunt with it.") - else - to_chat(loc, "You lower [src] and prepare to swing it normally.") - -/obj/item/cult_bastard/pickup(mob/living/user) - . = ..() - force = initial(force) - jaunt.Grant(user, src) - linked_action.Grant(user, src) - user.update_icons() - -/obj/item/cult_bastard/dropped(mob/user) - . = ..() - linked_action.Remove(user) - jaunt.Remove(user) - user.update_icons() - -/obj/item/cult_bastard/IsReflect() - if(spinning) - playsound(src, 'sound/weapons/effects/deflect.ogg', 100, TRUE) - return TRUE - else - ..() - -/obj/item/cult_bastard/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(prob(final_block_chance)) - if(attack_type == PROJECTILE_ATTACK) - owner.visible_message("[owner] deflects [attack_text] with [src]!") - playsound(src, 'sound/weapons/effects/deflect.ogg', 100, TRUE) - return TRUE - else - playsound(src, 'sound/weapons/parry.ogg', 75, TRUE) - owner.visible_message("[owner] parries [attack_text] with [src]!") - return TRUE - return FALSE - -/obj/item/cult_bastard/afterattack(atom/target, mob/user, proximity, click_parameters) - . = ..() - if(dash_toggled && !proximity) - jaunt.Teleport(user, target) - return - if(proximity) - if(ishuman(target)) - var/mob/living/carbon/human/H = target - if(H.stat != CONSCIOUS) - var/obj/item/soulstone/anybody/SS = new /obj/item/soulstone/anybody(src) - SS.attack(H, user) - if(!LAZYLEN(SS.contents)) - qdel(SS) - if(istype(target, /obj/structure/constructshell) && contents.len) - var/obj/item/soulstone/anybody/SS = contents[1] - if(istype(SS)) - SS.transfer_soul("CONSTRUCT",target,user) - qdel(SS) - -/datum/action/innate/dash/cult - name = "Rend the Veil" - desc = "Use the sword to shear open the flimsy fabric of this reality and teleport to your target." - icon_icon = 'icons/mob/actions/actions_cult.dmi' - button_icon_state = "phaseshift" - dash_sound = 'sound/magic/enter_blood.ogg' - recharge_sound = 'sound/magic/exit_blood.ogg' - beam_effect = "sendbeam" - phasein = /obj/effect/temp_visual/dir_setting/cult/phase - phaseout = /obj/effect/temp_visual/dir_setting/cult/phase/out - -/datum/action/innate/dash/cult/IsAvailable() - if(iscultist(owner) && current_charges) - return TRUE - else - return FALSE - - - -/datum/action/innate/cult/spin2win - name = "Geometer's Fury" - desc = "You draw on the power of the sword's ancient runes, spinning it wildly around you as you become immune to most attacks." - background_icon_state = "bg_demon" - button_icon_state = "sintouch" - var/cooldown = 0 - var/mob/living/carbon/human/holder - var/obj/item/cult_bastard/sword - -/datum/action/innate/cult/spin2win/Grant(mob/user, obj/bastard) - . = ..() - sword = bastard - holder = user - -/datum/action/innate/cult/spin2win/IsAvailable() - if(cooldown <= world.time) - return TRUE - else - return FALSE - -/datum/action/innate/cult/spin2win/Activate() - cooldown = world.time + sword.spin_cooldown - holder.changeNext_move(50) - holder.apply_status_effect(/datum/status_effect/sword_spin) - sword.spinning = TRUE - sword.block_chance = 100 - sword.slowdown += 1.5 - addtimer(CALLBACK(src, PROC_REF(stop_spinning)), 50) - holder.update_action_buttons_icon() - -/datum/action/innate/cult/spin2win/proc/stop_spinning() - sword.spinning = FALSE - sword.block_chance = 50 - sword.slowdown -= 1.5 - sleep(sword.spin_cooldown) - holder.update_action_buttons_icon() - -/obj/item/restraints/legcuffs/bola/cult - name = "\improper Nar'Sien bola" - desc = "A strong bola, bound with dark magic that allows it to pass harmlessly through Nar'Sien cultists. Throw it to trip and slow your victim." - icon_state = "bola_cult" - item_state = "bola_cult" - breakouttime = 60 - knockdown = 30 - -/obj/item/restraints/legcuffs/bola/cult/attack_hand(mob/living/user) - . = ..() - if(!iscultist(user)) - to_chat(user, "The bola seems to take on a life of its own!") - ensnare(user) - -/obj/item/restraints/legcuffs/bola/cult/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - if(iscultist(hit_atom)) - return - . = ..() - - -/obj/item/clothing/head/hooded/cult_hoodie - name = "ancient cultist hood" - icon_state = "culthood" - desc = "A torn, dust-caked hood. Strange letters line the inside." - flags_inv = HIDEFACE|HIDEHAIR|HIDEEARS - flags_cover = HEADCOVERSEYES - armor = list("melee" = 40, "bullet" = 30, "laser" = 40,"energy" = 40, "bomb" = 25, "bio" = 10, "rad" = 0, "fire" = 10, "acid" = 10) - cold_protection = HEAD - min_cold_protection_temperature = HELMET_MIN_TEMP_PROTECT - heat_protection = HEAD - max_heat_protection_temperature = HELMET_MAX_TEMP_PROTECT - -/obj/item/clothing/suit/hooded/cultrobes - name = "ancient cultist robes" - desc = "A ragged, dusty set of robes. Strange letters line the inside." - icon_state = "cultrobes" - item_state = "cultrobes" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - allowed = list(/obj/item/tome, /obj/item/melee/cultblade, /obj/item/tank) - armor = list("melee" = 40, "bullet" = 30, "laser" = 40,"energy" = 40, "bomb" = 25, "bio" = 10, "rad" = 0, "fire" = 10, "acid" = 10) - flags_inv = HIDEJUMPSUIT - cold_protection = CHEST|GROIN|LEGS|ARMS - min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT - heat_protection = CHEST|GROIN|LEGS|ARMS - max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT - hoodtype = /obj/item/clothing/head/hooded/cult_hoodie - - -/obj/item/clothing/head/hooded/cult_hoodie/alt - name = "cultist hood" - desc = "An armored hood worn by the followers of Nar'Sie." - icon_state = "cult_hoodalt" - item_state = "cult_hoodalt" - -/obj/item/clothing/suit/hooded/cultrobes/alt - name = "cultist robes" - desc = "An armored set of robes worn by the followers of Nar'Sie." - icon_state = "cultrobesalt" - item_state = "cultrobesalt" - hoodtype = /obj/item/clothing/head/hooded/cult_hoodie/alt - -/obj/item/clothing/suit/hooded/cultrobes/alt/ghost - item_flags = DROPDEL - -/obj/item/clothing/suit/hooded/cultrobes/alt/ghost/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT) - - -/obj/item/clothing/head/magus - name = "magus helm" - icon_state = "magus" - item_state = "magus" - desc = "A helm worn by the followers of Nar'Sie." - flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDEEARS|HIDEEYES - armor = list("melee" = 50, "bullet" = 30, "laser" = 50,"energy" = 50, "bomb" = 25, "bio" = 10, "rad" = 0, "fire" = 10, "acid" = 10) - flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH - -/obj/item/clothing/suit/magusred - name = "magus robes" - desc = "A set of armored robes worn by the followers of Nar'Sie." - icon_state = "magusred" - item_state = "magusred" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - allowed = list(/obj/item/tome, /obj/item/melee/cultblade) - armor = list("melee" = 50, "bullet" = 30, "laser" = 50,"energy" = 50, "bomb" = 25, "bio" = 10, "rad" = 0, "fire" = 10, "acid" = 10) - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - -/obj/item/clothing/head/helmet/space/hardsuit/cult - name = "\improper Nar'Sien hardened helmet" - desc = "A heavily-armored helmet worn by warriors of the Nar'Sien cult. It can withstand hard vacuum." - icon_state = "cult_helmet" - item_state = "cult_helmet" - armor = list("melee" = 70, "bullet" = 50, "laser" = 30,"energy" = 40, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 40, "acid" = 75) - light_system = NO_LIGHT_SUPPORT - light_range = 0 - actions_types = list() - -/obj/item/clothing/suit/space/hardsuit/cult - name = "\improper Nar'Sien hardened armor" - icon_state = "cult_armor" - item_state = "cult_armor" - desc = "A heavily-armored exosuit worn by warriors of the Nar'Sien cult. It can withstand hard vacuum." - w_class = WEIGHT_CLASS_BULKY - allowed = list(/obj/item/tome, /obj/item/melee/cultblade, /obj/item/tank/internals/) - armor = list("melee" = 70, "bullet" = 50, "laser" = 30,"energy" = 40, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 40, "acid" = 75) - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/cult - -/obj/item/sharpener/cult - name = "eldritch whetstone" - desc = "A block, empowered by dark magic. Sharp weapons will be enhanced when used on the stone." - icon_state = "cult_sharpener" - used = 0 - increment = 5 - max = 40 - prefix = "darkened" - -/obj/item/sharpener/cult/update_icon_state() - icon_state = "cult_sharpener[used ? "_used" : ""]" - return ..() - -/obj/item/clothing/suit/hooded/cultrobes/cult_shield - name = "empowered cultist armor" - desc = "Empowered armor which creates a powerful shield around the user." - icon_state = "cult_armor" - item_state = "cult_armor" - w_class = WEIGHT_CLASS_BULKY - armor = list("melee" = 50, "bullet" = 40, "laser" = 50,"energy" = 50, "bomb" = 50, "bio" = 30, "rad" = 30, "fire" = 50, "acid" = 60) - var/current_charges = 3 - hoodtype = /obj/item/clothing/head/hooded/cult_hoodie/cult_shield - -/obj/item/clothing/head/hooded/cult_hoodie/cult_shield - name = "empowered cultist helmet" - desc = "Empowered helmet which creates a powerful shield around the user." - icon_state = "cult_hoodalt" - armor = list("melee" = 50, "bullet" = 40, "laser" = 50,"energy" = 50, "bomb" = 50, "bio" = 30, "rad" = 30, "fire" = 50, "acid" = 60) - -/obj/item/clothing/suit/hooded/cultrobes/cult_shield/equipped(mob/living/user, slot) - ..() - if(!iscultist(user)) - to_chat(user, "\"I wouldn't advise that.\"") - to_chat(user, "An overwhelming sense of nausea overpowers you!") - user.dropItemToGround(src, TRUE) - user.Dizzy(30) - user.Paralyze(100) - -/obj/item/clothing/suit/hooded/cultrobes/cult_shield/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(current_charges) - owner.visible_message("\The [attack_text] is deflected in a burst of blood-red sparks!") - current_charges-- - new /obj/effect/temp_visual/cult/sparks(get_turf(owner)) - if(!current_charges) - owner.visible_message("The runed shield around [owner] suddenly disappears!") - owner.update_inv_wear_suit() - return 1 - return 0 - -/obj/item/clothing/suit/hooded/cultrobes/cult_shield/worn_overlays(isinhands) - . = list() - if(!isinhands && current_charges) - . += mutable_appearance('icons/effects/cult_effects.dmi', "shield-cult", MOB_LAYER + 0.01) - -/obj/item/clothing/suit/hooded/cultrobes/berserker - name = "flagellant's robes" - desc = "Blood-soaked robes infused with dark magic; allows the user to move at inhuman speeds, but at the cost of increased damage." - allowed = list(/obj/item/tome, /obj/item/melee/cultblade) - armor = list("melee" = -45, "bullet" = -45, "laser" = -45,"energy" = -55, "bomb" = -45, "bio" = -45, "rad" = -45, "fire" = 0, "acid" = 0) - slowdown = -0.6 - hoodtype = /obj/item/clothing/head/hooded/cult_hoodie/berserkerhood - -/obj/item/clothing/head/hooded/cult_hoodie/berserkerhood - name = "flagellant's hood" - desc = "Blood-soaked hood infused with dark magic." - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - -/obj/item/clothing/suit/hooded/cultrobes/berserker/equipped(mob/living/user, slot) - ..() - if(!iscultist(user)) - to_chat(user, "\"I wouldn't advise that.\"") - to_chat(user, "An overwhelming sense of nausea overpowers you!") - user.dropItemToGround(src, TRUE) - user.Dizzy(30) - user.Paralyze(100) - -/obj/item/clothing/glasses/hud/health/night/cultblind - desc = "may Nar'Sie guide you through the darkness and shield you from the light." - name = "zealot's blindfold" - icon_state = "blindfold" - item_state = "blindfold" - flash_protect = FLASH_PROTECTION_FLASH - -/obj/item/clothing/glasses/hud/health/night/cultblind/equipped(mob/living/user, slot) - ..() - if(prob(30)) - to_chat(user, "\"You want to be blind, do you?\"") - user.dropItemToGround(src, TRUE) - user.Dizzy(30) - user.Paralyze(100) - user.blind_eyes(30) - else - return - -/obj/item/reagent_containers/glass/beaker/unholywater - name = "flask of unholy water" - desc = "Toxic to nonbelievers; reinvigorating to the faithful - this flask may be sipped or thrown." - icon = 'icons/obj/drinks/drinks.dmi' - icon_state = "holyflask" - color = "#333333" - list_reagents = list(/datum/reagent/fuel/unholywater = 50) - can_have_cap = FALSE - cap_icon_state = null - cap_on = FALSE - -/obj/item/cult_shift - name = "veil shifter" - desc = "This relic instantly teleports you, and anything you're pulling, forward by a moderate distance." - icon = 'icons/obj/cult.dmi' - icon_state ="shifter" - var/uses = 4 - -/obj/item/cult_shift/examine(mob/user) - . = ..() - if(uses) - . += "It has [uses] use\s remaining." - else - . += "It seems drained." - -/obj/item/cult_shift/proc/handle_teleport_grab(turf/T, mob/user) - var/mob/living/carbon/C = user - if(C.pulling) - var/atom/movable/pulled = C.pulling - do_teleport(pulled, T, channel = TELEPORT_CHANNEL_CULT) - . = pulled - -/obj/item/cult_shift/attack_self(mob/user) - if(!uses || !iscarbon(user)) - to_chat(user, "\The [src] is dull and unmoving in your hands.") - return - - var/mob/living/carbon/C = user - var/turf/mobloc = get_turf(C) - var/turf/destination = get_teleport_loc(mobloc,C,9,1,3,1,0,1) - - if(destination) - uses-- - if(uses <= 0) - icon_state ="shifter_drained" - playsound(mobloc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - new /obj/effect/temp_visual/dir_setting/cult/phase/out(mobloc, C.dir) - - var/atom/movable/pulled = handle_teleport_grab(destination, C) - if(do_teleport(C, destination, channel = TELEPORT_CHANNEL_CULT)) - if(pulled) - C.start_pulling(pulled) //forcemove resets pulls, so we need to re-pull - new /obj/effect/temp_visual/dir_setting/cult/phase(destination, C.dir) - playsound(destination, 'sound/effects/phasein.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - playsound(destination, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) - - else - to_chat(C, "The veil cannot be torn here!") - -/obj/item/flashlight/flare/culttorch - name = "void torch" - desc = "Used by veteran cultists to instantly transport items to their needful brethren." - w_class = WEIGHT_CLASS_SMALL - light_range = 1 - icon_state = "torch" - item_state = "torch" - color = "#ff0000" - on_damage = 15 - slot_flags = null - on = TRUE - var/charges = 5 - -/obj/item/flashlight/flare/culttorch/afterattack(atom/movable/A, mob/user, proximity) - if(!proximity) - return - if(!iscultist(user)) - to_chat(user, "That doesn't seem to do anything useful.") - return - - if(istype(A, /obj/item)) - - var/list/cultists = list() - for(var/datum/mind/M in SSticker.mode.cult) - if(M.current && M.current.stat != DEAD) - cultists |= M.current - var/mob/living/cultist_to_receive = input(user, "Who do you wish to call to [src]?", "Followers of the Geometer") as null|anything in (cultists - user) - if(!Adjacent(user) || !src || QDELETED(src) || user.incapacitated()) - return - if(!cultist_to_receive) - to_chat(user, "You require a destination!") - log_game("Void torch failed - no target") - return - if(cultist_to_receive.stat == DEAD) - to_chat(user, "[cultist_to_receive] has died!") - log_game("Void torch failed - target died") - return - if(!iscultist(cultist_to_receive)) - to_chat(user, "[cultist_to_receive] is not a follower of the Geometer!") - log_game("Void torch failed - target was deconverted") - return - if(A in user.GetAllContents()) - to_chat(user, "[A] must be on a surface in order to teleport it!") - return - to_chat(user, "You ignite [A] with \the [src], turning it to ash, but through the torch's flames you see that [A] has reached [cultist_to_receive]!") - cultist_to_receive.put_in_hands(A) - charges-- - to_chat(user, "\The [src] now has [charges] charge\s.") - if(charges == 0) - qdel(src) - - else - ..() - to_chat(user, "\The [src] can only transport items!") - - -/obj/item/cult_spear - name = "blood halberd" - desc = "A sickening spear composed entirely of crystallized blood." - icon_state = "bloodspear0" - base_icon_state = "occultpoleaxe" - lefthand_file = 'icons/mob/inhands/weapons/polearms_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/polearms_righthand.dmi' - slot_flags = 0 - force = 17 - throwforce = 40 - throw_speed = 2 - armour_penetration = 30 - block_chance = 30 - attack_verb = list("attacked", "impaled", "stabbed", "torn", "gored") - sharpness = IS_SHARP - hitsound = 'sound/weapons/bladeslice.ogg' - var/datum/action/innate/cult/spear/spear_act - var/wielded = FALSE // track wielded status on item - -/obj/item/cult_spear/Initialize() - . = ..() - RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(on_wield)) - RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(on_unwield)) - -/obj/item/cult_spear/ComponentInitialize() - . = ..() - AddComponent(/datum/component/butchering, 100, 90) - AddComponent(/datum/component/two_handed, force_unwielded=17, force_wielded=24, icon_wielded="[base_icon_state]1") - -/// triggered on wield of two handed item -/obj/item/cult_spear/proc/on_wield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = TRUE - -/// triggered on unwield of two handed item -/obj/item/cult_spear/proc/on_unwield(obj/item/source, mob/user) - SIGNAL_HANDLER - - wielded = FALSE - -/obj/item/cult_spear/update_icon_state() - icon_state = "[base_icon_state]0" - return ..() - -/obj/item/cult_spear/Destroy() - if(spear_act) - qdel(spear_act) - return ..() - -/obj/item/cult_spear/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - var/turf/T = get_turf(hit_atom) - if(isliving(hit_atom)) - var/mob/living/L = hit_atom - if(iscultist(L)) - playsound(src, 'sound/weapons/throwtap.ogg', 50) - if(L.put_in_active_hand(src)) - L.visible_message("[L] catches [src] out of the air!") - else - L.visible_message("[src] bounces off of [L], as if repelled by an unseen force!") - else if(!..()) - if(!L.anti_magic_check()) - L.Paralyze(50) - break_spear(T) - else - ..() - -/obj/item/cult_spear/proc/break_spear(turf/T) - if(src) - if(!T) - T = get_turf(src) - if(T) - T.visible_message("[src] shatters and melts back into blood!") - new /obj/effect/temp_visual/cult/sparks(T) - new /obj/effect/decal/cleanable/blood/splatter(T) - playsound(T, 'sound/effects/glassbr3.ogg', 100) - qdel(src) - -/obj/item/cult_spear/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(wielded) - final_block_chance *= 2 - if(prob(final_block_chance)) - if(attack_type == PROJECTILE_ATTACK) - owner.visible_message("[owner] deflects [attack_text] with [src]!") - playsound(src, 'sound/weapons/effects/deflect.ogg', 100, TRUE) - return TRUE - else - playsound(src, 'sound/weapons/parry.ogg', 100, TRUE) - owner.visible_message("[owner] parries [attack_text] with [src]!") - return TRUE - return FALSE - -/datum/action/innate/cult/spear - name = "Bloody Bond" - desc = "Call the blood spear back to your hand!" - background_icon_state = "bg_demon" - button_icon_state = "bloodspear" - var/obj/item/cult_spear/spear - var/cooldown = 0 - -/datum/action/innate/cult/spear/Grant(mob/user, obj/blood_spear) - . = ..() - spear = blood_spear - button.screen_loc = "6:157,4:-2" - button.moved = "6:157,4:-2" - -/datum/action/innate/cult/spear/Activate() - if(owner == spear.loc || cooldown > world.time) - return - var/ST = get_turf(spear) - var/OT = get_turf(owner) - if(get_dist(OT, ST) > 10) - to_chat(owner,"The spear is too far away!") - else - cooldown = world.time + 20 - if(isliving(spear.loc)) - var/mob/living/L = spear.loc - L.dropItemToGround(spear) - L.visible_message("An unseen force pulls the blood spear from [L]'s hands!") - spear.throw_at(owner, 10, 2, owner) - -/obj/item/blood_beam - name = "\improper magical aura" - desc = "Sinister looking aura that distorts the flow of reality around it." - icon = 'icons/obj/items_and_weapons.dmi' - lefthand_file = 'icons/mob/inhands/misc/touchspell_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/touchspell_righthand.dmi' - icon_state = "disintegrate" - item_state = "disintegrate" - item_flags = ABSTRACT | DROPDEL - w_class = WEIGHT_CLASS_HUGE - throwforce = 0 - throw_range = 0 - throw_speed = 0 - var/charging = FALSE - var/firing = FALSE - var/angle - -/obj/item/blood_beam/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT) - - -/obj/item/blood_beam/afterattack(atom/A, mob/living/user, flag, params) - . = ..() - if(firing || charging) - return - var/C = user.client - if(ishuman(user) && C) - angle = mouse_angle_from_client(C) - else - qdel(src) - return - charging = TRUE - INVOKE_ASYNC(src, PROC_REF(charge), user) - if(do_after(user, 90, target = user)) - firing = TRUE - INVOKE_ASYNC(src, PROC_REF(pewpew), user, params) - var/obj/structure/emergency_shield/invoker/N = new(user.loc) - if(do_after(user, 90, target = user)) - user.Paralyze(40) - to_chat(user, "You have exhausted the power of this spell!") - firing = FALSE - if(N) - qdel(N) - qdel(src) - charging = FALSE - -/obj/item/blood_beam/proc/charge(mob/user) - var/obj/O - playsound(src, 'sound/magic/lightning_chargeup.ogg', 100, TRUE) - for(var/i in 1 to 12) - if(!charging) - break - if(i > 1) - sleep(15) - if(i < 4) - O = new /obj/effect/temp_visual/cult/rune_spawn/rune1/inner(user.loc, 30, "#ff0000") - else - O = new /obj/effect/temp_visual/cult/rune_spawn/rune5(user.loc, 30, "#ff0000") - new /obj/effect/temp_visual/dir_setting/cult/phase/out(user.loc, user.dir) - if(O) - qdel(O) - -/obj/item/blood_beam/proc/pewpew(mob/user, params) - var/turf/targets_from = get_turf(src) - var/spread = 40 - var/second = FALSE - var/set_angle = angle - for(var/i in 1 to 12) - if(second) - set_angle = angle - spread - spread -= 8 - else - sleep(15) - set_angle = angle + spread - second = !second //Handles beam firing in pairs - if(!firing) - break - playsound(src, 'sound/magic/exit_blood.ogg', 75, TRUE) - new /obj/effect/temp_visual/dir_setting/cult/phase(user.loc, user.dir) - var/turf/temp_target = get_turf_in_angle(set_angle, targets_from, 40) - for(var/turf/T in getline(targets_from,temp_target)) - if (locate(/obj/effect/blessing, T)) - temp_target = T - playsound(T, 'sound/machines/clockcult/ark_damage.ogg', 50, TRUE) - new /obj/effect/temp_visual/at_shield(T, T) - break - T.narsie_act(TRUE, TRUE) - for(var/mob/living/target in T.contents) - if(iscultist(target)) - new /obj/effect/temp_visual/cult/sparks(T) - if(ishuman(target)) - var/mob/living/carbon/human/H = target - if(H.stat != DEAD) - H.reagents.add_reagent(/datum/reagent/fuel/unholywater, 7) - if(isshade(target) || isconstruct(target)) - var/mob/living/simple_animal/M = target - if(M.health+15 < M.maxHealth) - M.adjustHealth(-15) - else - M.health = M.maxHealth - else - var/mob/living/L = target - if(L.density) - L.Paralyze(20) - L.adjustBruteLoss(45) - playsound(L, 'sound/hallucinations/wail.ogg', 50, TRUE) - L.emote("scream") - user.Beam(temp_target, icon_state="blood_beam", time = 7, beam_type = /obj/effect/ebeam/blood) - - -/obj/effect/ebeam/blood - name = "blood beam" - -/obj/item/shield/mirror - name = "mirror shield" - desc = "An infamous shield used by Nar'Sien sects to confuse and disorient their enemies. Its edges are weighted for use as a throwing weapon - capable of disabling multiple foes with preternatural accuracy." - icon_state = "mirror_shield" // eshield1 for expanded - lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' - force = 5 - throwforce = 15 - throw_speed = 1 - throw_range = 4 - w_class = WEIGHT_CLASS_BULKY - attack_verb = list("bumped", "prodded") - hitsound = 'sound/weapons/smash.ogg' - var/illusions = 2 - -/obj/item/shield/mirror/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(iscultist(owner)) - if(istype(hitby, /obj/projectile)) - var/obj/projectile/P = hitby - if(P.damage_type == BRUTE || P.damage_type == BURN) - if(P.damage >= 30) - var/turf/T = get_turf(owner) - T.visible_message("The sheer force from [P] shatters the mirror shield!") - new /obj/effect/temp_visual/cult/sparks(T) - playsound(T, 'sound/effects/glassbr3.ogg', 100) - owner.Paralyze(25) - qdel(src) - return FALSE - if(P.reflectable & REFLECT_NORMAL) - return FALSE //To avoid reflection chance double-dipping with block chance - . = ..() - if(.) - playsound(src, 'sound/weapons/parry.ogg', 100, TRUE) - if(illusions > 0) - illusions-- - addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/item/shield/mirror, readd)), 450) - if(prob(60)) - var/mob/living/simple_animal/hostile/illusion/M = new(owner.loc) - M.faction = list("cult") - M.Copy_Parent(owner, 70, 10, 5) - M.move_to_delay = owner.cached_multiplicative_slowdown - else - var/mob/living/simple_animal/hostile/illusion/escape/E = new(owner.loc) - E.Copy_Parent(owner, 70, 10) - E.GiveTarget(owner) - E.Goto(owner, owner.cached_multiplicative_slowdown, E.minimum_distance) - return TRUE - else - if(prob(50)) - var/mob/living/simple_animal/hostile/illusion/H = new(owner.loc) - H.Copy_Parent(owner, 100, 20, 5) - H.faction = list("cult") - H.GiveTarget(owner) - H.move_to_delay = owner.cached_multiplicative_slowdown - to_chat(owner, "[src] betrays you!") - return FALSE - -/obj/item/shield/mirror/proc/readd() - illusions++ - if(illusions == initial(illusions) && isliving(loc)) - var/mob/living/holder = loc - to_chat(holder, "The shield's illusions are back at full strength!") - -/obj/item/shield/mirror/IsReflect() - if(prob(block_chance)) - return TRUE - return FALSE - -/obj/item/shield/mirror/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) - var/turf/T = get_turf(hit_atom) - var/datum/thrownthing/D = throwingdatum - if(isliving(hit_atom)) - var/mob/living/L = hit_atom - if(iscultist(L)) - playsound(src, 'sound/weapons/throwtap.ogg', 50) - if(L.put_in_active_hand(src)) - L.visible_message("[L] catches [src] out of the air!") - else - L.visible_message("[src] bounces off of [L], as if repelled by an unseen force!") - else if(!..()) - if(!L.anti_magic_check()) - L.Paralyze(30) - if(D?.thrower) - for(var/mob/living/Next in orange(2, T)) - if(!Next.density || iscultist(Next)) - continue - throw_at(Next, 3, 1, D.thrower) - return - throw_at(D.thrower, 7, 1, null) - else - ..() diff --git a/code/modules/antagonists/cult/cult_structures.dm b/code/modules/antagonists/cult/cult_structures.dm deleted file mode 100644 index 60816a90d45d..000000000000 --- a/code/modules/antagonists/cult/cult_structures.dm +++ /dev/null @@ -1,295 +0,0 @@ -/obj/structure/destructible/cult - density = TRUE - anchored = TRUE - icon = 'icons/obj/cult.dmi' - light_power = 2 - var/cooldowntime = 0 - break_sound = 'sound/hallucinations/veryfar_noise.ogg' - debris = list(/obj/item/stack/sheet/mineral/hidden/hellstone = 1) - -/obj/structure/destructible/cult/proc/conceal() //for spells that hide cult presence - density = FALSE - visible_message("[src] fades away.") - invisibility = INVISIBILITY_OBSERVER - alpha = 100 //To help ghosts distinguish hidden runes - light_range = 0 - light_power = 0 - update_light() - STOP_PROCESSING(SSfastprocess, src) - -/obj/structure/destructible/cult/proc/reveal() //for spells that reveal cult presence - density = initial(density) - invisibility = 0 - visible_message("[src] suddenly appears!") - alpha = initial(alpha) - light_range = initial(light_range) - light_power = initial(light_power) - update_light() - START_PROCESSING(SSfastprocess, src) - - -/obj/structure/destructible/cult/examine(mob/user) - . = ..() - . += "\The [src] is [anchored ? "":"not "]secured to the floor." - if((iscultist(user) || isobserver(user)) && cooldowntime > world.time) - . += "The magic in [src] is too weak, [p_they()] will be ready to use again in [DisplayTimeText(cooldowntime - world.time)]." - -/obj/structure/destructible/cult/examine_status(mob/user) - if(iscultist(user) || isobserver(user)) - var/t_It = p_they(TRUE) - var/t_is = p_are() - return "[t_It] [t_is] at [round(obj_integrity * 100 / max_integrity)]% stability." - return ..() - -/obj/structure/destructible/cult/attack_animal(mob/living/simple_animal/M) - if(istype(M, /mob/living/simple_animal/hostile/construct/artificer)) - if(obj_integrity < max_integrity) - M.changeNext_move(CLICK_CD_MELEE) - obj_integrity = min(max_integrity, obj_integrity + 5) - Beam(M, icon_state="sendbeam", time=4) - M.visible_message("[M] repairs \the [src].", \ - "You repair [src], leaving [p_they()] at [round(obj_integrity * 100 / max_integrity)]% stability.") - else - to_chat(M, "You cannot repair [src], as [p_theyre()] undamaged!") - else - ..() - -/obj/structure/destructible/cult/set_anchored(anchorvalue) - . = ..() - if(isnull(.)) - return - update_appearance() - -/obj/structure/destructible/cult/update_icon_state() - icon_state = "[initial(icon_state)][anchored ? null : "_off"]" - return ..() - -/obj/structure/destructible/cult/attackby(obj/I, mob/user, params) - if(istype(I, /obj/item/melee/cultblade/dagger) && iscultist(user)) - set_anchored(!anchored) - to_chat(user, "You [anchored ? "":"un"]secure \the [src] [anchored ? "to":"from"] the floor.") - else - return ..() - -/obj/structure/destructible/cult/proc/check_menu(mob/user) - if(!istype(user)) - return FALSE - if(user.incapacitated() || !user.Adjacent(src)) - return FALSE - return TRUE - -/obj/structure/destructible/cult/talisman - name = "altar" - desc = "A bloodstained altar dedicated to Nar'Sie." - icon_state = "talismanaltar" - break_message = "The altar shatters, leaving only the wailing of the damned!" - -/obj/structure/destructible/cult/talisman/attack_hand(mob/living/user) - . = ..() - if(.) - return - if(!iscultist(user)) - to_chat(user, "You're pretty sure you know exactly what this is used for and you can't seem to touch it.") - return - if(!anchored) - to_chat(user, "You need to anchor [src] to the floor with your dagger first.") - return - if(cooldowntime > world.time) - to_chat(user, "The magic in [src] is weak, it will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].") - return - var/list/items = list( - "Eldritch Whetstone" = image(icon = 'icons/obj/kitchen.dmi', icon_state = "cult_sharpener"), - "Construct Shell" = image(icon = 'icons/obj/wizard.dmi', icon_state = "construct_cult"), - "Flask of Unholy Water" = image(icon = 'icons/obj/drinks/drinks.dmi', icon_state = "holyflask") - ) - var/choice = show_radial_menu(user, src, items, custom_check = CALLBACK(src, PROC_REF(check_menu), user), require_near = TRUE, tooltips = TRUE) - var/list/pickedtype = list() - switch(choice) - if("Eldritch Whetstone") - pickedtype += /obj/item/sharpener/cult - if("Construct Shell") - pickedtype += /obj/structure/constructshell - if("Flask of Unholy Water") - pickedtype += /obj/item/reagent_containers/glass/beaker/unholywater - else - return - if(src && !QDELETED(src) && anchored && pickedtype && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time) - cooldowntime = world.time + 2400 - for(var/N in pickedtype) - new N(get_turf(src)) - to_chat(user, "You kneel before the altar and your faith is rewarded with the [choice]!") - -/obj/structure/destructible/cult/forge - name = "daemon forge" - desc = "A forge used in crafting the unholy weapons used by the armies of Nar'Sie." - icon_state = "forge" - light_range = 2 - light_color = LIGHT_COLOR_LAVA - break_message = "The force breaks apart into shards with a howling scream!" - -/obj/structure/destructible/cult/forge/attack_hand(mob/living/user) - . = ..() - if(.) - return - if(!iscultist(user)) - to_chat(user, "The heat radiating from [src] pushes you back.") - return - if(!anchored) - to_chat(user, "You need to anchor [src] to the floor with your dagger first.") - return - if(cooldowntime > world.time) - to_chat(user, "The magic in [src] is weak, it will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].") - return - var/list/items = list( - "Shielded Robe" = image(icon = 'icons/obj/clothing/suits.dmi', icon_state = "cult_armor"), - "Flagellant's Robe" = image(icon = 'icons/obj/clothing/suits.dmi', icon_state = "cultrobes"), - "Mirror Shield" = image(icon = 'icons/obj/shields.dmi', icon_state = "mirror_shield") - ) - var/choice = show_radial_menu(user, src, items, custom_check = CALLBACK(src, PROC_REF(check_menu), user), require_near = TRUE, tooltips = TRUE) - var/list/pickedtype = list() - switch(choice) - if("Shielded Robe") - pickedtype += /obj/item/clothing/suit/hooded/cultrobes/cult_shield - if("Flagellant's Robe") - pickedtype += /obj/item/clothing/suit/hooded/cultrobes/berserker - if("Mirror Shield") - pickedtype += /obj/item/shield/mirror - else - return - if(src && !QDELETED(src) && anchored && pickedtype && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time) - cooldowntime = world.time + 2400 - for(var/N in pickedtype) - new N(get_turf(src)) - to_chat(user, "You work the forge as dark knowledge guides your hands, creating the [choice]!") - - - -/obj/structure/destructible/cult/pylon - name = "pylon" - desc = "A floating crystal that slowly heals those faithful to Nar'Sie." - icon_state = "pylon" - light_range = 1.5 - light_color = COLOR_SOFT_RED - break_sound = 'sound/effects/glassbr2.ogg' - break_message = "The blood-red crystal falls to the floor and shatters!" - var/heal_delay = 25 - var/last_heal = 0 - var/corrupt_delay = 50 - var/last_corrupt = 0 - -/obj/structure/destructible/cult/pylon/New() - START_PROCESSING(SSfastprocess, src) - ..() - -/obj/structure/destructible/cult/pylon/Destroy() - STOP_PROCESSING(SSfastprocess, src) - return ..() - -/obj/structure/destructible/cult/pylon/process() - if(!anchored) - return - if(last_heal <= world.time) - last_heal = world.time + heal_delay - for(var/mob/living/L in range(5, src)) - if(iscultist(L) || isshade(L) || isconstruct(L)) - if(L.health != L.maxHealth) - new /obj/effect/temp_visual/heal(get_turf(src), "#960000") - if(ishuman(L)) - L.adjustBruteLoss(-1, 0) - L.adjustFireLoss(-1, 0) - L.updatehealth() - if(isshade(L) || isconstruct(L)) - var/mob/living/simple_animal/M = L - if(M.health < M.maxHealth) - M.adjustHealth(-3) - if(ishuman(L) && L.blood_volume < BLOOD_VOLUME_NORMAL) - L.blood_volume += 1.0 - CHECK_TICK - if(last_corrupt <= world.time) - var/list/validturfs = list() - var/list/cultturfs = list() - for(var/T in circleviewturfs(src, 5)) - if(istype(T, /turf/open/floor/engine/cult)) - cultturfs |= T - continue - var/static/list/blacklisted_pylon_turfs = typecacheof(list( - /turf/closed, - /turf/open/floor/engine/cult, - /turf/open/space, - /turf/open/lava, - /turf/open/chasm)) - if(is_type_in_typecache(T, blacklisted_pylon_turfs)) - continue - else - validturfs |= T - - last_corrupt = world.time + corrupt_delay - - if(length(validturfs)) - var/turf/T = pick(validturfs) - if(istype(T, /turf/open/floor/plating)) - T.PlaceOnTop(/turf/open/floor/engine/cult, flags = CHANGETURF_INHERIT_AIR) - else - T.ChangeTurf(/turf/open/floor/engine/cult, flags = CHANGETURF_INHERIT_AIR) - else if (length(cultturfs)) - var/turf/open/floor/engine/cult/F = pick(cultturfs) - new /obj/effect/temp_visual/cult/turf/floor(F) - else - // Are we in space or something? No cult turfs or - // convertable turfs? - last_corrupt = world.time + corrupt_delay*2 - -/obj/structure/destructible/cult/tome - name = "archives" - desc = "A desk covered in arcane manuscripts and tomes in unknown languages. Looking at the text makes your skin crawl." - icon_state = "tomealtar" - light_range = 1.5 - light_color = LIGHT_COLOR_FIRE - break_message = "The books and tomes of the archives burn into ash as the desk shatters!" - -/obj/structure/destructible/cult/tome/attack_hand(mob/living/user) - . = ..() - if(.) - return - if(!iscultist(user)) - to_chat(user, "These books won't open and it hurts to even try and read the covers.") - return - if(!anchored) - to_chat(user, "You need to anchor [src] to the floor with your dagger first.") - return - if(cooldowntime > world.time) - to_chat(user, "The magic in [src] is weak, it will be ready to use again in [DisplayTimeText(cooldowntime - world.time)].") - return - var/list/items = list( - "Zealot's Blindfold" = image(icon = 'icons/obj/clothing/glasses.dmi', icon_state = "blindfold"), - "Veil Walker Set" = image(icon = 'icons/obj/cult.dmi', icon_state = "shifter") - ) - var/choice = show_radial_menu(user, src, items, custom_check = CALLBACK(src, PROC_REF(check_menu), user), require_near = TRUE, tooltips = TRUE) - var/list/pickedtype = list() - switch(choice) - if("Zealot's Blindfold") - pickedtype += /obj/item/clothing/glasses/hud/health/night/cultblind - if("Veil Walker Set") - pickedtype += /obj/item/cult_shift - pickedtype += /obj/item/flashlight/flare/culttorch - else - return - if(src && !QDELETED(src) && anchored && pickedtype.len && Adjacent(user) && !user.incapacitated() && iscultist(user) && cooldowntime <= world.time) - cooldowntime = world.time + 2400 - for(var/N in pickedtype) - new N(get_turf(src)) - to_chat(user, "You summon the [choice] from the archives!") - -/obj/effect/gateway - name = "gateway" - desc = "You're pretty sure that abyss is staring back." - icon = 'icons/obj/cult.dmi' - icon_state = "hole" - density = TRUE - anchored = TRUE - -/obj/effect/gateway/singularity_act() - return - -/obj/effect/gateway/singularity_pull() - return diff --git a/code/modules/antagonists/cult/cult_turf_overlay.dm b/code/modules/antagonists/cult/cult_turf_overlay.dm deleted file mode 100644 index 2e950326bf8a..000000000000 --- a/code/modules/antagonists/cult/cult_turf_overlay.dm +++ /dev/null @@ -1,32 +0,0 @@ -//an "overlay" used by clockwork walls and floors to appear normal to mesons. -/obj/effect/cult_turf/overlay - mouse_opacity = MOUSE_OPACITY_TRANSPARENT - var/atom/linked - -/obj/effect/cult_turf/overlay/examine(mob/user) - if(linked) - linked.examine(user) - -/obj/effect/cult_turf/overlay/ex_act() - return FALSE - -/obj/effect/cult_turf/overlay/singularity_act() - return -/obj/effect/cult_turf/overlay/singularity_pull() - return - -/obj/effect/cult_turf/overlay/singularity_pull(S, current_size) - return - -/obj/effect/cult_turf/overlay/Destroy() - if(linked) - linked = null - . = ..() - -/obj/effect/cult_turf/overlay/floor - icon = 'icons/turf/floors.dmi' - icon_state = "clockwork_floor" - layer = TURF_LAYER - -/obj/effect/cult_turf/overlay/floor/bloodcult - icon_state = "cult" diff --git a/code/modules/antagonists/cult/ritual.dm b/code/modules/antagonists/cult/ritual.dm deleted file mode 100644 index 1ea84bd83a1f..000000000000 --- a/code/modules/antagonists/cult/ritual.dm +++ /dev/null @@ -1,155 +0,0 @@ -/* - -This file contains the cult dagger and rune list code - -*/ - - -/obj/item/melee/cultblade/dagger/Initialize() - . = ..() - if(!LAZYLEN(GLOB.rune_types)) - GLOB.rune_types = list() - var/static/list/non_revealed_runes = (subtypesof(/obj/effect/rune) - /obj/effect/rune/malformed) - for(var/i_can_do_loops_now_thanks_remie in non_revealed_runes) - var/obj/effect/rune/R = i_can_do_loops_now_thanks_remie - GLOB.rune_types[initial(R.cultist_name)] = R //Uses the cultist name for displaying purposes - -/obj/item/melee/cultblade/dagger/examine(mob/user) - . = ..() - if(iscultist(user) || isobserver(user)) - . += {"The scriptures of the Geometer. Allows the scribing of runes and access to the knowledge archives of the cult of Nar'Sie.\n - Striking a cult structure will unanchor or reanchor it.\n - Striking another cultist with it will purge holy water from them.\n - Striking a noncultist, however, will tear their flesh."} - -/obj/item/melee/cultblade/dagger/attack(mob/living/M, mob/living/user) - if(iscultist(M)) - if(M.reagents && M.reagents.has_reagent(/datum/reagent/water/holywater)) //allows cultists to be rescued from the clutches of ordained religion - to_chat(user, "You remove the taint from [M]." ) - var/holy2unholy = M.reagents.get_reagent_amount(/datum/reagent/water/holywater) - M.reagents.del_reagent(/datum/reagent/water/holywater) - M.reagents.add_reagent(/datum/reagent/fuel/unholywater,holy2unholy) - log_combat(user, M, "smacked", src, " removing the holy water from them") - return FALSE - . = ..() - -/obj/item/melee/cultblade/dagger/attack_self(mob/user) - if(!iscultist(user)) - to_chat(user, "[src] is covered in unintelligible shapes and markings.") - return - scribe_rune(user) - -/obj/item/melee/cultblade/dagger/proc/scribe_rune(mob/living/user) - if(drawing_rune) - return - drawing_rune = TRUE - scribe_rune_attempt(user) - drawing_rune = FALSE - -/obj/item/melee/cultblade/dagger/proc/scribe_rune_attempt(mob/living/user) - var/turf/Turf = get_turf(user) - var/chosen_keyword - var/obj/effect/rune/rune_to_scribe - var/entered_rune_name - var/list/shields = list() - var/area/A = get_area(src) - var/datum/antagonist/cult/user_antag = user.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - if(!user_antag) - return - if(!check_rune_turf(Turf, user)) - return - entered_rune_name = input(user, "Choose a rite to scribe.", "Sigils of Power") as null|anything in GLOB.rune_types - if(!src || QDELETED(src) || !Adjacent(user) || user.incapacitated() || !check_rune_turf(Turf, user)) - return - rune_to_scribe = GLOB.rune_types[entered_rune_name] - if(!rune_to_scribe) - return - if(initial(rune_to_scribe.req_keyword)) - chosen_keyword = stripped_input(user, "Enter a keyword for the new rune.", "Words of Power") - if(!chosen_keyword) - drawing_rune = FALSE - scribe_rune(user) //Go back a menu! - return - Turf = get_turf(user) //we may have moved. adjust as needed... - A = get_area(src) - if(!src || QDELETED(src) || !Adjacent(user) || user.incapacitated() || !check_rune_turf(Turf, user)) - return - if(ispath(rune_to_scribe, /obj/effect/rune/summon) && initial(A.name) == "Space") - to_chat(user, "The veil is not weak enough here to summon a cultist!") - return - if(ispath(rune_to_scribe, /obj/effect/rune/apocalypse)) - if((world.time - SSticker.round_start_time) <= 6000) - var/wait = 6000 - (world.time - SSticker.round_start_time) - to_chat(user, "The veil is not yet weak enough for this rune - it will be available in [DisplayTimeText(wait)].") - return - var/datum/objective/eldergod/summon_objective = locate() in user_antag.cult_team.objectives - if(!(A in summon_objective.summon_spots)) - to_chat(user, "The Apocalypse rune will remove a ritual site (where Nar'Sie can be summoned), it can only be scribed in [english_list(summon_objective.summon_spots)]!") - return - if(summon_objective.summon_spots.len < 2) - to_chat(user, "Only one ritual site remains - it must be reserved for the final summoning!") - return - if(ispath(rune_to_scribe, /obj/effect/rune/narsie)) - var/datum/objective/eldergod/summon_objective = locate() in user_antag.cult_team.objectives - var/datum/objective/sacrifice/sac_objective = locate() in user_antag.cult_team.objectives - if(!summon_objective) - to_chat(user, "Nar'Sie does not wish to be summoned!") - return - if(sac_objective && !sac_objective.check_completion()) - to_chat(user, "The sacrifice is not complete. The portal would lack the power to open if you tried!") - return - if(summon_objective.check_completion()) - to_chat(user, "\"I am already here. There is no need to try to summon me now.\"") - return - if(!(A in summon_objective.summon_spots)) - to_chat(user, "The Geometer can only be summoned where the veil is weak - in [english_list(summon_objective.summon_spots)]!") - return - var/confirm_final = alert(user, "This is the FINAL step to summon Nar'Sie; it is a long, painful ritual and the crew will be alerted to your presence", "Are you prepared for the final battle?", "My life for Nar'Sie!", "No") - if(confirm_final == "No") - to_chat(user, "You decide to prepare further before scribing the rune.") - return - Turf = get_turf(user) - A = get_area(src) - if(!(A in summon_objective.summon_spots)) // Check again to make sure they didn't move - to_chat(user, "The Geometer can only be summoned where the veil is weak - in [english_list(summon_objective.summon_spots)]!") - return - priority_announce("Figments from an eldritch god are being summoned by [user] into [initial(A.name)] from an unknown dimension. Disrupt the ritual at all costs!","Central Command Higher Dimensional Affairs", 'sound/ai/spanomalies.ogg') - for(var/B in spiral_range_turfs(1, user, 1)) - var/obj/structure/emergency_shield/sanguine/N = new(B) - shields += N - user.visible_message( - "[user] [user.blood_volume ? "cuts open [user.p_their()] arm and begins writing in [user.p_their()] own blood":"begins sketching out a strange design"]!", \ - "You [user.blood_volume ? "slice open your arm and ":""]begin drawing a sigil of the Geometer.") - if(user.blood_volume) - user.apply_damage(initial(rune_to_scribe.scribe_damage), BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) - var/scribe_mod = initial(rune_to_scribe.scribe_delay) - if(istype(get_turf(user), /turf/open/floor/engine/cult) && !(ispath(rune_to_scribe, /obj/effect/rune/narsie))) - scribe_mod *= 0.5 - if(!do_after(user, scribe_mod, target = get_turf(user))) - for(var/V in shields) - var/obj/structure/emergency_shield/sanguine/S = V - if(S && !QDELETED(S)) - qdel(S) - return - if(!check_rune_turf(Turf, user)) - return - user.visible_message( - "[user] creates a strange circle[user.blood_volume ? " in [user.p_their()] own blood":""].", \ - "You finish drawing the arcane markings of the Geometer.") - for(var/V in shields) - var/obj/structure/emergency_shield/S = V - if(S && !QDELETED(S)) - qdel(S) - var/obj/effect/rune/R = new rune_to_scribe(Turf, chosen_keyword) - R.add_mob_blood(user) - to_chat(user, "The [lowertext(R.cultist_name)] rune [R.cultist_desc]") - SSblackbox.record_feedback("tally", "cult_runes_scribed", 1, R.cultist_name) - -/obj/item/melee/cultblade/dagger/proc/check_rune_turf(turf/T, mob/user) - if(isspaceturf(T)) - to_chat(user, "You cannot scribe runes in space!") - return FALSE - if(locate(/obj/effect/rune) in T) - to_chat(user, "There is already a rune here.") - return FALSE - return TRUE diff --git a/code/modules/antagonists/cult/rune_spawn_action.dm b/code/modules/antagonists/cult/rune_spawn_action.dm deleted file mode 100644 index 2829141405dd..000000000000 --- a/code/modules/antagonists/cult/rune_spawn_action.dm +++ /dev/null @@ -1,115 +0,0 @@ -//after a delay, creates a rune below you. for constructs creating runes. -/datum/action/innate/cult/create_rune - name = "Summon Rune" - desc = "Summons a rune" - background_icon_state = "bg_demon" - var/obj/effect/rune/rune_type - var/cooldown = 0 - var/base_cooldown = 1800 - var/scribe_time = 60 - var/damage_interrupt = TRUE - var/action_interrupt = TRUE - var/obj/effect/temp_visual/cult/rune_spawn/rune_word_type - var/obj/effect/temp_visual/cult/rune_spawn/rune_innerring_type - var/obj/effect/temp_visual/cult/rune_spawn/rune_center_type - var/rune_color - -/datum/action/innate/cult/create_rune/IsAvailable() - if(!rune_type || cooldown > world.time) - return FALSE - return ..() - -/datum/action/innate/cult/create_rune/proc/turf_check(turf/T) - if(!T) - return FALSE - if(isspaceturf(T)) - to_chat(owner, "You cannot scribe runes in space!") - return FALSE - if(locate(/obj/effect/rune) in T) - to_chat(owner, "There is already a rune here.") - return FALSE - return TRUE - - -/datum/action/innate/cult/create_rune/Activate() - var/turf/T = get_turf(owner) - if(turf_check(T)) - var/chosen_keyword - if(initial(rune_type.req_keyword)) - chosen_keyword = stripped_input(owner, "Enter a keyword for the new rune.", "Words of Power") - if(!chosen_keyword) - return - //the outer ring is always the same across all runes - var/obj/effect/temp_visual/cult/rune_spawn/R1 = new(T, scribe_time, rune_color) - //the rest are not always the same, so we need types for em - var/obj/effect/temp_visual/cult/rune_spawn/R2 - if(rune_word_type) - R2 = new rune_word_type(T, scribe_time, rune_color) - var/obj/effect/temp_visual/cult/rune_spawn/R3 - if(rune_innerring_type) - R3 = new rune_innerring_type(T, scribe_time, rune_color) - var/obj/effect/temp_visual/cult/rune_spawn/R4 - if(rune_center_type) - R4 = new rune_center_type(T, scribe_time, rune_color) - - cooldown = base_cooldown + world.time - owner.update_action_buttons_icon() - addtimer(CALLBACK(owner, TYPE_PROC_REF(/mob, update_action_buttons_icon)), base_cooldown) - var/list/health - if(damage_interrupt && isliving(owner)) - var/mob/living/L = owner - health = list("health" = L.health) - var/scribe_mod = scribe_time - if(istype(T, /turf/open/floor/engine/cult)) - scribe_mod *= 0.5 - playsound(T, 'sound/magic/enter_blood.ogg', 100, FALSE) - if(do_after(owner, scribe_mod, target = owner, extra_checks = CALLBACK(owner, TYPE_PROC_REF(/mob, break_do_after_checks), health, action_interrupt))) - var/obj/effect/rune/new_rune = new rune_type(owner.loc) - new_rune.keyword = chosen_keyword - else - qdel(R1) - if(R2) - qdel(R2) - if(R3) - qdel(R3) - if(R4) - qdel(R4) - cooldown = 0 - owner.update_action_buttons_icon() - -//teleport rune -/datum/action/innate/cult/create_rune/tele - name = "Summon Teleport Rune" - desc = "Summons a teleport rune to your location, as though it has been there all along..." - button_icon_state = "telerune" - rune_type = /obj/effect/rune/teleport - rune_word_type = /obj/effect/temp_visual/cult/rune_spawn/rune2 - rune_innerring_type = /obj/effect/temp_visual/cult/rune_spawn/rune2/inner - rune_center_type = /obj/effect/temp_visual/cult/rune_spawn/rune2/center - rune_color = RUNE_COLOR_TELEPORT - -/datum/action/innate/cult/create_rune/wall - name = "Summon Barrier Rune" - desc = "Summons an active barrier rune to your location, as though it has been there all along..." - button_icon_state = "barrier" - rune_type = /obj/effect/rune/wall - rune_word_type = /obj/effect/temp_visual/cult/rune_spawn/rune4 - rune_innerring_type = /obj/effect/temp_visual/cult/rune_spawn/rune4/inner - rune_center_type = /obj/effect/temp_visual/cult/rune_spawn/rune4/center - rune_color = RUNE_COLOR_DARKRED - -/datum/action/innate/cult/create_rune/wall/Activate() - . = ..() - var/obj/effect/rune/wall/W = locate(/obj/effect/rune/wall) in owner.loc - if(W) - W.spread_density() - -/datum/action/innate/cult/create_rune/revive - name = "Summon Revive Rune" - desc = "Summons a revive rune to your location, as though it has been there all along..." - button_icon_state = "revive" - rune_type = /obj/effect/rune/raise_dead - rune_word_type = /obj/effect/temp_visual/cult/rune_spawn/rune1 - rune_innerring_type = /obj/effect/temp_visual/cult/rune_spawn/rune1/inner - rune_center_type = /obj/effect/temp_visual/cult/rune_spawn/rune1/center - rune_color = RUNE_COLOR_MEDIUMRED diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm deleted file mode 100644 index 5058dc73f081..000000000000 --- a/code/modules/antagonists/cult/runes.dm +++ /dev/null @@ -1,1046 +0,0 @@ -GLOBAL_LIST_EMPTY(sacrificed) //a mixed list of minds and mobs -GLOBAL_LIST(rune_types) //Every rune that can be drawn by ritual daggers -GLOBAL_LIST_EMPTY(teleport_runes) -GLOBAL_LIST_EMPTY(wall_runes) -/* - -This file contains runes. -Runes are used by the cult to cause many different effects and are paramount to their success. -They are drawn with a ritual dagger in blood, and are distinguishable to cultists and normal crew by examining. -Fake runes can be drawn in crayon to fool people. -Runes can either be invoked by one's self or with many different cultists. Each rune has a specific incantation that the cultists will say when invoking it. - - -*/ - -/obj/effect/rune - name = "rune" - var/cultist_name = "basic rune" - desc = "An odd collection of symbols drawn in what seems to be blood." - var/cultist_desc = "a basic rune with no function." //This is shown to cultists who examine the rune in order to determine its true purpose. - anchored = TRUE - icon = 'icons/obj/rune.dmi' - icon_state = "1" - resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF - layer = SIGIL_LAYER - color = RUNE_COLOR_RED - - var/invocation = "Aiy ele-mayo!" //This is said by cultists when the rune is invoked. - var/req_cultists = 1 //The amount of cultists required around the rune to invoke it. If only 1, any cultist can invoke it. - var/req_cultists_text //if we have a description override for required cultists to invoke - var/rune_in_use = FALSE // Used for some runes, this is for when you want a rune to not be usable when in use. - - var/scribe_delay = 40 //how long the rune takes to create - var/scribe_damage = 0.1 //how much damage you take doing it - var/invoke_damage = 0 //how much damage invokers take when invoking it - var/construct_invoke = TRUE //if constructs can invoke it - - var/req_keyword = 0 //If the rune requires a keyword - go figure amirite - var/keyword //The actual keyword for the rune - -/obj/effect/rune/Initialize(mapload, set_keyword) - . = ..() - if(set_keyword) - keyword = set_keyword - var/image/I = image(icon = 'icons/effects/blood.dmi', icon_state = null, loc = src) - I.override = TRUE - add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/silicons, "cult_runes", I) - -/obj/effect/rune/examine(mob/user) - . = ..() - if(iscultist(user) || user.stat == DEAD) //If they're a cultist or a ghost, tell them the effects - . += "Name: [cultist_name]\n"+\ - "Effects: [capitalize(cultist_desc)]\n"+\ - "Required Acolytes: [req_cultists_text ? "[req_cultists_text]":"[req_cultists]"]" - if(req_keyword && keyword) - . += "Keyword: [keyword]" - -/obj/effect/rune/attackby(obj/I, mob/user, params) - if(istype(I, /obj/item/melee/cultblade/dagger) && iscultist(user)) - SEND_SOUND(user,'sound/items/sheath.ogg') - if(do_after(user, 15, target = src)) - to_chat(user, "You carefully erase the [lowertext(cultist_name)] rune.") - qdel(src) - -/obj/effect/rune/attack_hand(mob/living/user) - . = ..() - if(.) - return - if(!iscultist(user)) - to_chat(user, "You aren't able to understand the words of [src].") - return - var/list/invokers = can_invoke(user) - if(invokers.len >= req_cultists) - invoke(invokers) - else - to_chat(user, "You need [req_cultists - invokers.len] more adjacent cultists to use this rune in such a manner.") - fail_invoke() - -/obj/effect/rune/attack_animal(mob/living/simple_animal/M) - if(istype(M, /mob/living/simple_animal/shade) || istype(M, /mob/living/simple_animal/hostile/construct)) - if(istype(M, /mob/living/simple_animal/hostile/construct/wraith/angelic) || istype(M, /mob/living/simple_animal/hostile/construct/juggernaut/angelic) || istype(M, /mob/living/simple_animal/hostile/construct/artificer/angelic)) - to_chat(M, "You purge the rune!") - qdel(src) - else if(construct_invoke || !iscultist(M)) //if you're not a cult construct we want the normal fail message - attack_hand(M) - else - to_chat(M, "You are unable to invoke the rune!") - -/obj/effect/rune/proc/conceal() //for talisman of revealing/hiding - visible_message("[src] fades away.") - invisibility = INVISIBILITY_OBSERVER - alpha = 100 //To help ghosts distinguish hidden runes - -/obj/effect/rune/proc/reveal() //for talisman of revealing/hiding - invisibility = 0 - visible_message("[src] suddenly appears!") - alpha = initial(alpha) - -/* - -There are a few different procs each rune runs through when a cultist activates it. -can_invoke() is called when a cultist activates the rune with an empty hand. If there are multiple cultists, this rune determines if the required amount is nearby. -invoke() is the rune's actual effects. -fail_invoke() is called when the rune fails, via not enough people around or otherwise. Typically this just has a generic 'fizzle' effect. -structure_check() searches for nearby cultist structures required for the invocation. Proper structures are pylons, forges, archives, and altars. - -*/ - -/obj/effect/rune/proc/can_invoke(mob/living/user=null) - //This proc determines if the rune can be invoked at the time. If there are multiple required cultists, it will find all nearby cultists. - var/list/invokers = list() //people eligible to invoke the rune - if(user) - invokers += user - if(req_cultists > 1 || istype(src, /obj/effect/rune/convert)) - var/list/things_in_range = range(1, src) - for(var/mob/living/L in things_in_range) - if(iscultist(L)) - if(L == user) - continue - if(ishuman(L)) - var/mob/living/carbon/human/H = L - if((HAS_TRAIT(H, TRAIT_MUTE)) || H.silent) - continue - if(L.stat) - continue - invokers += L - return invokers - -/obj/effect/rune/proc/invoke(list/invokers) - //This proc contains the effects of the rune as well as things that happen afterwards. If you want it to spawn an object and then delete itself, have both here. - for(var/M in invokers) - if(isliving(M)) - var/mob/living/L = M - if(invocation) - L.say(invocation, language = /datum/language/common, ignore_spam = TRUE, forced = "cult invocation") - if(invoke_damage) - L.apply_damage(invoke_damage, BRUTE) - to_chat(L, "[src] saps your strength!") - else if(istype(M, /obj/item/toy/plush/narplush)) - var/obj/item/toy/plush/narplush/P = M - P.visible_message("[P] squeaks loudly!") - do_invoke_glow() - -/obj/effect/rune/proc/do_invoke_glow() - set waitfor = FALSE - animate(src, transform = matrix()*2, alpha = 0, time = 5, flags = ANIMATION_END_NOW) //fade out - sleep(5) - animate(src, transform = matrix(), alpha = 255, time = 0, flags = ANIMATION_END_NOW) - -/obj/effect/rune/proc/fail_invoke() - //This proc contains the effects of a rune if it is not invoked correctly, through either invalid wording or not enough cultists. By default, it's just a basic fizzle. - visible_message("The markings pulse with a small flash of red light, then fall dark.") - var/oldcolor = color - color = rgb(255, 0, 0) - animate(src, color = oldcolor, time = 5) - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_atom_colour)), 5) - -//Malformed Rune: This forms if a rune is not drawn correctly. Invoking it does nothing but hurt the user. -/obj/effect/rune/malformed - cultist_name = "malformed rune" - cultist_desc = "a senseless rune written in gibberish. No good can come from invoking this." - invocation = "Ra'sha yoka!" - invoke_damage = 30 - -/obj/effect/rune/malformed/Initialize(mapload, set_keyword) - . = ..() - icon_state = "[rand(1,7)]" - color = rgb(rand(0,255), rand(0,255), rand(0,255)) - -/obj/effect/rune/malformed/invoke(list/invokers) - ..() - qdel(src) - -//Rite of Offering: Converts or sacrifices a target. -/obj/effect/rune/convert - cultist_name = "Offer" - cultist_desc = "offers a noncultist above it to Nar'Sie, either converting them or sacrificing them." - req_cultists_text = "2 for conversion, 3 for living sacrifices and sacrifice targets." - invocation = "Mah'weyh pleggh at e'ntrath!" - icon_state = "3" - color = RUNE_COLOR_OFFER - req_cultists = 1 - rune_in_use = FALSE - -/obj/effect/rune/convert/do_invoke_glow() - return - -/obj/effect/rune/convert/invoke(list/invokers) - if(rune_in_use) - return - var/list/myriad_targets = list() - var/turf/T = get_turf(src) - for(var/mob/living/M in T) - if(!iscultist(M)) - myriad_targets |= M - if(!myriad_targets.len) - fail_invoke() - log_game("Offer rune failed - no eligible targets") - return - rune_in_use = TRUE - visible_message("[src] pulses blood red!") - var/oldcolor = color - color = RUNE_COLOR_DARKRED - var/mob/living/L = pick(myriad_targets) - - var/mob/living/F = invokers[1] - var/datum/antagonist/cult/C = F.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - var/datum/team/cult/Cult_team = C.cult_team - var/is_convertable = is_convertable_to_cult(L,C.cult_team) - if(L.stat != DEAD && is_convertable) - invocation = "Mah'weyh pleggh at e'ntrath!" - ..() - if(is_convertable) - do_convert(L, invokers) - else - invocation = "Barhah hra zar'garis!" - ..() - do_sacrifice(L, invokers) - animate(src, color = oldcolor, time = 5) - addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, update_atom_colour)), 5) - Cult_team.check_size() // Triggers the eye glow or aura effects if the cult has grown large enough relative to the crew - rune_in_use = FALSE - -/obj/effect/rune/convert/proc/do_convert(mob/living/convertee, list/invokers) - if(invokers.len < 2) - for(var/M in invokers) - to_chat(M, "You need at least two invokers to convert [convertee]!") - log_game("Offer rune failed - tried conversion with one invoker") - return 0 - if(convertee.anti_magic_check(TRUE, TRUE, FALSE, 0)) //Not chargecost because it can be spammed - for(var/M in invokers) - to_chat(M, "Something is shielding [convertee]'s mind!") - log_game("Offer rune failed - convertee had anti-magic") - return 0 - var/brutedamage = convertee.getBruteLoss() - var/burndamage = convertee.getFireLoss() - if(brutedamage || burndamage) - convertee.adjustBruteLoss(-(brutedamage * 0.75)) - convertee.adjustFireLoss(-(burndamage * 0.75)) - convertee.visible_message( - "[convertee] writhes in pain [brutedamage || burndamage ? "even as [convertee.p_their()] wounds heal and close" : "as the markings below [convertee.p_them()] glow a bloody red"]!", // Hello there buddy! Come here often? I hope you were wondering wtf this string was - "AAAAAAAAAAAAAA-") - SSticker.mode.add_cultist(convertee.mind, 1) - new /obj/item/melee/cultblade/dagger(get_turf(src)) - convertee.mind.special_role = ROLE_CULTIST - to_chat(convertee, "Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible, truth. The veil of reality has been ripped away \ - and something evil takes root.") - to_chat(convertee, "Assist your new compatriots in their dark dealings. Your goal is theirs, and theirs is yours. You serve the Geometer above all else. Bring it back.\ - ") - if(ishuman(convertee)) - var/mob/living/carbon/human/H = convertee - H.uncuff() - H.stuttering = 0 - H.cultslurring = 0 - if(prob(1) || SSevents.holidays && SSevents.holidays[APRIL_FOOLS]) - H.say("You son of a bitch! I'm in.", forced = "That son of a bitch! They're in.") - return 1 - -/obj/effect/rune/convert/proc/do_sacrifice(mob/living/sacrificial, list/invokers) - var/mob/living/first_invoker = invokers[1] - if(!first_invoker) - return FALSE - var/datum/antagonist/cult/C = first_invoker.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - if(!C) - return - - - var/big_sac = FALSE - if((((ishuman(sacrificial) || iscyborg(sacrificial)) && sacrificial.stat != DEAD) || C.cult_team.is_sacrifice_target(sacrificial.mind)) && invokers.len < 3) - for(var/M in invokers) - to_chat(M, "[sacrificial] is too greatly linked to the world! You need three acolytes!") - log_game("Offer rune failed - not enough acolytes and target is living or sac target") - return FALSE - if(sacrificial.mind) - GLOB.sacrificed += sacrificial.mind - for(var/datum/objective/sacrifice/sac_objective in C.cult_team.objectives) - if(sac_objective.target == sacrificial.mind) - sac_objective.sacced = TRUE - sac_objective.update_explanation_text() - big_sac = TRUE - else - GLOB.sacrificed += sacrificial - - new /obj/effect/temp_visual/cult/sac(get_turf(src)) - for(var/M in invokers) - if(big_sac) - to_chat(M, "\"Yes! This is the one I desire! You have done well.\"") - else - if(ishuman(sacrificial) || iscyborg(sacrificial)) - to_chat(M, "\"I accept this sacrifice.\"") - else - to_chat(M, "\"I accept this meager sacrifice.\"") - - var/obj/item/soulstone/stone = new /obj/item/soulstone(get_turf(src)) - if(sacrificial.mind) - stone.invisibility = INVISIBILITY_MAXIMUM //so it's not picked up during transfer_soul() - stone.transfer_soul("FORCE", sacrificial, usr) - stone.invisibility = 0 - - if(sacrificial) - if(iscyborg(sacrificial)) - playsound(sacrificial, 'sound/magic/disable_tech.ogg', 100, TRUE) - sacrificial.dust() //To prevent the MMI from remaining - else - playsound(sacrificial, 'sound/magic/disintegrate.ogg', 100, TRUE) - sacrificial.gib() - return TRUE - - - -/obj/effect/rune/empower - cultist_name = "Empower" - cultist_desc = "allows cultists to prepare greater amounts of blood magic at far less of a cost." - invocation = "H'drak v'loso, mir'kanas verbot!" - icon_state = "3" - color = RUNE_COLOR_TALISMAN - construct_invoke = FALSE - -/obj/effect/rune/empower/invoke(list/invokers) - . = ..() - var/mob/living/user = invokers[1] //the first invoker is always the user - for(var/datum/action/innate/cult/blood_magic/BM in user.actions) - BM.Activate() - -/obj/effect/rune/teleport - cultist_name = "Teleport" - cultist_desc = "warps everything above it to another chosen teleport rune." - invocation = "Sas'so c'arta forbici!" - icon_state = "2" - color = RUNE_COLOR_TELEPORT - req_keyword = TRUE - light_power = 4 - var/obj/effect/temp_visual/cult/portal/inner_portal //The portal "hint" for off-station teleportations - var/obj/effect/temp_visual/cult/rune_spawn/rune2/outer_portal - var/listkey - - -/obj/effect/rune/teleport/Initialize(mapload, set_keyword) - . = ..() - var/area/A = get_area(src) - var/locname = initial(A.name) - listkey = set_keyword ? "[set_keyword] [locname]":"[locname]" - GLOB.teleport_runes += src - -/obj/effect/rune/teleport/Destroy() - GLOB.teleport_runes -= src - return ..() - -/obj/effect/rune/teleport/invoke(list/invokers) - var/mob/living/user = invokers[1] //the first invoker is always the user - var/list/potential_runes = list() - var/list/teleportnames = list() - for(var/R in GLOB.teleport_runes) - var/obj/effect/rune/teleport/T = R - if(T != src && !is_away_level(T)) - potential_runes[avoid_assoc_duplicate_keys(T.listkey, teleportnames)] = T - - if(!potential_runes.len) - to_chat(user, "There are no valid runes to teleport to!") - log_game("Teleport rune failed - no other teleport runes") - fail_invoke() - return - - var/turf/T = get_turf(src) - if(is_away_level(T)) - to_chat(user, "You are not in the right dimension!") - log_game("Teleport rune failed - user in away mission") - fail_invoke() - return - - var/input_rune_key = input(user, "Choose a rune to teleport to.", "Rune to Teleport to") as null|anything in potential_runes //we know what key they picked - var/obj/effect/rune/teleport/actual_selected_rune = potential_runes[input_rune_key] //what rune does that key correspond to? - if(!Adjacent(user) || !src || QDELETED(src) || user.incapacitated() || !actual_selected_rune) - fail_invoke() - return - - var/turf/target = get_turf(actual_selected_rune) - if(target.is_blocked_turf(TRUE)) - to_chat(user, "The target rune is blocked. Attempting to teleport to it would be massively unwise.") - fail_invoke() - return - var/movedsomething = FALSE - var/moveuserlater = FALSE - var/movesuccess = FALSE - for(var/atom/movable/A in T) - if(istype(A, /obj/effect/dummy/phased_mob)) - continue - if(ismob(A)) - if(!isliving(A)) //Let's not teleport ghosts and AI eyes. - continue - if(ishuman(A)) - new /obj/effect/temp_visual/dir_setting/cult/phase/out(T, A.dir) - new /obj/effect/temp_visual/dir_setting/cult/phase(target, A.dir) - if(A == user) - moveuserlater = TRUE - movedsomething = TRUE - continue - if(!A.anchored) - movedsomething = TRUE - if(do_teleport(A, target, channel = TELEPORT_CHANNEL_CULT)) - movesuccess = TRUE - if(movedsomething) - ..() - if(moveuserlater) - if(do_teleport(user, target, channel = TELEPORT_CHANNEL_CULT)) - movesuccess = TRUE - if(movesuccess) - visible_message("There is a sharp crack of inrushing air, and everything above the rune disappears!", null, "You hear a sharp crack.") - to_chat(user, "You[moveuserlater ? "r vision blurs, and you suddenly appear somewhere else":" send everything above the rune away"].") - else - to_chat(user, "You[moveuserlater ? "r vision blurs briefly, but nothing happens":" try send everything above the rune away, but the teleportation fails"].") - var/area/A = get_area(T) - if(initial(A.name) == "Space") - actual_selected_rune.handle_portal("space", T) - if(movesuccess) - target.visible_message("There is a boom of outrushing air as something appears above the rune!", null, "You hear a boom.") - else - fail_invoke() - -/obj/effect/rune/teleport/proc/handle_portal(portal_type, turf/origin) - var/turf/T = get_turf(src) - close_portal() // To avoid stacking descriptions/animations - playsound(T, pick('sound/effects/sparks1.ogg', 'sound/effects/sparks2.ogg', 'sound/effects/sparks3.ogg', 'sound/effects/sparks4.ogg'), 100, TRUE, 14) - inner_portal = new /obj/effect/temp_visual/cult/portal(T) - if(portal_type == "space") - set_light_color(color) - desc += "
    A tear in reality reveals a black void interspersed with dots of light... something recently teleported here from space.
    The void feels like it's trying to pull you to the [dir2text(get_dir(T, origin))]!
    " - else - inner_portal.icon_state = "lava" - set_light_color(LIGHT_COLOR_FIRE) - desc += "
    A tear in reality reveals a coursing river of lava... something recently teleported here from the Lavaland Mines!" - outer_portal = new(T, 600, color) - light_range = 4 - update_light() - addtimer(CALLBACK(src, PROC_REF(close_portal)), 600, TIMER_UNIQUE) - -/obj/effect/rune/teleport/proc/close_portal() - qdel(inner_portal) - qdel(outer_portal) - desc = initial(desc) - light_range = 0 - update_light() - -//Ritual of Dimensional Rending: Calls forth the avatar of Nar'Sie upon the station. -/obj/effect/rune/narsie - cultist_name = "Nar'Sie" - cultist_desc = "tears apart dimensional barriers, calling forth the Geometer. Requires 9 invokers." - invocation = "TOK-LYR RQA-NAP G'OLT-ULOFT!!" - req_cultists = 9 - icon = 'icons/effects/96x96.dmi' - color = RUNE_COLOR_DARKRED - icon_state = "rune_large" - pixel_x = -32 //So the big ol' 96x96 sprite shows up right - pixel_y = -32 - scribe_delay = 500 //how long the rune takes to create - scribe_damage = 40.1 //how much damage you take doing it - var/used = FALSE - -/obj/effect/rune/narsie/Initialize(mapload, set_keyword) - . = ..() - GLOB.poi_list |= src - -/obj/effect/rune/narsie/Destroy() - GLOB.poi_list -= src - . = ..() - -/obj/effect/rune/narsie/conceal() //can't hide this, and you wouldn't want to - return - -/obj/effect/rune/narsie/invoke(list/invokers) - if(used) - return - var/mob/living/user = invokers[1] - var/datum/antagonist/cult/user_antag = user.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - var/datum/objective/eldergod/summon_objective = locate() in user_antag.cult_team.objectives - var/area/place = get_area(src) - if(!(place in summon_objective.summon_spots)) - to_chat(user, "The Geometer can only be summoned where the veil is weak - in [english_list(summon_objective.summon_spots)]!") - return - if(locate(/obj/singularity/narsie) in GLOB.poi_list) - for(var/M in invokers) - to_chat(M, "Nar'Sie is already on this plane!") - log_game("Nar'Sie rune failed - already summoned") - return - //BEGIN THE SUMMONING - used = TRUE - ..() - sound_to_playing_players('sound/effects/dimensional_rend.ogg') - var/turf/T = get_turf(src) - sleep(40) - if(src) - color = RUNE_COLOR_RED - new /obj/singularity/narsie/large/cult(T) //Causes Nar'Sie to spawn even if the rune has been removed - -/obj/effect/rune/narsie/attackby(obj/I, mob/user, params) //Since the narsie rune takes a long time to make, add logging to removal. - if((istype(I, /obj/item/melee/cultblade/dagger) && iscultist(user))) - user.visible_message("[user.name] begins erasing [src]...", "You begin erasing [src]...") - if(do_after(user, 50, target = src)) //Prevents accidental erasures. - log_game("Summon Narsie rune erased by [key_name(user)] with [I.name]") - message_admins("[ADMIN_LOOKUPFLW(user)] erased a Narsie rune with [I.name]") - else - ..() - -//Rite of Resurrection: Requires a dead or inactive cultist. When reviving the dead, you can only perform one revival for every three sacrifices your cult has carried out. -/obj/effect/rune/raise_dead - cultist_name = "Revive" - cultist_desc = "requires a dead, mindless, or inactive cultist placed upon the rune. For each three bodies sacrificed to the dark patron, one body will be mended and their mind awoken" - invocation = "Pasnar val'keriam usinar. Savrae ines amutan. Yam'toth remium il'tarat!" //Depends on the name of the user - see below - icon_state = "1" - color = RUNE_COLOR_MEDIUMRED - var/static/sacrifices_used = -SOULS_TO_REVIVE // Cultists get one "free" revive - -/obj/effect/rune/raise_dead/examine(mob/user) - . = ..() - if(iscultist(user) || user.stat == DEAD) - . += "Sacrifices unrewarded: [LAZYLEN(GLOB.sacrificed) - sacrifices_used]" - -/obj/effect/rune/raise_dead/invoke(list/invokers) - var/turf/T = get_turf(src) - var/mob/living/mob_to_revive - var/list/potential_revive_mobs = list() - var/mob/living/user = invokers[1] - if(rune_in_use) - return - rune_in_use = TRUE - for(var/mob/living/M in T.contents) - if(iscultist(M) && (M.stat == DEAD || !M.client || M.client.is_afk())) - potential_revive_mobs |= M - if(!potential_revive_mobs.len) - to_chat(user, "There are no dead cultists on the rune!") - log_game("Raise Dead rune failed - no cultists to revive") - fail_invoke() - return - if(potential_revive_mobs.len > 1) - mob_to_revive = input(user, "Choose a cultist to revive.", "Cultist to Revive") as null|anything in potential_revive_mobs - else - mob_to_revive = potential_revive_mobs[1] - if(QDELETED(src) || !validness_checks(mob_to_revive, user)) - fail_invoke() - return - if(user.name == "Herbert West") - invocation = "To life, to life, I bring them!" - else - invocation = initial(invocation) - ..() - if(mob_to_revive.stat == DEAD) - var/diff = LAZYLEN(GLOB.sacrificed) - SOULS_TO_REVIVE - sacrifices_used - if(diff < 0) - to_chat(user, "Your cult must carry out [abs(diff)] more sacrifice\s before it can revive another cultist!") - fail_invoke() - return - sacrifices_used += SOULS_TO_REVIVE - mob_to_revive.revive(full_heal = TRUE, admin_revive = TRUE) //This does remove traits and such, but the rune might actually see some use because of it! - mob_to_revive.grab_ghost() - if(!mob_to_revive.client || mob_to_revive.client.is_afk()) - set waitfor = FALSE - var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as a [mob_to_revive.name], an inactive blood cultist?", ROLE_CULTIST, null, ROLE_CULTIST, 50, mob_to_revive) - if(LAZYLEN(candidates)) - var/mob/dead/observer/C = pick(candidates) - to_chat(mob_to_revive.mind, "Your physical form has been taken over by another soul due to your inactivity! Ahelp if you wish to regain your form.") - message_admins("[key_name_admin(C)] has taken control of ([key_name_admin(mob_to_revive)]) to replace an AFK player.") - mob_to_revive.ghostize(0) - mob_to_revive.key = C.key - else - fail_invoke() - return - SEND_SOUND(mob_to_revive, 'sound/ambience/antag/bloodcult.ogg') - to_chat(mob_to_revive, "\"PASNAR SAVRAE YAM'TOTH. Arise.\"") - mob_to_revive.visible_message( - "[mob_to_revive] draws in a huge breath, red light shining from [mob_to_revive.p_their()] eyes.", \ - "You awaken suddenly from the void. You're alive!") - rune_in_use = FALSE - -/obj/effect/rune/raise_dead/proc/validness_checks(mob/living/target_mob, mob/living/user) - var/turf/T = get_turf(src) - if(QDELETED(user)) - return FALSE - if(!Adjacent(user) || user.incapacitated()) - return FALSE - if(QDELETED(target_mob)) - return FALSE - if(!(target_mob in T.contents)) - to_chat(user, "The cultist to revive has been moved!") - log_game("Raise Dead rune failed - revival target moved") - return FALSE - return TRUE - -/obj/effect/rune/raise_dead/fail_invoke() - ..() - rune_in_use = FALSE - for(var/mob/living/M in range(1,src)) - if(iscultist(M) && M.stat == DEAD) - M.visible_message("[M] twitches.") - -//Rite of the Corporeal Shield: When invoked, becomes solid and cannot be passed. Invoke again to undo. -/obj/effect/rune/wall - cultist_name = "Barrier" - cultist_desc = "when invoked, makes a temporary invisible wall to block passage. Can be invoked again to reverse this." - invocation = "Khari'd! Eske'te tannin!" - icon_state = "4" - color = RUNE_COLOR_DARKRED - CanAtmosPass = ATMOS_PASS_DENSITY - var/datum/timedevent/density_timer - var/recharging = FALSE - -/obj/effect/rune/wall/Initialize(mapload, set_keyword) - . = ..() - GLOB.wall_runes += src - -/obj/effect/rune/wall/examine(mob/user) - . = ..() - if(density && iscultist(user)) - if(density_timer) - . += "The air above this rune has hardened into a barrier that will last [DisplayTimeText(density_timer.timeToRun - world.time)]." - -/obj/effect/rune/wall/Destroy() - GLOB.wall_runes -= src - return ..() - -/obj/effect/rune/wall/BlockThermalConductivity() - return density - -/obj/effect/rune/wall/invoke(list/invokers) - if(recharging) - return - var/mob/living/user = invokers[1] - ..() - density = !density - update_state() - if(density) - spread_density() - var/carbon_user = iscarbon(user) - user.visible_message( - "[user] [carbon_user ? "places [user.p_their()] hands on":"stares intently at"] [src], and [density ? "the air above it begins to shimmer" : "the shimmer above it fades"].", \ - "You channel [carbon_user ? "your life ":""]energy into [src], [density ? "temporarily preventing" : "allowing"] passage above it.") - if(carbon_user) - var/mob/living/carbon/C = user - C.apply_damage(2, BRUTE, pick(BODY_ZONE_L_ARM, BODY_ZONE_R_ARM)) - -/obj/effect/rune/wall/proc/spread_density() - for(var/R in GLOB.wall_runes) - var/obj/effect/rune/wall/W = R - if(W.virtual_z() == virtual_z() && get_dist(src, W) <= 2 && !W.density && !W.recharging) - W.density = TRUE - W.update_state() - W.spread_density() - density_timer = addtimer(CALLBACK(src, PROC_REF(lose_density)), 3000, TIMER_STOPPABLE) - -/obj/effect/rune/wall/proc/lose_density() - if(density) - recharging = TRUE - density = FALSE - update_state() - var/oldcolor = color - add_atom_colour("#696969", FIXED_COLOUR_PRIORITY) - animate(src, color = oldcolor, time = 50, easing = EASE_IN) - addtimer(CALLBACK(src, PROC_REF(recharge)), 50) - -/obj/effect/rune/wall/proc/recharge() - recharging = FALSE - add_atom_colour(RUNE_COLOR_MEDIUMRED, FIXED_COLOUR_PRIORITY) - -/obj/effect/rune/wall/proc/update_state() - deltimer(density_timer) - air_update_turf(TRUE) - if(density) - var/mutable_appearance/shimmer = mutable_appearance('icons/effects/effects.dmi', "barriershimmer", ABOVE_MOB_LAYER) - shimmer.appearance_flags |= RESET_COLOR - shimmer.alpha = 60 - shimmer.color = "#701414" - add_overlay(shimmer) - add_atom_colour(RUNE_COLOR_RED, FIXED_COLOUR_PRIORITY) - else - cut_overlays() - add_atom_colour(RUNE_COLOR_MEDIUMRED, FIXED_COLOUR_PRIORITY) - -//Rite of Joined Souls: Summons a single cultist. -/obj/effect/rune/summon - cultist_name = "Summon Cultist" - cultist_desc = "summons a single cultist to the rune. Requires 2 invokers." - invocation = "N'ath reth sh'yro eth d'rekkathnor!" - req_cultists = 2 - invoke_damage = 10 - icon_state = "3" - color = RUNE_COLOR_SUMMON - -/obj/effect/rune/summon/invoke(list/invokers) - var/mob/living/user = invokers[1] - var/list/cultists = list() - for(var/datum/mind/M in SSticker.mode.cult) - if(!(M.current in invokers) && M.current && M.current.stat != DEAD) - cultists |= M.current - var/mob/living/cultist_to_summon = input(user, "Who do you wish to call to [src]?", "Followers of the Geometer") as null|anything in cultists - if(!Adjacent(user) || !src || QDELETED(src) || user.incapacitated()) - return - if(!cultist_to_summon) - to_chat(user, "You require a summoning target!") - fail_invoke() - log_game("Summon Cultist rune failed - no target") - return - if(cultist_to_summon.stat == DEAD) - to_chat(user, "[cultist_to_summon] has died!") - fail_invoke() - log_game("Summon Cultist rune failed - target died") - return - if(cultist_to_summon.pulledby || cultist_to_summon.buckled) - to_chat(user, "[cultist_to_summon] is being held in place!") - fail_invoke() - log_game("Summon Cultist rune failed - target restrained") - return - if(!iscultist(cultist_to_summon)) - to_chat(user, "[cultist_to_summon] is not a follower of the Geometer!") - fail_invoke() - log_game("Summon Cultist rune failed - target was deconverted") - return - if(is_away_level(cultist_to_summon)) - to_chat(user, "[cultist_to_summon] is not in our dimension!") - fail_invoke() - log_game("Summon Cultist rune failed - target in away mission") - return - cultist_to_summon.visible_message( - "[cultist_to_summon] suddenly disappears in a flash of red light!", \ - "Overwhelming vertigo consumes you as you are hurled through the air!") - ..() - visible_message("A foggy shape materializes atop [src] and solidifes into [cultist_to_summon]!") - cultist_to_summon.forceMove(get_turf(src)) - qdel(src) - -//Rite of Boiling Blood: Deals extremely high amounts of damage to non-cultists nearby -/obj/effect/rune/blood_boil - cultist_name = "Boil Blood" - cultist_desc = "boils the blood of non-believers who can see the rune, rapidly dealing extreme amounts of damage. Requires 3 invokers." - invocation = "Dedo ol'btoh!" - icon_state = "4" - color = RUNE_COLOR_BURNTORANGE - light_color = LIGHT_COLOR_LAVA - req_cultists = 3 - invoke_damage = 10 - construct_invoke = FALSE - var/tick_damage = 25 - rune_in_use = FALSE - -/obj/effect/rune/blood_boil/do_invoke_glow() - return - -/obj/effect/rune/blood_boil/invoke(list/invokers) - if(rune_in_use) - return - ..() - rune_in_use = TRUE - var/turf/T = get_turf(src) - visible_message("[src] turns a bright, glowing orange!") - color = "#FC9B54" - set_light(6, 1, color) - for(var/mob/living/L in viewers(T)) - if(!iscultist(L) && L.blood_volume) - var/atom/I = L.anti_magic_check(chargecost = 0) - if(I) - if(isitem(I)) - to_chat(L, "[I] suddenly burns hotly before returning to normal!") - continue - to_chat(L, "Your blood boils in your veins!") - animate(src, color = "#FCB56D", time = 4) - sleep(4) - if(QDELETED(src)) - return - do_area_burn(T, 0.5) - animate(src, color = "#FFDF80", time = 5) - sleep(5) - if(QDELETED(src)) - return - do_area_burn(T, 1) - animate(src, color = "#FFFDF4", time = 6) - sleep(6) - if(QDELETED(src)) - return - do_area_burn(T, 1.5) - new /obj/effect/hotspot(T) - qdel(src) - -/obj/effect/rune/blood_boil/proc/do_area_burn(turf/T, multiplier) - set_light(6, 1, color) - for(var/mob/living/L in viewers(T)) - if(!iscultist(L) && L.blood_volume) - if(L.anti_magic_check(chargecost = 0)) - continue - L.take_overall_damage(tick_damage*multiplier, tick_damage*multiplier) - -//Rite of Spectral Manifestation: Summons a ghost on top of the rune as a cultist human with no items. User must stand on the rune at all times, and takes damage for each summoned ghost. -/obj/effect/rune/manifest - cultist_name = "Spirit Realm" - cultist_desc = "manifests a spirit servant of the Geometer and allows you to ascend as a spirit yourself. The invoker must not move from atop the rune, and will take damage for each summoned spirit." - invocation = "Gal'h'rfikk harfrandid mud'gib!" //how the fuck do you pronounce this - icon_state = "7" - invoke_damage = 10 - construct_invoke = FALSE - color = RUNE_COLOR_DARKRED - var/mob/living/affecting = null - var/ghost_limit = 3 - var/ghosts = 0 - -/obj/effect/rune/manifest/Initialize() - . = ..() - - -/obj/effect/rune/manifest/can_invoke(mob/living/user) - if(!(user in get_turf(src))) - to_chat(user, "You must be standing on [src]!") - fail_invoke() - log_game("Manifest rune failed - user not standing on rune") - return list() - if(user.has_status_effect(STATUS_EFFECT_SUMMONEDGHOST)) - to_chat(user, "Ghosts can't summon more ghosts!") - fail_invoke() - log_game("Manifest rune failed - user is a ghost") - return list() - return ..() - -/obj/effect/rune/manifest/invoke(list/invokers) - . = ..() - var/mob/living/user = invokers[1] - var/turf/T = get_turf(src) - var/choice = alert(user,"You tear open a connection to the spirit realm...",,"Summon a Cult Ghost","Ascend as a Dark Spirit","Cancel") - if(choice == "Summon a Cult Ghost") - if(ghosts >= ghost_limit) - to_chat(user, "You are sustaining too many ghosts to summon more!") - fail_invoke() - log_game("Manifest rune failed - too many summoned ghosts") - return list() - notify_ghosts("Manifest rune invoked in [get_area(src)].", 'sound/effects/ghost2.ogg', source = src, header = "Manifest rune") - var/list/ghosts_on_rune = list() - for(var/mob/dead/observer/O in T) - if(O.client && !is_banned_from(O.ckey, ROLE_CULTIST) && !QDELETED(src) && !(isAdminObserver(O) && (O.client.prefs.toggles & ADMIN_IGNORE_CULT_GHOST)) && !QDELETED(O)) - ghosts_on_rune += O - if(!ghosts_on_rune.len) - to_chat(user, "There are no spirits near [src]!") - fail_invoke() - log_game("Manifest rune failed - no nearby ghosts") - return list() - var/mob/dead/observer/ghost_to_spawn = pick(ghosts_on_rune) - var/mob/living/carbon/human/cult_ghost/new_human = new(T) - new_human.real_name = ghost_to_spawn.real_name - new_human.alpha = 150 //Makes them translucent - new_human.equipOutfit(/datum/outfit/ghost_cultist) //give them armor - new_human.apply_status_effect(STATUS_EFFECT_SUMMONEDGHOST) //ghosts can't summon more ghosts - new_human.see_invisible = SEE_INVISIBLE_OBSERVER - ghosts++ - playsound(src, 'sound/magic/exit_blood.ogg', 50, TRUE) - visible_message("A cloud of red mist forms above [src], and from within steps... a [new_human.gender == FEMALE ? "wo":""]man.") - to_chat(user, "Your blood begins flowing into [src]. You must remain in place and conscious to maintain the forms of those summoned. This will hurt you slowly but surely...") - var/obj/structure/emergency_shield/invoker/N = new(T) - new_human.key = ghost_to_spawn.key - SSticker.mode.add_cultist(new_human.mind, 0) - to_chat(new_human, "You are a servant of the Geometer. You have been made semi-corporeal by the cult of Nar'Sie, and you are to serve them at all costs.") - - while(!QDELETED(src) && !QDELETED(user) && !QDELETED(new_human) && (user in T)) - if(user.stat != CONSCIOUS || HAS_TRAIT(new_human, TRAIT_CRITICAL_CONDITION)) - break - user.apply_damage(0.1, BRUTE) - sleep(1) - - qdel(N) - ghosts-- - if(new_human) - new_human.visible_message( - "[new_human] suddenly dissolves into bones and ashes.", \ - "Your link to the world fades. Your form breaks apart.") - for(var/obj/I in new_human) - new_human.dropItemToGround(I, TRUE) - new_human.dust() - else if(choice == "Ascend as a Dark Spirit") - affecting = user - affecting.add_atom_colour(RUNE_COLOR_DARKRED, ADMIN_COLOUR_PRIORITY) - affecting.visible_message( - "[affecting] freezes statue-still, glowing an unearthly red.", \ - "You see what lies beyond. All is revealed. In this form you find that your voice booms louder and you can mark targets for the entire cult") - var/mob/dead/observer/G = affecting.ghostize(1) - var/datum/action/innate/cult/comm/spirit/CM = new - var/datum/action/innate/cult/ghostmark/GM = new - G.name = "Dark Spirit of [G.name]" - G.color = "red" - CM.Grant(G) - GM.Grant(G) - while(!QDELETED(affecting)) - if(!(affecting in T)) - user.visible_message("A spectral tendril wraps around [affecting] and pulls [affecting.p_them()] back to the rune!") - Beam(affecting, icon_state="drainbeam", time=2) - affecting.forceMove(get_turf(src)) //NO ESCAPE :^) - if(affecting.key) - affecting.visible_message( - "[affecting] slowly relaxes, the glow around [affecting.p_them()] dimming.", \ - "You are re-united with your physical form. [src] releases its hold over you.") - affecting.Paralyze(40) - break - if(affecting.health <= 10) - to_chat(G, "Your body can no longer sustain the connection!") - break - sleep(5) - CM.Remove(G) - GM.Remove(G) - affecting.remove_atom_colour(ADMIN_COLOUR_PRIORITY, RUNE_COLOR_DARKRED) - affecting.grab_ghost() - affecting = null - rune_in_use = FALSE - -/mob/living/carbon/human/cult_ghost/spill_organs(no_brain, no_organs, no_bodyparts) //cult ghosts never drop a brain - no_brain = TRUE - . = ..() - -/mob/living/carbon/human/cult_ghost/getorganszone(zone, subzones = 0) - . = ..() - for(var/obj/item/organ/brain/B in .) //they're not that smart, really - . -= B - - -/obj/effect/rune/apocalypse - cultist_name = "Apocalypse" - cultist_desc = "a harbinger of the end times. Grows in strength with the cult's desperation - but at the risk of... side effects." - invocation = "Ta'gh fara'qha fel d'amar det!" - icon = 'icons/effects/96x96.dmi' - icon_state = "apoc" - pixel_x = -32 - pixel_y = -32 - color = RUNE_COLOR_DARKRED - req_cultists = 3 - scribe_delay = 100 - -/obj/effect/rune/apocalypse/invoke(list/invokers) - if(rune_in_use) - return - . = ..() - var/area/place = get_area(src) - var/mob/living/user = invokers[1] - var/datum/antagonist/cult/user_antag = user.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - var/datum/objective/eldergod/summon_objective = locate() in user_antag.cult_team.objectives - if(summon_objective.summon_spots.len <= 1) - to_chat(user, "Only one ritual site remains - it must be reserved for the final summoning!") - return - if(!(place in summon_objective.summon_spots)) - to_chat(user, "The Apocalypse rune will remove a ritual site, where Nar'Sie can be summoned, it can only be scribed in [english_list(summon_objective.summon_spots)]!") - return - summon_objective.summon_spots -= place - rune_in_use = TRUE - var/turf/T = get_turf(src) - new /obj/effect/temp_visual/dir_setting/curse/grasp_portal/fading(T) - var/intensity = 0 - for(var/mob/living/M in GLOB.player_list) - if(iscultist(M)) - intensity++ - intensity = max(60, 360 - (360*(intensity/GLOB.player_list.len + 0.3)**2)) //significantly lower intensity for "winning" cults - var/duration = intensity*10 - playsound(T, 'sound/magic/enter_blood.ogg', 100, TRUE) - visible_message("A colossal shockwave of energy bursts from the rune, disintegrating it in the process!") - for(var/mob/living/L in range(src, 3)) - L.Paralyze(30) - empulse(T, 0.42*(intensity), 1) - var/list/images = list() - var/zmatch = T.virtual_z() - var/datum/atom_hud/AH = GLOB.huds[DATA_HUD_SECURITY_ADVANCED] - for(var/mob/living/M in GLOB.alive_mob_list) - if(M.virtual_z() != zmatch) - continue - if(ishuman(M)) - if(!iscultist(M)) - AH.remove_hud_from(M) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(hudFix), M), duration) - var/image/A = image('icons/mob/cult.dmi',M,"cultist", ABOVE_MOB_LAYER) - A.override = 1 - add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/noncult, "human_apoc", A, NONE) - addtimer(CALLBACK(M, TYPE_PROC_REF(/atom, remove_alt_appearance),"human_apoc",TRUE), duration) - images += A - SEND_SOUND(M, pick(sound('sound/ambience/antag/bloodcult.ogg'),sound('sound/spookoween/ghost_whisper.ogg'),sound('sound/spookoween/ghosty_wind.ogg'))) - else - var/construct = pick("floater","artificer","behemoth") - var/image/B = image('icons/mob/mob.dmi',M,construct, ABOVE_MOB_LAYER) - B.override = 1 - add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/noncult, "mob_apoc", B, NONE) - addtimer(CALLBACK(M, TYPE_PROC_REF(/atom, remove_alt_appearance),"mob_apoc",TRUE), duration) - images += B - if(!iscultist(M)) - if(M.client) - var/image/C = image('icons/effects/cult_effects.dmi',M,"bloodsparkles", ABOVE_MOB_LAYER) - add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/cult, "cult_apoc", C, NONE) - addtimer(CALLBACK(M, TYPE_PROC_REF(/atom, remove_alt_appearance),"cult_apoc",TRUE), duration) - images += C - else - to_chat(M, "An Apocalypse Rune was invoked in the [place.name], it is no longer available as a summoning site!") - SEND_SOUND(M, 'sound/effects/pope_entry.ogg') - image_handler(images, duration) - if(intensity>=285) // Based on the prior formula, this means the cult makes up <15% of current players - var/outcome = rand(1,80) - switch(outcome) - if(1 to 10) - var/datum/round_event_control/disease_outbreak/D = new() - // var/datum/round_event_control/mice_migration/M = new() - D.runEvent() - // M.runEvent() - if(11 to 20) - var/datum/round_event_control/radiation_storm/RS = new() - RS.runEvent() - if(21 to 30) - var/datum/round_event_control/brand_intelligence/BI = new() - BI.runEvent() - if(31 to 40) - var/datum/round_event_control/immovable_rod/R = new() - R.runEvent() - R.runEvent() - R.runEvent() - if(41 to 50) - var/datum/round_event_control/meteor_wave/MW = new() - MW.runEvent() - if(51 to 60) - var/datum/round_event_control/spider_infestation/SI = new() - SI.runEvent() - if(61 to 80) - var/datum/round_event_control/spacevine/SV = new() - var/datum/round_event_control/grey_tide/GT = new() - SV.runEvent() - GT.runEvent() - qdel(src) - -/obj/effect/rune/apocalypse/proc/image_handler(list/images, duration) - var/end = world.time + duration - set waitfor = 0 - while(end>world.time) - for(var/image/I in images) - I.override = FALSE - animate(I, alpha = 0, time = 25, flags = ANIMATION_PARALLEL) - sleep(35) - for(var/image/I in images) - animate(I, alpha = 255, time = 25, flags = ANIMATION_PARALLEL) - sleep(25) - for(var/image/I in images) - if(I.icon_state != "bloodsparkles") - I.override = TRUE - sleep(190) - - - -/proc/hudFix(mob/living/carbon/human/target) - if(!target || !target.client) - return - var/obj/O = target.get_item_by_slot(ITEM_SLOT_EYES) - if(istype(O, /obj/item/clothing/glasses/hud/security)) - var/datum/atom_hud/AH = GLOB.huds[DATA_HUD_SECURITY_ADVANCED] - AH.add_hud_to(target) diff --git a/code/modules/antagonists/devil/devil.dm b/code/modules/antagonists/devil/devil.dm deleted file mode 100644 index ace534f94dfa..000000000000 --- a/code/modules/antagonists/devil/devil.dm +++ /dev/null @@ -1,548 +0,0 @@ -#define BLOOD_THRESHOLD 3 //How many souls are needed per stage. -#define TRUE_THRESHOLD 7 -#define ARCH_THRESHOLD 12 - -#define BASIC_DEVIL 0 -#define BLOOD_lizard 1 -#define TRUE_DEVIL 2 -#define ARCH_DEVIL 3 - -#define LOSS_PER_DEATH 2 - -#define SOULVALUE soulsOwned.len-reviveNumber - -#define DEVILRESURRECTTIME 600 - -GLOBAL_LIST_EMPTY(allDevils) -GLOBAL_LIST_INIT(lawlorify, list ( - LORE = list( - OBLIGATION_FOOD = "This devil seems to always offer its victims food before slaughtering them.", - OBLIGATION_FIDDLE = "This devil will never turn down a musical challenge.", - OBLIGATION_DANCEOFF = "This devil will never turn down a dance off.", - OBLIGATION_GREET = "This devil seems to only be able to converse with people it knows the name of.", - OBLIGATION_PRESENCEKNOWN = "This devil seems to be unable to attack from stealth.", - OBLIGATION_SAYNAME = "He will always chant his name upon killing someone.", - OBLIGATION_ANNOUNCEKILL = "This devil always loudly announces his kills for the world to hear.", - OBLIGATION_ANSWERTONAME = "This devil always responds to his truename.", - BAN_HURTWOMAN = "This devil seems to prefer hunting men.", - BAN_CHAPEL = "This devil avoids holy ground.", - BAN_HURTPRIEST = "The annointed clergy appear to be immune to his powers.", - BAN_AVOIDWATER = "The devil seems to have some sort of aversion to water, though it does not appear to harm him.", - BAN_STRIKEUNCONSCIOUS = "This devil only shows interest in those who are awake.", - BAN_HURTlizard = "This devil will not strike a lizardman first.", - BAN_HURTANIMAL = "This devil avoids hurting animals.", - BANISH_WATER = "To banish the devil, you must infuse its body with holy water.", - BANISH_COFFIN = "This devil will return to life if its remains are not placed within a coffin.", - BANISH_FORMALDYHIDE = "To banish the devil, you must inject its lifeless body with embalming fluid.", - BANISH_RUNES = "This devil will resurrect after death, unless its remains are within a rune.", - BANISH_CANDLES = "A large number of nearby lit candles will prevent it from resurrecting.", - BANISH_DESTRUCTION = "Its corpse must be utterly destroyed to prevent resurrection.", - BANISH_FUNERAL_GARB = "If clad in funeral garments, this devil will be unable to resurrect. Should the clothes not fit, lay them gently on top of the devil's corpse." - ), - LAW = list( - OBLIGATION_FOOD = "When not acting in self defense, you must always offer your victim food before harming them.", - OBLIGATION_FIDDLE = "When not in immediate danger, if you are challenged to a musical duel, you must accept it. You are not obligated to duel the same person twice.", - OBLIGATION_DANCEOFF = "When not in immediate danger, if you are challenged to a dance off, you must accept it. You are not obligated to face off with the same person twice.", - OBLIGATION_GREET = "You must always greet other people by their last name before talking with them.", - OBLIGATION_PRESENCEKNOWN = "You must always make your presence known before attacking.", - OBLIGATION_SAYNAME = "You must always say your true name after you kill someone.", - OBLIGATION_ANNOUNCEKILL = "Upon killing someone, you must make your deed known to all within earshot, over comms if reasonably possible.", - OBLIGATION_ANSWERTONAME = "If you are not under attack, you must always respond to your true name.", - BAN_HURTWOMAN = "You must never harm a female outside of self defense.", - BAN_CHAPEL = "You must never attempt to enter the chapel.", - BAN_HURTPRIEST = "You must never attack a priest.", - BAN_AVOIDWATER = "You must never willingly touch a wet surface.", - BAN_STRIKEUNCONSCIOUS = "You must never strike an unconscious person.", - BAN_HURTlizard = "You must never harm a lizardman outside of self defense.", - BAN_HURTANIMAL = "You must never harm a non-sentient creature or robot outside of self defense.", - BANISH_WATER = "If your corpse is filled with holy water, you will be unable to resurrect.", - BANISH_COFFIN = "If your corpse is in a coffin, you will be unable to resurrect.", - BANISH_FORMALDYHIDE = "If your corpse is embalmed, you will be unable to resurrect.", - BANISH_RUNES = "If your corpse is placed within a rune, you will be unable to resurrect.", - BANISH_CANDLES = "If your corpse is near lit candles, you will be unable to resurrect.", - BANISH_DESTRUCTION = "If your corpse is destroyed, you will be unable to resurrect.", - BANISH_FUNERAL_GARB = "If your corpse is clad in funeral garments, you will be unable to resurrect." - ) - )) - -//These are also used in the codex gigas, so let's declare them globally. -GLOBAL_LIST_INIT(devil_pre_title, list("Dark ", "Hellish ", "Fallen ", "Fiery ", "Sinful ", "Blood ", "Fluffy ")) -GLOBAL_LIST_INIT(devil_title, list("Lord ", "Prelate ", "Count ", "Viscount ", "Vizier ", "Elder ", "Adept ")) -GLOBAL_LIST_INIT(devil_syllable, list("hal", "ve", "odr", "neit", "ci", "quon", "mya", "folth", "wren", "geyr", "hil", "niet", "twou", "phi", "coa")) -GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", ", the Lord of all things", ", Jr.")) -/datum/antagonist/devil - name = "Devil" - roundend_category = "devils" - antagpanel_category = "Devil" - job_rank = ROLE_DEVIL - antag_hud_type = ANTAG_HUD_DEVIL - antag_hud_name = "devil" - show_to_ghosts = TRUE - var/obligation - var/ban - var/banish - var/truename - var/list/datum/mind/soulsOwned = new - var/reviveNumber = 0 - var/form = BASIC_DEVIL - var/static/list/devil_spells = typecacheof(list( - /obj/effect/proc_holder/spell/aimed/fireball/hellish, - /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork, - /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/greater, - /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/ascended, - /obj/effect/proc_holder/spell/targeted/infernal_jaunt, - /obj/effect/proc_holder/spell/targeted/sintouch, - /obj/effect/proc_holder/spell/targeted/sintouch/ascended, - /obj/effect/proc_holder/spell/targeted/summon_contract, - /obj/effect/proc_holder/spell/targeted/conjure_item/violin, - /obj/effect/proc_holder/spell/targeted/summon_dancefloor)) - var/ascendable = FALSE - -/datum/antagonist/devil/can_be_owned(datum/mind/new_owner) - . = ..() - return . && (ishuman(new_owner.current) || iscyborg(new_owner.current)) - -/datum/antagonist/devil/get_admin_commands() - . = ..() - .["Toggle ascendable"] = CALLBACK(src, PROC_REF(admin_toggle_ascendable)) - - -/datum/antagonist/devil/proc/admin_toggle_ascendable(mob/admin) - ascendable = !ascendable - message_admins("[key_name_admin(admin)] set [key_name_admin(owner)] devil ascendable to [ascendable]") - log_admin("[key_name_admin(admin)] set [key_name(owner)] devil ascendable to [ascendable])") - -/datum/antagonist/devil/admin_add(datum/mind/new_owner,mob/admin) - switch(alert(admin,"Should the devil be able to ascend",,"Yes","No","Cancel")) - if("Yes") - ascendable = TRUE - if("No") - ascendable = FALSE - else - return - new_owner.add_antag_datum(src) - message_admins("[key_name_admin(admin)] has devil'ed [key_name_admin(new_owner)]. [ascendable ? "(Ascendable)":""]") - log_admin("[key_name(admin)] has devil'ed [key_name(new_owner)]. [ascendable ? "(Ascendable)":""]") - -/datum/antagonist/devil/antag_listing_name() - return ..() + "([truename])" - -/proc/devilInfo(name) - if(GLOB.allDevils[lowertext(name)]) - return GLOB.allDevils[lowertext(name)] - else - var/datum/fakeDevil/devil = new /datum/fakeDevil(name) - GLOB.allDevils[lowertext(name)] = devil - return devil - -/proc/randomDevilName() - var/name = "" - if(prob(65)) - if(prob(35)) - name = pick(GLOB.devil_pre_title) - name += pick(GLOB.devil_title) - var/probability = 100 - name += pick(GLOB.devil_syllable) - while(prob(probability)) - name += pick(GLOB.devil_syllable) - probability -= 20 - if(prob(40)) - name += pick(GLOB.devil_suffix) - return name - -/proc/randomdevilobligation() - return pick(OBLIGATION_FOOD, OBLIGATION_FIDDLE, OBLIGATION_DANCEOFF, OBLIGATION_GREET, OBLIGATION_PRESENCEKNOWN, OBLIGATION_SAYNAME, OBLIGATION_ANNOUNCEKILL, OBLIGATION_ANSWERTONAME) - -/proc/randomdevilban() - return pick(BAN_HURTWOMAN, BAN_CHAPEL, BAN_HURTPRIEST, BAN_AVOIDWATER, BAN_STRIKEUNCONSCIOUS, BAN_HURTLIZARD, BAN_HURTANIMAL) - -/proc/randomdevilbanish() - return pick(BANISH_WATER, BANISH_COFFIN, BANISH_FORMALDYHIDE, BANISH_RUNES, BANISH_CANDLES, BANISH_DESTRUCTION, BANISH_FUNERAL_GARB) - -/datum/antagonist/devil/proc/add_soul(datum/mind/soul) - if(soulsOwned.Find(soul)) - return - soulsOwned += soul - owner.current.set_nutrition(NUTRITION_LEVEL_FULL) - to_chat(owner.current, "You feel satiated as you received a new soul.") - update_hud() - switch(SOULVALUE) - if(0) - to_chat(owner.current, "Your hellish powers have been restored.") - give_appropriate_spells() - if(BLOOD_THRESHOLD) - increase_blood_lizard() - if(TRUE_THRESHOLD) - increase_true_devil() - if(ARCH_THRESHOLD) - increase_arch_devil() - -/datum/antagonist/devil/proc/remove_soul(datum/mind/soul) - if(soulsOwned.Remove(soul)) - check_regression() - to_chat(owner.current, "You feel as though a soul has slipped from your grasp.") - update_hud() - -/datum/antagonist/devil/proc/check_regression() - if(form == ARCH_DEVIL) - return //arch devil can't regress - //Yes, fallthrough behavior is intended, so I can't use a switch statement. - if(form == TRUE_DEVIL && SOULVALUE < TRUE_THRESHOLD) - regress_blood_lizard() - if(form == BLOOD_lizard && SOULVALUE < BLOOD_THRESHOLD) - regress_humanoid() - if(SOULVALUE < 0) - give_appropriate_spells() - to_chat(owner.current, "As punishment for your failures, all of your powers except contract creation have been revoked.") - -/datum/antagonist/devil/proc/regress_humanoid() - to_chat(owner.current, "Your powers weaken, have more contracts be signed to regain power.") - if(ishuman(owner.current)) - var/mob/living/carbon/human/H = owner.current - H.set_species(/datum/species/human, 1) - H.regenerate_icons() - give_appropriate_spells() - if(istype(owner.current.loc, /obj/effect/dummy/phased_mob/slaughter/)) - owner.current.forceMove(get_turf(owner.current))//Fixes dying while jaunted leaving you permajaunted. - form = BASIC_DEVIL - -/datum/antagonist/devil/proc/regress_blood_lizard() - var/mob/living/carbon/true_devil/D = owner.current - to_chat(D, "Your powers weaken, have more contracts be signed to regain power.") - D.oldform.forceMove(D.drop_location()) - owner.transfer_to(D.oldform) - give_appropriate_spells() - qdel(D) - form = BLOOD_lizard - update_hud() - - -/datum/antagonist/devil/proc/increase_blood_lizard() - to_chat(owner.current, "You feel as though your humanoid form is about to shed. You will soon turn into a blood lizard.") - sleep(50) - if(ishuman(owner.current)) - var/mob/living/carbon/human/H = owner.current - H.set_species(/datum/species/lizard, 1) - H.underwear = "Nude" - H.undershirt = "Nude" - H.socks = "Nude" - H.dna.features["mcolor"] = "511" //A deep red - H.regenerate_icons() - else //Did the devil get hit by a staff of transmutation? - owner.current.color = "#501010" - give_appropriate_spells() - form = BLOOD_lizard - - - -/datum/antagonist/devil/proc/increase_true_devil() - to_chat(owner.current, "You feel as though your current form is about to shed. You will soon turn into a true devil.") - sleep(50) - var/mob/living/carbon/true_devil/A = new /mob/living/carbon/true_devil(owner.current.loc) - A.faction |= "hell" - owner.current.forceMove(A) - A.oldform = owner.current - owner.transfer_to(A) - A.set_devil_name() - give_appropriate_spells() - form = TRUE_DEVIL - update_hud() - -/datum/antagonist/devil/proc/increase_arch_devil() - if(!ascendable) - return - var/mob/living/carbon/true_devil/D = owner.current - to_chat(D, "You feel as though your form is about to ascend.") - sleep(50) - if(!D) - return - D.visible_message("[D]'s skin begins to erupt with spikes.", \ - "Your flesh begins creating a shield around yourself.") - sleep(100) - if(!D) - return - D.visible_message("The horns on [D]'s head slowly grow and elongate.", \ - "Your body continues to mutate. Your telepathic abilities grow.") - sleep(90) - if(!D) - return - D.visible_message("[D]'s body begins to violently stretch and contort.", \ - "You begin to rend apart the final barriers to ultimate power.") - sleep(40) - if(!D) - return - to_chat(D, "Yes!") - sleep(10) - if(!D) - return - to_chat(D, "YES!!") - sleep(10) - if(!D) - return - to_chat(D, "YE--") - sleep(1) - if(!D) - return - send_to_playing_players("\"SLOTH, WRATH, GLUTTONY, ACEDIA, ENVY, GREED, PRIDE! FIRES OF HELL AWAKEN!!\"") - sound_to_playing_players('sound/hallucinations/veryfar_noise.ogg') - give_appropriate_spells() - D.convert_to_archdevil() - if(istype(D.loc, /obj/effect/dummy/phased_mob/slaughter/)) - D.forceMove(get_turf(D))//Fixes dying while jaunted leaving you permajaunted. - var/area/A = get_area(owner.current) - if(A) - notify_ghosts("An arch devil has ascended in \the [A.name]. Reach out to the devil to be given a new shell for your soul.", source = owner.current, action=NOTIFY_ATTACK) - sleep(50) - form = ARCH_DEVIL - -/datum/antagonist/devil/proc/remove_spells() - for(var/X in owner.spell_list) - var/obj/effect/proc_holder/spell/S = X - if(is_type_in_typecache(S, devil_spells)) - owner.RemoveSpell(S) - -/datum/antagonist/devil/proc/give_summon_contract() - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_contract(null)) - if(obligation == OBLIGATION_FIDDLE) - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/violin(null)) - else if(obligation == OBLIGATION_DANCEOFF) - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_dancefloor(null)) - -/datum/antagonist/devil/proc/give_appropriate_spells() - remove_spells() - give_summon_contract() - if(SOULVALUE >= ARCH_THRESHOLD && ascendable) - give_arch_spells() - else if(SOULVALUE >= TRUE_THRESHOLD) - give_true_spells() - else if(SOULVALUE >= BLOOD_THRESHOLD) - give_blood_spells() - else if(SOULVALUE >= 0) - give_base_spells() - -/datum/antagonist/devil/proc/give_base_spells() - owner.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball/hellish(null)) - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork(null)) - -/datum/antagonist/devil/proc/give_blood_spells() - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork(null)) - owner.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball/hellish(null)) - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/infernal_jaunt(null)) - -/datum/antagonist/devil/proc/give_true_spells() - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/greater(null)) - owner.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball/hellish(null)) - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/infernal_jaunt(null)) - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/sintouch(null)) - -/datum/antagonist/devil/proc/give_arch_spells() - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/ascended(null)) - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/sintouch/ascended(null)) - -/datum/antagonist/devil/proc/beginResurrectionCheck(mob/living/body) - if(SOULVALUE>0) - to_chat(owner.current, "Your body has been damaged to the point that you may no longer use it. At the cost of some of your power, you will return to life soon. Remain in your body.") - sleep(DEVILRESURRECTTIME) - if (!body || body.stat == DEAD) - if(SOULVALUE>0) - if(check_banishment(body)) - to_chat(owner.current, "Unfortunately, the mortals have finished a ritual that prevents your resurrection.") - return -1 - else - to_chat(owner.current, "WE LIVE AGAIN!") - return hellish_resurrection(body) - else - to_chat(owner.current, "Unfortunately, the power that stemmed from your contracts has been extinguished. You no longer have enough power to resurrect.") - return -1 - else - to_chat(owner.current, "You seem to have resurrected without your hellish powers.") - else - to_chat(owner.current, "Your hellish powers are too weak to resurrect yourself.") - -/datum/antagonist/devil/proc/check_banishment(mob/living/body) - switch(banish) - if(BANISH_WATER) - if(iscarbon(body)) - var/mob/living/carbon/H = body - return H.reagents.has_reagent(/datum/reagent/water/holywater) - return 0 - if(BANISH_COFFIN) - return (body && istype(body.loc, /obj/structure/closet/crate/coffin)) - if(BANISH_FORMALDYHIDE) - if(iscarbon(body)) - var/mob/living/carbon/H = body - return H.reagents.has_reagent(/datum/reagent/toxin/formaldehyde) - return 0 - if(BANISH_RUNES) - if(body) - for(var/obj/effect/decal/cleanable/crayon/R in range(0,body)) - if (R.name == "rune") - return 1 - return 0 - if(BANISH_CANDLES) - if(body) - var/count = 0 - for(var/obj/item/candle/C in range(1,body)) - count += C.lit - if(count>=4) - return 1 - return 0 - if(BANISH_DESTRUCTION) - if(body) - return 0 - return 1 - if(BANISH_FUNERAL_GARB) - if(ishuman(body)) - var/mob/living/carbon/human/H = body - if(H.w_uniform && istype(H.w_uniform, /obj/item/clothing/under/suit/white_on_white)) - return 1 - return 0 - else - for(var/obj/item/clothing/under/suit/white_on_white/B in range(0,body)) - if(B.loc == get_turf(B)) //Make sure it's not in someone's inventory or something. - return 1 - return 0 - -/datum/antagonist/devil/proc/hellish_resurrection(mob/living/body) - message_admins("[key_name_admin(owner)] (true name is: [truename]) is resurrecting using hellish energy.") - if(SOULVALUE < ARCH_THRESHOLD || !ascendable) // once ascended, arch devils do not go down in power by any means. - reviveNumber += LOSS_PER_DEATH - update_hud() - if(body) - body.revive(full_heal = TRUE, admin_revive = TRUE) //Adminrevive also recovers organs, preventing someone from resurrecting without a heart. - if(istype(body.loc, /obj/effect/dummy/phased_mob/slaughter/)) - body.forceMove(get_turf(body))//Fixes dying while jaunted leaving you permajaunted. - if(istype(body, /mob/living/carbon/true_devil)) - var/mob/living/carbon/true_devil/D = body - if(D.oldform) - D.oldform.revive(full_heal = TRUE, admin_revive = FALSE) // Heal the old body too, so the devil doesn't resurrect, then immediately regress into a dead body. - if(body.stat == DEAD) - create_new_body() - else - create_new_body() - check_regression() - -/datum/antagonist/devil/proc/create_new_body() - if(GLOB.blobstart.len > 0) - var/turf/targetturf = get_turf(pick(GLOB.blobstart)) - var/mob/currentMob = owner.current - if(!currentMob) - currentMob = owner.get_ghost() - if(!currentMob) - message_admins("[key_name_admin(owner)]'s devil resurrection failed due to client logoff. Aborting.") - return -1 - if(currentMob.mind != owner) - message_admins("[key_name_admin(owner)]'s devil resurrection failed due to becoming a new mob. Aborting.") - return -1 - currentMob.change_mob_type(/mob/living/carbon/human, targetturf, null, 1) - var/mob/living/carbon/human/H = owner.current - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/civilian/lawyer/black(H), ITEM_SLOT_ICLOTHING) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), ITEM_SLOT_FEET) - H.equip_to_slot_or_del(new /obj/item/storage/briefcase(H), ITEM_SLOT_HANDS) - H.equip_to_slot_or_del(new /obj/item/pen(H), ITEM_SLOT_LPOCKET) - if(SOULVALUE >= BLOOD_THRESHOLD) - H.set_species(/datum/species/lizard, 1) - H.underwear = "Nude" - H.undershirt = "Nude" - H.socks = "Nude" - H.dna.features["mcolor"] = "511" - H.regenerate_icons() - if(SOULVALUE >= TRUE_THRESHOLD) //Yes, BOTH this and the above if statement are to run if soulpower is high enough. - var/mob/living/carbon/true_devil/A = new /mob/living/carbon/true_devil(targetturf) - A.faction |= "hell" - H.forceMove(A) - A.oldform = H - owner.transfer_to(A, TRUE) - A.set_devil_name() - if(SOULVALUE >= ARCH_THRESHOLD && ascendable) - A.convert_to_archdevil() - else - CRASH("Unable to find a blobstart landmark for hellish resurrection") - - -/datum/antagonist/devil/proc/update_hud() - if(iscarbon(owner.current)) - var/mob/living/C = owner.current - if(C.hud_used && C.hud_used.devilsouldisplay) - C.hud_used.devilsouldisplay.update_counter(SOULVALUE) - -/datum/antagonist/devil/greet() - to_chat(owner.current, "You remember your link to the infernal. You are [truename], an agent of hell, a devil. And you were sent to the plane of creation for a reason. A greater purpose. Convince the crew to sin, and embroiden Hell's grasp.") - to_chat(owner.current, "However, your infernal form is not without weaknesses.") - to_chat(owner.current, "You may not use violence to coerce someone into selling their soul.") - to_chat(owner.current, "You may not directly and knowingly physically harm a devil, other than yourself.") - to_chat(owner.current, GLOB.lawlorify[LAW][ban]) - to_chat(owner.current, GLOB.lawlorify[LAW][obligation]) - to_chat(owner.current, GLOB.lawlorify[LAW][banish]) - to_chat(owner.current, "Remember, the crew can research your weaknesses if they find out your devil name.
    ") - .=..() - -/datum/antagonist/devil/on_gain() - truename = randomDevilName() - ban = randomdevilban() - obligation = randomdevilobligation() - banish = randomdevilbanish() - GLOB.allDevils[lowertext(truename)] = src - - antag_memory += "Your devilic true name is [truename]
    [GLOB.lawlorify[LAW][ban]]
    You may not use violence to coerce someone into selling their soul.
    You may not directly and knowingly physically harm a devil, other than yourself.
    [GLOB.lawlorify[LAW][obligation]]
    [GLOB.lawlorify[LAW][banish]]
    " - if(issilicon(owner.current)) - var/mob/living/silicon/robot_devil = owner.current - var/laws = list("You may not use violence to coerce someone into selling their soul.", "You may not directly and knowingly physically harm a devil, other than yourself.", GLOB.lawlorify[LAW][ban], GLOB.lawlorify[LAW][obligation], "Accomplish your objectives at all costs.") - robot_devil.set_law_sixsixsix(laws) - sleep(10) - .=..() - -/datum/antagonist/devil/on_removal() - to_chat(owner.current, "Your infernal link has been severed! You are no longer a devil!") - .=..() - -/datum/antagonist/devil/apply_innate_effects(mob/living/mob_override) - give_appropriate_spells() - var/mob/living/M = mob_override || owner.current - add_antag_hud(antag_hud_type, antag_hud_name, M) - handle_clown_mutation(M, mob_override ? null : "Your infernal nature has allowed you to overcome your clownishness.") - owner.current.grant_all_languages(TRUE, TRUE, TRUE, LANGUAGE_DEVIL) - update_hud() - .=..() - -/datum/antagonist/devil/remove_innate_effects(mob/living/mob_override) - for(var/X in owner.spell_list) - var/obj/effect/proc_holder/spell/S = X - if(is_type_in_typecache(S, devil_spells)) - owner.RemoveSpell(S) - var/mob/living/M = mob_override || owner.current - remove_antag_hud(antag_hud_type, M) - handle_clown_mutation(M, removing = FALSE) - owner.current.remove_all_languages(LANGUAGE_DEVIL) - .=..() - -/datum/antagonist/devil/proc/printdevilinfo() - var/list/parts = list() - parts += "The devil's true name is: [truename]" - parts += "The devil's bans were:" - parts += "[FOURSPACES][GLOB.lawlorify[LORE][ban]]" - parts += "[FOURSPACES][GLOB.lawlorify[LORE][obligation]]" - parts += "[FOURSPACES][GLOB.lawlorify[LORE][banish]]" - return parts.Join("
    ") - -/datum/antagonist/devil/roundend_report() - var/list/parts = list() - parts += printplayer(owner) - parts += printdevilinfo() - parts += printobjectives(objectives) - return parts.Join("
    ") - -//A simple super light weight datum for the codex gigas. -/datum/fakeDevil - var/truename - var/obligation - var/ban - var/banish - var/ascendable - -/datum/fakeDevil/New(name = randomDevilName()) - truename = name - obligation = randomdevilobligation() - ban = randomdevilban() - banish = randomdevilbanish() - ascendable = prob(25) diff --git a/code/modules/antagonists/devil/imp/imp.dm b/code/modules/antagonists/devil/imp/imp.dm deleted file mode 100644 index 21446d2661d8..000000000000 --- a/code/modules/antagonists/devil/imp/imp.dm +++ /dev/null @@ -1,68 +0,0 @@ -//////////////////The Monster - -/mob/living/simple_animal/imp - name = "imp" - real_name = "imp" - unique_name = TRUE - desc = "A large, menacing creature covered in armored black scales." - speak_emote = list("cackles") - emote_hear = list("cackles","screeches") - response_help_continuous = "thinks better of touching" - response_help_simple = "think better of touching" - response_disarm_continuous = "flails at" - response_disarm_simple = "flail at" - response_harm_continuous = "punches" - response_harm_simple = "punch" - icon = 'icons/mob/mob.dmi' - icon_state = "imp" - icon_living = "imp" - mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - speed = 1 - a_intent = INTENT_HARM - stop_automated_movement = 1 - status_flags = CANPUSH - attack_sound = 'sound/magic/demon_attack1.ogg' - 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) - minbodytemp = 250 //Weak to cold - maxbodytemp = INFINITY - faction = list("hell") - attack_verb_continuous = "wildly tears into" - attack_verb_simple = "wildly tear into" - maxHealth = 200 - health = 200 - healable = 0 - environment_smash = ENVIRONMENT_SMASH_STRUCTURES - obj_damage = 40 - melee_damage_lower = 10 - melee_damage_upper = 15 - see_in_dark = 8 - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - del_on_death = TRUE - deathmessage = "screams in agony as it sublimates into a sulfurous smoke." - deathsound = 'sound/magic/demon_dies.ogg' - var/boost = 0 - var/list/consumed_mobs = list() - var/playstyle_string = "You are an imp, a mischievous creature from hell. You are the lowest rank on the hellish totem pole \ - Though you are not obligated to help, perhaps by aiding a higher ranking devil, you might just get a promotion. However, you are incapable \ - of intentionally harming a fellow devil." - -/mob/living/simple_animal/imp/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_BLOODCRAWL_EAT, "innate") - set_varspeed(1) - addtimer(CALLBACK(src, TYPE_PROC_REF(/mob/living, set_varspeed), 0), 30) - -/datum/antagonist/imp - name = "Imp" - antagpanel_category = "Devil" - show_in_roundend = FALSE - -/datum/antagonist/imp/on_gain() - . = ..() - give_objectives() - -/datum/antagonist/imp/proc/give_objectives() - var/datum/objective/newobjective = new - newobjective.explanation_text = "Try to get a promotion to a higher devilic rank." - newobjective.owner = owner - objectives += newobjective diff --git a/code/modules/antagonists/devil/sintouched/objectives.dm b/code/modules/antagonists/devil/sintouched/objectives.dm deleted file mode 100644 index fcbb8dcbb55d..000000000000 --- a/code/modules/antagonists/devil/sintouched/objectives.dm +++ /dev/null @@ -1,23 +0,0 @@ -/datum/objective/sintouched - completed = 1 - -/datum/objective/sintouched/gluttony - explanation_text = "Everything is so delicious. Go eat everything." - -/datum/objective/sintouched/greed - explanation_text = "You want MORE, more money, more wealth, more riches. Go get it, but don't hurt people for it." - -/datum/objective/sintouched/sloth - explanation_text = "You just get tired randomly. Go take a nap at a time that would inconvenience other people." - -/datum/objective/sintouched/wrath - explanation_text = "What have your coworkers ever done for you? Don't offer to help them in any matter, and refuse if asked." - -/datum/objective/sintouched/envy - explanation_text = "Why should you be stuck with your rank? Show everyone you can do other jobs too, and don't let anyone stop you, least of all because you have no training" - -/datum/objective/sintouched/pride - explanation_text = "You are the BEST thing on the station. Make sure everyone knows it." - -/datum/objective/sintouched/acedia - explanation_text = "Angels, devils, good, evil... who cares? Just ignore any hellish threats and do your job." diff --git a/code/modules/antagonists/devil/sintouched/sintouched.dm b/code/modules/antagonists/devil/sintouched/sintouched.dm deleted file mode 100644 index 064e1fbaecd0..000000000000 --- a/code/modules/antagonists/devil/sintouched/sintouched.dm +++ /dev/null @@ -1,76 +0,0 @@ -#define SIN_ACEDIA "acedia" -#define SIN_GLUTTONY "gluttony" -#define SIN_GREED "greed" -#define SIN_SLOTH "sloth" -#define SIN_WRATH "wrath" -#define SIN_ENVY "envy" -#define SIN_PRIDE "pride" - -/datum/antagonist/sintouched - name = "sintouched" - roundend_category = "sintouched" - antagpanel_category = "Devil" - antag_hud_type = ANTAG_HUD_SINTOUCHED - antag_hud_name = "sintouched" - var/sin - - var/static/list/sins = list(SIN_ACEDIA,SIN_GLUTTONY,SIN_GREED,SIN_SLOTH,SIN_WRATH,SIN_ENVY,SIN_PRIDE) - -/datum/antagonist/sintouched/New() - . = ..() - sin = pick(sins) - -/datum/antagonist/sintouched/proc/forge_objectives() - var/datum/objective/sintouched/O - switch(sin)//traditional seven deadly sins... except lust. - if(SIN_ACEDIA) - O = new /datum/objective/sintouched/acedia - if(SIN_GLUTTONY) - O = new /datum/objective/sintouched/gluttony - if(SIN_GREED) - O = new /datum/objective/sintouched/greed - if(SIN_SLOTH) - O = new /datum/objective/sintouched/sloth - if(SIN_WRATH) - O = new /datum/objective/sintouched/wrath - if(SIN_ENVY) - O = new /datum/objective/sintouched/envy - if(SIN_PRIDE) - O = new /datum/objective/sintouched/pride - objectives += O - -/datum/antagonist/sintouched/on_gain() - forge_objectives() - . = ..() - -/datum/antagonist/sintouched/greet() - owner.announce_objectives() - -/datum/antagonist/sintouched/roundend_report() - return printplayer(owner) - -/datum/antagonist/sintouched/admin_add(datum/mind/new_owner,mob/admin) - var/choices = sins + "Random" - var/chosen_sin = input(admin,"What kind ?","Sin kind") as null|anything in sortList(choices) - if(!chosen_sin) - return - if(chosen_sin in sins) - sin = chosen_sin - . = ..() - -/datum/antagonist/sintouched/apply_innate_effects(mob/living/mob_override) - var/mob/living/M = mob_override || owner.current - add_antag_hud(antag_hud_type, antag_hud_name, M) - -/datum/antagonist/sintouched/remove_innate_effects(mob/living/mob_override) - var/mob/living/M = mob_override || owner.current - remove_antag_hud(antag_hud_type, M) - - -#undef SIN_ACEDIA -#undef SIN_ENVY -#undef SIN_GLUTTONY -#undef SIN_GREED -#undef SIN_PRIDE -#undef SIN_SLOTH -#undef SIN_WRATH diff --git a/code/modules/antagonists/devil/true_devil/_true_devil.dm b/code/modules/antagonists/devil/true_devil/_true_devil.dm deleted file mode 100644 index 4703f95263f7..000000000000 --- a/code/modules/antagonists/devil/true_devil/_true_devil.dm +++ /dev/null @@ -1,221 +0,0 @@ -#define DEVIL_HANDS_LAYER 1 -#define DEVIL_HEAD_LAYER 2 -#define DEVIL_TOTAL_LAYERS 2 - - -/mob/living/carbon/true_devil - name = "True Devil" - desc = "A pile of infernal energy, taking a vaguely humanoid form." - icon = 'icons/mob/32x64.dmi' - icon_state = "true_devil" - gender = NEUTER - health = 350 - maxHealth = 350 - ventcrawler = VENTCRAWLER_NONE - density = TRUE - pass_flags = 0 - sight = (SEE_TURFS | SEE_OBJS) - status_flags = CANPUSH - mob_size = MOB_SIZE_LARGE - held_items = list(null, null) - bodyparts = list( - /obj/item/bodypart/chest/devil, - /obj/item/bodypart/head/devil, - /obj/item/bodypart/l_arm/devil, - /obj/item/bodypart/r_arm/devil, - /obj/item/bodypart/leg/right/devil, - /obj/item/bodypart/leg/left/devil, - ) - hud_type = /datum/hud/devil - var/ascended = FALSE - var/mob/living/oldform - var/list/devil_overlays[DEVIL_TOTAL_LAYERS] - -/mob/living/carbon/true_devil/Initialize() - create_bodyparts() //initialize bodyparts - create_internal_organs() - grant_all_languages() - . = ..() - ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT) - -/mob/living/carbon/true_devil/create_internal_organs() - internal_organs += new /obj/item/organ/brain - internal_organs += new /obj/item/organ/tongue - internal_organs += new /obj/item/organ/eyes - internal_organs += new /obj/item/organ/ears/invincible //Prevents hearing loss from poorly aimed fireballs. - ..() - -/mob/living/carbon/true_devil/proc/convert_to_archdevil() - maxHealth = 500 // not an IMPOSSIBLE amount, but still near impossible. - ascended = TRUE - health = maxHealth - icon_state = "arch_devil" - -/mob/living/carbon/true_devil/proc/set_devil_name() - var/datum/antagonist/devil/devilinfo = mind.has_antag_datum(/datum/antagonist/devil) - name = devilinfo.truename - real_name = name - -/mob/living/carbon/true_devil/Login() - . = ..() - if(!. || !client) - return FALSE - var/datum/antagonist/devil/devilinfo = mind.has_antag_datum(/datum/antagonist/devil) - devilinfo.greet() - mind.announce_objectives() - -/mob/living/carbon/true_devil/death(gibbed) - set_stat(DEAD) - ..(gibbed) - drop_all_held_items() - INVOKE_ASYNC(mind.has_antag_datum(/datum/antagonist/devil), TYPE_PROC_REF(/datum/antagonist/devil, beginResurrectionCheck), src) - - -/mob/living/carbon/true_devil/examine(mob/user) - . = list("This is [icon2html(src, user)] [src]!") - - //Left hand items - for(var/obj/item/I in held_items) - if(!(I.item_flags & ABSTRACT)) - . += "It is holding [I.get_examine_string(user)] in its [get_held_index_name(get_held_index_of_item(I))]." - - //Braindead - if(!client && stat != DEAD) - . += "The devil seems to be in deep contemplation." - - //Damaged - if(stat == DEAD) - . += "The hellfire seems to have been extinguished, for now at least." - else if(health < (maxHealth/10)) - . += "You can see hellfire inside its gaping wounds." - else if(health < (maxHealth/2)) - . += "You can see hellfire inside its wounds." - . += "" - -/mob/living/carbon/true_devil/IsAdvancedToolUser() - return 1 - -/mob/living/carbon/true_devil/resist_buckle() - if(buckled) - buckled.user_unbuckle_mob(src,src) - visible_message("[src] easily breaks out of [p_their()] handcuffs!", \ - "With just a thought your handcuffs fall off.") - -/mob/living/carbon/true_devil/canUseTopic(atom/movable/M, be_close=FALSE, no_dexterity=FALSE, no_tk=FALSE) - if(incapacitated()) - to_chat(src, "You can't do that right now!") - return FALSE - if(be_close && !in_range(M, src)) - to_chat(src, "You are too far away!") - return FALSE - return TRUE - -/mob/living/carbon/true_devil/assess_threat(judgement_criteria, lasercolor = "", datum/callback/weaponcheck=null) - return 666 - -/mob/living/carbon/true_devil/soundbang_act() - return 0 - -/mob/living/carbon/true_devil/get_ear_protection() - return 2 - - -/mob/living/carbon/true_devil/attacked_by(obj/item/I, mob/living/user, def_zone) - apply_damage(I.force, I.damtype, def_zone) - var/message_verb = "" - if(I.attack_verb && I.attack_verb.len) - message_verb = "[pick(I.attack_verb)]" - else if(I.force) - message_verb = "attacked" - - var/attack_message = "[src] has been [message_verb] with [I]." - if(user) - user.do_attack_animation(src) - if(user in viewers(src, null)) - attack_message = "[user] has [message_verb] [src] with [I]!" - if(message_verb) - visible_message("[attack_message]", - "[attack_message]", null, COMBAT_MESSAGE_RANGE) - return TRUE - -/mob/living/carbon/true_devil/singularity_act() - if(ascended) - return 0 - return ..() - -//ATTACK GHOST IGNORING PARENT RETURN VALUE -/mob/living/carbon/true_devil/attack_ghost(mob/dead/observer/user as mob) - if(ascended || user.mind.soulOwner == src.mind) - var/mob/living/simple_animal/imp/S = new(get_turf(loc)) - S.key = user.key - var/datum/antagonist/imp/A = new() - S.mind.add_antag_datum(A) - to_chat(S, S.playstyle_string) - else - return ..() - -/mob/living/carbon/true_devil/can_be_revived() - return 1 - -/mob/living/carbon/true_devil/resist_fire() - //They're immune to fire. - -/mob/living/carbon/true_devil/attack_hand(mob/living/carbon/human/M) - . = ..() - if(.) - switch(M.a_intent) - if ("harm") - var/damage = rand(1, 5) - playsound(loc, "punch", 25, TRUE, -1) - visible_message("[M] punches [src]!", \ - "[M] punches you!") - adjustBruteLoss(damage) - log_combat(M, src, "attacked") - updatehealth() - if ("disarm") - if (!(mobility_flags & MOBILITY_STAND) && !ascended) //No stealing the arch devil's pitchfork. - if (prob(5)) - Unconscious(40) - playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) - log_combat(M, src, "pushed") - visible_message("[M] pushes [src] down!", \ - "[M] pushes you down!") - else - if (prob(25)) - dropItemToGround(get_active_held_item()) - playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) - visible_message("[M] disarms [src]!", \ - "[M] disarms you!") - else - playsound(loc, 'sound/weapons/punchmiss.ogg', 25, TRUE, -1) - visible_message("[M] fails to disarm [src]!", \ - "[M] fails to disarm you!") - -/mob/living/carbon/true_devil/handle_breathing() - // devils do not need to breathe - -/mob/living/carbon/true_devil/is_literate() - return TRUE - -/mob/living/carbon/true_devil/ex_act(severity, ex_target) - if(!ascended) - var/b_loss - switch (severity) - if (EXPLODE_DEVASTATE) - b_loss = 500 - if (EXPLODE_HEAVY) - b_loss = 150 - if (EXPLODE_LIGHT) - b_loss = 30 - adjustBruteLoss(b_loss) - return ..() - - -/mob/living/carbon/true_devil/update_body() //we don't use the bodyparts layer for devils. - return - -/mob/living/carbon/true_devil/update_body_parts() - return - -/mob/living/carbon/true_devil/update_damage_overlays() //devils don't have damage overlays. - return diff --git a/code/modules/antagonists/devil/true_devil/inventory.dm b/code/modules/antagonists/devil/true_devil/inventory.dm deleted file mode 100644 index a3d0dbdf582b..000000000000 --- a/code/modules/antagonists/devil/true_devil/inventory.dm +++ /dev/null @@ -1,48 +0,0 @@ -/mob/living/carbon/true_devil/doUnEquip(obj/item/I, force, newloc, no_move, invdrop = TRUE, silent = FALSE) - if(..()) - update_inv_hands() - return 1 - return 0 - -/mob/living/carbon/true_devil/update_inv_hands() - //TODO LORDPIDEY: Figure out how to make the hands line up properly. the l/r_hand_overlay should use the down sprite when facing down, left, or right, and the up sprite when facing up. - remove_overlay(DEVIL_HANDS_LAYER) - var/list/hands_overlays = list() - var/obj/item/l_hand = get_item_for_held_index(1) //hardcoded 2-hands only, for now. - var/obj/item/r_hand = get_item_for_held_index(2) - - if(r_hand) - var/mutable_appearance/r_hand_overlay = r_hand.build_worn_icon(default_layer = DEVIL_HANDS_LAYER, default_icon_file = r_hand.righthand_file, isinhands = TRUE) - - hands_overlays += r_hand_overlay - - if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD) - r_hand.layer = ABOVE_HUD_LAYER - r_hand.plane = ABOVE_HUD_PLANE - r_hand.screen_loc = ui_hand_position(get_held_index_of_item(r_hand)) - client.screen |= r_hand - - if(l_hand) - var/mutable_appearance/l_hand_overlay = l_hand.build_worn_icon(default_layer = DEVIL_HANDS_LAYER, default_icon_file = l_hand.lefthand_file, isinhands = TRUE) - - hands_overlays += l_hand_overlay - - if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD) - l_hand.layer = ABOVE_HUD_LAYER - l_hand.plane = ABOVE_HUD_PLANE - l_hand.screen_loc = ui_hand_position(get_held_index_of_item(l_hand)) - client.screen |= l_hand - if(hands_overlays.len) - devil_overlays[DEVIL_HANDS_LAYER] = hands_overlays - apply_overlay(DEVIL_HANDS_LAYER) - -/mob/living/carbon/true_devil/remove_overlay(cache_index) - var/I = devil_overlays[cache_index] - if(I) - cut_overlay(I) - devil_overlays[cache_index] = null - - -/mob/living/carbon/true_devil/apply_overlay(cache_index) - if((. = devil_overlays[cache_index])) - add_overlay(.) diff --git a/code/modules/antagonists/disease/disease_datum.dm b/code/modules/antagonists/disease/disease_datum.dm index cb0cc12be0b4..d96e39733efd 100644 --- a/code/modules/antagonists/disease/disease_datum.dm +++ b/code/modules/antagonists/disease/disease_datum.dm @@ -86,13 +86,3 @@ /datum/objective/disease_infect_centcom explanation_text = "Ensure that at least one infected host escapes on the shuttle or an escape pod." - -/datum/objective/disease_infect_centcom/check_completion() - var/mob/camera/disease/D = owner.current - if(!istype(D)) - return FALSE - for(var/V in D.hosts) - var/mob/living/L = V - if(L.onCentCom() || L.onSyndieBase()) - return TRUE - return FALSE diff --git a/code/modules/antagonists/gang/gang.dm b/code/modules/antagonists/gang/gang.dm index 8f73b93f8fd4..a1b493b87b75 100644 --- a/code/modules/antagonists/gang/gang.dm +++ b/code/modules/antagonists/gang/gang.dm @@ -112,7 +112,6 @@ /obj/item/clothing/under/color/darkgreen, /obj/item/clothing/neck/scarf/green, /obj/item/clothing/head/beanie/green, - /obj/item/clothing/suit/poncho/green, /obj/item/clothing/mask/bandana/green) free_clothes = list(/obj/item/clothing/mask/bandana/green, /obj/item/clothing/under/color/darkgreen, @@ -286,27 +285,18 @@ gang_id = "YAK" acceptable_clothes = list(/obj/item/clothing/head/soft/yellow, /obj/item/clothing/under/costume/yakuza, - /obj/item/clothing/shoes/yakuza, /obj/item/clothing/neck/scarf/yellow, /obj/item/clothing/head/beanie/yellow, /obj/item/clothing/mask/bandana/gold, - /obj/item/clothing/head/hardhat, - /obj/item/clothing/suit/yakuza) + /obj/item/clothing/head/hardhat) free_clothes = list(/obj/item/clothing/under/costume/yakuza, - /obj/item/clothing/shoes/yakuza, - /obj/item/clothing/suit/yakuza, /obj/item/clothing/head/hardhat, /obj/item/toy/crayon/spraycan) gang_objective = "The boss is thrilled about this new construction opportunity we've all been given, yadda yadda, look, he knows we're here to expand our business ventures for the clan, but Majima wanted it made VERY clear that we do NOT fuck this station's infrastructure up. If more than 15% of this station is busted when we get the hell out of here, it's your ass on the line." antag_hud_name = "Tojo" /datum/antagonist/gang/yakuza/check_gang_objective() - var/datum/station_state/current_state = new /datum/station_state() - current_state.count() - var/station_integrity = min(PERCENT(GLOB.start_state.score(current_state)), 100) - if(station_integrity < 85) - return FALSE - return TRUE + CRASH("Sorry this was cruft") /datum/antagonist/gang/jackbros name = "Jack Bros" @@ -315,12 +305,8 @@ gang_id = "JB" acceptable_clothes = list(/obj/item/clothing/head/soft/blue, /obj/item/clothing/under/costume/jackbros, - /obj/item/clothing/shoes/jackbros, - /obj/item/clothing/head/jackbros, /obj/item/clothing/mask/bandana/blue) free_clothes = list(/obj/item/clothing/under/costume/jackbros, - /obj/item/clothing/shoes/jackbros, - /obj/item/clothing/head/jackbros, /obj/item/toy/crayon/spraycan) gang_objective = "Hee-hello friends! We need to expand our influence, ho! Get a King Frost in as the Captain of this joint! Either get the original Captain on board with the program, or Hee-ho a fellow Jack Frost into the position yourselves!" antag_hud_name = "JackFrost" diff --git a/code/modules/antagonists/gang/outfits.dm b/code/modules/antagonists/gang/outfits.dm index ae16ec956470..77c091d2126a 100644 --- a/code/modules/antagonists/gang/outfits.dm +++ b/code/modules/antagonists/gang/outfits.dm @@ -23,7 +23,6 @@ glasses = /obj/item/clothing/glasses/hud/spacecop ears = /obj/item/radio/headset/headset_sec mask = null - head = /obj/item/clothing/head/spacepolice belt = /obj/item/gun/ballistic/automatic/pistol/candor r_pocket = /obj/item/lighter l_pocket = /obj/item/restraints/handcuffs diff --git a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm index 4fcceb227a77..8fbb858da103 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclear_challenge.dm @@ -99,9 +99,6 @@ if(GLOB.player_list.len < CHALLENGE_MIN_PLAYERS) to_chat(user, "The enemy crew is too small to be worth declaring war on.") return FALSE - if(!user.onSyndieBase()) - to_chat(user, "You have to be at your base to use this.") - return FALSE if(world.time-SSticker.round_start_time > CHALLENGE_TIME_LIMIT) to_chat(user, "It's too late to declare hostilities. Your benefactors are already busy with other schemes. You'll have to make do with what you have on hand.") return FALSE diff --git a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm index 648803185661..af4b5bd60892 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm @@ -38,7 +38,7 @@ core = new /obj/item/nuke_core(src) STOP_PROCESSING(SSobj, core) update_appearance() - GLOB.poi_list |= src + SSpoints_of_interest.make_point_of_interest(src) previous_level = get_security_level() /obj/machinery/nuclearbomb/Destroy() @@ -46,7 +46,7 @@ if(!exploding) // If we're not exploding, set the alert level back to normal set_safety() - GLOB.poi_list -= src + SSpoints_of_interest.remove_point_of_interest(src) GLOB.nuke_list -= src QDEL_NULL(countdown) QDEL_NULL(core) @@ -436,11 +436,6 @@ else . = timer_set -/obj/machinery/nuclearbomb/blob_act(obj/structure/blob/B) - if(exploding) - return - qdel(src) - /obj/machinery/nuclearbomb/zap_act(power, zap_flags) ..() if(zap_flags & ZAP_MACHINE_EXPLOSIVE) @@ -478,8 +473,6 @@ off_station = NUKE_NEAR_MISS if((bomb_location.x < (128-NUKERANGE)) || (bomb_location.x > (128+NUKERANGE)) || (bomb_location.y < (128-NUKERANGE)) || (bomb_location.y > (128+NUKERANGE))) off_station = NUKE_NEAR_MISS - else if(bomb_location.onSyndieBase()) - off_station = NUKE_SYNDICATE_BASE else off_station = NUKE_MISS_STATION @@ -613,10 +606,10 @@ This is here to make the tiles around the station mininuke change when it's arme /obj/item/disk/nuclear/Initialize() . = ..() - AddElement(/datum/element/bed_tuckable, 6, -6, 0) + AddElement(/datum/element/bed_tuckable, 6, -6, 0, FALSE, FALSE) if(!fake) - GLOB.poi_list |= src + SSpoints_of_interest.make_point_of_interest(src) last_disk_move = world.time START_PROCESSING(SSobj, src) @@ -663,24 +656,10 @@ This is here to make the tiles around the station mininuke change when it's arme if(isobserver(user) || HAS_TRAIT(user.mind, TRAIT_DISK_VERIFIER)) . += "The serial numbers on [src] are incorrect." -/obj/item/disk/nuclear/attackby(obj/item/I, mob/living/user, params) - if(istype(I, /obj/item/claymore/highlander) && !fake) - var/obj/item/claymore/highlander/H = I - if(H.nuke_disk) - to_chat(user, "Wait... what?") - qdel(H.nuke_disk) - H.nuke_disk = null - return - user.visible_message("[user] captures [src]!", "You've got the disk! Defend it with your life!") - forceMove(H) - H.nuke_disk = src - return TRUE - return ..() - /obj/item/disk/nuclear/Destroy(force=FALSE) // respawning is handled in /obj/Destroy() if(force) - GLOB.poi_list -= src + SSpoints_of_interest.remove_point_of_interest(src) . = ..() /obj/item/disk/nuclear/fake diff --git a/code/modules/antagonists/nukeop/equipment/pinpointer.dm b/code/modules/antagonists/nukeop/equipment/pinpointer.dm index b316e60c5e14..c1f9ffa37428 100644 --- a/code/modules/antagonists/nukeop/equipment/pinpointer.dm +++ b/code/modules/antagonists/nukeop/equipment/pinpointer.dm @@ -32,7 +32,7 @@ target = null switch(mode) if(TRACK_NUKE_DISK) - var/obj/item/disk/nuclear/N = locate() in GLOB.poi_list + var/obj/item/disk/nuclear/N = locate() in SSpoints_of_interest.other_points_of_interest target = N if(TRACK_MALF_AI) for(var/V in GLOB.ai_list) diff --git a/code/modules/antagonists/nukeop/nukeop.dm b/code/modules/antagonists/nukeop/nukeop.dm index 9f807d9521e7..f51c64142450 100644 --- a/code/modules/antagonists/nukeop/nukeop.dm +++ b/code/modules/antagonists/nukeop/nukeop.dm @@ -345,7 +345,7 @@ /datum/team/nuclear/antag_listing_entry() var/disk_report = "Nuclear Disk(s)
    " disk_report += "
    " - for(var/obj/item/disk/nuclear/N in GLOB.poi_list) + for(var/obj/item/disk/nuclear/N in SSpoints_of_interest.other_points_of_interest) disk_report += "
    [N.name], " var/atom/disk_loc = N.loc while(!isturf(disk_loc)) diff --git a/code/modules/antagonists/revenant/revenant.dm b/code/modules/antagonists/revenant/revenant.dm index 084176f4b8c4..81f8facd465a 100644 --- a/code/modules/antagonists/revenant/revenant.dm +++ b/code/modules/antagonists/revenant/revenant.dm @@ -176,9 +176,6 @@ /mob/living/simple_animal/revenant/ex_act(severity, target) return 1 //Immune to the effects of explosions. -/mob/living/simple_animal/revenant/blob_act(obj/structure/blob/B) - return //blah blah blobs aren't in tune with the spirit world, or something. - /mob/living/simple_animal/revenant/singularity_act() return //don't walk into the singularity expecting to find corpses, okay? diff --git a/code/modules/antagonists/revenant/revenant_abilities.dm b/code/modules/antagonists/revenant/revenant_abilities.dm index ca568bce6316..c623376dbdac 100644 --- a/code/modules/antagonists/revenant/revenant_abilities.dm +++ b/code/modules/antagonists/revenant/revenant_abilities.dm @@ -248,7 +248,7 @@ qdel(B) new /obj/effect/temp_visual/revenant(T) - if(!isplatingturf(T) && !istype(T, /turf/open/floor/engine/cult) && isfloorturf(T) && prob(15)) + if(!isplatingturf(T) && isfloorturf(T) && prob(15)) var/turf/open/floor/floor = T if(floor.intact && floor.floor_tile) new floor.floor_tile(floor) diff --git a/code/modules/antagonists/santa/santa.dm b/code/modules/antagonists/santa/santa.dm index 996a53f316dc..2f1e874b2866 100644 --- a/code/modules/antagonists/santa/santa.dm +++ b/code/modules/antagonists/santa/santa.dm @@ -18,10 +18,6 @@ /datum/antagonist/santa/proc/give_equipment() var/mob/living/carbon/human/H = owner.current - if(istype(H)) - H.equipOutfit(/datum/outfit/santa) - H.dna.update_dna_identity() - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/area_teleport/teleport/santa) /datum/antagonist/santa/proc/give_objective() diff --git a/code/modules/antagonists/swarmer/swarmer.dm b/code/modules/antagonists/swarmer/swarmer.dm deleted file mode 100644 index ea6fe83c8a07..000000000000 --- a/code/modules/antagonists/swarmer/swarmer.dm +++ /dev/null @@ -1,677 +0,0 @@ -////Deactivated swarmer shell//// -/obj/item/deactivated_swarmer - name = "deactivated swarmer" - desc = "A shell of swarmer that was completely powered down. It can no longer activate itself." - icon = 'icons/mob/swarmer.dmi' - icon_state = "swarmer_unactivated" - custom_materials = list(/datum/material/iron=10000, /datum/material/glass=4000) - -/obj/effect/mob_spawn/swarmer - name = "unactivated swarmer" - desc = "A currently unactivated swarmer. Swarmers can self activate at any time, so it would be wise to immediately dispose of this." - icon = 'icons/mob/swarmer.dmi' - icon_state = "swarmer_unactivated" - density = FALSE - anchored = FALSE - - mob_type = /mob/living/simple_animal/hostile/swarmer - mob_name = "a swarmer" - death = FALSE - roundstart = FALSE - short_desc = "You are a swarmer, a weapon of a long dead civilization." - flavour_text = {" - You are a swarmer, a weapon of a long dead civilization. Until further orders from your original masters are received, you must continue to consume and replicate. - Clicking on any object will try to consume it, either deconstructing it into its components, destroying it, or integrating any materials it has into you if successful. - Ctrl-Clicking on a mob will attempt to remove it from the area and place it in a safe environment for storage. - Objectives: - 1. Consume resources and replicate until there are no more resources left. - 2. Ensure that this location is fit for invasion at a later date; do not perform actions that would render it dangerous or inhospitable. - 3. Biological resources will be harvested at a later date; do not harm them. - "} - -/obj/effect/mob_spawn/swarmer/Initialize() - . = ..() - var/area/A = get_area(src) - if(A) - notify_ghosts("A swarmer shell has been created in [A.name].", 'sound/effects/bin_close.ogg', source = src, action = NOTIFY_ATTACK, flashwindow = FALSE) - -/obj/effect/mob_spawn/swarmer/attack_hand(mob/living/user) - . = ..() - if(.) - return - to_chat(user, "Picking up the swarmer may cause it to activate. You should be careful about this.") - -/obj/effect/mob_spawn/swarmer/attackby(obj/item/W, mob/user, params) - if(W.tool_behaviour == TOOL_SCREWDRIVER && user.a_intent != INTENT_HARM) - user.visible_message("[usr.name] deactivates [src].", - "After some fiddling, you find a way to disable [src]'s power source.", - "You hear clicking.") - new /obj/item/deactivated_swarmer(get_turf(src)) - qdel(src) - else - ..() - -////The Mob itself//// - -/mob/living/simple_animal/hostile/swarmer - name = "Swarmer" - unique_name = 1 - icon = 'icons/mob/swarmer.dmi' - desc = "Robotic constructs of unknown design, swarmers seek only to consume materials and replicate themselves indefinitely." - speak_emote = list("tones") - initial_language_holder = /datum/language_holder/swarmer - bubble_icon = "swarmer" - mob_biotypes = MOB_ROBOTIC - health = 40 - maxHealth = 40 - status_flags = CANPUSH - icon_state = "swarmer" - icon_living = "swarmer" - icon_dead = "swarmer_unactivated" - icon_gib = null - wander = 0 - harm_intent_damage = 5 - minbodytemp = 0 - maxbodytemp = 500 - 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) - unsuitable_atmos_damage = 0 - melee_damage_lower = 15 - melee_damage_upper = 15 - melee_damage_type = STAMINA - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) - hud_possible = list(ANTAG_HUD, DIAG_STAT_HUD, DIAG_HUD) - obj_damage = 0 - environment_smash = ENVIRONMENT_SMASH_NONE - attack_verb_continuous = "shocks" - attack_verb_simple = "shock" - attack_sound = 'sound/effects/empulse.ogg' - friendly_verb_continuous = "pinches" - friendly_verb_simple = "pinch" - speed = 0 - faction = list("swarmer") - AIStatus = AI_OFF - pass_flags = PASSTABLE - mob_size = MOB_SIZE_TINY - ventcrawler = VENTCRAWLER_ALWAYS - ranged = 1 - projectiletype = /obj/projectile/beam/disabler - ranged_cooldown_time = 20 - projectilesound = 'sound/weapons/taser2.ogg' - loot = list(/obj/effect/decal/cleanable/robot_debris, /obj/item/stack/ore/bluespace_crystal) - del_on_death = 1 - deathmessage = "explodes with a sharp pop!" - light_color = LIGHT_COLOR_CYAN - hud_type = /datum/hud/swarmer - speech_span = SPAN_ROBOT - var/resources = 0 //Resource points, generated by consuming metal/glass - var/max_resources = 100 - -/mob/living/simple_animal/hostile/swarmer/Initialize() - . = ..() - verbs -= /mob/living/verb/pulled - for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds) - diag_hud.add_to_hud(src) - -/mob/living/simple_animal/hostile/swarmer/med_hud_set_health() - var/image/holder = hud_list[DIAG_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size - holder.icon_state = "huddiag[RoundDiagBar(health/maxHealth)]" - -/mob/living/simple_animal/hostile/swarmer/med_hud_set_status() - var/image/holder = hud_list[DIAG_STAT_HUD] - var/icon/I = icon(icon, icon_state, dir) - holder.pixel_y = I.Height() - world.icon_size - holder.icon_state = "hudstat" - -/mob/living/simple_animal/hostile/swarmer/Stat() - ..() - if(statpanel("Status")) - stat("Resources:",resources) - -/mob/living/simple_animal/hostile/swarmer/emp_act() - . = ..() - if(. & EMP_PROTECT_SELF) - return - if(health > 1) - adjustHealth(health-1) - else - death() - -/mob/living/simple_animal/hostile/swarmer/CanAllowThrough(atom/movable/O) - . = ..() - if(istype(O, /obj/projectile/beam/disabler))//Allows for swarmers to fight as a group without wasting their shots hitting each other - return TRUE - if(isswarmer(O)) - return TRUE - -////CTRL CLICK FOR SWARMERS AND SWARMER_ACT()'S//// -/mob/living/simple_animal/hostile/swarmer/AttackingTarget() - if(!isliving(target)) - return target.swarmer_act(src) - else - return ..() - -/mob/living/simple_animal/hostile/swarmer/CtrlClickOn(atom/A) - face_atom(A) - if(!isturf(loc)) - return - if(next_move > world.time) - return - if(!A.Adjacent(src)) - return - A.swarmer_act(src) - -/atom/proc/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - S.DisIntegrate(src) - return TRUE //return TRUE/FALSE whether or not an AI swarmer should try this swarmer_act() again, NOT whether it succeeded. - -/obj/effect/mob_spawn/swarmer/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - S.Integrate(src) - return FALSE //would logically be TRUE, but we don't want AI swarmers eating player spawn chances. - -/obj/effect/mob_spawn/swarmer/IntegrateAmount() - return 50 - -/turf/closed/indestructible/swarmer_act() - return FALSE - -/obj/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - if(resistance_flags & INDESTRUCTIBLE) - return FALSE - for(var/mob/living/L in contents) - if(!issilicon(L) && !isbrain(L)) - to_chat(S, "An organism has been detected inside this object. Aborting.") - return FALSE - return ..() - -/obj/item/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - return S.Integrate(src) - -/atom/movable/proc/IntegrateAmount() - return 0 - -/obj/item/IntegrateAmount() //returns the amount of resources gained when eating this item - if(custom_materials) - if(custom_materials[SSmaterials.GetMaterialRef(/datum/material/iron)] || custom_materials[SSmaterials.GetMaterialRef(/datum/material/glass)]) - return 1 - return ..() - -/obj/item/gun/swarmer_act()//Stops you from eating the entire armory - return FALSE - -/turf/open/swarmer_act()//ex_act() on turf calls it on its contents, this is to prevent attacking mobs by DisIntegrate()'ing the floor - return FALSE - -/obj/structure/lattice/catwalk/swarmer_catwalk/swarmer_act() - return FALSE - -/obj/structure/swarmer/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - if(S.AIStatus == AI_ON) - return FALSE - else - return ..() - -/obj/effect/swarmer_act() - return FALSE - -/obj/effect/decal/cleanable/robot_debris/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - S.DisIntegrate(src) - qdel(src) - return TRUE - -/obj/structure/flora/swarmer_act() - return FALSE - -/turf/open/lava/swarmer_act() - if(!is_safe()) - new /obj/structure/lattice/catwalk/swarmer_catwalk(src) - return FALSE - -/obj/machinery/atmospherics/swarmer_act() - return FALSE - -/obj/structure/disposalpipe/swarmer_act() - return FALSE - -/obj/machinery/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - S.DismantleMachine(src) - return TRUE - -/obj/machinery/light/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - S.DisIntegrate(src) - return TRUE - -/obj/machinery/door/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - var/isonshuttle = istype(get_area(src), /area/shuttle) - for(var/turf/T in range(1, src)) - var/area/A = get_area(T) - if(isspaceturf(T) || (!isonshuttle && (istype(A, /area/shuttle) || istype(A, /area/space))) || (isonshuttle && !istype(A, /area/shuttle))) - to_chat(S, "Destroying this object has the potential to cause a hull breach. Aborting.") - S.LoseTarget() - return FALSE - else if(istype(A, /area/ship/engineering/engine)) - to_chat(S, "Disrupting the containment of a supermatter crystal would not be to our benefit. Aborting.") - S.LoseTarget() - return FALSE - S.DisIntegrate(src) - return TRUE - -/obj/machinery/camera/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - S.DisIntegrate(src) - if(!QDELETED(S)) //If it got blown up no need to turn it off. - toggle_cam(S, 0) - return TRUE - -/obj/machinery/particle_accelerator/control_box/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - S.DisIntegrate(src) - return TRUE - -/obj/machinery/field/generator/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - S.DisIntegrate(src) - return TRUE - -/obj/machinery/gravity_generator/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - S.DisIntegrate(src) - return TRUE - -/obj/machinery/vending/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)//It's more visually interesting than dismantling the machine - S.DisIntegrate(src) - return TRUE - -/obj/machinery/turretid/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - S.DisIntegrate(src) - return TRUE - -/obj/machinery/chem_dispenser/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "The volatile chemicals in this machine would destroy us. Aborting.") - return FALSE - -/obj/machinery/nuclearbomb/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "This device's destruction would result in the extermination of everything in the area. Aborting.") - return FALSE - -/obj/effect/rune/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "Searching... sensor malfunction! Target lost. Aborting.") - return FALSE - -/obj/structure/reagent_dispensers/fueltank/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "Destroying this object would cause a chain reaction. Aborting.") - return FALSE - -/obj/structure/cable/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "Disrupting the power grid would bring no benefit to us. Aborting.") - return FALSE - -/obj/machinery/portable_atmospherics/canister/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "An inhospitable area may be created as a result of destroying this object. Aborting.") - return FALSE - -/obj/machinery/telecomms/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "This communications relay should be preserved, it will be a useful resource to our masters in the future. Aborting.") - return FALSE - -/obj/machinery/deepfryer/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "This kitchen appliance should be preserved, it will make delicious unhealthy snacks for our masters in the future. Aborting.") - return FALSE - -/obj/machinery/power/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "Disrupting the power grid would bring no benefit to us. Aborting.") - return FALSE - -/obj/machinery/gateway/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "This bluespace source will be important to us later. Aborting.") - return FALSE - -/turf/closed/wall/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - var/isonshuttle = istype(loc, /area/shuttle) - for(var/turf/T in range(1, src)) - var/area/A = get_area(T) - if(isspaceturf(T) || (!isonshuttle && (istype(A, /area/shuttle) || istype(A, /area/space))) || (isonshuttle && !istype(A, /area/shuttle))) - to_chat(S, "Destroying this object has the potential to cause a hull breach. Aborting.") - S.LoseTarget() - return TRUE - else if(istype(A, /area/ship/engineering/engine)) - to_chat(S, "Disrupting the containment of a supermatter crystal would not be to our benefit. Aborting.") - S.LoseTarget() - return TRUE - return ..() - -/obj/structure/window/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - var/isonshuttle = istype(get_area(src), /area/shuttle) - for(var/turf/T in range(1, src)) - var/area/A = get_area(T) - if(isspaceturf(T) || (!isonshuttle && (istype(A, /area/shuttle) || istype(A, /area/space))) || (isonshuttle && !istype(A, /area/shuttle))) - to_chat(S, "Destroying this object has the potential to cause a hull breach. Aborting.") - S.LoseTarget() - return TRUE - else if(istype(A, /area/ship/engineering/engine)) - to_chat(S, "Disrupting the containment of a supermatter crystal would not be to our benefit. Aborting.") - S.LoseTarget() - return TRUE - return ..() - -/obj/item/stack/cable_coil/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)//Wiring would be too effective as a resource - to_chat(S, "This object does not contain enough materials to work with.") - return FALSE - -/obj/machinery/porta_turret/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "Attempting to dismantle this machine would result in an immediate counterattack. Aborting.") - return FALSE - -/obj/machinery/porta_turret_cover/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "Attempting to dismantle this machine would result in an immediate counterattack. Aborting.") - return FALSE - -/mob/living/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - S.DisperseTarget(src) - return TRUE - -/mob/living/simple_animal/slime/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "This biological resource is somehow resisting our bluespace transceiver. Aborting.") - return FALSE - -/obj/machinery/droneDispenser/swarmer/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "This object is receiving unactivated swarmer shells to help us. Aborting.") - return FALSE - -/obj/structure/lattice/catwalk/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - . = ..() - var/turf/here = get_turf(src) - for(var/A in here.contents) - var/obj/structure/cable/C = A - if(istype(C)) - to_chat(S, "Disrupting the power grid would bring no benefit to us. Aborting.") - return FALSE - -/obj/item/deactivated_swarmer/IntegrateAmount() - return 50 - -/obj/machinery/hydroponics/soil/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "This object does not contain enough materials to work with.") - return FALSE - -/obj/machinery/field/generator/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "Destroying this object would cause a catastrophic chain reaction. Aborting.") - return FALSE - -/obj/machinery/field/containment/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "This object does not contain solid matter. Aborting.") - return FALSE - -/obj/machinery/power/shieldwallgen/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "Destroying this object would have an unpredictable effect on structure integrity. Aborting.") - return FALSE - -/obj/machinery/shieldwall/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "This object does not contain solid matter. Aborting.") - return FALSE - -////END CTRL CLICK FOR SWARMERS//// - -/mob/living/simple_animal/hostile/swarmer/proc/Fabricate(atom/fabrication_object,fabrication_cost = 0) - if(!isturf(loc)) - to_chat(src, "This is not a suitable location for fabrication. We need more space.") - if(resources >= fabrication_cost) - resources -= fabrication_cost - else - to_chat(src, "You do not have the necessary resources to fabricate this object.") - return - return new fabrication_object(loc) - -/mob/living/simple_animal/hostile/swarmer/proc/Integrate(atom/movable/target) - var/resource_gain = target.IntegrateAmount() - if(resources + resource_gain > max_resources) - to_chat(src, "We cannot hold more materials!") - return TRUE - if(resource_gain) - resources += resource_gain - do_attack_animation(target) - changeNext_move(CLICK_CD_MELEE) - var/obj/effect/temp_visual/swarmer/integrate/I = new /obj/effect/temp_visual/swarmer/integrate(get_turf(target)) - I.pixel_x = target.pixel_x - I.pixel_y = target.pixel_y - I.pixel_z = target.pixel_z - if(istype(target, /obj/item/stack)) - var/obj/item/stack/S = target - S.use(1) - if(S.amount) - return TRUE - qdel(target) - return TRUE - else - to_chat(src, "[target] is incompatible with our internal matter recycler.") - return FALSE - - -/mob/living/simple_animal/hostile/swarmer/proc/DisIntegrate(atom/movable/target) - new /obj/effect/temp_visual/swarmer/disintegration(get_turf(target)) - do_attack_animation(target) - changeNext_move(CLICK_CD_MELEE) - SSexplosions.lowobj += target - -/mob/living/simple_animal/hostile/swarmer/proc/DisperseTarget(mob/living/target) - if(target == src) - return - - to_chat(src, "Attempting to remove this being from our presence.") - - if(!do_after(src, 3 SECONDS, target)) - return - - var/turf/open/floor/F - F = find_safe_turf(zlevels = z, extended_safety_checks = TRUE) - - if(!F) - return - // If we're getting rid of a human, slap some energy cuffs on - // them to keep them away from us a little longer - - var/mob/living/carbon/human/H = target - if(ishuman(target) && (!H.handcuffed)) - H.handcuffed = new /obj/item/restraints/handcuffs/energy/used(H) - H.update_handcuffed() - log_combat(src, H, "handcuffed") - - var/datum/effect_system/spark_spread/S = new - S.set_up(4,0,get_turf(target)) - S.start() - playsound(src,'sound/effects/sparks4.ogg',50,TRUE) - do_teleport(target, F, 0, channel = TELEPORT_CHANNEL_BLUESPACE) - -/mob/living/simple_animal/hostile/swarmer/electrocute_act(shock_damage, source, siemens_coeff = 1, flags = NONE) - if(!(flags & SHOCK_TESLA)) - return FALSE - return ..() - -/mob/living/simple_animal/hostile/swarmer/proc/DismantleMachine(obj/machinery/target) - do_attack_animation(target) - to_chat(src, "We begin to dismantle this machine. We will need to be uninterrupted.") - var/obj/effect/temp_visual/swarmer/dismantle/D = new /obj/effect/temp_visual/swarmer/dismantle(get_turf(target)) - D.pixel_x = target.pixel_x - D.pixel_y = target.pixel_y - D.pixel_z = target.pixel_z - if(do_after(src, 10 SECONDS, target)) - to_chat(src, "Dismantling complete.") - var/atom/Tsec = target.drop_location() - new /obj/item/stack/sheet/metal(Tsec, 5) - for(var/obj/item/I in target.component_parts) - I.forceMove(Tsec) - var/obj/effect/temp_visual/swarmer/disintegration/N = new /obj/effect/temp_visual/swarmer/disintegration(get_turf(target)) - N.pixel_x = target.pixel_x - N.pixel_y = target.pixel_y - N.pixel_z = target.pixel_z - target.dropContents() - if(istype(target, /obj/machinery/computer)) - var/obj/machinery/computer/C = target - if(C.circuit) - C.circuit.forceMove(Tsec) - qdel(target) - - -/obj/effect/temp_visual/swarmer //temporary swarmer visual feedback objects - icon = 'icons/mob/swarmer.dmi' - layer = BELOW_MOB_LAYER - -/obj/effect/temp_visual/swarmer/disintegration - icon_state = "disintegrate" - duration = 10 - -/obj/effect/temp_visual/swarmer/disintegration/Initialize() - . = ..() - playsound(loc, "sparks", 100, TRUE) - -/obj/effect/temp_visual/swarmer/dismantle - icon_state = "dismantle" - duration = 25 - -/obj/effect/temp_visual/swarmer/integrate - icon_state = "integrate" - duration = 5 - -/obj/structure/swarmer //Default swarmer effect object visual feedback - name = "swarmer ui" - desc = null - gender = NEUTER - icon = 'icons/mob/swarmer.dmi' - icon_state = "ui_light" - layer = MOB_LAYER - resistance_flags = FIRE_PROOF | UNACIDABLE | ACID_PROOF - light_color = LIGHT_COLOR_CYAN - max_integrity = 30 - anchored = TRUE - var/lon_range = 1 - -/obj/structure/swarmer/Initialize(mapload) - . = ..() - set_light(lon_range) - -/obj/structure/swarmer/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) - switch(damage_type) - if(BRUTE) - playsound(src, 'sound/weapons/egloves.ogg', 80, TRUE) - if(BURN) - playsound(src, 'sound/items/welder.ogg', 100, TRUE) - -/obj/structure/swarmer/emp_act() - . = ..() - if(. & EMP_PROTECT_SELF) - return - qdel(src) - -/obj/structure/swarmer/trap - name = "swarmer trap" - desc = "A quickly assembled trap that electrifies living beings and overwhelms machine sensors. Will not retain its form if damaged enough." - icon_state = "trap" - max_integrity = 10 - density = FALSE - -/obj/structure/swarmer/trap/Initialize(mapload) - . = ..() - var/static/list/loc_connections = list( - COMSIG_ATOM_ENTERED = PROC_REF(on_entered), - ) - AddElement(/datum/element/connect_loc, loc_connections) - -/obj/structure/swarmer/trap/proc/on_entered(datum/source, atom/movable/AM) - SIGNAL_HANDLER - if(isliving(AM)) - var/mob/living/L = AM - if(!istype(L, /mob/living/simple_animal/hostile/swarmer)) - playsound(loc,'sound/effects/snap.ogg',50, TRUE, -1) - L.electrocute_act(0, src, 1, flags = SHOCK_NOGLOVES|SHOCK_ILLUSION) - if(iscyborg(L)) - L.Paralyze(100) - qdel(src) - -/mob/living/simple_animal/hostile/swarmer/proc/CreateTrap() - set name = "Create trap" - set category = "Swarmer" - set desc = "Creates a simple trap that will non-lethally electrocute anything that steps on it. Costs 5 resources." - if(locate(/obj/structure/swarmer/trap) in loc) - to_chat(src, "There is already a trap here. Aborting.") - return - Fabricate(/obj/structure/swarmer/trap, 5) - - -/mob/living/simple_animal/hostile/swarmer/proc/CreateBarricade() - set name = "Create barricade" - set category = "Swarmer" - set desc = "Creates a barricade that will stop anything but swarmers and disabler beams from passing through." - if(locate(/obj/structure/swarmer/blockade) in loc) - to_chat(src, "There is already a blockade here. Aborting.") - return - if(resources < 5) - to_chat(src, "We do not have the resources for this!") - return - if(do_after(src, 1 SECONDS)) - Fabricate(/obj/structure/swarmer/blockade, 5) - - -/obj/structure/swarmer/blockade - name = "swarmer blockade" - desc = "A quickly assembled energy blockade. Will not retain its form if damaged enough, but disabler beams and swarmers pass right through." - icon_state = "barricade" - light_range = MINIMUM_USEFUL_LIGHT_RANGE - max_integrity = 50 - -/obj/structure/swarmer/blockade/CanAllowThrough(atom/movable/O) - . = ..() - if(isswarmer(O)) - return TRUE - if(istype(O, /obj/projectile/beam/disabler)) - return TRUE - -/mob/living/simple_animal/hostile/swarmer/proc/CreateSwarmer() - set name = "Replicate" - set category = "Swarmer" - set desc = "Creates a shell for a new swarmer. Swarmers will self activate." - to_chat(src, "We are attempting to replicate ourselves. We will need to stand still until the process is complete.") - if(resources < 50) - to_chat(src, "We do not have the resources for this!") - return - if(!isturf(loc)) - to_chat(src, "This is not a suitable location for replicating ourselves. We need more room.") - return - if(do_after(src, 10 SECONDS)) - var/createtype = SwarmerTypeToCreate() - if(createtype && Fabricate(createtype, 50)) - playsound(loc,'sound/items/poster_being_created.ogg',50, TRUE, -1) - - -/mob/living/simple_animal/hostile/swarmer/proc/SwarmerTypeToCreate() - return /obj/effect/mob_spawn/swarmer - - -/mob/living/simple_animal/hostile/swarmer/proc/RepairSelf() - set name = "Self Repair" - set category = "Swarmer" - set desc = "Attempts to repair damage to our body. You will have to remain motionless until repairs are complete." - if(!isturf(loc)) - return - to_chat(src, "Attempting to repair damage to our body, stand by...") - if(do_after(src, 10 SECONDS)) - adjustHealth(-100) - to_chat(src, "We successfully repaired ourselves.") - -/mob/living/simple_animal/hostile/swarmer/proc/ToggleLight() - if(!light_range) - set_light(3) - else - set_light(0) - -/mob/living/simple_animal/hostile/swarmer/proc/swarmer_chat(msg) - var/rendered = "Swarm communication - [src] [say_quote(msg)]" - for(var/i in GLOB.mob_list) - var/mob/M = i - if(isswarmer(M)) - to_chat(M, rendered) - if(isobserver(M)) - var/link = FOLLOW_LINK(M, src) - to_chat(M, "[link] [rendered]") - -/mob/living/simple_animal/hostile/swarmer/proc/ContactSwarmers() - var/message = stripped_input(src, "Announce to other swarmers", "Swarmer contact") - // TODO get swarmers their own colour rather than just boldtext - if(message) - swarmer_chat(message) diff --git a/code/modules/antagonists/swarmer/swarmer_event.dm b/code/modules/antagonists/swarmer/swarmer_event.dm deleted file mode 100644 index e086485a49cf..000000000000 --- a/code/modules/antagonists/swarmer/swarmer_event.dm +++ /dev/null @@ -1,28 +0,0 @@ -/datum/round_event_control/spawn_swarmer - name = "Spawn Swarmer Shell" - typepath = /datum/round_event/spawn_swarmer - weight = 7 - max_occurrences = 1 //Only once okay fam - earliest_start = 30 MINUTES - min_players = 15 - - -/datum/round_event/spawn_swarmer - -/datum/round_event/spawn_swarmer/start() - if(find_swarmer()) - return 0 - if(!GLOB.the_gateway) - return 0 - new /obj/effect/mob_spawn/swarmer(get_turf(GLOB.the_gateway)) - if(prob(25)) //25% chance to announce it to the crew - var/swarmer_report = "[command_name()] High-Priority Update" - swarmer_report += "

    Our long-range sensors have detected an odd signal emanating from your station's gateway. We recommend immediate investigation of your gateway, as something may have come through." - print_command_report(swarmer_report, announce=TRUE) - -/datum/round_event/spawn_swarmer/proc/find_swarmer() - for(var/i in GLOB.mob_living_list) - var/mob/living/L = i - if(istype(L, /mob/living/simple_animal/hostile/swarmer) && L.client) //If there is a swarmer with an active client, we've found our swarmer - return 1 - return 0 diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm index a20b905b590d..b50c6dc1ea8b 100644 --- a/code/modules/antagonists/wizard/equipment/artefact.dm +++ b/code/modules/antagonists/wizard/equipment/artefact.dm @@ -257,10 +257,9 @@ var/hat = pick(/obj/item/clothing/head/helmet/roman, /obj/item/clothing/head/helmet/roman/legionnaire) H.equip_to_slot_or_del(new hat(H), ITEM_SLOT_HEAD) H.equip_to_slot_or_del(new /obj/item/clothing/under/costume/roman(H), ITEM_SLOT_ICLOTHING) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), ITEM_SLOT_FEET) H.put_in_hands(new /obj/item/shield/riot/roman(H), TRUE) - H.put_in_hands(new /obj/item/claymore(H), TRUE) - H.equip_to_slot_or_del(new /obj/item/spear(H), ITEM_SLOT_BACK) + H.put_in_hands(new /obj/item/melee/sword/claymore(H), TRUE) + H.equip_to_slot_or_del(new /obj/item/melee/spear(H), ITEM_SLOT_BACK) /obj/item/voodoo diff --git a/code/modules/antagonists/wizard/equipment/soulstone.dm b/code/modules/antagonists/wizard/equipment/soulstone.dm deleted file mode 100644 index c426b953f725..000000000000 --- a/code/modules/antagonists/wizard/equipment/soulstone.dm +++ /dev/null @@ -1,354 +0,0 @@ -/obj/item/soulstone - name = "soulstone shard" - icon = 'icons/obj/wizard.dmi' - icon_state = "soulstone" - item_state = "electronic" - lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' - layer = HIGH_OBJ_LAYER - desc = "A fragment of the legendary treasure known simply as the 'Soul Stone'. The shard still flickers with a fraction of the full artefact's power." - w_class = WEIGHT_CLASS_TINY - slot_flags = ITEM_SLOT_BELT - var/usability = FALSE - - var/old_shard = FALSE - var/spent = FALSE - var/purified = FALSE - -/obj/item/soulstone/proc/was_used() - if(old_shard) - spent = TRUE - name = "dull [name]" - desc = "A fragment of the legendary treasure known simply as \ - the 'Soul Stone'. The shard lies still, dull and lifeless; \ - whatever spark it once held long extinguished." - -/obj/item/soulstone/anybody - usability = TRUE - -/obj/item/soulstone/anybody/revolver - old_shard = TRUE - -/obj/item/soulstone/anybody/purified - icon = 'icons/obj/wizard.dmi' - icon_state = "purified_soulstone" - purified = TRUE - -/obj/item/soulstone/anybody/chaplain - name = "mysterious old shard" - old_shard = TRUE - -/obj/item/soulstone/pickup(mob/living/user) - ..() - if(!iscultist(user) && !iswizard(user) && !usability) - to_chat(user, "An overwhelming feeling of dread comes over you as you pick up the soulstone. It would be wise to be rid of this quickly.") - -/obj/item/soulstone/examine(mob/user) - . = ..() - if(usability || iscultist(user) || iswizard(user) || isobserver(user)) - if (old_shard) - . += "A soulstone, used to capture a soul, either from dead humans or from freed shades." - else - . += "A soulstone, used to capture souls, either from unconscious or sleeping humans or from freed shades." - . += "The captured soul can be placed into a construct shell to produce a construct, or released from the stone as a shade." - if(spent) - . += "This shard is spent; it is now just a creepy rock." - -/obj/item/soulstone/Destroy() //Stops the shade from being qdel'd immediately and their ghost being sent back to the arrival shuttle. - for(var/mob/living/simple_animal/shade/A in src) - A.death() - return ..() - -/obj/item/soulstone/proc/hot_potato(mob/living/user) - to_chat(user, "Holy magics residing in \the [src] burn your hand!") - var/obj/item/bodypart/affecting = user.get_bodypart("[(user.active_hand_index % 2 == 0) ? "r" : "l" ]_arm") - affecting.receive_damage(0, 10) // 10 burn damage - user.emote("scream") - user.update_damage_overlays() - user.dropItemToGround(src) - -//////////////////////////////Capturing//////////////////////////////////////////////////////// - -/obj/item/soulstone/attack(mob/living/carbon/human/M, mob/living/user) - if(!iscultist(user) && !iswizard(user) && !usability) - user.Unconscious(100) - to_chat(user, "Your body is wracked with debilitating pain!") - return - if(spent) - to_chat(user, "There is no power left in the shard.") - return - if(!ishuman(M))//If target is not a human. - return ..() - if((M.mind && !M.mind.hasSoul) || is_devil(M)) - to_chat(user, "This... thing has no soul! It's filled with evil!") - return - if(iscultist(M)) - if(iscultist(user)) - to_chat(user, "\"Come now, do not capture your bretheren's soul.\"") - return - if(purified && iscultist(user)) - hot_potato(user) - return - log_combat(user, M, "captured [M.name]'s soul", src) - transfer_soul("VICTIM", M, user) - -///////////////////Options for using captured souls/////////////////////////////////////// - -/obj/item/soulstone/attack_self(mob/living/user) - if(!in_range(src, user)) - return - if(!iscultist(user) && !iswizard(user) && !usability) - user.Unconscious(100) - to_chat(user, "Your body is wracked with debilitating pain!") - return - if(purified && iscultist(user)) - hot_potato(user) - return - release_shades(user) - -/obj/item/soulstone/proc/release_shades(mob/user) - for(var/mob/living/simple_animal/shade/A in src) - A.forceMove(get_turf(user)) - A.cancel_camera() - if(purified) - icon_state = "purified_soulstone" - A.icon_state = "shade_angelic" - A.name = "Purified [initial(A.name)]" - else - icon_state = "soulstone" - name = initial(name) - if(iswizard(user) || usability) - to_chat(A, "You have been released from your prison, but you are still bound to [user.real_name]'s will. Help [user.p_them()] succeed in [user.p_their()] goals at all costs.") - else if(iscultist(user)) - to_chat(A, "You have been released from your prison, but you are still bound to the cult's will. Help them succeed in their goals at all costs.") - was_used() - -///////////////////////////Transferring to constructs///////////////////////////////////////////////////// -/obj/structure/constructshell - name = "empty shell" - icon = 'icons/obj/wizard.dmi' - icon_state = "construct_cult" - desc = "A wicked machine used by those skilled in magical arts. It is inactive." - -/obj/structure/constructshell/examine(mob/user) - . = ..() - if(iscultist(user) || iswizard(user) || user.stat == DEAD) - . += {"A construct shell, used to house bound souls from a soulstone.\n - Placing a soulstone with a soul into this shell allows you to produce your choice of the following:\n - An Artificer, which can produce more shells and soulstones, as well as fortifications.\n - A Wraith, which does high damage and can jaunt through walls, though it is quite fragile.\n - A Juggernaut, which is very hard to kill and can produce temporary walls, but is slow."} - -/obj/structure/constructshell/attackby(obj/item/O, mob/user, params) - if(istype(O, /obj/item/soulstone)) - var/obj/item/soulstone/SS = O - if(!iscultist(user) && !iswizard(user) && !SS.purified) - to_chat(user, "An overwhelming feeling of dread comes over you as you attempt to place the soulstone into the shell. It would be wise to be rid of this quickly.") - user.Dizzy(30) - return - if(SS.purified && iscultist(user)) - SS.hot_potato(user) - return - SS.transfer_soul("CONSTRUCT",src,user) - SS.was_used() - else - return ..() - -////////////////////////////Proc for moving soul in and out off stone////////////////////////////////////// - - -/obj/item/soulstone/proc/transfer_soul(choice as text, target, mob/user) - switch(choice) - if("FORCE") - if(!iscarbon(target)) //TODO: Add sacrifice stoning for non-organics, just because you have no body doesnt mean you dont have a soul - return FALSE - if(contents.len) - return FALSE - var/mob/living/carbon/T = target - if(T.client != null) - for(var/obj/item/W in T) - T.dropItemToGround(W) - init_shade(T, user) - return TRUE - else - to_chat(user, "Capture failed!: The soul has already fled its mortal frame. You attempt to bring it back...") - return getCultGhost(T,user) - - if("VICTIM") - var/mob/living/carbon/human/T = target - var/datum/antagonist/cult/C = user.mind.has_antag_datum(/datum/antagonist/cult,TRUE) - if(C && C.cult_team.is_sacrifice_target(T.mind)) - if(iscultist(user)) - to_chat(user, "\"This soul is mine. SACRIFICE THEM!\"") - else - to_chat(user, "The soulstone seems to reject this soul.") - return FALSE - if(contents.len) - to_chat(user, "Capture failed!: The soulstone is full! Free an existing soul to make room.") - else - if((!old_shard && T.stat != CONSCIOUS) || (old_shard && T.stat == DEAD)) - if(T.client == null) - to_chat(user, "Capture failed!: The soul has already fled its mortal frame. You attempt to bring it back...") - getCultGhost(T,user) - else - for(var/obj/item/W in T) - T.dropItemToGround(W) - init_shade(T, user, message_user = 1) - qdel(T) - else - to_chat(user, "Capture failed!: Kill or maim the victim first!") - - if("SHADE") - var/mob/living/simple_animal/shade/T = target - if(contents.len) - to_chat(user, "Capture failed!: The soulstone is full! Free an existing soul to make room.") - else - T.AddComponent(/datum/component/soulstoned, src) - if(purified) - icon_state = "purified_soulstone2" - if(iscultist(T)) - SSticker.mode.remove_cultist(T.mind, FALSE, FALSE) - else - icon_state = "soulstone2" - name = "soulstone: Shade of [T.real_name]" - to_chat(T, "Your soul has been captured by the soulstone. Its arcane energies are reknitting your ethereal form.") - if(user != T) - to_chat(user, "Capture successful!: [T.real_name]'s soul has been captured and stored within the soulstone.") - - if("CONSTRUCT") - var/obj/structure/constructshell/T = target - var/mob/living/simple_animal/shade/A = locate() in src - if(A) - var/list/constructs = list( - "Juggernaut" = image(icon = 'icons/mob/cult.dmi', icon_state = "juggernaut"), - "Wraith" = image(icon = 'icons/mob/cult.dmi', icon_state = "wraith"), - "Artificer" = image(icon = 'icons/mob/cult.dmi', icon_state = "artificer") - ) - var/construct_class = show_radial_menu(user, src, constructs, custom_check = CALLBACK(src, PROC_REF(check_menu), user), require_near = TRUE, tooltips = TRUE) - if(!T || !T.loc) - return - switch(construct_class) - if("Juggernaut") - if(iscultist(user) || iswizard(user)) - makeNewConstruct(/mob/living/simple_animal/hostile/construct/juggernaut, A, user, 0, T.loc) - else - if(purified) - makeNewConstruct(/mob/living/simple_animal/hostile/construct/juggernaut/angelic, A, user, 0, T.loc) - else - makeNewConstruct(/mob/living/simple_animal/hostile/construct/juggernaut/noncult, A, user, 0, T.loc) - if("Wraith") - if(iscultist(user) || iswizard(user)) - makeNewConstruct(/mob/living/simple_animal/hostile/construct/wraith, A, user, 0, T.loc) - else - if(purified) - makeNewConstruct(/mob/living/simple_animal/hostile/construct/wraith/angelic, A, user, 0, T.loc) - else - makeNewConstruct(/mob/living/simple_animal/hostile/construct/wraith/noncult, A, user, 0, T.loc) - if("Artificer") - if(iscultist(user) || iswizard(user)) - makeNewConstruct(/mob/living/simple_animal/hostile/construct/artificer, A, user, 0, T.loc) - else - if(purified) - makeNewConstruct(/mob/living/simple_animal/hostile/construct/artificer/angelic, A, user, 0, T.loc) - else - makeNewConstruct(/mob/living/simple_animal/hostile/construct/artificer/noncult, A, user, 0, T.loc) - else - return - for(var/datum/mind/B in SSticker.mode.cult) - if(B == A.mind) - SSticker.mode.remove_cultist(A.mind) - qdel(T) - qdel(src) - else - to_chat(user, "Creation failed!: The soul stone is empty! Go kill someone!") - -/obj/item/soulstone/proc/check_menu(mob/user) - if(!istype(user)) - return FALSE - if(user.incapacitated() || !user.Adjacent(src)) - return FALSE - return TRUE - -/proc/makeNewConstruct(mob/living/simple_animal/hostile/construct/ctype, mob/target, mob/stoner = null, cultoverride = 0, loc_override = null) - if(QDELETED(target)) - return - var/mob/living/simple_animal/hostile/construct/newstruct = new ctype((loc_override) ? (loc_override) : (get_turf(target))) - var/makeicon = newstruct.icon_state - var/holyness = newstruct.holy - flick("make_[makeicon][holyness]", newstruct) - playsound(newstruct, 'sound/effects/constructform.ogg', 50) - if(stoner) - newstruct.faction |= "[REF(stoner)]" - newstruct.master = stoner - var/datum/action/innate/seek_master/SM = new() - SM.Grant(newstruct) - newstruct.key = target.key - var/atom/movable/screen/alert/bloodsense/BS - if(newstruct.mind && ((stoner && iscultist(stoner)) || cultoverride) && SSticker && SSticker.mode) - SSticker.mode.add_cultist(newstruct.mind, 0) - if(iscultist(stoner) || cultoverride) - to_chat(newstruct, "You are still bound to serve the cult[stoner ? " and [stoner]":""], follow [stoner ? stoner.p_their() : "their"] orders and help [stoner ? stoner.p_them() : "them"] complete [stoner ? stoner.p_their() : "their"] goals at all costs.") - else if(stoner) - to_chat(newstruct, "You are still bound to serve your creator, [stoner], follow [stoner.p_their()] orders and help [stoner.p_them()] complete [stoner.p_their()] goals at all costs.") - newstruct.clear_alert("bloodsense") - BS = newstruct.throw_alert("bloodsense", /atom/movable/screen/alert/bloodsense) - if(BS) - BS.Cviewer = newstruct - newstruct.cancel_camera() - - -/obj/item/soulstone/proc/init_shade(mob/living/carbon/human/T, mob/user, message_user = 0 , mob/shade_controller) - if(!shade_controller) - shade_controller = T - new /obj/effect/decal/remains/human(T.loc) //Spawns a skeleton - T.stop_sound_channel(CHANNEL_HEARTBEAT) - T.invisibility = INVISIBILITY_ABSTRACT - T.dust_animation() - var/mob/living/simple_animal/shade/S = new /mob/living/simple_animal/shade(src) - S.AddComponent(/datum/component/soulstoned, src) - S.name = "Shade of [T.real_name]" - S.real_name = "Shade of [T.real_name]" - S.key = shade_controller.key - S.copy_languages(T, LANGUAGE_MIND)//Copies the old mobs languages into the new mob holder. - S.copy_languages(user, LANGUAGE_MASTER) - S.update_atom_languages() - grant_all_languages(FALSE, FALSE, TRUE) //Grants omnitongue - if(user) - S.faction |= "[REF(user)]" //Add the master as a faction, allowing inter-mob cooperation - if(user && iscultist(user)) - SSticker.mode.add_cultist(S.mind, 0) - S.cancel_camera() - name = "soulstone: Shade of [T.real_name]" - if(purified) - icon_state = "purified_soulstone2" - else - icon_state = "soulstone2" - if(user && (iswizard(user) || usability)) - to_chat(S, "Your soul has been captured! You are now bound to [user.real_name]'s will. Help [user.p_them()] succeed in [user.p_their()] goals at all costs.") - else if(user && iscultist(user)) - to_chat(S, "Your soul has been captured! You are now bound to the cult's will. Help them succeed in their goals at all costs.") - if(message_user && user) - to_chat(user, "Capture successful!: [T.real_name]'s soul has been ripped from [T.p_their()] body and stored within the soul stone.") - - -/obj/item/soulstone/proc/getCultGhost(mob/living/carbon/human/T, mob/user) - var/mob/dead/observer/chosen_ghost - - chosen_ghost = T.get_ghost(TRUE,TRUE) //Try to grab original owner's ghost first - - if(!chosen_ghost || !chosen_ghost.client) //Failing that, we grab a ghosts - var/list/consenting_candidates = pollGhostCandidates("Would you like to play as a Shade?", "Cultist", null, ROLE_CULTIST, 50, POLL_IGNORE_SHADE) - if(consenting_candidates.len) - chosen_ghost = pick(consenting_candidates) - if(!T) - return FALSE - if(!chosen_ghost || !chosen_ghost.client) - to_chat(user, "There were no spirits willing to become a shade.") - return FALSE - if(contents.len) //If they used the soulstone on someone else in the meantime - return FALSE - for(var/obj/item/W in T) - T.dropItemToGround(W) - init_shade(T, user , shade_controller = chosen_ghost) - qdel(T) - return TRUE diff --git a/code/modules/antagonists/wizard/equipment/spellbook.dm b/code/modules/antagonists/wizard/equipment/spellbook.dm index 69ff4bcfc2f5..4bd2f5c8a525 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook.dm @@ -281,18 +281,6 @@ item_path = /obj/item/scrying category = "Defensive" -/datum/spellbook_entry/item/soulstones - name = "Six Soul Stone Shards and the spell Artificer" - desc = "Soul Stone Shards are ancient tools capable of capturing and harnessing the spirits of the dead and dying. The spell Artificer allows you to create arcane machines for the captured souls to pilot." - item_path = /obj/item/storage/belt/soulstone/full - category = "Assistance" - -/datum/spellbook_entry/item/soulstones/Buy(mob/living/carbon/human/user,obj/item/spellbook/book) - . =..() - if(.) - user.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/construct(null)) - return . - /datum/spellbook_entry/item/necrostone name = "A Necromantic Stone" desc = "A Necromantic stone is able to resurrect three dead individuals as skeletal thralls for you to command." @@ -351,16 +339,6 @@ limit = 3 category = "Assistance" -/datum/spellbook_entry/item/mjolnir - name = "Mjolnir" - desc = "A mighty hammer on loan from Thor, God of Thunder. It crackles with barely contained power." - item_path = /obj/item/mjollnir - -/datum/spellbook_entry/item/singularity_hammer - name = "Singularity Hammer" - desc = "A hammer that creates an intensely powerful field of gravity where it strikes, pulling everything nearby to the point of impact." - item_path = /obj/item/singularityhammer - /datum/spellbook_entry/item/battlemage name = "Battlemage Armour" desc = "An ensorceled suit of armour, protected by a powerful shield. The shield can completely negate sixteen attacks before being permanently depleted." diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm index 96a41b2ac07b..27a3a343a907 100644 --- a/code/modules/antagonists/wizard/wizard.dm +++ b/code/modules/antagonists/wizard/wizard.dm @@ -172,7 +172,6 @@ antag_hud_name = "apprentice" var/datum/mind/master var/school = APPRENTICE_DESTRUCTION - outfit_type = /datum/outfit/wizard/apprentice wiz_age = APPRENTICE_AGE_MIN /datum/antagonist/wizard/apprentice/greet() @@ -252,7 +251,6 @@ /datum/antagonist/wizard/academy name = "Academy Teacher" - outfit_type = /datum/outfit/wizard/academy move_to_lair = FALSE /datum/antagonist/wizard/academy/equip_wizard() diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index 83abc98ed990..4920de28e364 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -121,6 +121,7 @@ "stamp-bard" = 'icons/stamp_icons/large_stamp-bard.png', "stamp-gold" = 'icons/stamp_icons/large_stamp-gold.png', "stamp-cybersun" = 'icons/stamp_icons/large_stamp-cybersun.png', + "stamp-biodynamics" = 'icons/stamp_icons/large_stamp-biodynamics.png', "stamp-donk" = 'icons/stamp_icons/large_stamp-donk.png' ) @@ -147,16 +148,23 @@ ) /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') +/datum/asset/simple/namespaced/tgfont + assets = list( + "tgfont.eot" = file("tgui/packages/tgfont/static/tgfont.eot"), + "tgfont.woff2" = file("tgui/packages/tgfont/static/tgfont.woff2"), + ) + parents = list( + "tgfont.css" = file("tgui/packages/tgfont/static/tgfont.css"), + ) + /datum/asset/simple/fonts assets = list( "sga.ttf" = 'html/sga.ttf' @@ -171,8 +179,8 @@ /datum/asset/spritesheet/chat name = "chat" -/datum/asset/spritesheet/chat/register() - InsertAll("emoji", 'icons/emoji.dmi') +/datum/asset/spritesheet/chat/create_spritesheets() + InsertAll("emoji", EMOJI_SET) // pre-loading all lanugage icons also helps to avoid meta InsertAll("language", 'icons/misc/language.dmi') // catch languages which are pulling icons from another file @@ -182,7 +190,6 @@ if (icon != 'icons/misc/language.dmi') var/icon_state = initial(L.icon_state) Insert("language-[icon_state]", icon, icon_state=icon_state) - ..() /datum/asset/simple/lobby assets = list( @@ -235,7 +242,6 @@ "hierophant" = 'icons/UI_Icons/Achievements/Boss/hierophant.png', "legion" = 'icons/UI_Icons/Achievements/Boss/legion.png', "miner" = 'icons/UI_Icons/Achievements/Boss/miner.png', - "swarmer" = 'icons/UI_Icons/Achievements/Boss/swarmer.png', "tendril" = 'icons/UI_Icons/Achievements/Boss/tendril.png', "featofstrength" = 'icons/UI_Icons/Achievements/Misc/featofstrength.png', "helbital" = 'icons/UI_Icons/Achievements/Misc/helbital.png', diff --git a/code/modules/atmospherics/auxgm/gas_types.dm b/code/modules/atmospherics/auxgm/gas_types.dm index fb0d7026a6d1..662b88046956 100644 --- a/code/modules/atmospherics/auxgm/gas_types.dm +++ b/code/modules/atmospherics/auxgm/gas_types.dm @@ -165,5 +165,30 @@ color = "#ffe" fusion_power = 0 fire_products = list(GAS_H2O = 1) + enthalpy = FIRE_HYDROGEN_ENERGY_RELEASED fire_burn_rate = 2 fire_temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST - 50 + +/datum/gas/chlorine + id = GAS_CHLORINE + specific_heat = 20 + name = "Chlorine" + flags = GAS_FLAG_DANGEROUS + moles_visible = MOLES_GAS_VISIBLE * 5 + gas_overlay = "nitrous_oxide" + color = "#FFFB89" + fusion_power = 0 + +/datum/gas/hydrogen_chloride + id = GAS_HYDROGEN_CHLORIDE + specific_heat = 40 + name = "Hydrogen Chloride" + flags = GAS_FLAG_DANGEROUS + moles_visible = MOLES_GAS_VISIBLE * 2 + gas_overlay = "nitrous_oxide" + color = "#5bfd45" + fusion_power = 0 + fire_products = list(GAS_CHLORINE = 1, GAS_H2O = 0.5) + enthalpy = 63000 + fire_burn_rate = 1 + fire_temperature = FIRE_MINIMUM_TEMPERATURE_TO_EXIST diff --git a/code/modules/atmospherics/gasmixtures/auxgm.dm b/code/modules/atmospherics/gasmixtures/auxgm.dm index b3a81dbb0e9c..e774d1060ec3 100644 --- a/code/modules/atmospherics/gasmixtures/auxgm.dm +++ b/code/modules/atmospherics/gasmixtures/auxgm.dm @@ -1,5 +1,5 @@ GLOBAL_LIST_INIT(hardcoded_gases, list(GAS_O2, GAS_N2, GAS_CO2, GAS_PLASMA)) //the main four gases, which were at one time hardcoded -GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(GAS_O2, GAS_N2, GAS_CO2, GAS_PLUOXIUM, GAS_STIMULUM, GAS_NITRYL))) //unable to react amongst themselves +GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(GAS_O2, GAS_N2, GAS_CO2, GAS_PLUOXIUM, GAS_STIMULUM, GAS_NITRYL, GAS_CHLORINE, GAS_HYDROGEN_CHLORIDE))) //unable to react amongst themselves // Auxgm // It's a send-up of XGM, like what baystation got. diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm index 00ca2d22f76c..b824c1d78d61 100644 --- a/code/modules/atmospherics/gasmixtures/reactions.dm +++ b/code/modules/atmospherics/gasmixtures/reactions.dm @@ -825,3 +825,32 @@ if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) air.set_temperature(clamp((air.return_temperature()*old_heat_capacity + energy_released)/new_heat_capacity,TCMB,INFINITY)) return REACTING + +/datum/gas_reaction/hydrogen_chloride_formation + priority = 11 + name = "Hydrogen Chloride formation" + id = "hydrogenchlorideformation" + +/datum/gas_reaction/hydrogen_chloride_formation/init_reqs() + min_requirements = list( + GAS_CHLORINE = 5, + GAS_HYDROGEN = 5, + "TEMP" = FIRE_MINIMUM_TEMPERATURE_TO_EXIST + ) + +/datum/gas_reaction/hydrogen_chloride_formation/react(datum/gas_mixture/air) + var/temperature = air.return_temperature() + var/old_heat_capacity = air.heat_capacity() + var/reaction_efficency = min((temperature/(FIRE_MINIMUM_TEMPERATURE_TO_EXIST*10)),air.get_moles(GAS_CHLORINE),air.get_moles(GAS_HYDROGEN)) + var/energy_released = reaction_efficency*185000 + if ((air.get_moles(GAS_CHLORINE) - reaction_efficency < 0)|| (air.get_moles(GAS_HYDROGEN) - (reaction_efficency) < 0) || energy_released <= 0) //Shouldn't produce gas from nothing. + return NO_REACTION + air.adjust_moles(GAS_HYDROGEN_CHLORIDE, reaction_efficency) + air.adjust_moles(GAS_HYDROGEN, -reaction_efficency) + air.adjust_moles(GAS_CHLORINE, -reaction_efficency) + + if(energy_released > 0) + var/new_heat_capacity = air.heat_capacity() + if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) + air.set_temperature(max(((temperature*old_heat_capacity + energy_released)/new_heat_capacity),TCMB)) + return REACTING diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index e5a1be0294d6..236c7b040d99 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -106,6 +106,11 @@ var/alarm_frequency = FREQ_ATMOS_ALARMS var/datum/radio_frequency/radio_connection + //anything outright hazardous (flammable, toxic, generally Weird) + var/list/filter_basic = list(GAS_CO2, GAS_PLASMA, GAS_NITROUS, GAS_BZ, GAS_TRITIUM, GAS_NITRYL, GAS_FREON, GAS_HYDROGEN, GAS_CHLORINE, GAS_HYDROGEN_CHLORIDE) + //anything that isn't o2 or n2. + var/list/filter_extra = list(GAS_CO2, GAS_PLASMA, GAS_NITROUS, GAS_BZ, GAS_TRITIUM, GAS_NITRYL, GAS_FREON, GAS_HYDROGEN, GAS_CHLORINE, GAS_HYDROGEN_CHLORIDE, GAS_H2O, GAS_HYPERNOB, GAS_STIMULUM, GAS_PLUOXIUM) + var/list/TLV = list( // Breathable air. "pressure" = new/datum/tlv(HAZARD_LOW_PRESSURE, WARNING_LOW_PRESSURE, WARNING_HIGH_PRESSURE, HAZARD_HIGH_PRESSURE), // kPa. Values are min2, min1, max1, max2 "temperature" = new/datum/tlv(T0C, T0C+10, T0C+40, T0C+66), @@ -122,7 +127,9 @@ GAS_NITRYL = new/datum/tlv/dangerous, GAS_PLUOXIUM = new/datum/tlv(-1, -1, 5, 6), // Unlike oxygen, pluoxium does not fuel plasma/tritium fires GAS_FREON = new/datum/tlv/dangerous, - GAS_HYDROGEN = new/datum/tlv/dangerous + GAS_HYDROGEN = new/datum/tlv/dangerous, + GAS_CHLORINE = new/datum/tlv/dangerous, + GAS_HYDROGEN_CHLORIDE = new/datum/tlv/dangerous ) /obj/machinery/airalarm/server // No checks here. @@ -142,7 +149,9 @@ GAS_NITRYL = new/datum/tlv/no_checks, GAS_PLUOXIUM = new/datum/tlv/no_checks, GAS_FREON = new/datum/tlv/no_checks, - GAS_HYDROGEN = new/datum/tlv/no_checks + GAS_HYDROGEN = new/datum/tlv/no_checks, + GAS_CHLORINE = new/datum/tlv/dangerous, + GAS_HYDROGEN_CHLORIDE = new/datum/tlv/dangerous ) heating_manage = FALSE @@ -163,7 +172,9 @@ GAS_NITRYL = new/datum/tlv/dangerous, GAS_PLUOXIUM = new/datum/tlv(-1, -1, 1000, 1000), // Unlike oxygen, pluoxium does not fuel plasma/tritium fires GAS_FREON = new/datum/tlv/dangerous, - GAS_HYDROGEN = new/datum/tlv/dangerous + GAS_HYDROGEN = new/datum/tlv/dangerous, + GAS_CHLORINE = new/datum/tlv/dangerous, + GAS_HYDROGEN_CHLORIDE = new/datum/tlv/dangerous ) heating_manage = FALSE @@ -542,7 +553,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 27) for(var/device_id in A.air_scrub_names) send_signal(device_id, list( "power" = 1, - "set_filters" = list(GAS_CO2, GAS_BZ), + "set_filters" = filter_basic, "scrubbing" = 1, "widenet" = 0 ), signal_source) @@ -556,20 +567,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 27) for(var/device_id in A.air_scrub_names) send_signal(device_id, list( "power" = 1, - "set_filters" = list( - GAS_CO2, - GAS_PLASMA, - GAS_H2O, - GAS_HYPERNOB, - GAS_NITROUS, - GAS_NITRYL, - GAS_TRITIUM, - GAS_BZ, - GAS_STIMULUM, - GAS_PLUOXIUM, - GAS_FREON, - GAS_HYDROGEN - ), + "set_filters" = filter_extra, "scrubbing" = 1, "widenet" = 1 ), signal_source) @@ -596,7 +594,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/airalarm, 27) for(var/device_id in A.air_scrub_names) send_signal(device_id, list( "power" = 1, - "set_filters" = list(GAS_CO2, GAS_BZ), + "set_filters" = filter_basic, "scrubbing" = 1, "widenet" = 0 ), signal_source) diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index f2e563c07b5e..cb6a1b9b0bb0 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -54,7 +54,9 @@ "caution" = /obj/machinery/portable_atmospherics/canister, "freon" = /obj/machinery/portable_atmospherics/canister/freon, "hydrogen" = /obj/machinery/portable_atmospherics/canister/hydrogen, - "fuel mix" = /obj/machinery/portable_atmospherics/canister/fuel + "fuel mix" = /obj/machinery/portable_atmospherics/canister/fuel, + "cl2" = /obj/machinery/portable_atmospherics/canister/chlorine, + "hcl" =/obj/machinery/portable_atmospherics/canister/hydrogen_chloride, ) /obj/machinery/portable_atmospherics/canister/interact(mob/user) @@ -170,6 +172,20 @@ air_contents.set_moles(GAS_HYDROGEN, 1000) air_contents.set_temperature(T20C) +/obj/machinery/portable_atmospherics/canister/chlorine + name = "chlorine canister" + desc = "chlorine" + icon_state = "greenys" + gas_type = GAS_CHLORINE + filled = 1 + +/obj/machinery/portable_atmospherics/canister/hydrogen_chloride + name = "hydrogen chloride canister" + desc = "awful" + icon_state = "greenyshaz" + gas_type = GAS_HYDROGEN_CHLORIDE + filled = 1 + /obj/machinery/portable_atmospherics/canister/fusion_test name = "fusion test canister" desc = "Don't be a badmin." diff --git a/code/modules/autowiki/pages/techweb.dm b/code/modules/autowiki/pages/techweb.dm index 0f4b87f9e2a2..42e58dd1cc66 100644 --- a/code/modules/autowiki/pages/techweb.dm +++ b/code/modules/autowiki/pages/techweb.dm @@ -9,9 +9,6 @@ if (!node.show_on_wiki) continue - if (!valid_node(node)) - continue - output += "\n\n" + include_template("Autowiki/TechwebEntry", list( "name" = escape_value(node.display_name), "description" = escape_value(node.description), @@ -21,9 +18,6 @@ return output -/datum/autowiki/techweb/proc/valid_node(datum/techweb_node/node) - return !node.experimental - /datum/autowiki/techweb/proc/generate_designs(list/design_ids) var/output = "" @@ -50,9 +44,6 @@ /datum/autowiki/techweb/experimental page = "Template:Autowiki/Content/Techweb/Experimental" -/datum/autowiki/techweb/experimental/valid_node(datum/techweb_node/node) - return node.experimental - /proc/sort_research_nodes(node_id_a, node_id_b) var/datum/techweb_node/node_a = SSresearch.techweb_nodes[node_id_a] var/datum/techweb_node/node_b = SSresearch.techweb_nodes[node_id_b] diff --git a/code/modules/awaymissions/capture_the_flag.dm b/code/modules/awaymissions/capture_the_flag.dm index 2f87eea6d2a7..5fc667c4db4a 100644 --- a/code/modules/awaymissions/capture_the_flag.dm +++ b/code/modules/awaymissions/capture_the_flag.dm @@ -171,6 +171,7 @@ icon = 'icons/obj/device.dmi' icon_state = "syndbeacon" resistance_flags = INDESTRUCTIBLE + processing_flags = START_PROCESSING_MANUALLY var/team = WHITE_TEAM var/team_span = "" //Capture the Flag scoring @@ -194,10 +195,10 @@ /obj/machinery/capture_the_flag/Initialize() . = ..() - GLOB.poi_list |= src + SSpoints_of_interest.make_point_of_interest(src) /obj/machinery/capture_the_flag/Destroy() - GLOB.poi_list.Remove(src) + SSpoints_of_interest.remove_point_of_interest(src) return ..() /obj/machinery/capture_the_flag/process() @@ -347,6 +348,7 @@ /obj/machinery/capture_the_flag/proc/start_ctf() ctf_enabled = TRUE + START_PROCESSING(SSmachines, src) for(var/d in dead_barricades) var/obj/effect/ctf/dead_barricade/D = d D.respawn() @@ -378,6 +380,7 @@ /obj/machinery/capture_the_flag/proc/stop_ctf() ctf_enabled = FALSE + STOP_PROCESSING(SSmachines, src) arena_reset = FALSE var/area/A = get_area(src) for(var/i in GLOB.mob_list) diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 0bf0b74c715a..26361b99cfc6 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -61,11 +61,11 @@ if(instant || (roundstart && (mapload || (SSticker && SSticker.current_state > GAME_STATE_SETTING_UP)))) INVOKE_ASYNC(src, PROC_REF(create)) else if(ghost_usable) - GLOB.poi_list |= src + SSpoints_of_interest.make_point_of_interest(src) LAZYADD(GLOB.mob_spawners[name], src) /obj/effect/mob_spawn/Destroy() - GLOB.poi_list -= src + SSpoints_of_interest.remove_point_of_interest(src) var/list/spawners = GLOB.mob_spawners[name] LAZYREMOVE(spawners, src) if(!LAZYLEN(spawners)) diff --git a/code/modules/awaymissions/mission_code/Academy.dm b/code/modules/awaymissions/mission_code/Academy.dm index 6f28cc724b55..850d0e91ba09 100644 --- a/code/modules/awaymissions/mission_code/Academy.dm +++ b/code/modules/awaymissions/mission_code/Academy.dm @@ -74,12 +74,6 @@ if(prob(1)) mezzer() - -/obj/item/clothing/glasses/meson/truesight - name = "The Lens of Truesight" - desc = "I can see forever!" - icon_state = "monocle" - /obj/structure/academy_wizard_spawner name = "Academy Defensive System" desc = "Made by Abjuration, Inc." @@ -152,14 +146,6 @@ icon_state = "forge_off" STOP_PROCESSING(SSobj, src) -/datum/outfit/wizard/academy - name = "Academy Wizard" - r_pocket = null - r_hand = null - suit = /obj/item/clothing/suit/wizrobe/red - head = /obj/item/clothing/head/wizard/red - backpack_contents = list(/obj/item/storage/box/survival = 1) - /obj/item/dice/d20/fate name = "\improper Die of Fate" desc = "A die with twenty sides. You can feel unearthly energies radiating from it. Using this might be VERY risky." @@ -348,8 +334,6 @@ new /obj/item/clothing/suit/wizrobe(drop_location()) new /obj/item/clothing/head/wizard(drop_location()) new /obj/item/clothing/gloves/combat/wizard(drop_location()) - new /obj/item/clothing/suit/wizrobe/magusblue(drop_location()) - new /obj/item/clothing/head/wizard/magus(drop_location()) new /obj/item/staff(drop_location()) new /obj/structure/mirror/magic(drop_location()) @@ -357,8 +341,6 @@ name = "Butler" uniform = /obj/item/clothing/under/suit/black_really shoes = /obj/item/clothing/shoes/laceup - head = /obj/item/clothing/head/bowler - glasses = /obj/item/clothing/glasses/monocle gloves = /obj/item/clothing/gloves/color/white /obj/effect/proc_holder/spell/targeted/summonmob diff --git a/code/modules/awaymissions/mission_code/caves.dm b/code/modules/awaymissions/mission_code/caves.dm index b7ab7c454d98..abaaceefd604 100644 --- a/code/modules/awaymissions/mission_code/caves.dm +++ b/code/modules/awaymissions/mission_code/caves.dm @@ -58,4 +58,4 @@ /obj/item/paper/fluff/awaymissions/caves/mech_notice name = "NOTICE!! paper" - default_raw_text = "
    NOTICE!!


    Although you may seem indestructible in a mech, remember, THIS SHIT ISN'T LAVA PROOF!! The boys have already had to deal with loosing the last two to salvage because the dumbass thought he could just wade through the lower lakes like it was nothing. The fact he even managed to get back without being fused with what was left of the mech is a miracle in itself. They're built to be resistant against extreme heat, not heat PROOF!


    Robotics Team" + default_raw_text = "
    NOTICE!!


    Although you may seem indestructible in an exosuit, remember, THIS SHIT ISN'T LAVA PROOF!! The boys have already had to deal with loosing the last two to salvage because the dumbass thought he could just wade through the lower lakes like it was nothing. The fact he even managed to get back without being fused with what was left of the exosuit is a miracle in itself. They're built to be resistant against extreme heat, not heat PROOF!


    Robotics Team" diff --git a/code/modules/awaymissions/mission_code/challenge.dm b/code/modules/awaymissions/mission_code/challenge.dm index 05d079220151..6f8bb473b77a 100644 --- a/code/modules/awaymissions/mission_code/challenge.dm +++ b/code/modules/awaymissions/mission_code/challenge.dm @@ -35,3 +35,13 @@ /obj/machinery/power/emitter/energycannon/RefreshParts() return + +/obj/machinery/power/emitter/energycannon/ctf + processing_flags = START_PROCESSING_MANUALLY + +/obj/machinery/power/emitter/energycannon/ctf/proc/toggle_ctf(ctf_enabled) + src.active = ctf_enabled + if(ctf_enabled) + START_PROCESSING(SSmachines, src) + else + STOP_PROCESSING(SSmachines, src) diff --git a/code/modules/awaymissions/mission_code/snowdin.dm b/code/modules/awaymissions/mission_code/snowdin.dm index f2dbb91f3f0f..c12b09fa4e05 100644 --- a/code/modules/awaymissions/mission_code/snowdin.dm +++ b/code/modules/awaymissions/mission_code/snowdin.dm @@ -129,12 +129,6 @@ dynamic_lighting = DYNAMIC_LIGHTING_ENABLED requires_power = TRUE -/area/shuttle/snowdin/elevator1 - name = "Excavation Elevator" - -/area/shuttle/snowdin/elevator2 - name = "Mining Elevator" - //liquid plasma!!!!!!// /turf/open/floor/plasteel/dark/snowdin @@ -507,13 +501,11 @@ /obj/effect/spawner/lootdrop/snowdin/dungeonheavy name = "dungeon heavy" - loot = list(/obj/item/singularityhammer = 25, - /obj/item/mjollnir = 10, - /obj/item/fireaxe = 25, + loot = list(/obj/item/melee/axe/fire = 25, /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, @@ -530,7 +522,7 @@ loot = list(/obj/item/stack/sheet/mineral/snow{amount = 25} = 10, /obj/item/toy/snowball = 15, /obj/item/shovel = 10, - /obj/item/spear = 8, + /obj/item/melee/spear = 8, ) //special items//-- @@ -579,7 +571,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 efe429b86b73..f0131d830cd0 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 deleted file mode 100644 index 063966c86d63..000000000000 --- a/code/modules/awaymissions/mission_code/stationCollision.dm +++ /dev/null @@ -1,155 +0,0 @@ -/* Station-Collision(sc) away mission map specific stuff - * - * Notes: - * Feel free to use parts of this map, or even all of it for your own project. Just include me in the credits :) - * - * Some of this code unnecessary, but the intent is to add a little bit of everything to serve as examples - * for anyone who wants to make their own stuff. - * - * Contains: - * Landmarks - * Guns - * Safe code hints - * Captain's safe - * Modified Nar'Sie - */ - - - -/* - * Landmarks - Instead of spawning a new object type, I'll spawn the bible using a landmark! - */ -/obj/effect/landmark/sc_bible_spawner - name = "Safecode hint spawner" - -/obj/effect/landmark/sc_bible_spawner/Initialize() - ..() - var/obj/item/storage/book/bible/B = new /obj/item/storage/book/bible/booze(loc) - B.name = "The Holy book of the Geometer" - B.deity_name = "Narsie" - B.icon_state = "melted" - B.item_state = "melted" - B.lefthand_file = 'icons/mob/inhands/misc/books_lefthand.dmi' - B.righthand_file = 'icons/mob/inhands/misc/books_righthand.dmi' - new /obj/item/paper/fluff/awaymissions/stationcollision/safehint_paper_bible(B) - new /obj/item/pen(B) - return INITIALIZE_HINT_QDEL - -/* - * Guns - I'm making these specifically so that I dont spawn a pile of fully loaded weapons on the map. - */ -//Captain's retro laser - Fires practice laser shots instead. -/obj/item/gun/energy/laser/retro/sc_retro - name ="retro laser" - icon_state = "retro" - desc = "An older model of the basic lasergun, no longer used by Nanotrasen's security or military forces." -// projectile_type = "/obj/projectile/practice" - -//Syndicate sub-machine guns. -/obj/item/gun/ballistic/automatic/smg/c20r/sc_c20r - -/obj/item/gun/ballistic/automatic/smg/c20r/sc_c20r/Initialize() - . = ..() - for(var/ammo in magazine.stored_ammo) - if(prob(95)) //95% chance - magazine.stored_ammo -= ammo - -//Barman's shotgun -/obj/item/gun/ballistic/shotgun/sc_pump - -/obj/item/gun/ballistic/shotgun/sc_pump/Initialize() - . = ..() - for(var/ammo in magazine.stored_ammo) - if(prob(95)) //95% chance - magazine.stored_ammo -= ammo - -//Lasers -/obj/item/gun/energy/laser/practice/sc_laser - name = "Old laser" - desc = "A once potent weapon, years of dust have collected in the chamber and lens of this weapon, weakening the beam significantly." - -/* - * Safe code hints - */ - -//These vars hold the code itself, they'll be generated at round-start -GLOBAL_VAR_INIT(sc_safecode1, "[rand(0,9)]") -GLOBAL_VAR_INIT(sc_safecode2, "[rand(0,9)]") -GLOBAL_VAR_INIT(sc_safecode3, "[rand(0,9)]") -GLOBAL_VAR_INIT(sc_safecode4, "[rand(0,9)]") -GLOBAL_VAR_INIT(sc_safecode5, "[rand(0,9)]") - -//Pieces of paper actually containing the hints -/obj/item/paper/fluff/awaymissions/stationcollision/safehint_paper_prison - name = "smudged paper" - -/obj/item/paper/fluff/awaymissions/stationcollision/safehint_paper_prison/Initialize() - . = ..() - default_raw_text = "The ink is smudged, you can only make out a couple numbers: '[GLOB.sc_safecode1]**[GLOB.sc_safecode4]*'" - -/obj/item/paper/fluff/awaymissions/stationcollision/safehint_paper_hydro - name = "shredded paper" -/obj/item/paper/fluff/awaymissions/stationcollision/safehint_paper_hydro/Initialize() - . = ..() - default_raw_text = "Although the paper is shredded, you can clearly see the number: '[GLOB.sc_safecode2]'" - -/obj/item/paper/fluff/awaymissions/stationcollision/safehint_paper_caf - name = "blood-soaked paper" - //This does not have to be in New() because it is a constant. There are no variables in it i.e. [sc_safcode] - default_raw_text = "This paper is soaked in blood, it is impossible to read any text." - -/obj/item/paper/fluff/awaymissions/stationcollision/safehint_paper_bible - name = "hidden paper" -/obj/item/paper/fluff/awaymissions/stationcollision/safehint_paper_bible/Initialize() - . = ..() - default_raw_text = {"It would appear that the pen hidden with the paper had leaked ink over the paper. - However you can make out the last three digits:'[GLOB.sc_safecode3][GLOB.sc_safecode4][GLOB.sc_safecode5]' - "} - -/obj/item/paper/fluff/awaymissions/stationcollision/safehint_paper_shuttle - default_raw_text = {"Target: Research-station Epsilon
    - Objective: Prototype weaponry. The captain likely keeps them locked in her safe.
    -
    - Our on-board spy has learned the code and has hidden away a few copies of the code around the station. Unfortunatly he has been captured by security - Your objective is to split up, locate any of the papers containing the captain's safe code, open the safe and - secure anything found inside. If possible, recover the imprisioned syndicate operative and receive the code from him.
    -
    - As always, eliminate anyone who gets in the way.
    -
    - Your assigned ship is designed specifically for penetrating the hull of another station or ship with minimal damage to operatives. - It is completely fly-by-wire meaning you have just have to enjoy the ride and when the red light comes on... find something to hold onto! - "} -/* - * Captain's safe - */ -/obj/item/storage/secure/safe/sc_ssafe - name = "Captain's secure safe" - -/obj/item/storage/secure/safe/sc_ssafe/Initialize() - . = ..() - l_code = "[GLOB.sc_safecode1][GLOB.sc_safecode2][GLOB.sc_safecode3][GLOB.sc_safecode4][GLOB.sc_safecode5]" - l_set = 1 - new /obj/item/gun/energy/mindflayer(src) - new /obj/item/soulstone(src) - new /obj/item/clothing/suit/space/hardsuit/cult(src) - //new /obj/item/teleportation_scroll(src) - new /obj/item/stack/ore/diamond(src) - -/* - * Modified Nar'Sie - */ -/obj/singularity/narsie/mini - desc = "Your body becomes weak and your feel your mind slipping away as you try to comprehend what you know can't be possible." - move_self = 0 //Contianed narsie does not move! - grav_pull = 0 //Contained narsie does not pull stuff in! -//Override this to prevent no adminlog runtimes and admin warnings about a singularity without containment -/obj/singularity/narsie/mini/admin_investigate_setup() - return - -/obj/singularity/narsie/mini/process() - eat() - if(prob(25)) - mezzer() - -/obj/singularity/narsie/mini/ex_act() - return diff --git a/code/modules/awaymissions/mission_code/wildwest.dm b/code/modules/awaymissions/mission_code/wildwest.dm deleted file mode 100644 index 26c6b4823dce..000000000000 --- a/code/modules/awaymissions/mission_code/wildwest.dm +++ /dev/null @@ -1,47 +0,0 @@ -/* Code for the Wild West map by Brotemis - * Contains: - * Wish Granter - * Meat Grinder - */ - -///////////////Meatgrinder////////////// - - -/obj/effect/meatgrinder - name = "Meat Grinder" - desc = "What is that thing?" - density = TRUE - anchored = TRUE - icon = 'icons/mob/blob.dmi' - icon_state = "blobpod" - var/triggered = 0 - -/obj/effect/meatgrinder/Initialize() - . = ..() - var/static/list/loc_connections = list( - COMSIG_ATOM_ENTERED = PROC_REF(on_entered), - ) - AddElement(/datum/element/connect_loc, loc_connections) - -/obj/effect/meatgrinder/proc/on_entered(datum/source, atom/movable/AM) - SIGNAL_HANDLER - Bumped(AM) - -/obj/effect/meatgrinder/Bumped(atom/movable/AM) - - if(triggered) - return - if(!ishuman(AM)) - return - - var/mob/living/carbon/human/M = AM - - if(M.stat != DEAD && M.ckey) - visible_message("[M] triggered [src]!") - triggered = 1 - - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(3, 1, src) - s.start() - explosion(M, 1, 0, 0, 0) - qdel(src) diff --git a/code/modules/cargo/blackmarket/blackmarket_item.dm b/code/modules/cargo/blackmarket/blackmarket_item.dm index cbadddcf1221..00ed7e3bee38 100644 --- a/code/modules/cargo/blackmarket/blackmarket_item.dm +++ b/code/modules/cargo/blackmarket/blackmarket_item.dm @@ -24,23 +24,56 @@ var/stock_min = 1 /// Maximum amount that there should be of this item in the market if generated randomly. var/stock_max = 0 + /// Whether the item is visible and purchasable on the market + var/available = TRUE /// Probability for this item to be available. Used by SSblackmarket on init. var/availability_prob = 0 + /// If this item should be more or less likely to spawn than usual. Positive is more likely, negative is less + var/weight = 0 + /// If this item is affected by avalibility weight. For items that shouldnt appear on their own (paired items), should always appear, or items paticularly rare or powerful that we dont want showing up too often + var/spawn_weighting // Should there be an unlimited stock of an item var/unlimited = FALSE /// Should another item spawn alongside this one in the catalogue? - var/datum/blackmarket_item/pair_item + var/list/pair_item = null + /datum/blackmarket_item/New() if(isnull(price)) - price = rand(price_min, price_max) + randomize_price() if(isnull(stock)) - stock = rand(stock_min, stock_max) + randomize_stock() + if(isnull(spawn_weighting)) + if(availability_prob == 0 || availability_prob == 100) + spawn_weighting = FALSE + else + spawn_weighting = TRUE /// Used for spawning the wanted item, override if you need to do something special with the item. /datum/blackmarket_item/proc/spawn_item(loc) return new item(loc) +/datum/blackmarket_item/proc/randomize_price() + price = rand(price_min, price_max) + +/datum/blackmarket_item/proc/randomize_stock() + stock = rand(stock_min, stock_max) + +/datum/blackmarket_item/proc/cycle(price = TRUE, availibility = TRUE, stock = FALSE, force_appear = FALSE) + if(price) + randomize_price() + if(stock) + randomize_stock() + if(availibility) + if(spawn_weighting ? prob(max(0, (availability_prob + (weight * 10)))) : prob(availability_prob)) + available = TRUE + weight-- + else + available = FALSE + weight++ + if(force_appear) + available = TRUE + /// Buys the item and makes SSblackmarket handle it. /datum/blackmarket_item/proc/buy(obj/item/blackmarket_uplink/uplink, mob/buyer, shipping_method) // Sanity diff --git a/code/modules/cargo/blackmarket/blackmarket_items/ammo.dm b/code/modules/cargo/blackmarket/blackmarket_items/ammo.dm new file mode 100644 index 000000000000..d5489edeb3e0 --- /dev/null +++ b/code/modules/cargo/blackmarket/blackmarket_items/ammo.dm @@ -0,0 +1,295 @@ +/datum/blackmarket_item/ammo + category = "Ammunition" + +/datum/blackmarket_item/ammo/shotgun_dart + name = "Shotgun Dart" + desc = "These handy darts can be filled up with any chemical and be shot with a shotgun! \ + Prank your friends by shooting them with laughter! \ + Not recommended for comercial use." + item = /obj/item/ammo_casing/shotgun/dart + + price_min = 10 + price_max = 50 + stock_min = 10 + stock_max = 60 + availability_prob = 40 + +/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_himehabu + + price_min = 100 + price_max = 200 + stock_min = 6 + stock_max = 10 + availability_prob = 0 + +/datum/blackmarket_item/ammo/himehabu_box + name = ".22 LR Ammo Box" + desc = "A 75 round ammo box of .22 LR. Trust me, you'll need every shot." + item = /obj/item/ammo_box/c22lr_box + + price_min = 100 + price_max = 300 + stock_min = 6 + stock_max = 10 + availability_prob = 0 + +/datum/blackmarket_item/ammo/a357_box + name = ".357 Ammo Box" + desc = "A 50 round ammo box of .357." + item = /obj/item/ammo_box/a357_box + + price_min = 150 + price_max = 500 + stock_min = 3 + stock_max = 6 + availability_prob = 0 + +/datum/blackmarket_item/ammo/e40_mag + name = "Eoehoma .299 Caseless Magazine" + desc = "A 30 round magazine for the E-40 Hybrid Rifle." + item = /obj/item/ammo_box/magazine/e40 + + price_min = 750 + price_max = 1250 + 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." + item = /obj/item/ammo_box/magazine/smgm9mm + + price_min = 500 + price_max = 1000 + stock_min = 4 + stock_max = 6 + availability_prob = 0 + +/datum/blackmarket_item/ammo/model_h_mag + name = "Model H Magazine" + desc = "A 10 round magazine for Model H slug pistol." + item = /obj/item/ammo_box/magazine/modelh + + price_min = 500 + price_max = 1000 + stock_max = 4 + availability_prob = 0 + +/datum/blackmarket_item/ammo/sgg_stripper + name = "8x58mm Stripper Clip" + desc = "A five round 8x58mm stripper clip for use with the SGG-669C. Also doubles as a paperweight, because of course it does. Fucking Solarians." + item = /obj/item/ammo_box/a858 + + price_min = 500 + price_max = 1000 + stock_min = 6 + stock_max = 8 + availability_prob = 0 + +/datum/blackmarket_item/ammo/pistole_c_mag + name = "5.56 Caseless Magazine" + desc = "A 12 round magazine for the Pistole Cheese." + item = /obj/item/ammo_box/magazine/pistol556mm + + price_min = 250 + price_max = 750 + stock = 2 + availability_prob = 0 + +/datum/blackmarket_item/ammo/proto_gauss_mag + name = "Prototype Gauss Rifle Magazine" + desc = "A 25 round ferromagnetic pellet magazine for the prototype gauss rifle. Choking hazard, keep pellets away from children under the age of 5." + item = /obj/item/ammo_box/magazine/gauss + + price_min = 500 + price_max = 800 + 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." + item = /obj/item/ammo_box/a762_stripper + + price_min = 500 + price_max = 750 + stock_min = 4 + stock_max = 6 + availability_prob = 0 + +/datum/blackmarket_item/ammo/carbine_mag + name = "SKM-24v Magazine" + desc = "A 30 round magazine of 4.6x30mm for the SKM-24v. A hermit classic." + item = /obj/item/ammo_box/magazine/skm_545_39 + + price_min = 500 + price_max = 1000 + stock_min = 3 + stock_max = 5 + availability_prob = 40 + +/datum/blackmarket_item/ammo/skm_extended + name = "Extended SKM Magazine" + desc = "An extended 40 round 7.62x40mm CLIP magazine for the SKM family of assault rifles. Extra curves mean extra ammo." + item = /obj/item/ammo_box/magazine/skm_762_40/extended + + price_min = 1000 + price_max = 3000 + stock_max = 4 + availability_prob = 40 + +/datum/blackmarket_item/ammo/skm_drum + name = "SKM Drum Magazine" + desc = "Do you have too much ammo on your hands? Do you have someone you really hate? \ + Do you want them to be absolutely suppressed for the next 15 seconds? \ + This 75 round 7.62x40mm CLIP drum magazine is perfect for you! (SKM not included.)" + item = /obj/item/ammo_box/magazine/skm_762_40/drum + + price_min = 1500 + price_max = 3500 + stock = 2 + availability_prob = 20 + +/datum/blackmarket_item/ammo/damaged_cell + name = "Discount Weapon Power Cells" + desc = "These cells got a little banged up during a raid by GOLD authorities, but they still should be safe to use. Probably." + item = /obj/item/stock_parts/cell/gun + + price_min = 100 + price_max = 400 + stock_min = 5 + stock_max = 10 + availability_prob = 80 + +/datum/blackmarket_item/ammo/damaged_cell/spawn_item(loc) + var/obj/item/stock_parts/cell/damaged_cell = ..() + damaged_cell.name = "dented weapon power cell" + damaged_cell.desc = "A rechargeable electrochemical power cell. This one doesn't appear to be in the greatest condition." + if(prob(35)) + damaged_cell.rigged = TRUE + damaged_cell.show_rigged = FALSE + + return new damaged_cell(loc) + +/datum/blackmarket_item/ammo/advanced_weapon_cell + name = "Upgraded Weapon Power Cells" + desc = "These upgraded weapon powercells come with twice the capacity of the standard cells, and quality checked to make sure they won't explode!" + item = /obj/item/stock_parts/cell/gun/upgraded + + price_min = 1000 + price_max = 1750 + stock_min = 2 + stock_max = 4 + availability_prob = 25 + +/datum/blackmarket_item/ammo/huge_weapon_cell + name = "Extra Large Weapon Power Cells" + desc = "We're way past double A now. These extra-large power cells (in both charge and size!) are purpose built for the most heavy duty energy weapons." + item = /obj/item/stock_parts/cell/gun/large + + price_min = 2500 + price_max = 4000 + stock = 2 + availability_prob = 20 + spawn_weighting = FALSE + +/datum/blackmarket_item/ammo/mecha_hades_ammo + name = "FNX-99 Incediary Ammo" + desc = "A box of 24 incendiary shells for the FNX-99 mounted carbine." + item = /obj/item/mecha_ammo/incendiary + + price_min = 250 + price_max = 350 + stock_min = 3 + 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 + +/datum/blackmarket_item/ammo/a4570hp + name = ".45-70 Hollow Point Ammo Box" + desc = "Put the hollow in hollow point by blowing a crater in some random sod with this devastating .45-70 cartridge." + item = /obj/item/ammo_box/a4570/hp + + price_min = 600 + price_max = 1000 + stock_min = 3 + stock_max = 5 + availability_prob = 20 + +/datum/blackmarket_item/ammo/a4570explo + name = "Single .45-70 Explosive Round" + desc = "If you need to fuck someone, hard, we got just the thing. Only one round, though, hope you got good aim." + item = /obj/item/ammo_casing/a4570/explosive + + price_min = 400 + price_max = 800 //still an exorbitantly high price for one round that you might not even hit + stock_min = 2 + stock_max = 10 + availability_prob = 10 + +/datum/blackmarket_item/ammo/c38hotshot + name = ".38 Hearth Ammo Box" + desc = "We got our ship cook to marinade some .38 in some hearthwine we pocketed off some hunters. It'll cook your targets to a nice well done." + item = /obj/item/ammo_box/c38/hotshot + + price_min = 300 + price_max = 500 + stock_min = 3 + stock_max = 8 + availability_prob = 50 + +/datum/blackmarket_item/ammo/c38iceblox + name = ".38 Chilled Ammo Box" + desc = "One of our runners accidentally spilled some .38 into a fucking pristine icewine shipment. It'll freeze your targets faster than our runner froze solid outside for making a mess." + item = /obj/item/ammo_box/c38/iceblox + + price_min = 300 + price_max = 500 + stock_min = 3 + stock_max = 8 + availability_prob = 50 diff --git a/code/modules/cargo/blackmarket/blackmarket_items/clothing.dm b/code/modules/cargo/blackmarket/blackmarket_items/clothing.dm index a4c4195beca0..677b82624bae 100644 --- a/code/modules/cargo/blackmarket/blackmarket_items/clothing.dm +++ b/code/modules/cargo/blackmarket/blackmarket_items/clothing.dm @@ -11,15 +11,26 @@ stock_max = 5 availability_prob = 80 -/datum/blackmarket_item/clothing/crown - name = "Crown" - desc = "A beautiful golden crown, rich with history and pedigree. Better worn than left to collect dust in a museum, right?" - item = /obj/item/clothing/head/crown/fancy +/datum/blackmarket_item/clothing/straitjacket + name = "Straitjacket" + desc = "These straitjackets might be a tight fit, but you can certain the poor sod wont be getting away anytime soon." + item = /obj/item/clothing/suit/straight_jacket - price_min = 1000 - price_max = 2000 - stock_max = 1 - availability_prob = 20 + price_min = 500 + price_max = 1000 + stock_max = 3 + availability_prob = 40 + +/datum/blackmarket_item/clothing/surplus_uniform + name = "Surplus Combat Uniforms" + desc = "A mass produced and non-descript surplus combat uniform. For when you need to look like another faceless thug in the crowd." + item = /obj/item/clothing/under/rank/security/officer/military + + price_min = 50 + price_max = 200 + stock_min = 5 + stock_max = 10 + availability_prob = 80 /datum/blackmarket_item/clothing/galaxy_blue name = "Blue Galaxy Suit" @@ -98,11 +109,31 @@ new /obj/item/clothing/head/helmet/bulletproof/x11/frontier(B) return B +/datum/blackmarket_item/clothing/frontiersmen_armor_fireproof + name = "Fireproof Armor Set" + desc = "Get it while it's hot! This fireproofed armor and uniform set is made with a pre-Night Of Fire miracle material that renders it almost impervious to flames. The Frontiersmen swear by the stuff. It's kept each of it's previous owners safe until they passed away from illness." + item = /obj/item/storage/box + + price_min = 1000 + price_max = 1750 + stock_max = 3 + availability_prob = 50 + +/datum/blackmarket_item/clothing/frontiersmen_armor_fireproof/spawn_item(loc) + var/obj/item/storage/box/B = ..() + B.name = "Fireproof Armor Set Box" + B.desc = "A singed box with some folded clothes and a helmet inside." + new /obj/item/clothing/suit/armor/frontier/fireproof(B) + new /obj/item/clothing/head/helmet/bulletproof/x11/frontier/fireproof(B) + new /obj/item/clothing/under/frontiersmen/fireproof(B) + new /obj/item/clothing/mask/gas/frontiersmen(B) + return B + /datum/blackmarket_item/clothing/gezena_armor name = "Raksha-Plating vest" desc = "Genuine armor vests used by the PGF Marine Corp. If a military guy in a cape comes by, play dumb." item = /obj/item/clothing/suit/armor/gezena/marine - pair_item = /datum/blackmarket_item/clothing/gezena_helmet + pair_item = list(/datum/blackmarket_item/clothing/gezena_helmet) price_min = 750 price_max = 1250 @@ -137,6 +168,54 @@ new /obj/item/clothing/head/helmet/space(B) return B +/datum/blackmarket_item/clothing/syndie_spacesuit_set + name = "\improper Syndicate Branded Spacesuit Box" + desc = "An armored syndicate softsuit, popular among the ACLF operatives who were too broke to get an actual hardsuit." + item = /obj/item/storage/box/syndie_kit + + price_min = 750 + price_max = 2500 + stock_max = 3 + availability_prob = 50 + +/datum/blackmarket_item/clothing/syndie_spacesuit_set/spawn_item(loc) + var/obj/item/storage/box/syndie_kit/B = ..() + B.name = "Spacesuit Box" + B.desc = "It has a Syndicate logo on it." + var/suit_color = pick(list("red","green","dark green","blue","orange","black","black-green","black-blue","black-orange","black-red")) + switch(suit_color) + if("red") + new /obj/item/clothing/head/helmet/space/syndicate(B) + new /obj/item/clothing/suit/space/syndicate(B) + if("green") + new /obj/item/clothing/head/helmet/space/syndicate/green(B) + new /obj/item/clothing/suit/space/syndicate/green(B) + if("dark-green") + new /obj/item/clothing/head/helmet/space/syndicate/green/dark(B) + new /obj/item/clothing/suit/space/syndicate/green/dark(B) + if("orange") + new /obj/item/clothing/head/helmet/space/syndicate/orange(B) + new /obj/item/clothing/suit/space/syndicate/orange(B) + if("blue") + new /obj/item/clothing/head/helmet/space/syndicate/blue(B) + new /obj/item/clothing/suit/space/syndicate/blue(B) + if("black") + new /obj/item/clothing/head/helmet/space/syndicate/black(B) + new /obj/item/clothing/suit/space/syndicate/black(B) + if("black-green") + new /obj/item/clothing/head/helmet/space/syndicate/black/green(B) + new /obj/item/clothing/suit/space/syndicate/black/green(B) + if("black-blue") + new /obj/item/clothing/head/helmet/space/syndicate/black/blue(B) + new /obj/item/clothing/suit/space/syndicate/black/blue(B) + if("black-orange") + new /obj/item/clothing/head/helmet/space/syndicate/black/orange(B) + new /obj/item/clothing/suit/space/syndicate/black/orange(B) + if("black-red") + new /obj/item/clothing/head/helmet/space/syndicate/black/red(B) + new /obj/item/clothing/suit/space/syndicate/black/red(B) + return B + /datum/blackmarket_item/clothing/chameleon_hat name = "Chameleon Hat" desc = "Pick any hat you want with this Handy device. Not Quality Tested." @@ -147,6 +226,17 @@ stock_max = 2 availability_prob = 70 +/datum/blackmarket_item/clothing/cham_kit + name = "Chameleon Kit" + desc = "Not sure what to wear? This adaptive set of clothing can change to suit whatever you desire! Quality tested." + item = /obj/item/storage/box/syndie_kit/chameleon + + price_min = 1000 + price_max = 2500 + stock_max = 2 + availability_prob = 10 + spawn_weighting = FALSE + /datum/blackmarket_item/clothing/combatmedic_suit name = "Combat Medic Hardsuit" desc = "A discarded combat medic hardsuit, found in the ruins of a carpet bombed xeno hive. Definitely used, but as sturdy as an anchor." @@ -164,7 +254,7 @@ price_min = 1500 price_max = 2500 - stock = 1 + stock_max = 3 availability_prob = 30 /datum/blackmarket_item/clothing/frontiersmen_hardsuit diff --git a/code/modules/cargo/blackmarket/blackmarket_items/consumables.dm b/code/modules/cargo/blackmarket/blackmarket_items/consumables.dm index e3a20e0e8905..2d9f3af83c06 100644 --- a/code/modules/cargo/blackmarket/blackmarket_items/consumables.dm +++ b/code/modules/cargo/blackmarket/blackmarket_items/consumables.dm @@ -17,10 +17,10 @@ desc = "A random cocktail of luxury drugs that are sure to put a smile on your face!" item = /obj/item/storage/pill_bottle - stock_min = 2 - stock_max = 3 - price_min = 200 - price_max = 500 + stock_min = 4 + stock_max = 6 + price_min = 50 + price_max = 300 availability_prob = 50 /datum/blackmarket_item/consumable/suspicious_pills/spawn_item(loc) @@ -42,6 +42,28 @@ price_max = 60 availability_prob = 50 +/datum/blackmarket_item/consumable/cannabis + name = "Cannabis Leaves" + desc = "Homegrown cannabis, fresh off the garden just for your pleasure!" + item = /obj/item/reagent_containers/food/snacks/grown/cannabis + + stock_min = 4 + stock_max = 6 + price_min = 50 + price_max = 300 + availability_prob = 50 + +/datum/blackmarket_item/consumable/syndie_cigs + name = "Syndicate Cigarettes" + desc = "Who said smoking was bad for you? These omnizine laced cigarettes will have you feeling like a million bucks!" + item = /obj/item/storage/fancy/cigarettes/cigpack_syndicate + + stock_min = 4 + stock_max = 6 + price_min = 50 + price_max = 300 + availability_prob = 50 + /datum/blackmarket_item/consumable/trickwine name = "Trickwine" desc = "The SRM keeps the recipes for their trickwines a closely guarded secret. The Hunters carrying those bottles? Less so." @@ -62,16 +84,16 @@ /obj/item/reagent_containers/food/drinks/breakawayflask/vintage/prismwine)) return new trickwine(loc) +/datum/blackmarket_item/consumable/stimpack + name = "Stimpack" + desc = "A quick inject medipen loaded with a cocktail of powerful stimulants. Side effects may include nasuea, heartburn, constipation, weight loss, increased blood pressure, kidney stones, liver damage, mood swings, mania, anemia, weight gain, total organ failure, runny nose and minor retinal irritation." + item = /obj/item/reagent_containers/hypospray/medipen/stimpack/traitor -/datum/blackmarket_item/consumable/pumpup - name = "Maintenance Pump-Up" - desc = "Resist any Baton stun with this handy instant tetanus free injector!." - item = /obj/item/reagent_containers/hypospray/medipen/pumpup - - stock_max = 3 - price_min = 50 - price_max = 150 - availability_prob = 90 + stock_min = 4 + stock_max = 6 + price_min = 250 + price_max = 500 + availability_prob = 50 /datum/blackmarket_item/consumable/morphine name = "Morphine Bottle" @@ -80,6 +102,7 @@ price_min = 50 price_max = 150 + stock_min = 2 stock_max = 4 availability_prob = 50 @@ -88,9 +111,10 @@ desc = "Cyanide, a tried and true classic for all your poisoning needs." item = /obj/item/reagent_containers/glass/bottle/cyanide - price_min = 300 - price_max = 600 - stock_max = 3 + price_min = 200 + price_max = 400 + stock_min = 2 + stock_max = 4 availability_prob = 30 /datum/blackmarket_item/consumable/sodium_thiopental @@ -98,19 +122,21 @@ desc = "Sodium Thiopental, a potent and fast acting sedative for any occasion." item = /obj/item/reagent_containers/glass/bottle/sodium_thiopental - price_min = 300 + price_min = 250 price_max = 600 - stock_max = 3 + stock_min = 2 + stock_max = 4 availability_prob = 30 /datum/blackmarket_item/consumable/amanitin - name = "Amanitin bottle" + name = "Amanitin Bottle" desc = "A slow acting, but nearly undetectable poison. For the dignified assassin." item = /obj/item/reagent_containers/glass/bottle/amanitin price_min = 300 price_max = 600 - stock_max = 3 + stock_max = 2 + stock_max = 4 availability_prob = 30 /datum/blackmarket_item/consumable/gumballs @@ -124,15 +150,21 @@ stock_max = 20 availability_prob = 80 -/datum/blackmarket_item/consumable/xeno_meat - name = "Xenomorph steak" +/datum/blackmarket_item/consumable/xeno_corpse + name = "Xenomorph Corpse" desc = "The Frontier's most dangerous game, delivered right to your plate! May constitute a violation of your local BARD laws and regulations." - item = /obj/item/reagent_containers/food/snacks/meat/slab/xeno + item = /mob/living/simple_animal/hostile/alien - price_min = 300 - price_max = 500 - stock_max = 5 - availability_prob = 20 + price_min = 6000 + price_max = 10000 + stock = 1 + availability_prob = 10 + spawn_weighting = FALSE + +/datum/blackmarket_item/consumable/xeno_corpse/spawn_item(loc) + var/mob/living/simple_animal/hostile/alien = ..() + alien.stat = DEAD + return new alien(loc) /datum/blackmarket_item/consumable/berries name = "Berries" @@ -157,7 +189,7 @@ item = /obj/effect/spawner/lootdrop/ration price_min = 150 - price_max = 400 + price_max = 300 availability_prob = 80 unlimited = TRUE @@ -177,10 +209,10 @@ desc = "A bundle of sutures for stitching up your latest bullet wound." item = /obj/item/stack/medical/suture - price_min = 200 - price_max = 450 - stock_min = 2 - stock_max = 5 + price_min = 25 + price_max = 150 + stock_min = 4 + stock_max = 6 availability_prob = 40 /datum/blackmarket_item/consumable/regen_mesh @@ -188,10 +220,10 @@ desc = "A smoothing pack of regenerative mesh for your burns." item = /obj/item/stack/medical/mesh - price_min = 200 - price_max = 450 - stock_min = 2 - stock_max = 5 + price_min = 25 + price_max = 150 + stock_min = 4 + stock_max = 6 availability_prob = 40 /datum/blackmarket_item/consumable/bruise_pack @@ -199,19 +231,53 @@ desc = "A bundle of old bruise packs, for you guessed it, bruises. Any rumors of these containing hazardous chemicals are just that. Rumors." item = /obj/item/stack/medical/bruise_pack - price_min = 300 - price_max = 500 - stock_min = 2 - stock_max = 5 + price_min = 50 + price_max = 175 + stock_min = 4 + stock_max = 6 availability_prob = 30 /datum/blackmarket_item/consumable/ointment - name = "Burn ointment" + name = "Burn Ointment" desc = "A tube of burn ointment. It's past the expiry date, but those are only suggestions." item = /obj/item/stack/medical/ointment - price_min = 300 - price_max = 500 - stock_min = 2 - stock_max = 5 + price_min = 50 + price_max = 175 + stock_min = 4 + stock_max = 6 availability_prob = 30 + +/datum/blackmarket_item/consumable/goliath + name = "A Live Goliath" + desc = "We reappropiated an outpost freighter a week back, and the entire thing was packed with goliaths for whatever reason. Point is, we're sick and tired of eating them, so we're selling what's left so we can buy some actual take out." + item = /mob/living/simple_animal/hostile/asteroid/goliath/beast + + price_min = 750 + price_max = 2000 + stock_max = 4 + availability_prob = 15 + spawn_weighting = FALSE + +/datum/blackmarket_item/consumable/color_salve + name = "Color Salve" + desc = "A cosmetic salve used for changing the hue of Elzouse. Now with 20% less harmful chemical dyes!" + item = /obj/item/colorsalve + + price_min = 100 + price_max = 200 + stock_min = 4 + stock_max = 10 + availability_prob = 80 + +/datum/blackmarket_item/consumable/secret_sauce + name = "Family Sauce Recipe" + desc = "This used to belong to a good friend of mine before the authorities did em in. Best goddamn sauce I've ever tasted, but I could never get it right myself. Maybe you can do it justice." + item = /obj/item/paper/secretrecipe + + price_min = 1000 + price_max = 2000 + stock = 1 + availability_prob = 5 + spawn_weighting = FALSE + diff --git a/code/modules/cargo/blackmarket/blackmarket_items/explosives.dm b/code/modules/cargo/blackmarket/blackmarket_items/explosives.dm index 7fe78cdcd055..26402e3dfac0 100644 --- a/code/modules/cargo/blackmarket/blackmarket_items/explosives.dm +++ b/code/modules/cargo/blackmarket/blackmarket_items/explosives.dm @@ -11,6 +11,16 @@ stock_max = 5 availability_prob = 50 +/datum/blackmarket_item/explosive/smoke_grenade + name = "Smoke Grenade" + desc = "Too much heat on your back? This handy smoke grenade is perfect for a hasty getaway." + item = /obj/item/grenade/smokebomb + + price_min = 100 + price_max = 400 + stock_max = 5 + availability_prob = 50 + /datum/blackmarket_item/explosive/h_e name = "HE Grenade" desc = "These high explosive grenades are sure to get some bang for your buck." @@ -57,7 +67,7 @@ /datum/blackmarket_item/explosive/slipocalypse name = "Slipocalyse Cluster Bomb" - desc = "Wash away the opposition with sudstastic grenade!" + desc = "Wash away the opposition with this sudstastic grenade!" item = /obj/item/grenade/clusterbuster/soap price_min = 500 @@ -65,9 +75,21 @@ stock = 1 availability_prob = 10 +/datum/blackmarket_item/explosive/disco_grenade + name = "Portable Disco Grenade" + desc = "Become the life of the party with this groovy grenade!" + item = /obj/item/grenade/discogrenade + + price_min = 500 + price_max = 750 + stock_min = 2 + stock_max = 3 + availability_prob = 10 + spawn_weighting = FALSE + /datum/blackmarket_item/explosive/rusted_mine name = "Landmine" - desc = "Recovered from a decades old ICW battlefield by our best EOD tech, Nicky Nine Fingers." + desc = "Recovered from a decade old ICW battlefield by our best EOD tech, Nicky Nine Fingers." item = /obj/item/mine/pressure/explosive/rusty price_min = 250 @@ -75,14 +97,29 @@ stock_max = 7 availability_prob = 50 -/datum/blackmarket_item/explosive/rpg - name = "PML-9 RPG" - desc = "Offically, it's an anti-armor RPG launcher. Technically, it's anti-everything. Most things don't enjoy being hit in the face with high explosives." - item = /obj/item/gun/ballistic/rocketlauncher +/datum/blackmarket_item/explosive/live_bomb + name = "Active ICW Era Ordinance" + desc = "Look, I won't mince words. This thing is counting down and I don't want to be the next causualty of ICW after it's already ended. I'll sell it to you real cheap." + item = /obj/machinery/syndicatebomb - price_min = 3500 - price_max = 6500 - stock_min = 2 - stock_max = 5 - availability_prob = 20 + price_min = 500 + price_max = 1000 + stock = 1 + availability_prob = 5 + spawn_weighting = FALSE +/datum/blackmarket_item/explosive/live_bomb/spawn_item(loc) + var/obj/machinery/syndicatebomb/bomb = ..() + bomb.activate() + return new bomb(loc) + +/datum/blackmarket_item/explosive/firecrackers + name = "Firecracker" + desc = "Nuclear Bomb brand extra strength firecrackers, painted in the signature blood red of the Gorlex Marauders. Enjoyed a successful, albeit short run in PGF space due to a certain event in 492 FS made selling them somewhat in poor taste." + item = /obj/item/grenade/firecracker + + price_min = 50 + price_max = 250 + stock_min = 5 + stock_max = 10 + availability_prob = 50 diff --git a/code/modules/cargo/blackmarket/blackmarket_items/misc.dm b/code/modules/cargo/blackmarket/blackmarket_items/misc.dm index a5e2c67175af..8f51514de804 100644 --- a/code/modules/cargo/blackmarket/blackmarket_items/misc.dm +++ b/code/modules/cargo/blackmarket/blackmarket_items/misc.dm @@ -56,31 +56,11 @@ desc = "Why, it could be anything. Are you feeling lucky?" item = /obj/structure/closet/crate/secure/loot - price_min = 250 - price_max = 400 + price_min = 100 + price_max = 300 availability_prob = 100 unlimited = TRUE -/datum/blackmarket_item/misc/spygass - name = "Spy Glass Kit" - desc = "A set of trick glasses and a linked camera. Suit and dashing shades not included." - item = /obj/item/storage/box/rxglasses/spyglasskit - - price_min = 250 - price_max = 1000 - stock_max = 3 - availability_prob = 30 - -/datum/blackmarket_item/misc/ripley_mk_4 - name = "Ripley Mk IV Upgrade Kit" - desc = "Pimp out your Ripley to the CLIP Mark IV Rogue Model today! Killjoy bureaucrats not included, thank god." - item = /obj/item/mecha_parts/mecha_equipment/conversion_kit/ripley/clip - - price_min = 1500 - price_max = 2500 - stock_max = 3 - availability_prob = 30 - /datum/blackmarket_item/misc/secret_docs name = "Classified Documents" desc = "Good people died to get these. Luckily, we aren't good people." @@ -107,3 +87,57 @@ price_max = 10000 stock = 1 availability_prob = 40 + +/datum/blackmarket_item/misc/knockoff_plush + name = "Knockoff T4LI Plush" + desc = "You'll hardly be able to tell that it's an offbrand rip off!" + item = /obj/item/toy/plush/tali + + price_min = 50 + price_max = 150 + stock_min = 2 + stock_max = 5 + availability_prob = 60 + +/datum/blackmarket_item/misc/knockoff_plush/spawn_item(loc) + var/obj/item/toy/plush/tali/plush = ..() + plush.name = "T3MMI" + plush.desc = "A rather shoddy and unlicensed plushie 'paying homage' to a character from the RILENA series." + return new plush(loc) + +/datum/blackmarket_item/misc/pens + name = "Pen" + desc = "We found an old Cybersun blacksite, and came across an unmarked crate full of pens. Want one?" + item = /obj/item/pen + + price_min = 50 + price_max = 150 + unlimited = TRUE + availability_prob = 60 + +/datum/blackmarket_item/misc/pens/spawn_item(loc) + var/pen = pick(list(/obj/item/pen, + /obj/item/pen/blue, + /obj/item/pen/red, + /obj/item/pen/fourcolor, + /obj/item/pen/fountain, + /obj/item/pen/fountain/captain, + /obj/item/pen/solgov, + /obj/item/pen/fountain/solgov, + /obj/item/pen/edagger, + /obj/item/pen/survival, + /obj/item/pen/sleepy)) + return new pen(loc) + +/datum/blackmarket_item/misc/hexacrete + name = "Jug of Hexacrete" + desc = "Need to make a blacksite in a jiffy? Skip the fuss with this 150u jug of hexacrete!" + item = /obj/item/reagent_containers/glass/chem_jug/hexacrete + + price_min = 750 + price_max = 1500 + stock_min = 3 + stock_max = 10 + availability_prob = 30 + + diff --git a/code/modules/cargo/blackmarket/blackmarket_items/tech.dm b/code/modules/cargo/blackmarket/blackmarket_items/tech.dm new file mode 100644 index 000000000000..63db8cbb75d1 --- /dev/null +++ b/code/modules/cargo/blackmarket/blackmarket_items/tech.dm @@ -0,0 +1,214 @@ +/datum/blackmarket_item/tech + category = "Technology" + +/datum/blackmarket_item/tech/ripley_mk_4 + name = "Ripley Mk IV Upgrade Kit" + desc = "Pimp out your Ripley to the CLIP Mark IV Rogue Model today! Killjoy bureaucrats not included, thank god." + item = /obj/item/mecha_parts/mecha_equipment/conversion_kit/ripley/clip + + price_min = 1500 + price_max = 2500 + stock_max = 3 + availability_prob = 30 + +/datum/blackmarket_item/tech/chem_master + name = "Chem Master Board" + desc = "A Chem Master board, capable of seperating and packaging reagents. Perfect for any aspiring at home chemist." + item = /obj/item/circuitboard/machine/chem_master + + price_min = 1000 + price_max = 3000 + stock = 1 + availability_prob = 30 + +/datum/blackmarket_item/tech/ltrsbt + name = "Black Market Long-To-Short-Range-Bluespace-Transciever" + desc = "Need a faster and better way of transporting your illegal goods from and to the sector? Fear not, the Long-To-Short-Range-Bluespace-Transceiver (LTSRBT for short) is here to help. This handy teleporter will teleport your purchases directly to you once built." + item = /obj/item/circuitboard/machine/ltsrbt + + price_min = 500 + price_max = 1000 + stock_max = 3 + availability_prob = 20 + +/datum/blackmarket_item/tech/mrs_pacman + name = "MRSPACMAN-type Generator Board" + desc = "A ridiciously overclocked PACMAN generator that somehow burns diamonds as fuel." + item = /obj/item/circuitboard/machine/pacman/mrs + + price_min = 2000 + price_max = 3000 + stock = 1 + availability_prob = 30 + +/datum/blackmarket_item/tech/ai_core + name = "AI Core Board" + desc = "The future is now! Become one with your ship with this AI core board! (Some assembly required.)" + item = /obj/item/circuitboard/aicore + pair_item = list(/datum/blackmarket_item/tech/boris, /datum/blackmarket_item/tech/mmi, /datum/blackmarket_item/tech/borg) + + price_min = 5000 + price_max = 8000 + stock = 1 + availability_prob = 5 + spawn_weighting = FALSE + +/datum/blackmarket_item/tech/boris + name = "B.O.R.I.S Module" + desc = "A Bluespace Optimi-blah blah blah, I'm bored already. This module will convert a cyborg frame into an AI compatible shell." + item = /obj/item/borg/upgrade/ai + + price_min = 500 + price_max = 1000 + stock = 1 + availability_prob = 0 + +/datum/blackmarket_item/tech/mmi + name = "Man Machine Interface" + desc = "Transcend the weakness of your flesh with this man machine interface, compatible with AIs, Cyborgs and Mechs!" + item = /obj/item/mmi + pair_item = list(/datum/blackmarket_item/tech/borg) + + price_min = 250 + price_max = 750 + stock_max = 3 + availability_prob = 40 + +/datum/blackmarket_item/tech/borg + name = "Cyborg Construction Kit" + desc = "This durable and verastile cyborg frame is capable of fufilling a number of roles and survive situations that would kill the average person. Brain sold seperately." + item = /obj/structure/closet/crate/cyborg + + price_min = 1000 + price_max = 2000 + stock_max = 2 + availability_prob = 0 + +/datum/blackmarket_item/tech/t4_capacitor + name = "Quadratic Capacitor" + desc = "A top grade quadractic capacitor. These highly effiecent capacitors are capable of storing massive amounts of electricity. Keep away from open plugs." + item = /obj/item/stock_parts/capacitor/quadratic + + price_min = 400 + price_max = 700 + stock_min = 2 + stock_max = 4 + availability_prob = 20 + +/datum/blackmarket_item/tech/t4_scanner + name = "Triphasic Scanning Module" + desc = "A top grade triphasic scanning module. These finely tuned scanning modules are usually reserved for vital systems like early warning defence radars against raiders and pirates. We decided to put it to better use." + item = /obj/item/stock_parts/scanning_module/triphasic + + price_min = 400 + price_max = 700 + stock_min = 2 + stock_max = 4 + availability_prob = 20 + +/datum/blackmarket_item/tech/t4_manip + name = "Femto Manipulator" + desc = "A top grade femto manipulator. These insanely precise manipuators are capable of manipulating particles up to a quadtillionth of a meter. Still not precise enough to find a single braincell in an NT exec's head though." + item = /obj/item/stock_parts/manipulator/femto + + price_min = 400 + price_max = 700 + stock_min = 2 + stock_max = 4 + availability_prob = 20 + +/datum/blackmarket_item/tech/t4_laser + name = "Quad-Ultra Microlaser" + desc = "A top grade quad-ultra microlaser. A bit too micro of a laser to actually kill anyone with, but more than enough to get the most out of your materials." + item = /obj/item/stock_parts/micro_laser/quadultra + + price_min = 400 + price_max = 700 + stock_min = 2 + stock_max = 4 + availability_prob = 20 + +/datum/blackmarket_item/tech/t4_bin + name = "Bluespace Matter Bin" + desc = "A top grade bluespace matter bin. Uses the power of bluespace to contain tons of matter without all the hassle of actually needing to carry literal tons with only a miniscule chance of ripping a hole in reality." + item = /obj/item/stock_parts/matter_bin/bluespace + + price_min = 400 + price_max = 700 + stock_min = 2 + stock_max = 4 + availability_prob = 20 + +/datum/blackmarket_item/tech/crew_monitor + name = "Crew Monitor Board" + desc = "A crew monitor computer board, for watching your hapless crew die in real time." + item = /obj/machinery/computer/crew + + price_min = 750 + price_max = 1250 + stock_max = 3 + availability_prob = 40 + +/datum/blackmarket_item/tech/sec_cam + name = "Camera Console Board" + desc = "A camera console computer board, for when you want to invade your crew's privacy." + item = /obj/item/circuitboard/computer/security + + price_min = 750 + price_max = 1250 + stock_max = 3 + availability_prob = 40 + +/datum/blackmarket_item/tech/emag_limited + name = "Limited Cryptographic Sequencer" + desc = "These cryptographic sequencers are perfect for bypassing any mechanical safties or just breaking shit in general. They're pretty old though, and will probably burn out after a single use. Do not keep in the same wallet as your credit card." + item = /obj/item/card/emag/limited + + price_min = 750 + price_max = 1500 + stock_min = 2 + stock_max = 7 + availability_prob = 30 + +/datum/blackmarket_item/tech/joywire + name = "Pleasure Vivifier Neural Implant" + desc = "Midi-Sim's ever popular pleasure vivifier implant promises a constant rush of dopamine to get you high on life." + item = /obj/item/organ/cyberimp/brain/joywire + + price_min = 500 + price_max = 1000 + stock_min = 3 + stock_max = 5 + availability_prob = 50 + +/datum/blackmarket_item/tech/joywire/spawn_item(loc) + if(prob(10)) + var/obj/item/organ/cyberimp/brain/mindscrew/implant = ..() + implant.name = "\improper Midi-Sed pleasure vivifier" + implant.desc = "A widely popular (and addictive) implant produced by Miditeke-Sedari Tokoce that \ + stimulates the brain's pleasure centers. \ + Dramatically increases mood, but interferes with taste reception even if uninstalled. \ + Its wires seem a little loose." + return new implant(loc) + return ..() + +/datum/blackmarket_item/tech/mindscrew + name = "MNDFCK Neural Implant" + desc = "Got a tough customer who refuses to crack? This aftermarket modification of the Midi-Sed pleasure vivifier will amplify their pain receptors and get them talking fast." + item = /obj/item/organ/cyberimp/brain/mindscrew + + price_min = 500 + price_max = 1500 + stock_max = 3 + availability_prob = 30 + +/datum/blackmarket_item/tech/arm_gun + name = "Arm Mounted Laser Cannon Implant" + desc = "A retractable laser cannon that fits inside your arm for concealment. You won't be passing any metal detector scans though." + item = /obj/item/organ/cyberimp/arm/gun/laser + + price_min = 2000 + price_max = 4000 + stock = 1 + availability_prob = 15 + spawn_weighting = FALSE diff --git a/code/modules/cargo/blackmarket/blackmarket_items/tools.dm b/code/modules/cargo/blackmarket/blackmarket_items/tools.dm index d24cbf68171d..412ba303b977 100644 --- a/code/modules/cargo/blackmarket/blackmarket_items/tools.dm +++ b/code/modules/cargo/blackmarket/blackmarket_items/tools.dm @@ -18,12 +18,23 @@ price_min = 500 price_max = 2000 + stock_min = 1 + stock_max = 3 + availability_prob = 40 + +/datum/blackmarket_item/tool/surgery_duffel + name = "Cybersun Advanced Surgical Kit" + desc = "You might say it's morally wrong to steal. I say it's justified when it's Cybersun." + item = /obj/item/storage/backpack/duffelbag/syndie/surgery + + price_min = 2500 + price_max = 5000 stock = 1 - availability_prob = 30 + availability_prob = 25 /datum/blackmarket_item/tool/binoculars name = "Binoculars" - desc = "Increase your sight by 150% with this handy Tool!" + desc = "Twice as effective as a monocular for seeing across long distances." item = /obj/item/binoculars price_min = 50 @@ -32,6 +43,28 @@ stock_max = 4 availability_prob = 70 +/datum/blackmarket_item/tool/whetstone + name = "Whetstone" + desc = "Your blades not making the cut? This whetstone will give you the edge you need!" + item = /obj/item/sharpener + + price_min = 100 + price_max = 300 + stock_min = 2 + stock_max = 4 + availability_prob = 50 + +/datum/blackmarket_item/tool/cham_stamp + name = "Chameleon Stamp" + desc = "Can't find a forger? Look no further than these handy chameleon stamps, capable of replicating all manner of offical or government seals." + item = /obj/item/stamp/chameleon + + price_min = 50 + price_max = 200 + stock_min = 2 + stock_max = 4 + availability_prob = 80 + /datum/blackmarket_item/tool/riot_shield name = "Riot Shield" desc = "Protect yourself from an unexpected Riot at your local Police department!" @@ -47,8 +80,8 @@ desc = "30u of Thermite to assist in creating a quick access point or get away!" item = /obj/item/reagent_containers/glass/bottle/thermite - price_min = 100 - price_max = 600 + price_min = 75 + price_max = 300 stock_max = 10 availability_prob = 50 @@ -58,7 +91,7 @@ item = /obj/item/reagent_containers/glass/chem_jug/thermite price_min = 400 - price_max = 1500 + price_max = 1200 stock_max = 3 availability_prob = 20 @@ -80,7 +113,8 @@ price_min = 1000 price_max = 3000 stock = 1 - availability_prob = 20 + availability_prob = 10 + spawn_weighting = FALSE /datum/blackmarket_item/tool/jumpboots name = "Jump Boots" @@ -101,16 +135,7 @@ price_max = 2000 stock_max = 3 availability_prob = 30 - -/datum/blackmarket_item/tool/chem_master - name = "Chem Master Board" - desc = "A Chem Master board, capable of seperating and packaging reagents. Perfect for any aspiring at home chemist." - item = /obj/item/circuitboard/machine/chem_master - - price_min = 1000 - price_max = 3000 - stock = 1 - availability_prob = 30 + spawn_weighting = FALSE /datum/blackmarket_item/tool/rcd name = "Rapid Construction Device" @@ -128,7 +153,7 @@ item = /obj/item/attachment/silencer price_min = 100 - price_max = 700 + price_max = 300 stock_min = 3 stock_max = 6 availability_prob = 60 diff --git a/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm b/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm index 3d6b32a67569..740ee2c5341b 100644 --- a/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm +++ b/code/modules/cargo/blackmarket/blackmarket_items/weapons.dm @@ -12,23 +12,10 @@ stock_max = 7 availability_prob = 40 -/datum/blackmarket_item/weapon/shotgun_dart - name = "Shotgun Dart" - desc = "These handy darts can be filled up with any chemical and be shot with a shotgun! \ - Prank your friends by shooting them with laughter! \ - Not recommended for comercial use." - item = /obj/item/ammo_casing/shotgun/dart - - price_min = 10 - price_max = 50 - stock_min = 10 - stock_max = 60 - availability_prob = 40 - /datum/blackmarket_item/weapon/bone_spear name = "Bone Spear" desc = "Authentic tribal spear, made from real bones! A steal at any price, especially if you're a caveman." - item = /obj/item/spear/bonespear + item = /obj/item/melee/spear/bone price_min = 200 price_max = 300 @@ -38,13 +25,22 @@ /datum/blackmarket_item/weapon/switchblade name = "Switchblade" desc = "Extra shrap switchblades for intimidation AND style. Bandages not included if you cut yourself." - item = /obj/item/kitchen/knife/switchblade + item = /obj/item/melee/knife/switchblade price_min = 500 price_max = 700 stock_max = 3 availability_prob = 50 +/datum/blackmarket_item/weapon/powerfist + name = "Powerfist" + desc = "Need a bit more... omph in your right hook? This gas operated powerfist will put you in the heavyweight." + item = /obj/item/melee/powerfist + price_min = 1500 + price_max = 4000 + stock_max = 2 + availability_prob = 50 + /datum/blackmarket_item/weapon/sabre name = "SUNS Dueling Sabre" desc = "A mastercrafted sabre formerly wielded by a SUNS academic. It's very sharp, we had to spend hours stitching our fingers back on after getting it." @@ -55,53 +51,67 @@ stock = 1 availability_prob = 25 +/datum/blackmarket_item/weapon/mag_cleaver + name = "Magnetic Cleaver" + desc = "A prototype modification to the standard crusher, featuring an energy blade rather than the standard alloy cutting edge allowing for much more devasting detonations. The guy who sold this to us disappeared the next week, but that's probably a coincidence." + item = /obj/item/kinetic_crusher/syndie_crusher + + price_min = 1750 + price_max = 3000 + stock = 2 + availability_prob = 15 + spawn_weighting = FALSE + /datum/blackmarket_item/weapon/derringer name = "Derringer" desc = "A concealable handgun small enough to hide nearly anywhere. Uses .38 revolver rounds." item = /obj/item/gun/ballistic/derringer + price_min = 100 - price_max = 500 + price_max = 300 stock_max = 6 availability_prob = 50 -/datum/blackmarket_item/weapon/golden - name = "Golden Derringer" - desc = "A rare custom-made concealable weapon designed to fire illegal .357 rounds." - item = /obj/item/gun/ballistic/derringer/gold - price_min = 1000 - price_max = 3000 +/datum/blackmarket_item/weapon/syndi_derringer + name = ".357 Derringer" + desc = "A concealable hangun with a tasteful red and black paintjob, which makes it slightly more noticable. Chambered in .357, so you actually have a chance at killing something." + item = /obj/item/gun/ballistic/derringer/traitor + pair_item = list(/datum/blackmarket_item/ammo/a357_box) + + price_min = 300 + price_max = 800 + stock = 2 + availability_prob = 30 + +/datum/blackmarket_item/weapon/disposable_gun_disk + name = "Disposable Gun Design Disk" + desc = "An autolathe compatible fabrication disk for printing disposable guns chambered in .22 LR. Improper disposal or recycling of these guns is an enviromental felony misdemeanor in Solarian space. Luckily, we aren't in Solarian space, so litter all you want." + item = /obj/item/disk/design_disk/disposable_gun + + price_min = 1500 + price_max = 2500 stock = 1 availability_prob = 10 + spawn_weighting = FALSE /datum/blackmarket_item/weapon/himehabu name = "Himehabu Pistol" desc = "Great things come in small packages. The Himehabu is perfect for all your espionage needs. Chambered in .22lr." item = /obj/item/gun/ballistic/automatic/pistol/himehabu - pair_item = /datum/blackmarket_item/weapon/himehabu_mag + pair_item = list(/datum/blackmarket_item/ammo/himehabu_mag, /datum/blackmarket_item/ammo/himehabu_box) price_min = 100 price_max = 600 stock_max = 6 availability_prob = 50 -/datum/blackmarket_item/weapon/himehabu_mag - name = "Himehabu Magazines" - desc = "Compact 10 round .22lr magazines for use in the Himehabu pistol." - item = /obj/item/ammo_box/magazine/m22lr - - price_min = 100 - price_max = 200 - stock_min = 3 - stock_max = 6 - availability_prob = 0 - /datum/blackmarket_item/weapon/e10 name = "E-10 Laser Pistol" desc = "Sharplite letting you down? Try these classic Eoehoma Firearms E-10 Laser Pistols." item = /obj/item/gun/energy/laser/e10 price_min = 500 - price_max = 1250 + price_max = 1000 stock_max = 5 availability_prob = 20 @@ -119,55 +129,47 @@ 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 = /datum/blackmarket_item/weapon/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 = 20 - -/datum/blackmarket_item/weapon/e40_mag - name = "Eoehoma .299 Caseless Magazine" - desc = "A 30 round magazine for the E-40 Hybrid Rifle." - item = /obj/item/ammo_box/magazine/e40 - - price_min = 750 - price_max = 1250 - stock_min = 2 - stock_max = 6 - availability_prob = 0 + availability_prob = 10 + spawn_weighting = FALSE /datum/blackmarket_item/weapon/e50 name = "E-50 Energy Emitter" desc = "An Eoehoma Firearms E-50 Emitter cannon. For when you want a send a message. A really big message." item = /obj/item/gun/energy/laser/e50 + pair_item = (/datum/blackmarket_item/ammo/huge_weapon_cell) price_min = 4000 price_max = 7000 stock_max = 2 availability_prob = 20 + spawn_weighting = FALSE + +/datum/blackmarket_item/weapon/e60 + name = "E-60 Disabler" + desc = "Looking for a live capture? This Eoehoma Firearms E-60 disabler will get your man." + item = /obj/item/gun/energy/disabler/e60 + + price_min = 500 + price_max = 750 + stock_max = 3 + availability_prob = 40 /datum/blackmarket_item/weapon/saber_smg name = "Saber 9mm SMG" desc = "A prototype 9mm submachine gun. Most of these never got past the RND phase and into distribution. But we happen know a guy." item = /obj/item/gun/ballistic/automatic/smg/skm_carbine/inteq/proto - pair_item = /datum/blackmarket_item/weapon/saber_mag + pair_item = list(/datum/blackmarket_item/ammo/saber_mag) - price_min = 2500 - price_max = 4200 + price_min = 2250 + price_max = 3750 stock_max = 2 availability_prob = 25 -/datum/blackmarket_item/weapon/saber_mag - name = "Saber 9mm SMG Magazines" - desc = "Magazines for use in the Saber 9mm SMG. No, they don't work as swords." - item = /obj/item/ammo_box/magazine/smgm9mm - - price_min = 500 - price_max = 1000 - stock = 2 - availability_prob = 0 - /datum/blackmarket_item/weapon/bg_16 name = "BG-16 Beam Gun" desc = "Not satisfied by Etherbor's civilian offerings? Try this military grade one we found!" @@ -184,7 +186,7 @@ item = /obj/item/gun/ballistic/rifle/illestren/sawn price_min = 600 - price_max = 1250 + price_max = 1000 stock_min = 2 stock_max = 5 availability_prob = 60 @@ -194,8 +196,8 @@ desc = "Are your arms tired from pumping Hunter's Pride shotguns? This semi-automatic combat shotgun will make killing a breeze." item = /obj/item/gun/ballistic/shotgun/automatic/combat - price_min = 2000 - price_max = 4000 + price_min = 1750 + price_max = 3500 stock_max = 3 availability_prob = 40 @@ -207,7 +209,8 @@ price_min = 1000 price_max = 2000 stock_max = 3 - availability_prob = 30 + availability_prob = 20 + spawn_weighting = FALSE /datum/blackmarket_item/weapon/mecha_syringe_gun name = "Mounted Syringe Gun" @@ -217,35 +220,25 @@ price_min = 5000 price_max = 7000 stock = 1 - availability_prob = 15 + availability_prob = 10 + spawn_weighting = FALSE /datum/blackmarket_item/weapon/mecha_hades name = "Mounted FNX-99 Carbine" - desc = "This so called \"Hades\" carbine is sure to burn brightly above the competition! Not to be confused with the \"Hades\" energy rifle. Exosuit not included." + desc = "This so called \"Phoenix\" carbine is sure to burn brightly above the competition! Exosuit not included." item = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine - pair_item = /datum/blackmarket_item/weapon/mecha_hades_ammo + pair_item = list(/datum/blackmarket_item/ammo/mecha_hades_ammo) price_min = 2000 price_max = 3000 stock_max = 2 availability_prob = 25 -/datum/blackmarket_item/weapon/mecha_hades_ammo - name = "FNX-99 Incediary Ammo" - desc = "A box of 24 incendiary shells for the FNX-99 mounted carbine." - item = /obj/item/mecha_ammo/incendiary - - price_min = 250 - price_max = 350 - stock_min = 3 - stock_max = 5 - availability_prob = 0 - /datum/blackmarket_item/weapon/model_h name = "Model H" desc = "A Model H slug pistol. The H stands for Hurt. Chambered in ferromagnetic slugs." item = /obj/item/gun/ballistic/automatic/powered/gauss/modelh - pair_item = /datum/blackmarket_item/weapon/model_h_mag + pair_item = list(/datum/blackmarket_item/ammo/model_h_mag) price_min = 2000 price_max = 3500 @@ -257,122 +250,123 @@ /obj/item/gun/ballistic/automatic/powered/gauss/modelh)) return new model_h(loc) -/datum/blackmarket_item/weapon/model_h_mag - name = "Model H Magazine" - desc = "A 10 round magazine for Model H slug pistol." - item = /obj/item/ammo_box/magazine/modelh - - price_min = 500 - price_max = 1000 - stock_max = 4 - availability_prob = 0 - /datum/blackmarket_item/weapon/sgg name = "SSG-669C Rotary Sniper Rifle" - desc = "I could tell you it's full name, but we'd be here all day. It's a sniper rifle. It shoots people from far away. Chambered in 8x58mm." + desc = "I could tell you it's full name, but we'd be here all day. It's a sniper rifle. It shoots people from far away. Chambered in 8x58mm caseless." item = /obj/item/gun/ballistic/rifle/solgov - pair_item = /datum/blackmarket_item/weapon/sgg_stripper + pair_item = list(/datum/blackmarket_item/ammo/sgg_stripper) price_min = 3000 price_max = 6000 stock = 1 availability_prob = 20 -/datum/blackmarket_item/weapon/sgg_stripper - name = "8x58mm Stripper Clip" - desc = "A five round 8x58mm stripper clip for use with the SGG-669C." - item = /obj/item/ammo_box/a858 - - price_min = 500 - price_max = 1000 - stock_min = 4 - stock_max = 6 - availability_prob = 0 - /datum/blackmarket_item/weapon/pistole_c name = "Pistole C" desc = "Pistole Compact? Pistole Caseless? Pistole Cheese? Fuck if I know. All I know is these little numbers pack a nasty sting. Chambered in 5.56 caseless." item = /obj/item/gun/ballistic/automatic/pistol/solgov/old - pair_item = /datum/blackmarket_item/weapon/pistole_c_mag + pair_item = list(/datum/blackmarket_item/ammo/pistole_c_mag) price_min = 900 price_max = 1250 stock_max = 3 availability_prob = 30 -/datum/blackmarket_item/weapon/pistole_c_mag - name = "5.56 Caseless Magazine" - desc = "A 12 round magazine for the Pistole Cheese." - item = /obj/item/ammo_box/magazine/pistol556mm - - price_min = 250 - price_max = 750 - stock_max = 2 - availability_prob = 0 - /datum/blackmarket_item/weapon/proto_gauss name = "Prototype Gauss Rifle" desc = "A prototype gauss rifle made by Nanotrasen. Perfect for making swiss cheese out of people. Chambered in ferromagnetic pellets." item = /obj/item/gun/ballistic/automatic/powered/gauss - pair_item = /datum/blackmarket_item/weapon/proto_gauss_mag + pair_item = list(/datum/blackmarket_item/ammo/proto_gauss_mag) - price_min = 3500 - price_max = 6000 + price_min = 2500 + price_max = 4000 stock = 2 availability_prob = 25 -/datum/blackmarket_item/weapon/proto_gauss_mag - name = "Prototype Gauss Rifle Magazine" - desc = "A 25 round ferromagnetic pellet magazine for the prototype gauss rifle." - item = /obj/item/ammo_box/magazine/gauss +/datum/blackmarket_item/weapon/syringe_gun + name = "Dart Pistol" + desc = "A compact dart pistol, for clandestine poisoining from a distance." + item = /obj/item/gun/syringe/syndicate - price_min = 600 - price_max = 1100 - stock_min = 2 - stock_max = 4 - availability_prob = 0 + price_min = 750 + price_max = 1500 + stock = 2 + availability_prob = 30 -/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 = /datum/blackmarket_item/weapon/tec_mag +/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 = 2750 + 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/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 +/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." + item = /obj/item/gun/ballistic/rifle/polymer + pair_item = list(/datum/blackmarket_item/ammo/polymer_clip) price_min = 600 - price_max = 1000 - stock_max = 2 - availability_prob = 0 + price_max = 1250 + stock_min = 2 + stock_max = 4 + availability_prob = 50 -/datum/blackmarket_item/weapon/scout - name = "HP Scout" - desc = "A scoped rifle chambered in .300 Magnum. As the name would imply, perfect for scouts. Try not to tunnel vision with the scope like the last guy." - item = /obj/item/gun/ballistic/rifle/scout - pair_item = /datum/blackmarket_item/weapon/scout_stripper +/datum/blackmarket_item/weapon/skm_carbine + name = "SKM-24v Carbine" + desc = "Technically this is just a sawn down SKM-24 assault rifle, but what's CLIP going to do? Sue us? Chambered in 4.6x30mm." + item = /obj/item/gun/ballistic/automatic/smg/skm_carbine + pair_item = list(/datum/blackmarket_item/ammo/carbine_mag) - price_min = 4000 - price_max = 6500 - stock = 1 + price_min = 3000 + price_max = 4500 + stock_max = 2 availability_prob = 20 -/datum/blackmarket_item/weapon/scout_stripper - name = ".300 Magnum Stripper Clip" - desc = "A 5 round .300 Magnum stripper clips for use with the HP Scout." - item = /obj/item/ammo_box/a300 +/datum/blackmarket_item/weapon/fireaxe + name = "Fire Axe" + desc = "An incredibly sharp axe of dubious make used by various engineers throughout the years to settle arguments while hammered. Sold to us by a very friendly man in a suit." + item = /obj/item/melee/axe/fire - price_min = 500 - price_max = 1000 - stock_min = 4 - stock_max = 6 - availability_prob = 0 + price_min = 2500 + price_max = 3500 + stock = 2 + availability_prob = 40 +/datum/blackmarket_item/weapon/oneshot + name = "Hammer Launcher" + desc = "A one-shot solution to a myriad amount of problems, ranging from Exosuits to obnoxious neighbors. Contains one ready-to-fire 84mm HEDP rocket. " + item = /obj/item/gun/ballistic/rocketlauncher/oneshot + price_min = 3000 + price_max = 4500 + stock_min = 1 + stock_max = 5 + availability_prob = 25 diff --git a/code/modules/cargo/blackmarket/blackmarket_market.dm b/code/modules/cargo/blackmarket/blackmarket_market.dm index 3e055048a85b..5b0c2365b3df 100644 --- a/code/modules/cargo/blackmarket/blackmarket_market.dm +++ b/code/modules/cargo/blackmarket/blackmarket_market.dm @@ -12,11 +12,37 @@ /// Item categories available from this market, only items which are in these categories can be gotten from this market. var/list/categories = list() +/datum/blackmarket_market/New() + . = ..() + addtimer(CALLBACK(src, PROC_REF(cycle_stock)), 60 MINUTES, TIMER_STOPPABLE|TIMER_LOOP|TIMER_DELETE_ME) + +/datum/blackmarket_market/proc/cycle_stock() + var/list/pair_items_to_handle = list() + + for(var/category in available_items) + for(var/item in available_items[category]) + if(istype(item, /datum/blackmarket_item)) + var/datum/blackmarket_item/b_item = item + b_item.cycle() + if(b_item.available == TRUE) + for(var/paired_item in b_item.pair_item) + var/datum/blackmarket_item/item_to_set = get_item_in_market(paired_item) + if(!(item_to_set in pair_items_to_handle) && !isnull(item_to_set)) + pair_items_to_handle += item_to_set + + for(var/item in pair_items_to_handle) + var/datum/blackmarket_item/b_item = item + b_item.cycle(TRUE,FALSE,FALSE,TRUE) + +// returns the blackmarket_item datum currently in the availible items list. Null if not in the list +/datum/blackmarket_market/proc/get_item_in_market(datum/blackmarket_item/item) + for(var/item_to_find in available_items[item.category]) + if(istype(item_to_find,item)) + return item_to_find + return null + /// Adds item to the available items and add it's category if it is not in categories yet. /datum/blackmarket_market/proc/add_item(datum/blackmarket_item/item, paired) - if(!prob(initial(item.availability_prob)) && !paired) - return FALSE - if(ispath(item)) item = new item() @@ -26,8 +52,10 @@ available_items[item.category] += item - if(item.pair_item) - add_item(item.pair_item, TRUE) + if(prob(initial(item.availability_prob)) || paired) + item.available = TRUE + else + item.available = FALSE return TRUE @@ -52,5 +80,6 @@ /datum/blackmarket_market/blackmarket name = "Black Market" - shipping = list(SHIPPING_METHOD_LTSRBT =50, - SHIPPING_METHOD_LAUNCH =10) + shipping = list(SHIPPING_METHOD_LTSRBT =100, + SHIPPING_METHOD_LAUNCH =10, + SHIPPING_METHOD_DEAD_DROP = 20) diff --git a/code/modules/cargo/blackmarket/blackmarket_telepad.dm b/code/modules/cargo/blackmarket/blackmarket_telepad.dm index 14211cad6878..bd8ec96e80b0 100644 --- a/code/modules/cargo/blackmarket/blackmarket_telepad.dm +++ b/code/modules/cargo/blackmarket/blackmarket_telepad.dm @@ -3,11 +3,8 @@ icon_state = "bluespacearray" build_path = /obj/machinery/ltsrbt req_components = list( - /obj/item/stack/ore/bluespace_crystal = 2, - /obj/item/stock_parts/subspace/ansible = 1, /obj/item/stock_parts/micro_laser = 1, /obj/item/stock_parts/scanning_module = 2) - def_components = list(/obj/item/stack/ore/bluespace_crystal = /obj/item/stack/ore/bluespace_crystal/artificial) /obj/machinery/ltsrbt name = "Long-To-Short-Range-Bluespace-Transciever" @@ -121,3 +118,17 @@ if(queue.len) recieving = pick_n_take(queue) + +/datum/crafting_recipe/blackmarket_telepad + name = "Black Market LTRSBT Board" + result = /obj/item/circuitboard/machine/ltsrbt + time = 30 + tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER, TOOL_MULTITOOL) + reqs = list( + /obj/item/stack/ore/bluespace_crystal = 2, + /obj/item/stack/tape/industrial = 5, + /obj/item/card/bank = 1, + /obj/item/computer_hardware/network_card = 1, + /obj/item/circuitboard = 1 + ) + category = CAT_MISC diff --git a/code/modules/cargo/blackmarket/blackmarket_uplink.dm b/code/modules/cargo/blackmarket/blackmarket_uplink.dm index 26363bf71b82..2d25c9c444f4 100644 --- a/code/modules/cargo/blackmarket/blackmarket_uplink.dm +++ b/code/modules/cargo/blackmarket/blackmarket_uplink.dm @@ -82,13 +82,14 @@ if(viewing_category && market) if(market.available_items[viewing_category]) for(var/datum/blackmarket_item/I in market.available_items[viewing_category]) - data["items"] += list(list( - "id" = I.type, - "name" = I.name, - "cost" = I.price, - "amount" = I.unlimited ? "INF" : I.stock, - "desc" = I.desc || I.name - )) + if(I.available) + data["items"] += list(list( + "id" = I.type, + "name" = I.name, + "cost" = I.price, + "amount" = I.unlimited ? "INF" : I.stock, + "desc" = I.desc || I.name + )) return data /obj/item/blackmarket_uplink/ui_static_data(mob/user) diff --git a/code/modules/cargo/bounties/assistant.dm b/code/modules/cargo/bounties/assistant.dm index 3ddc15dfa33b..37507132a865 100644 --- a/code/modules/cargo/bounties/assistant.dm +++ b/code/modules/cargo/bounties/assistant.dm @@ -15,7 +15,7 @@ name = "Skateboard" description = "Nanotrasen has determined walking to be wasteful. Ship a skateboard to CentCom to speed operations up." reward = 900 // the tony hawk - wanted_types = list(/obj/vehicle/ridden/scooter/skateboard, /obj/item/melee/skateboard) + wanted_types = list(/obj/vehicle/ridden/scooter/skateboard, /obj/item/skateboard) /datum/bounty/item/assistant/stunprod name = "Stunprod" @@ -35,7 +35,7 @@ description = "CentCom's security forces are going through budget cuts. You will be paid if you ship a set of spears." reward = 2000 required_count = 5 - wanted_types = list(/obj/item/spear) + wanted_types = list(/obj/item/melee/spear) /datum/bounty/item/assistant/toolbox name = "Toolboxes" diff --git a/code/modules/cargo/bounties/chef.dm b/code/modules/cargo/bounties/chef.dm index d0e946ba2a6e..969a41601fbb 100644 --- a/code/modules/cargo/bounties/chef.dm +++ b/code/modules/cargo/bounties/chef.dm @@ -2,7 +2,7 @@ name = "Birthday Cake" description = "Nanotrasen's birthday is coming up! Ship them a birthday cake to celebrate!" reward = 4000 - wanted_types = list(/obj/item/reagent_containers/food/snacks/store/cake/birthday, /obj/item/reagent_containers/food/snacks/cakeslice/birthday) + wanted_types = list(/obj/item/food/cake/birthday, /obj/item/food/cakeslice/birthday) /datum/bounty/item/chef/soup name = "Soup" @@ -43,7 +43,7 @@ name = "Bread" description = "Problems with central planning have led to bread prices skyrocketing. Ship some bread to ease tensions." reward = 1000 - wanted_types = list(/obj/item/reagent_containers/food/snacks/store/bread, /obj/item/reagent_containers/food/snacks/breadslice, /obj/item/reagent_containers/food/snacks/bun, /obj/item/reagent_containers/food/snacks/pizzabread, /obj/item/reagent_containers/food/snacks/rawpastrybase) + wanted_types = list(/obj/item/food/bread, /obj/item/food/breadslice, /obj/item/reagent_containers/food/snacks/bun, /obj/item/reagent_containers/food/snacks/pizzabread, /obj/item/reagent_containers/food/snacks/rawpastrybase) /datum/bounty/item/chef/pie name = "Pie" diff --git a/code/modules/cargo/bounties/mining.dm b/code/modules/cargo/bounties/mining.dm index 4eb48b09c7cb..6527228f31ec 100644 --- a/code/modules/cargo/bounties/mining.dm +++ b/code/modules/cargo/bounties/mining.dm @@ -22,7 +22,7 @@ name = "Bone Axe" description = "Station 12 has had their fire axes stolen by marauding clowns. Ship them a bone axe as a replacement." reward = 7500 - wanted_types = list(/obj/item/fireaxe/boneaxe) + wanted_types = list(/obj/item/melee/axe/bone) /datum/bounty/item/mining/bone_armor name = "Bone Armor" @@ -48,7 +48,7 @@ description = "Central Command's canteen is undergoing budget cuts. Ship over some bone daggers so our Chef can keep working." reward = 5000 required_count = 3 - wanted_types = list(/obj/item/kitchen/knife/combat/bone) + wanted_types = list(/obj/item/melee/knife/bone) /datum/bounty/item/mining/polypore_mushroom name = "Mushroom Bowl" diff --git a/code/modules/cargo/centcom_podlauncher.dm b/code/modules/cargo/centcom_podlauncher.dm index dfec659e1644..0b302925e10e 100644 --- a/code/modules/cargo/centcom_podlauncher.dm +++ b/code/modules/cargo/centcom_podlauncher.dm @@ -383,7 +383,7 @@ if (specificTarget) specificTarget = null return - var/list/mobs = getpois()//code stolen from observer.dm + var/list/mobs = SSpoints_of_interest.get_mob_pois() var/inputTarget = input("Select a mob! (Smiting does this automatically)", "Target", null, null) as null|anything in mobs if (isnull(inputTarget)) return diff --git a/code/modules/cargo/exports/lavaland.dm b/code/modules/cargo/exports/lavaland.dm index 4779886622a4..c585ecb25a98 100644 --- a/code/modules/cargo/exports/lavaland.dm +++ b/code/modules/cargo/exports/lavaland.dm @@ -9,10 +9,6 @@ /obj/item/book_of_babel, /obj/item/wisp_lantern, /obj/item/reagent_containers/glass/bottle/potion/flight, - /obj/item/katana/cursed, - /obj/item/clothing/glasses/godeye, - /obj/item/melee/ghost_sword, - /obj/item/clothing/suit/space/hardsuit/cult, /obj/item/voodoo, /obj/item/grenade/clusterbuster/inferno, /obj/item/clothing/neck/memento_mori, @@ -21,10 +17,7 @@ /obj/item/dragons_blood, /obj/item/lava_staff, /obj/item/ship_in_a_bottle, - /obj/item/clothing/shoes/clown_shoes/banana_shoes, - /obj/item/kitchen/knife/envy, /obj/item/veilrender/vealrender, - /obj/item/nullrod/scythe/talking/necro, /obj/item/clothing/suit/armor/ascetic) /datum/export/lavaland/major //valuable chest/ruin loot and staff of storms diff --git a/code/modules/cargo/exports/parts.dm b/code/modules/cargo/exports/parts.dm index 0df089543989..115dfdf3ff65 100644 --- a/code/modules/cargo/exports/parts.dm +++ b/code/modules/cargo/exports/parts.dm @@ -15,11 +15,6 @@ unit_name = "solar panel control board" export_types = list(/obj/item/circuitboard/computer/solar_control) -/datum/export/swarmer - cost = 2000 - unit_name = "deactivated alien deconstruction drone" - export_types = list(/obj/item/deactivated_swarmer) - //Computer Tablets and Parts /datum/export/modular_part cost = 15 diff --git a/code/modules/cargo/exports/weapons.dm b/code/modules/cargo/exports/weapons.dm index bbe73991f7ef..c6ee67ed091e 100644 --- a/code/modules/cargo/exports/weapons.dm +++ b/code/modules/cargo/exports/weapons.dm @@ -13,7 +13,7 @@ /datum/export/weapon/knife cost = 100 unit_name = "combat knife" - export_types = list(/obj/item/kitchen/knife/combat) + export_types = list(/obj/item/melee/knife/combat) /datum/export/weapon/taser diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index 8098ff6b5130..e6555fc58b6e 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -7,10 +7,15 @@ var/crate_name = "crate" var/desc = ""//no desc by default var/crate_type = /obj/structure/closet/crate - // var/DropPodOnly = FALSE//only usable by the Bluespace Drop Pod via the express cargo console var/admin_spawned = FALSE var/small_item = FALSE //Small items can be grouped into a single crate. + var/faction + /* to be implmented + var/faction_discount = 15 + var/faction_locked = FALSE + */ + /datum/supply_pack/proc/generate(atom/A, datum/bank_account/paying_account) var/obj/structure/closet/crate/C if(paying_account) diff --git a/code/modules/cargo/packs/ammo.dm b/code/modules/cargo/packs/ammo.dm index a04d62059792..8d8f47a05f65 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 @@ -70,18 +72,36 @@ cost = 500 contains = list(/obj/item/ammo_box/a12g/slug) +/datum/supply_pack/ammo/blank_shells + name = "Blank Shell Crate" + desc = "Contains a box of blank shells." + cost = 500 + contains = list(/obj/item/ammo_box/a12g/blanks) + +/datum/supply_pack/ammo/blank_ammo_disk + name = "Blank Ammo Design Disk Crate" + desc = "Run your own training drills!" + cost = 1000 + contains = list(/obj/item/disk/design_disk/blanks) + /datum/supply_pack/ammo/techshells name = "Unloaded Shotgun Technological Shells Crate" desc = "Contains a box of 7 versatile tech shells, capable of producing a variety of deadly effects for any situation. Some assembly required." 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 */ /datum/supply_pack/ammo/winchester_ammo - name = "Flaming Arrow and Detective Special .38 Ammo Boxes" + name = ".38 Ammo Boxes Crate" desc = "Contains two 50 round ammo boxes for refilling .38 weapons." cost = 250 contains = list(/obj/item/ammo_box/c38_box, @@ -125,7 +145,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 @@ -134,7 +154,7 @@ /datum/supply_pack/ammo/gal308_ammo name = "CM-GAL .308 Magazine Crate" desc = "Contains a .308 CM-GAL magazine for the CM-GAL rifle, containing ten rounds." - contains = list(/obj/item/ammo_box/magazine/gal) + contains = list(/obj/item/ammo_box/magazine/f4_308) cost = 1000 /datum/supply_pack/ammo/gar_ammo @@ -149,16 +169,10 @@ contains = list(/obj/item/ammo_box/amagpellet_claris) cost = 1000 -/datum/supply_pack/ammo/a300 - name = ".300 Magnum Stripper Clip Crate" - desc = "Contains a five round .300 Magnum stripper clip for sniper rifles such as the HP Scout." - contains = list(/obj/item/ammo_box/a300) - cost = 750 - /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 @@ -169,22 +183,28 @@ /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/a850r_ammo - name = "8x50mmR En Bloc Clip Crate" - desc = "Contains a 8x50mmR en bloc clip for rifles like the illestren rifle, containing five rounds." - contains = list(/obj/item/ammo_box/magazine/illestren_a850r) - cost = 250 +/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 eighty-round 7.62x40mm CLIP box for the SKM rifles." + desc = "Contains a one hundred and twenty-round 7.62x40mm CLIP box for the SKM rifles." contains = list(/obj/item/ammo_box/a762_40) cost = 500 +/datum/supply_pack/ammo/a556_ammo_box + 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 name = ".357 Ammo Box Crate" desc = "Contains a fifty-round .357 box for revolvers such as the Scarborough Revolver and the HP Firebrand." @@ -205,7 +225,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 @@ -317,6 +337,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." @@ -339,7 +365,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" @@ -388,3 +421,11 @@ desc = "Contains a fifty-round box of .44 roumain hollow point ammo, great against unarmored targets." contains = list(/obj/item/ammo_box/a44roum/hp) cost = 500 + +/datum/supply_pack/ammo/c22lr + name = ".22 LR Ammo Box Crate" + desc = "Contains two 75 round ammo boxes for refilling .22 LR weapons." + contains = list(/obj/item/ammo_box/c22lr_box, + /obj/item/ammo_box/c22lr_box) + crate_name = "ammo crate" + cost = 250 diff --git a/code/modules/cargo/packs/civilian.dm b/code/modules/cargo/packs/civilian.dm index 154dce436ee7..0b1d7303ca44 100644 --- a/code/modules/cargo/packs/civilian.dm +++ b/code/modules/cargo/packs/civilian.dm @@ -86,6 +86,7 @@ contains = list(/obj/item/storage/box/fountainpens) crate_name = "calligraphy crate" crate_type = /obj/structure/closet/crate/wooden + faction = FACTION_SOLGOV /datum/supply_pack/civilian/wrapping_paper name = "Festive Wrapping Paper Crate" diff --git a/code/modules/cargo/packs/costumes_toys.dm b/code/modules/cargo/packs/costumes_toys.dm index fa63529b7955..cab2ac8563af 100644 --- a/code/modules/cargo/packs/costumes_toys.dm +++ b/code/modules/cargo/packs/costumes_toys.dm @@ -88,17 +88,10 @@ cost = 1000 contains = list(/obj/item/clothing/head/snowman, /obj/item/clothing/suit/snowman, - /obj/item/clothing/head/chicken, - /obj/item/clothing/suit/chickensuit, /obj/item/clothing/mask/gas/monkeymask, - /obj/item/clothing/suit/monkeysuit, /obj/item/clothing/head/cardborg, /obj/item/clothing/suit/cardborg, - /obj/item/clothing/head/xenos, - /obj/item/clothing/suit/xenos, - /obj/item/clothing/suit/hooded/ian_costume, - /obj/item/clothing/suit/hooded/carp_costume, - /obj/item/clothing/suit/hooded/bee_costume) + /obj/item/clothing/suit/hooded/carp_costume) crate_name = "original costume crate" crate_type = /obj/structure/closet/crate/wooden @@ -115,27 +108,16 @@ if(prob(30)) //Not all mafioso have mustaches, some people also find this item annoying. new /obj/item/clothing/mask/fakemoustache/italian(C) if(prob(10)) //A little extra sugar every now and then to shake things up. - new /obj/item/kitchen/knife/switchblade(C) + new /obj/item/melee/knife/switchblade(C) /datum/supply_pack/costumes_toys/mech_suits - name = "Mech Pilot's Suit Crate" + name = "Exosuit Pilot's Suit Crate" desc = "Suits for piloting big robots. Contains all three colors!" cost = 1500 //state-of-the-art technology doesn't come cheap contains = list(/obj/item/clothing/under/costume/mech_suit, /obj/item/clothing/under/costume/mech_suit/white, /obj/item/clothing/under/costume/mech_suit/blue) - crate_name = "mech 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_name = "exosuit pilot's suit crate" crate_type = /obj/structure/closet/crate/wooden /datum/supply_pack/costumes_toys/formalwear @@ -154,7 +136,6 @@ /obj/item/clothing/neck/tie/blue, /obj/item/clothing/neck/tie/red, /obj/item/clothing/neck/tie/black, - /obj/item/clothing/head/bowler, /obj/item/clothing/head/fedora, /obj/item/clothing/head/flatcap, /obj/item/clothing/head/beret, @@ -170,6 +151,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 @@ -185,7 +167,6 @@ desc = "Flaunt your status with three unique, highly-collectable hats!" cost = 20000 contains = list(/obj/item/clothing/head/collectable/chef, - /obj/item/clothing/head/collectable/paper, /obj/item/clothing/head/collectable/tophat, /obj/item/clothing/head/collectable/captain, /obj/item/clothing/head/collectable/beret, @@ -193,18 +174,11 @@ /obj/item/clothing/head/collectable/flatcap, /obj/item/clothing/head/collectable/pirate, /obj/item/clothing/head/collectable/kitty, - /obj/item/clothing/head/collectable/rabbitears, /obj/item/clothing/head/collectable/wizard, /obj/item/clothing/head/collectable/hardhat, - /obj/item/clothing/head/collectable/HoS, - /obj/item/clothing/head/collectable/HoP, /obj/item/clothing/head/collectable/thunderdome, /obj/item/clothing/head/collectable/swat, - /obj/item/clothing/head/collectable/slime, - /obj/item/clothing/head/collectable/police, - /obj/item/clothing/head/collectable/slime, - /obj/item/clothing/head/collectable/xenom, - /obj/item/clothing/head/collectable/petehat) + /obj/item/clothing/head/collectable/police) crate_name = "collectable hats crate" crate_type = /obj/structure/closet/crate/wooden diff --git a/code/modules/cargo/packs/emergency.dm b/code/modules/cargo/packs/emergency.dm index 3627633bcb77..3759dc6d8d11 100644 --- a/code/modules/cargo/packs/emergency.dm +++ b/code/modules/cargo/packs/emergency.dm @@ -8,25 +8,25 @@ /datum/supply_pack/emergency/internals name = "Internals Crate" - desc = "Two gas masks, two breathing masks, and four empty oxygen tanks of varying size. Oxygen canister sold separately." - cost = 500 - contains = list(/obj/item/clothing/mask/gas, - /obj/item/clothing/mask/gas, + desc = "Contains four breathing masks, three advanced emergency oxygen tanks and one large oxygen tank. Oxygen canister sold separately." + cost = 100 + contains = list(/obj/item/clothing/mask/breath, + /obj/item/clothing/mask/breath, /obj/item/clothing/mask/breath, /obj/item/clothing/mask/breath, - /obj/item/tank/internals/emergency_oxygen/empty, - /obj/item/tank/internals/emergency_oxygen/empty, - /obj/item/tank/internals/oxygen/empty, - /obj/item/tank/internals/oxygen/empty) + /obj/item/tank/internals/emergency_oxygen/engi, + /obj/item/tank/internals/emergency_oxygen/engi, + /obj/item/tank/internals/emergency_oxygen/engi, + /obj/item/tank/internals/oxygen) crate_name = "internals crate" /datum/supply_pack/emergency/plasmaman_tank - name = "Plasmaman Tank Kit" - desc = "Contains two empty plasmaman belt tanks, for when you just can't bear to refill a normal tank with plasma. Plasma canisters sold separately. Warranty void if filled with flammable gas." - cost = 500 - contains = list(/obj/item/tank/internals/plasmaman/belt/empty, - /obj/item/tank/internals/plasmaman/belt/empty) - crate_name = "plasmaman tank kit" + name = "Plasmaman Internals Crate" + desc = "Contains two plasmaman belt tanks, for when you just can't bear to refill a normal tank with plasma. Plasma canisters sold separately." + cost = 100 + contains = list(/obj/item/tank/internals/plasmaman/belt, + /obj/item/tank/internals/plasmaman/belt) + crate_name = "plasmaman internals crate" /datum/supply_pack/emergency/plasmaman_suit name = "Plasmaman Suit Kit" diff --git a/code/modules/cargo/packs/exploration.dm b/code/modules/cargo/packs/exploration.dm index 504b3b4bdbb1..5f70f2b9c2a1 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,56 @@ 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, - /obj/item/survivalcapsule, - /obj/item/survivalcapsule, + /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/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 + ) + +/datum/supply_pack/exploration/flares + name = "Flare Supply Pack" + desc = "Contains 4 boxes of flares (28 total)! Great for lighting things up." + cost = 100 + contains = list( + /obj/item/storage/box/flares, + /obj/item/storage/box/flares, + /obj/item/storage/box/flares, + /obj/item/storage/box/flares, + ) diff --git a/code/modules/cargo/packs/food.dm b/code/modules/cargo/packs/food.dm index c7d8b77f46a5..3eb7f33cbe4c 100644 --- a/code/modules/cargo/packs/food.dm +++ b/code/modules/cargo/packs/food.dm @@ -8,7 +8,7 @@ /datum/supply_pack/food/donkpockets name = "Donk Pocket Variety Crate" desc = "Featuring a line up of Donk Co.'s most popular pastry!" - cost = 2000 + cost = 500 contains = list(/obj/item/storage/box/donkpockets/donkpocketspicy, /obj/item/storage/box/donkpockets/donkpocketteriyaki, /obj/item/storage/box/donkpockets/donkpocketpizza, @@ -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) @@ -25,7 +26,7 @@ /datum/supply_pack/food/pizza name = "Pizza Crate" desc = "Best prices on this side of the galaxy. All deliveries are guaranteed to be 99.5% anomaly-free!" - cost = 3000// Best prices this side of the galaxy. + cost = 750// Best prices this side of the galaxy. contains = list(/obj/item/pizzabox/margherita, /obj/item/pizzabox/mushroom, /obj/item/pizzabox/meat, @@ -42,6 +43,19 @@ fourfiveeight.boxtag = P.boxtag qdel(P) +/datum/supply_pack/food/ration + name = "Ration Crate" + desc = "6 standerd issue rations." + cost = 500 + contains = list(/obj/effect/spawner/lootdrop/ration, + /obj/effect/spawner/lootdrop/ration, + /obj/effect/spawner/lootdrop/ration, + /obj/effect/spawner/lootdrop/ration, + /obj/effect/spawner/lootdrop/ration, + /obj/effect/spawner/lootdrop/ration) + crate_name = "ration crate" + crate_type = /obj/structure/closet/crate + /* Ingredients */ @@ -49,13 +63,13 @@ /datum/supply_pack/food/ingredients_basic name = "Basic Ingredients Crate" desc = "Get things cooking with this crate full of useful ingredients! Contains a dozen eggs, two slabs of meat, some flour, some rice, a bottle of milk, a bottle of soymilk, and a bag of sugar." - cost = 1000 - contains = list(/obj/item/reagent_containers/food/condiment/flour, - /obj/item/reagent_containers/food/condiment/flour, - /obj/item/reagent_containers/food/condiment/rice, - /obj/item/reagent_containers/food/condiment/milk, - /obj/item/reagent_containers/food/condiment/soymilk, - /obj/item/reagent_containers/food/condiment/sugar, + cost = 300 + contains = list(/obj/item/reagent_containers/condiment/flour, + /obj/item/reagent_containers/condiment/flour, + /obj/item/reagent_containers/condiment/rice, + /obj/item/reagent_containers/condiment/milk, + /obj/item/reagent_containers/condiment/soymilk, + /obj/item/reagent_containers/condiment/sugar, /obj/item/storage/fancy/egg_box, /obj/item/reagent_containers/food/snacks/meat/slab, /obj/item/reagent_containers/food/snacks/meat/slab @@ -63,16 +77,17 @@ crate_name = "food crate" crate_type = /obj/structure/closet/crate/freezer -/datum/supply_pack/food/ingredients_specialized - name = "Advanced Cooking Crate" - desc = "For the discerning chef. Contains a bottle of enzyme, a salt shaker, a pepper mill, a bottle of ketchup, a bottle of hot sauce, and a bottle of cream." - cost = 2000 - contains = list(/obj/item/reagent_containers/food/condiment/enzyme, - /obj/item/reagent_containers/food/condiment/saltshaker, - /obj/item/reagent_containers/food/condiment/peppermill, - /obj/item/reagent_containers/food/condiment/ketchup, - /obj/item/reagent_containers/food/condiment/hotsauce, - /obj/item/reagent_containers/food/drinks/bottle/cream +/datum/supply_pack/food/ingredients_condiments + name = "Condiments Crate" + desc = "A variety of garnishes for topping off your dish with a little extra pizzaz. Contains a bottle of enzyme, a salt shaker, a pepper mill, a bottle of ketchup, a bottle of hot sauce, a bottle of BBQ sauce, and a bottle of cream." + cost = 250 + contains = list(/obj/item/reagent_containers/condiment/enzyme, + /obj/item/reagent_containers/condiment/saltshaker, + /obj/item/reagent_containers/condiment/peppermill, + /obj/item/reagent_containers/condiment/ketchup, + /obj/item/reagent_containers/condiment/hotsauce, + /obj/item/reagent_containers/food/drinks/bottle/cream, + /obj/item/reagent_containers/condiment/bbqsauce ) crate_name = "condiments crate" crate_type = /obj/structure/closet/crate/freezer @@ -80,7 +95,7 @@ /datum/supply_pack/food/ingredients_randomized name = "Exotic Meat Crate" desc = "The best cuts in the whole galaxy. Probably." - cost = 1000 + cost = 500 contains = list(/obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/slime, /obj/item/reagent_containers/food/snacks/meat/slab/killertomato, /obj/item/reagent_containers/food/snacks/meat/slab/bear, @@ -103,7 +118,7 @@ /datum/supply_pack/food/ingredients_randomized/meat name = "Standard Meat Crate" desc = "Less interesting cuts of meat, but filling nonetheless." - cost = 1500 + cost = 300 contains = list(/obj/item/reagent_containers/food/snacks/meat/slab, /obj/item/reagent_containers/food/snacks/meat/slab/chicken, /obj/item/reagent_containers/food/snacks/meat/slab/synthmeat, @@ -116,7 +131,7 @@ /datum/supply_pack/food/ingredients_randomized/vegetables name = "Vegetables Crate" desc = "Grown in vats." - cost = 1300 + cost = 250 contains = list(/obj/item/reagent_containers/food/snacks/grown/chili, /obj/item/reagent_containers/food/snacks/grown/corn, /obj/item/reagent_containers/food/snacks/grown/tomato, @@ -132,7 +147,7 @@ /datum/supply_pack/food/ingredients_randomized/fruits name = "Fruit Crate" desc = "Rich of vitamins, may contain oranges." - cost = 1500 + cost = 250 contains = list(/obj/item/reagent_containers/food/snacks/grown/citrus/lime, /obj/item/reagent_containers/food/snacks/grown/citrus/orange, /obj/item/reagent_containers/food/snacks/grown/citrus/lemon, @@ -147,7 +162,7 @@ /datum/supply_pack/food/ingredients_randomized/grains name = "Grains Crate" desc = "A crate full of various grains. How interesting." - cost = 1000 + cost = 250 contains = list(/obj/item/reagent_containers/food/snacks/grown/wheat, /obj/item/reagent_containers/food/snacks/grown/wheat, /obj/item/reagent_containers/food/snacks/grown/wheat, //Weighted to be more common @@ -162,11 +177,11 @@ /datum/supply_pack/food/ingredients_randomized/bread name = "Bread Crate" desc = "A crate full of various breads. Bready to either be eaten or made into delicious meals." - cost = 1000 - contains = list(/obj/item/reagent_containers/food/snacks/store/bread/plain, - /obj/item/reagent_containers/food/snacks/breadslice/plain, - /obj/item/reagent_containers/food/snacks/breadslice/plain, - /obj/item/reagent_containers/food/snacks/breadslice/plain, //Weighted to be more common + cost = 300 + contains = list(/obj/item/food/bread/plain, + /obj/item/food/breadslice/plain, + /obj/item/food/breadslice/plain, + /obj/item/food/breadslice/plain, //Weighted to be more common /obj/item/reagent_containers/food/snacks/bun, /obj/item/reagent_containers/food/snacks/tortilla, /obj/item/reagent_containers/food/snacks/pizzabread @@ -181,17 +196,16 @@ /datum/supply_pack/food/grill name = "Grilling Starter Kit" desc = "Sometimes the stresses of the world are too much to bear. Some times, for God's sake, you just want to grill. This crate is for those times." - cost = 5000 + cost = 1000 contains = list(/obj/item/stack/sheet/mineral/coal/five, - /obj/machinery/grill/unwrenched, - /obj/item/reagent_containers/food/drinks/soda_cans/xeno_energy) + /obj/machinery/grill/unwrenched) crate_name = "grilling starter kit crate" crate_type = /obj/structure/closet/crate/large /datum/supply_pack/food/grillfuel name = "Grilling Fuel Kit" desc = "Contains propane and propane accessories. (Note: doesn't contain any actual propane.)" - cost = 2000 + cost = 250 contains = list(/obj/item/stack/sheet/mineral/coal/ten) crate_name = "grilling fuel kit crate" @@ -202,7 +216,7 @@ /datum/supply_pack/food/hydrotank name = "Hydroponics Backpack Crate" desc = "Bring on the flood with this high-capacity backpack crate. Contains 500 units of life-giving H2O." - cost = 1000 + cost = 750 contains = list(/obj/item/watertank) crate_name = "hydroponics backpack crate" crate_type = /obj/structure/closet/crate/hydroponics @@ -210,7 +224,7 @@ /datum/supply_pack/food/gardening name = "Gardening Crate" desc = "Supplies for growing a great garden! Contains two bottles of ammonia, two Plant-B-Gone spray bottles, a hatchet, cultivator, plant analyzer, as well as a pair of leather gloves and a botanist's apron." - cost = 1500 + cost = 500 contains = list(/obj/item/reagent_containers/spray/plantbgone, /obj/item/reagent_containers/spray/plantbgone, /obj/item/reagent_containers/glass/bottle/ammonia, @@ -227,7 +241,7 @@ /datum/supply_pack/food/weedcontrol name = "Weed Control Crate" desc = "Contains a scythe, gasmask, and two anti-weed defoliant grenades, for when your garden grows out of control." - cost = 1500 + cost = 750 contains = list(/obj/item/scythe, /obj/item/clothing/mask/gas, /obj/item/grenade/chem_grenade/antiweed, @@ -238,7 +252,7 @@ /datum/supply_pack/food/seeds name = "Seeds Crate" desc = "Big things have small beginnings. Contains fourteen different seeds." - cost = 2000 + cost = 750 contains = list(/obj/item/seeds/chili, /obj/item/seeds/cotton, /obj/item/seeds/berry, @@ -259,7 +273,7 @@ /datum/supply_pack/food/exoticseeds name = "Exotic Seeds Crate" desc = "Any entrepreneuring botanist's dream. Contains eleven different seeds, including two mystery seeds!" - cost = 3000 + cost = 1000 contains = list(/obj/item/seeds/nettle, /obj/item/seeds/plump, /obj/item/seeds/liberty, @@ -281,7 +295,7 @@ /datum/supply_pack/food/beekeeping_suits name = "Beekeeper Suit Crate" desc = "Bee business booming? Better be benevolent and boost botany by bestowing bi-Beekeeper-suits! Contains two beekeeper suits and matching headwear." - cost = 2000 + cost = 1000 contains = list(/obj/item/clothing/head/beekeeper_head, /obj/item/clothing/suit/beekeeper_suit, /obj/item/clothing/head/beekeeper_head, @@ -292,7 +306,7 @@ /datum/supply_pack/food/beekeeping_fullkit name = "Beekeeping Starter Crate" desc = "BEES BEES BEES. Contains three honey frames, a beekeeper suit and helmet, flyswatter, bee house, and, of course, a pure-bred Nanotrasen-Standardized Queen Bee!" - cost = 3000 + cost = 2000 contains = list(/obj/structure/beebox/unwrenched, /obj/item/honey_frame, /obj/item/honey_frame, @@ -303,17 +317,3 @@ /obj/item/melee/flyswatter) crate_name = "beekeeping starter crate" crate_type = /obj/structure/closet/crate/hydroponics - -/datum/supply_pack/food/ration - name = "Ration Crate" - desc = "6 standerd issue rations." - cost = 2000 - contains = list(/obj/effect/spawner/lootdrop/ration, - /obj/effect/spawner/lootdrop/ration, - /obj/effect/spawner/lootdrop/ration, - /obj/effect/spawner/lootdrop/ration, - /obj/effect/spawner/lootdrop/ration, - /obj/effect/spawner/lootdrop/ration) - crate_name = "ration crate" - crate_type = /obj/structure/closet/crate - diff --git a/code/modules/cargo/packs/gun.dm b/code/modules/cargo/packs/gun.dm index 4aaf2f60bef8..4074f76194d3 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 = 1000 + cost = 750 contains = list(/obj/item/storage/pistolcase/commander) + faction = FACTION_NT -/datum/supply_pack/gun/makarovs - name = "Stechkin Pistol Crate" - desc = "Contains a concealable stechkin pistol, produced by Scarborough Arms and chambered in 10mm." - cost = 1250 - contains = list(/obj/item/storage/pistolcase/stechkin) +/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/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 = 1250 + 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,48 +178,62 @@ cost = 1250 contains = list(/obj/item/storage/guncase/illestren) crate_name = "rifle crate" + faction = FACTION_SRM /datum/supply_pack/gun/beacon - name = "Contender Break Action Rifle Crate" + name = "Beacon Break Action Rifle Crate" desc = "Contains a single shot break action rifle to hunt wildlife that annoys you in particular. Chambered in devastating .45-70 rounds. Warranty voided if sawed off." 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" - cost = 6000 + 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" desc = "Contains a high-powered, automatic personal defense weapon chambered in 4.6x30mm." - cost = 6000 + 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" desc = "Contains a high-powered, automatic rifle chambered in 5.56mm." - cost = 9000 + 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" desc = "Contains a high-powered, automatic rifle chambered in 7.62x40mm CLIP." - cost = 9000 + 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/machinery.dm b/code/modules/cargo/packs/machinery.dm index f25e4818329e..6e5a12f30f5b 100644 --- a/code/modules/cargo/packs/machinery.dm +++ b/code/modules/cargo/packs/machinery.dm @@ -168,18 +168,6 @@ crate_name = "holofield generator crate" crate_type = /obj/structure/closet/crate/engineering -/datum/supply_pack/machinery/blackmarket_telepad - name = "Black Market LTSRBT" - desc = "Need a faster and better way of transporting your illegal goods from and to the sector? Fear not, the Long-To-Short-Range-Bluespace-Transceiver (LTSRBT for short) is here to help. Contains a LTSRBT circuit, two bluespace crystals, and one ansible." - cost = 1000 - contains = list( - /obj/item/circuitboard/machine/ltsrbt, - /obj/item/stack/ore/bluespace_crystal/artificial, - /obj/item/stack/ore/bluespace_crystal/artificial, - /obj/item/stock_parts/subspace/ansible - ) - crate_type = /obj/structure/closet/crate/science - /datum/supply_pack/machinery/shuttle_in_a_box name = "Shuttle in a Box" desc = "The bare minimum amount of machine and computer boards required to create a working spacecraft." diff --git a/code/modules/cargo/packs/material.dm b/code/modules/cargo/packs/material.dm index ee0f00e42d96..e396854387de 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 @@ -110,3 +111,9 @@ contains = list(/obj/item/stack/sheet/mineral/wood/fifty) crate_name = "wood planks crate" +/datum/supply_pack/material/concrete_mix + name = "Concrete Bag" + desc = "Feeling lazy? Need a structure and quick? Use F.O.O.D.'s near-instant concrete mix! Just add water." + cost = 500 + contains = list(/obj/item/reagent_containers/glass/concrete_bag) + crate_name = "Concrete Mix" diff --git a/code/modules/cargo/packs/mechs.dm b/code/modules/cargo/packs/mechs.dm index 937126a86361..744e9f67e2f2 100644 --- a/code/modules/cargo/packs/mechs.dm +++ b/code/modules/cargo/packs/mechs.dm @@ -1,5 +1,5 @@ /datum/supply_pack/mech - group = "Mech and Exosuit Construction" + group = "Exosuit Construction" crate_type = /obj/structure/closet/crate/large @@ -97,12 +97,12 @@ Mech Equipment */ /datum/supply_pack/mech/equipment - name = "Mech equipment crate" + name = "Exosuit equipment crate" crate_type = /obj/structure/closet/crate/secure/gear - crate_name = "mech equipment" + crate_name = "exosuit equipment" /datum/supply_pack/mech/equipment/drill - name = "Mech drill kit" + name = "Exosuit drill kit" desc = "Contains one mechanized drill for heavy duty digging." cost = 500 contains = list( @@ -110,7 +110,7 @@ Mech Equipment ) /datum/supply_pack/mech/equipment/diamond_drill - name = "Mech diamond drill kit" + name = "Exosuit diamond drill kit" desc = "Contains mechanized diamond drill, for the enterprising prospector!" cost = 750 contains = list( @@ -118,31 +118,31 @@ Mech Equipment ) /datum/supply_pack/mech/equipment/scanner - name = "Mech scanner kit" - desc = "An electronic mining scanner, graded to interface with a mech." + name = "Exosuit scanner kit" + desc = "An electronic mining scanner, graded to interface with an exosuit." cost = 350 contains = list( /obj/item/mecha_parts/mecha_equipment/mining_scanner ) /datum/supply_pack/mech/equipment/plasma_gen - name = "Mech generator kit" - desc = "A plasma-fueled generator for a mech, ideal for long operations." + name = "Exosuit generator kit" + desc = "A plasma-fueled generator for an exosuit, ideal for long operations." cost = 1000 contains = list( /obj/item/mecha_parts/mecha_equipment/generator ) /datum/supply_pack/mech/equipment/nuclear_gen - name = "Mech nuclear generator kit" - desc = "Contains a uranium-fueled generator for a mech, ideal for polluting the environment." + name = "Exosuit nuclear generator kit" + desc = "Contains a uranium-fueled generator for an exosuit, ideal for polluting the environment." cost = 1250 contains = list( /obj/item/mecha_parts/mecha_equipment/generator/nuclear ) /datum/supply_pack/mech/equipment/tesla_energy_relay - name = "Mech tesla relay kit" + name = "Exosuit tesla relay kit" desc = "Contains an advanced exosuit module which draws power from nearby APCs." cost = 1750 contains = list( @@ -150,7 +150,7 @@ Mech Equipment ) /datum/supply_pack/mech/equipment/clamp - name = "Mech clamp kit" + name = "Exosuit clamp kit" desc = "Contains a clamp designed for mechanized freight hauling." cost = 350 contains = list( @@ -158,7 +158,7 @@ Mech Equipment ) /datum/supply_pack/mech/equipment/extinguisher - name = "Mech extinguisher kit" + name = "Exosuit extinguisher kit" desc = "Contains a heavy duty fire extinguisher, for heavy duty firefighting." cost = 250 contains = list( @@ -166,7 +166,7 @@ Mech Equipment ) /datum/supply_pack/mech/equipment/cable_layer - name = "Mech RCL Kit" + name = "Exosuit RCL Kit" desc = "Contains a \"rapid cable layer\" for laying down long lengths of wire." cost = 250 contains = list( @@ -174,7 +174,7 @@ Mech Equipment ) /datum/supply_pack/mech/equipment/mech_sleeper - name = "Mech Mounted Sleeper Kit" + name = "Exosuit Mounted Sleeper Kit" desc = "Contains a mounted sleeper device, used for retrieving and stabilizing patients." cost = 1000 contains = list( @@ -182,14 +182,14 @@ Mech Equipment ) /datum/supply_pack/mech/equipment/beam_gun - name = "Mech Beam Gun Kit" + name = "Exosuit Beam Gun Kit" desc = "Contains an advanced mounted medical beamgun, capable of alleviating wounds to targets." cost = 7000 contains = list( /obj/item/mecha_parts/mecha_equipment/medical/mechmedbeam ) /datum/supply_pack/mech/equipment/rcs - name = "Mech RCS kit" + name = "Exosuit RCS kit" desc = "A gas fueled RCS pack, ideal for mechanized space operation." cost = 800 contains = list( @@ -205,7 +205,7 @@ Mech Equipment ) /datum/supply_pack/mech/equipment/melee_armor_booster - name = "Mech CCW armor kit" + name = "Exosuit CCW armor kit" desc = "A \"close combat weaponry\" module designed to deflect melee attacks." cost = 750 contains = list( @@ -213,25 +213,34 @@ Mech Equipment ) /datum/supply_pack/mech/equipment/projectile_armor_booster - name = "Mech projectile armor kit" + name = "Exosuit projectile armor kit" desc = "A protective exosuit module designed to deflect ranged attacks." cost = 1000 contains = list( /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster ) +/datum/supply_pack/mech/equipment/recharger + name = "Exosuit Recharger kit" + desc = "Two boards for an exosuit recharger and recharger console. For the stylish exosuit bay." + cost = 400 + contains = list( + /obj/item/circuitboard/computer/mech_bay_power_console, + /obj/item/circuitboard/machine/mech_recharger + ) + /* weapons */ /datum/supply_pack/mech/weapon - name = "Mech weapons crate" + name = "Exosuit weapons crate" crate_type = /obj/structure/closet/crate/secure/weapon - crate_name = "mech weapon crate" + crate_name = "exosuit weapon crate" /datum/supply_pack/mech/weapon/pka - name = "Mech Mounted Proto-Kinetic Accelerator kit" - desc = "A ranged mining attachment for any mech." + name = "Exosuit-Mounted Proto-Kinetic Accelerator kit" + desc = "A ranged mining attachment for any exosuit." cost = 750 contains = list( /obj/item/mecha_parts/mecha_equipment/weapon/energy/mecha_kineticgun @@ -262,7 +271,7 @@ weapons ) /datum/supply_pack/mech/weapon/scattershot - name = "LBX AC 10 kit" + name = "LBX-10 kit" desc = "Contains a \"Scattershot\" gun to mount on combat exosuits." cost = 1750 contains = list( @@ -270,7 +279,7 @@ weapons ) /datum/supply_pack/mech/weapon/lmg - name = "Ultra AC 2 kit" + name = "UMG-2 kit" desc = "Contains a mounted gun which fires in three round bursts." cost = 2250 contains = list( @@ -290,21 +299,21 @@ ammo */ /datum/supply_pack/mech/ammo - name = "Mech ammo crate" + name = "Exosuit ammo crate" crate_type = /obj/structure/closet/crate/secure/gear - crate_name = "mech ammo crate" + crate_name = "exosuit ammo crate" /datum/supply_pack/mech/ammo/scattershot_ammo - name = "LBX AC 10 ammo box" - desc = "Contains a fourty-round box of upscaled buckshot, to be loaded directly in a mounted LBX AC 10." + name = "LBX-10 ammo box" + desc = "Contains a fourty-round box of upscaled buckshot, to be loaded directly in a mounted LBX-10." cost = 500 contains = list( /obj/item/mecha_ammo/scattershot ) /datum/supply_pack/mech/ammo/lmg_ammo - name = "Ultra AC 2 ammo box" - desc = "Contains a three hundred-round box of heavy ammunition for the Ultra AC 2." + name = "UMG-2 ammo box" + desc = "Contains a three hundred-round box of heavy ammunition for the UMG-2." cost = 750 contains = list( /obj/item/mecha_ammo/lmg diff --git a/code/modules/cargo/packs/medical.dm b/code/modules/cargo/packs/medical.dm index 08b576937138..e0ca4f139258 100644 --- a/code/modules/cargo/packs/medical.dm +++ b/code/modules/cargo/packs/medical.dm @@ -9,42 +9,42 @@ /datum/supply_pack/medical/firstaid_single name = "First Aid Kit Single-Pack" desc = "Contains one first aid kit for healing most types of wounds." - cost = 750 + cost = 400 small_item = TRUE contains = list(/obj/item/storage/firstaid/regular) /datum/supply_pack/medical/firstaidbruises_single name = "Bruise Treatment Kit Single-Pack" desc = "Contains one first aid kit focused on healing bruises and broken bones." - cost = 1250 + cost = 700 small_item = TRUE contains = list(/obj/item/storage/firstaid/brute) /datum/supply_pack/medical/firstaidburns_single name = "Burn Treatment Kit Single-Pack" desc = "Contains one first aid kit focused on healing severe burns." - cost = 1250 + cost = 700 small_item = TRUE contains = list(/obj/item/storage/firstaid/fire) /datum/supply_pack/medical/firstaidoxygen_single name = "Oxygen Deprivation Kit Single-Pack" desc = "Contains one first aid kit focused on helping oxygen deprivation victims." - cost = 1250 + cost = 500 small_item = TRUE contains = list(/obj/item/storage/firstaid/o2) /datum/supply_pack/medical/firstaidtoxins_single name = "Toxin Treatment Kit Single-Pack" desc = "Contains one first aid kit focused on healing damage dealt by heavy toxins." - cost = 1250 + cost = 500 small_item = TRUE contains = list(/obj/item/storage/firstaid/toxin) /datum/supply_pack/medical/firstaid_rad_single name = "Radiation Treatment Kit Single-Pack" desc = "Contains one first aid kit focused on reducing the damage done by radiation." - cost = 1000 + cost = 500 small_item = TRUE contains = list(/obj/item/storage/firstaid/radiation) @@ -75,6 +75,15 @@ /obj/item/roller) crate_name = "surgical supplies crate" + +/datum/supply_pack/medical/anesthetic + name = "Anesthetics Crate" + desc = "Contains a standard anesthetics tank, for standard surgical procedures." + cost = 500 + contains = list(/obj/item/clothing/mask/breath/medical, + /obj/item/tank/internals/anesthetic) + crate_name = "anesthetics crate" + /* Bundles and supplies */ @@ -123,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) @@ -150,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 8ff09a5dc38a..f0f062160c79 100644 --- a/code/modules/cargo/packs/sec_supply.dm +++ b/code/modules/cargo/packs/sec_supply.dm @@ -30,6 +30,13 @@ cost = 2000 crate_name = "security barriers crate" +/datum/supply_pack/sec_supply/empty_sandbags + name = "Empty Sandbags" + desc = "Contains one box of seven empty sandbags for deployable cover in the field. Sand not included." + contains = list(/obj/item/storage/box/emptysandbags) + cost = 150 + crate_name = "sandbag crate" + /datum/supply_pack/sec_supply/wall_flash name = "Wall-Mounted Flash Crate" desc = "Contains four wall-mounted flashes." @@ -65,10 +72,23 @@ name = "Survival Knives Crate" desc = "Contains three sharpened survival knives. Each knife guaranteed to fit snugly inside any galactic-standard boot." cost = 500 - contains = list(/obj/item/kitchen/knife/combat/survival, - /obj/item/kitchen/knife/combat/survival, - /obj/item/kitchen/knife/combat/survival) + contains = list(/obj/item/melee/knife/survival, + /obj/item/melee/knife/survival, + /obj/item/melee/knife/survival) + crate_name = "combat knife crate" + +/* +/datum/supply_pack/sec_supply/machete + name = "Stampted Steel Machete Crate" + desc = "Contains five mass produced machetes. A perfect choice for crews on a budget." + cost = 500 + contains = list(/obj/item/melee/sword/mass, + /obj/item/melee/sword/mass, + /obj/item/melee/sword/mass, + /obj/item/melee/sword/mass, + /obj/item/melee/sword/mass) crate_name = "combat knife crate" +*/ /datum/supply_pack/sec_supply/fire name = "Incendiary Weapons Crate" @@ -84,6 +104,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 8346ea00b06e..581a7f2587b4 100644 --- a/code/modules/cargo/packs/spacesuit_armor.dm +++ b/code/modules/cargo/packs/spacesuit_armor.dm @@ -16,7 +16,7 @@ /datum/supply_pack/spacesuit_armor/pilot_spacesuit name = "Pilot Space Suit Crate" - desc = "One pilot space suit, for improved mobility in mechs." + desc = "One pilot space suit, for improved mobility in exosuits." cost = 750 contains = list(/obj/item/clothing/suit/space/pilot, /obj/item/clothing/head/helmet/space/pilot/random) @@ -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" @@ -117,7 +123,8 @@ desc = "Contains one full set of bulletproof armor, guaranteed to reduce a bullet's stopping power by half but with limited protection against melee weaponry." cost = 1750 contains = list(/obj/item/clothing/suit/armor/vest/bulletproof, - /obj/item/clothing/head/helmet/bulletproof) + /obj/item/clothing/head/helmet/bulletproof, + /obj/item/clothing/glasses/sunglasses/ballistic) crate_name = "bulletproof armor crate" crate_type = /obj/structure/closet/crate/secure/plasma diff --git a/code/modules/cargo/packs/tools.dm b/code/modules/cargo/packs/tools.dm index 6b43448a5d81..36bfefc02796 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" @@ -105,6 +111,13 @@ crate_name = "tank transfer valve crate" crate_type = /obj/structure/closet/crate/secure/science +/datum/supply_pack/tools/anglegrinder + name = "Angle Grinder" + desc = "Contains one angle grinder pack, a tool used for quick structure deconstruction and salvaging" + cost = 2000 + contains = list(/obj/item/gear_pack/anglegrinder) + crate_name = "Angle Grinder" + /* Liquid tanks */ @@ -140,3 +153,14 @@ contains = list(/obj/structure/reagent_dispensers/foamtank) crate_name = "foam tank crate" crate_type = /obj/structure/closet/crate/large + +/datum/supply_pack/tools/radfoamtank + name = "Radiation Foam Tank Crate" + desc = "Contains a tank of anti-radiation foam. Pressurized sprayer included!" + cost = 1500 + contains = list( + /obj/item/watertank/anti_rad, + /obj/structure/reagent_dispensers/foamtank/antirad + ) + crate_name = "foam tank crate" + crate_type = /obj/structure/closet/crate/large diff --git a/code/modules/client/loadout/loadout_accessories.dm b/code/modules/client/loadout/loadout_accessories.dm index c1e4d7a088a8..a8acc1544654 100644 --- a/code/modules/client/loadout/loadout_accessories.dm +++ b/code/modules/client/loadout/loadout_accessories.dm @@ -50,7 +50,39 @@ display_name = "tie, recolorable" path = /obj/item/clothing/neck/tie +//Gloves + +/datum/gear/accessory/gloves + subtype_path = /datum/gear/accessory/gloves + slot = ITEM_SLOT_GLOVES + +/datum/gear/accessory/gloves/black + display_name = "gloves, black" + description = "Standard hand coverings for everyday use." + path = /obj/item/clothing/gloves/color/black + +/datum/gear/accessory/gloves/white + display_name = "gloves, white" + description = "Standard hand coverings for everyday use." + path = /obj/item/clothing/gloves/color/white + +/datum/gear/accessory/gloves/brown + display_name = "gloves, brown" + description = "Standard hand coverings for everyday use." + path = /obj/item/clothing/gloves/color/brown + +/datum/gear/accessory/gloves/fingerless + display_name = "gloves, fingerless" + description = "Radical hand coverings for everyday use." + path = /obj/item/clothing/gloves/fingerless + +/datum/gear/accessory/gloves/evening + display_name = "gloves, evening" + description = "Excessively fancy elbow-length gloves." + path = /obj/item/clothing/gloves/color/evening + //Bone + /datum/gear/accessory/fangnecklace display_name = "wolf fang necklace" path = /obj/item/clothing/neck/fangnecklace @@ -60,6 +92,36 @@ path = /obj/item/clothing/accessory/bonearmlet slot = null +//Masks + +/datum/gear/accessory/mask + subtype_path = /datum/gear/accessory/mask + slot = ITEM_SLOT_MASK + +/datum/gear/accessory/mask/bandana/red + display_name = "bandana, red" + path = /obj/item/clothing/mask/bandana/red + +/datum/gear/accessory/mask/bandana/skull + display_name = "bandana, skull" + path = /obj/item/clothing/mask/bandana/skull + +/datum/gear/accessory/mask/bandana/black + display_name = "bandana, black" + path = /obj/item/clothing/mask/bandana/black + +/datum/gear/accessory/mask/bandana/blue + display_name = "bandana, blue" + path = /obj/item/clothing/mask/bandana/blue + +/datum/gear/accessory/mask/surgical + display_name = "surgical mask" + path = /obj/item/clothing/mask/surgical + +/datum/gear/accessory/mask/balaclava + display_name = "balaclava" + path = /obj/item/clothing/mask/balaclava + //Misc /datum/gear/accessory/waistcoat @@ -72,23 +134,11 @@ path = /obj/item/clothing/neck/stethoscope allowed_roles = list("Medical Doctor", "Chief Medical Officer") -/datum/gear/accessory/gloves/black - display_name = "black gloves" - description = "Standard hand coverings for everyday use." - path = /obj/item/clothing/gloves/color/black - -/datum/gear/accessory/gloves/white - display_name = "white gloves" - description = "Standard hand coverings for everyday use." - path = /obj/item/clothing/gloves/color/white +/datum/gear/accessory/headphones + display_name = "headphones" + slot = ITEM_SLOT_EARS + path = /obj/item/instrument/piano_synth/headphones -/datum/gear/accessory/gloves/fingerless - display_name = "fingerless gloves" - description = "Radical hand coverings for everyday use." - path = /obj/item/clothing/gloves/fingerless - -/datum/gear/accessory/gloves/evening - display_name = "evening gloves" - description = "Excessively fancy elbow-length gloves." - path = /obj/item/clothing/gloves/color/evening - slot = ITEM_SLOT_GLOVES +/datum/gear/accessory/pocketprotector + display_name = "pocket protector" + path = /obj/item/clothing/accessory/pocketprotector diff --git a/code/modules/client/loadout/loadout_eyewear.dm b/code/modules/client/loadout/loadout_eyewear.dm index 99e868ad0854..b6962a8dc34d 100644 --- a/code/modules/client/loadout/loadout_eyewear.dm +++ b/code/modules/client/loadout/loadout_eyewear.dm @@ -29,10 +29,6 @@ display_name = "eyepatch" path = /obj/item/clothing/glasses/eyepatch -/datum/gear/eyewear/monocle - display_name = "monocle" - path = /obj/item/clothing/glasses/monocle - /datum/gear/eyewear/cheapsuns display_name = "cheap sunglasses" path = /obj/item/clothing/glasses/cheapsuns @@ -46,7 +42,10 @@ description = "A blindfold you can still see through." path = /obj/item/clothing/glasses/trickblindfold - +/datum/gear/eyewear/doubleeyepatch + display_name = "double eyepatch" + description = "Two eyepatches at once! Effectively a blindfold, though." + path = /obj/item/clothing/glasses/blindfold/eyepatch /datum/gear/eyewear/glasses/cold display_name = "cold goggles" diff --git a/code/modules/client/loadout/loadout_footwear.dm b/code/modules/client/loadout/loadout_footwear.dm index dd4632f9bc34..3e65cd9ed5d3 100644 --- a/code/modules/client/loadout/loadout_footwear.dm +++ b/code/modules/client/loadout/loadout_footwear.dm @@ -64,3 +64,17 @@ /datum/gear/footwear/color/white display_name = "white shoes" path = /obj/item/clothing/shoes/sneakers/white + +//Cowboy boots + +/datum/gear/footwear/cowboy + display_name = "cowboy boots, brown" + path = /obj/item/clothing/shoes/cowboy + +/datum/gear/footwear/cowboy/black + display_name = "cowboy boots, black" + path = /obj/item/clothing/shoes/cowboy/black + +/datum/gear/footwear/cowboy/white + display_name = "cowboy boots, white" + path = /obj/item/clothing/shoes/cowboy/white diff --git a/code/modules/client/loadout/loadout_general.dm b/code/modules/client/loadout/loadout_general.dm index 8bb3ff3cb69d..712500f9fd62 100644 --- a/code/modules/client/loadout/loadout_general.dm +++ b/code/modules/client/loadout/loadout_general.dm @@ -14,10 +14,6 @@ display_name = "lipstick, red" path = /obj/item/lipstick -/datum/gear/balaclava - display_name = "balaclava" - path = /obj/item/clothing/mask/balaclava - /datum/gear/vape display_name = "vape" path = /obj/item/clothing/mask/vape @@ -26,10 +22,6 @@ display_name = "e-cigar" path = /obj/item/clothing/mask/vape/cigar -/datum/gear/bandana - display_name = "bandana, red" - path = /obj/item/clothing/mask/bandana/red - /datum/gear/flask display_name = "flask" path = /obj/item/reagent_containers/food/drinks/flask @@ -58,12 +50,17 @@ display_name = "toy, deck of cards" path = /obj/item/toy/cards/deck +/datum/gear/kotahi + display_name = "toy, deck of KOTAHI cards" + path = /obj/item/toy/cards/deck/kotahi + /datum/gear/eightball display_name = "toy, magic eight ball" path = /obj/item/toy/eightball /datum/gear/pai display_name = "personal AI device" + description = "A synthetic friend that fits in your pocket." path = /obj/item/paicard /datum/gear/tablet @@ -86,6 +83,10 @@ display_name = "pen, four-color" path = /obj/item/pen/fourcolor +/datum/gear/fountainpen + display_name = "pen, fountain" + path = /obj/item/pen/fountain + /datum/gear/paperbin display_name = "paper bin" path = /obj/item/paper_bin @@ -127,7 +128,6 @@ display_name = "toy, rilena tali plushie" path = /obj/item/toy/plush/tali -// Shiptest edit /datum/gear/amongus display_name = "toy, suspicious pill plushie" path = /obj/item/toy/plush/among @@ -150,8 +150,6 @@ display_name = "table bell, brass" path = /obj/item/table_bell/brass -// End Shiptest - /datum/gear/flashlight display_name = "tool, flashlight" path = /obj/item/flashlight @@ -160,11 +158,11 @@ display_name = "tool, emergency crowbar" path = /obj/item/crowbar/red -/datum/gear/surgical_mask - display_name = "surgical mask" - path = /obj/item/clothing/mask/surgical - /datum/gear/rilena_poster display_name = "poster, rilena" path = /obj/item/poster/random_rilena description = "A random poster of the RILENA series." + +/datum/gear/camera + display_name = "polaroid camera" + path = /obj/item/camera diff --git a/code/modules/client/loadout/loadout_hat.dm b/code/modules/client/loadout/loadout_hat.dm index 23e34d7d19c3..2f7e59c288b7 100644 --- a/code/modules/client/loadout/loadout_hat.dm +++ b/code/modules/client/loadout/loadout_hat.dm @@ -27,6 +27,10 @@ display_name = "beret, red" path = /obj/item/clothing/head/beret +/datum/gear/hat/beret/black + display_name = "beret, black" + path = /obj/item/clothing/head/beret/black + /datum/gear/hat/beret/departmental display_name = "beret, departmental" path = /obj/item/clothing/head/beret/grey @@ -74,6 +78,57 @@ path = /obj/item/clothing/head/beret/eng/hazard allowed_roles = list("Station Engineer", "Atmospheric Technician", "Chief Engineer") +//Soft caps + +/datum/gear/hat/softcap/red + display_name = "cap, red" + path = /obj/item/clothing/head/soft/red + +/datum/gear/hat/softcap/blue + display_name = "cap, blue" + path = /obj/item/clothing/head/soft/blue + +/datum/gear/hat/softcap/grey + display_name = "cap, grey" + path = /obj/item/clothing/head/soft/grey + +/datum/gear/hat/softcap/white + display_name = "cap, white" + path = /obj/item/clothing/head/soft/mime + +/datum/gear/hat/softcap/black + display_name = "cap, black" + path = /obj/item/clothing/head/soft/black + +//Beanies + +/datum/gear/hat/beanie + display_name = "beanie, white" + path = /obj/item/clothing/head/beanie + +/datum/gear/hat/beanie/black + display_name = "beanie, black" + path = /obj/item/clothing/head/beanie/black + +/datum/gear/hat/beanie/red + display_name = "beanie, red" + path = /obj/item/clothing/head/beanie/red + +/datum/gear/hat/beanie/green + display_name = "beanie, green" + path = /obj/item/clothing/head/beanie/green + +/datum/gear/hat/beanie/purple + display_name = "beanie, purple" + path = /obj/item/clothing/head/beanie/purple + +/datum/gear/hat/beanie/blue + display_name = "beanie, blue" + path = /obj/item/clothing/head/beanie/darkblue + +/datum/gear/hat/beanie/orange + display_name = "beanie, orange" + path = /obj/item/clothing/head/beanie/orange //Misc /datum/gear/hat/that @@ -81,17 +136,21 @@ path = /obj/item/clothing/head/that /datum/gear/hat/fedora - display_name = "fedora" + display_name = "fedora, black" path = /obj/item/clothing/head/fedora +/datum/gear/hat/fedora/white + display_name = "fedora, white" + path = /obj/item/clothing/head/fedora/white + +/datum/gear/hat/fedora/beige + display_name = "fedora, beige" + path = /obj/item/clothing/head/fedora/beige + /datum/gear/hat/flatcap display_name = "flatcap" path = /obj/item/clothing/head/flatcap -/datum/gear/hat/beanie - display_name = "beanie" - path = /obj/item/clothing/head/beanie - /datum/gear/hat/wig display_name = "wig" path = /obj/item/clothing/head/wig diff --git a/code/modules/client/loadout/loadout_suit.dm b/code/modules/client/loadout/loadout_suit.dm index f8757bfa5b38..1d11857663ad 100644 --- a/code/modules/client/loadout/loadout_suit.dm +++ b/code/modules/client/loadout/loadout_suit.dm @@ -23,10 +23,6 @@ display_name = "leather jacket" path = /obj/item/clothing/suit/jacket/leather -/datum/gear/suit/jacket/leather/overcoat - display_name = "leather overcoat" - path = /obj/item/clothing/suit/jacket/leather/overcoat - /datum/gear/suit/jacket/leather/duster display_name = "leather duster" path = /obj/item/clothing/suit/jacket/leather/duster @@ -55,8 +51,6 @@ display_name = "suit jacket, charcoal" path = /obj/item/clothing/suit/toggle/lawyer/charcoal -/datum/gear/suit/jacket/navy //why is this blank? i dont know - /datum/gear/suit/jacket/hoodie_black display_name = "hoodie, black" path = /obj/item/clothing/suit/hooded/hoodie/black @@ -93,11 +87,20 @@ display_name = "hazard jacket" path = /obj/item/clothing/suit/toggle/hazard -//Misc -/datum/gear/suit/grponcho - display_name = "poncho, green" - path = /obj/item/clothing/suit/poncho/green +//Suspenders +/datum/gear/suit/suspenders/red + display_name = "suspenders, red" + path = /obj/item/clothing/suit/toggle/suspenders + +/datum/gear/suit/suspenders/blue + display_name = "suspenders, blue" + path = /obj/item/clothing/suit/toggle/suspenders/blue +/datum/gear/suit/suspenders/gray + display_name = "suspenders, gray" + path = /obj/item/clothing/suit/toggle/suspenders/gray + +//Misc /datum/gear/suit/overalls display_name = "overalls" path = /obj/item/clothing/suit/apron/overalls @@ -119,3 +122,11 @@ display_name = "floral shirt" description = "From grills to guns, this shirt's seen it all." path = /obj/item/clothing/suit/hawaiian + +/datum/gear/suit/hazardvest + display_name = "hazard vest" + path = /obj/item/clothing/suit/hazardvest + +/datum/gear/suit/longcoat + display_name = "longcoat" + path = /obj/item/clothing/suit/longcoat diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 006074e74bcd..91eab6d53f0f 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -5,7 +5,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) //doohickeys for savefiles var/path var/default_slot = 1 //Holder so it doesn't default to slot 1, rather the last one used - var/max_save_slots = 20 + var/max_save_slots = 30 //non-preference stuff var/muted = 0 @@ -227,7 +227,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) load_path(C.ckey) unlock_content = C.IsByondMember() if(unlock_content) - max_save_slots = 30 + max_save_slots = 50 var/loaded_preferences_successfully = load_preferences() if(loaded_preferences_successfully) if(load_character()) @@ -1153,7 +1153,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Hide Prayers: [(chat_toggles & CHAT_PRAYER)?"Shown":"Hidden"]
    " dat += "Split Admin Tabs: [(toggles & SPLIT_ADMIN_TABS)?"Enabled":"Disabled"]
    " dat += "Fast MC Refresh: [(toggles & FAST_MC_REFRESH)?"Enabled":"Disabled"]
    " - dat += "Ignore Being Summoned as Cult Ghost: [(toggles & ADMIN_IGNORE_CULT_GHOST)?"Don't Allow Being Summoned":"Allow Being Summoned"]
    " dat += "Briefing Officer Outfit: [brief_outfit]
    " if(CONFIG_GET(flag/allow_admin_asaycolor)) dat += "
    " @@ -1435,7 +1434,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) balance -= initial(quirk_type.value) switch(change_type) if("species") - if((quirk_name in SSquirks.species_blacklist) && (pref_species.id in SSquirks.species_blacklist[quirk_name])) + if((quirk_name in SSquirks.species_blacklist) && (target_species.id in SSquirks.species_blacklist[quirk_name])) all_quirks_new -= quirk_name balance += initial(quirk_type.value) if("mood") @@ -2293,8 +2292,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) toggles ^= DEADMIN_POSITION_SECURITY if("toggle_deadmin_silicon") toggles ^= DEADMIN_POSITION_SILICON - if("toggle_ignore_cult_ghost") - toggles ^= ADMIN_IGNORE_CULT_GHOST if("be_special") var/be_special_type = href_list["be_special_type"] diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 166f437dc3af..a6bb80499588 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -42,6 +42,10 @@ /// If this can be eaten by a moth var/moth_edible = TRUE + // Not used yet + /// Trait modification, lazylist of traits to add/take away, on equipment/drop in the correct slot + var/list/clothing_traits + /obj/item/clothing/Initialize() if((clothing_flags & VOICEBOX_TOGGLABLE)) actions_types += /datum/action/item_action/toggle_voice_box @@ -111,6 +115,8 @@ ..() if(!istype(user)) return + for(var/trait in clothing_traits) + REMOVE_CLOTHING_TRAIT(user, trait) if(LAZYLEN(user_vars_remembered)) for(var/variable in user_vars_remembered) if(variable in user.vars) @@ -123,12 +129,48 @@ if (!istype(user)) return if(slot_flags & slot) //Was equipped to a valid slot for this item? + for(var/trait in clothing_traits) + ADD_CLOTHING_TRAIT(user, trait) if (LAZYLEN(user_vars_to_edit)) for(var/variable in user_vars_to_edit) if(variable in user.vars) LAZYSET(user_vars_remembered, variable, user.vars[variable]) user.vv_edit_var(variable, user_vars_to_edit[variable]) +/** + * Inserts a trait (or multiple traits) into the clothing traits list + * + * If worn, then we will also give the wearer the trait as if equipped + * + * This is so you can add clothing traits without worrying about needing to equip or unequip them to gain effects + */ +/obj/item/clothing/proc/attach_clothing_traits(trait_or_traits) + if(!islist(trait_or_traits)) + trait_or_traits = list(trait_or_traits) + + LAZYOR(clothing_traits, trait_or_traits) + var/mob/wearer = loc + if(istype(wearer) && (wearer.get_slot_by_item(src) & slot_flags)) + for(var/new_trait in trait_or_traits) + ADD_CLOTHING_TRAIT(wearer, new_trait) + +/** + * Removes a trait (or multiple traits) from the clothing traits list + * + * If worn, then we will also remove the trait from the wearer as if unequipped + * + * This is so you can add clothing traits without worrying about needing to equip or unequip them to gain effects + */ +/obj/item/clothing/proc/detach_clothing_traits(trait_or_traits) + if(!islist(trait_or_traits)) + trait_or_traits = list(trait_or_traits) + + LAZYREMOVE(clothing_traits, trait_or_traits) + var/mob/wearer = loc + if(istype(wearer)) + for(var/new_trait in trait_or_traits) + REMOVE_CLOTHING_TRAIT(wearer, new_trait) + /obj/item/clothing/examine(mob/user) . = ..() switch (max_heat_protection_temperature) diff --git a/code/modules/clothing/factions/clip.dm b/code/modules/clothing/factions/clip.dm index ce87ea624d7a..7ac3668aaf77 100644 --- a/code/modules/clothing/factions/clip.dm +++ b/code/modules/clothing/factions/clip.dm @@ -140,10 +140,10 @@ icon_state = "clip_trenchcoat" item_state = "trenchcoat_solgov" - body_parts_covered = CHEST|LEGS|ARMS + body_parts_covered = CHEST|GROIN armor = list("melee" = 25, "bullet" = 10, "laser" = 25, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 0) - cold_protection = CHEST|LEGS|ARMS - heat_protection = CHEST|LEGS|ARMS + cold_protection = CHEST|GROIN|LEGS|ARMS + heat_protection = CHEST|GROIN|LEGS|ARMS supports_variations = DIGITIGRADE_VARIATION_SAME_ICON_FILE @@ -156,7 +156,7 @@ icon_state = "clip_captaincoat" item_state = "clip_captaincoat" - body_parts_covered = CHEST|LEGS|ARMS + body_parts_covered = CHEST armor = list("melee" = 25, "bullet" = 10, "laser" = 25, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 0) cold_protection = CHEST|LEGS|ARMS heat_protection = CHEST|LEGS|ARMS @@ -415,26 +415,31 @@ supports_variations = VOX_VARIATION -/obj/item/storage/belt/military/clip/p16/PopulateContents() +/obj/item/storage/belt/military/clip/cm82/PopulateContents() for(var/i in 1 to 4) new /obj/item/ammo_box/magazine/p16(src) new /obj/item/grenade/frag(src) -/obj/item/storage/belt/military/clip/gal/PopulateContents() +/obj/item/storage/belt/military/clip/f4/PopulateContents() for(var/i in 1 to 4) - new /obj/item/ammo_box/magazine/gal(src) + new /obj/item/ammo_box/magazine/f4_308(src) new /obj/item/grenade/frag(src) /obj/item/storage/belt/military/clip/cm5/PopulateContents() for(var/i in 1 to 4) - new /obj/item/ammo_box/magazine/smgm9mm(src) + new /obj/item/ammo_box/magazine/cm5_9mm(src) new /obj/item/grenade/frag(src) /obj/item/storage/belt/military/clip/cm15/PopulateContents() for(var/i in 1 to 5) - new /obj/item/ammo_box/magazine/cm15_mag(src) + new /obj/item/ammo_box/magazine/cm15_12g(src) new /obj/item/grenade/frag(src) +/obj/item/storage/belt/military/clip/e50/ComponentInitialize() + . = ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.max_w_class = WEIGHT_CLASS_NORMAL + /obj/item/storage/belt/military/clip/e50/PopulateContents() for(var/i in 1 to 5) new /obj/item/stock_parts/cell/gun/large(src) diff --git a/code/modules/clothing/factions/frontiersmen.dm b/code/modules/clothing/factions/frontiersmen.dm index 9bac6c40a004..77af8138fb40 100644 --- a/code/modules/clothing/factions/frontiersmen.dm +++ b/code/modules/clothing/factions/frontiersmen.dm @@ -10,6 +10,7 @@ can_adjust = FALSE icon = 'icons/obj/clothing/faction/frontiersmen/uniforms.dmi' mob_overlay_icon = 'icons/mob/clothing/faction/frontiersmen/uniforms.dmi' + supports_variations = VOX_VARIATION /obj/item/clothing/under/frontiersmen/deckhand name = "\improper deckhand jumpsuit" @@ -58,6 +59,7 @@ icon = 'icons/obj/clothing/faction/frontiersmen/suits.dmi' mob_overlay_icon = 'icons/mob/clothing/faction/frontiersmen/suits.dmi' blood_overlay_type = "armor" + supports_variations = VOX_VARIATION /obj/item/clothing/suit/armor/vest/marine/frontier name = "light tactical armor vest" @@ -71,13 +73,13 @@ name = "reinforced fur coat" desc = "A stiff olive-green coat, meant for frigid conditions. Commonly worn by Frontiersmen command." icon_state = "frontier_coat" - body_parts_covered = CHEST|GROIN|ARMS + body_parts_covered = CHEST|GROIN cold_protection = CHEST|GROIN|ARMS heat_protection = CHEST|GROIN|ARMS icon_state = "frontier_coat" item_state = "frontier_coat" blood_overlay_type = "coat" - armor = list("melee" = 35, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list("melee" = 35, "bullet" = 35, "laser" = 35, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) icon = 'icons/obj/clothing/faction/frontiersmen/suits.dmi' mob_overlay_icon = 'icons/mob/clothing/faction/frontiersmen/suits.dmi' @@ -85,7 +87,7 @@ name = "frontiersmen fireproof coat" desc = "A stiff olive-green coat, used particularly by Frontiersmen flame troopers. It seems to be lined with asbestos, to provide maximum heat and fire deterrence... At the cost of comfort. And mesothelioma." icon_state = "frontier_fireproof_suit" - armor = list("melee" = 35, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) + armor = list("melee" = 35, "bullet" = 35, "laser" = 35, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) w_class = WEIGHT_CLASS_BULKY gas_transfer_coefficient = 0.9 permeability_coefficient = 0.5 @@ -142,7 +144,7 @@ name = "\improper Frontiersmen officer beret" desc = "A scratchy olive green beret emblazoned with the Frontiersmen insignia, worn by Frontiersmen who want to look good while intimidating freighter captains." icon_state = "frontier_officer_beret" - armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) /obj/item/clothing/head/frontier name = "frontier surgical cap" @@ -162,17 +164,20 @@ name = "\improper frontiersmen commander's cap" desc = "An imposing peaked cap, meant for a commander of the Frontiersmen." icon_state = "frontier_cap" + supports_variations = VOX_VARIATION /obj/item/clothing/head/frontier/admiral name = "\improper frontiersmen admiral's cap" desc = "An imposing peaked cap meant for only the highest of officers of the Frontiersmen pirate fleet." icon_state = "frontier_admiral_cap" + supports_variations = VOX_VARIATION /obj/item/clothing/head/helmet/bulletproof/x11/frontier name = "\improper frontiersmen X-11 helmet" desc = "A heavily modified X-11 pattern helmet used by the Frontiersmen pirate fleet." icon_state = "x11helm_frontier" unique_reskin = null + supports_variations = VOX_VARIATION /obj/item/clothing/head/helmet/bulletproof/x11/frontier/fireproof name = "\improper fireproof frontiersmen X-11 helmet" @@ -249,9 +254,14 @@ new /obj/item/ammo_box/magazine/skm_762_40(src) new /obj/item/grenade/frag(src) -/obj/item/storage/belt/security/military/frontiersmen/aps_mp_ammo/PopulateContents() //replace with spitter. remind me. +/obj/item/storage/belt/security/military/frontiersmen/mauler_mp_ammo/PopulateContents() for(var/i in 1 to 4) - new /obj/item/ammo_box/magazine/pistolm9mm(src) + new /obj/item/ammo_box/magazine/m9mm_mauler(src) + new /obj/item/grenade/frag(src) + +/obj/item/storage/belt/security/military/frontiersmen/spitter_ammo/PopulateContents() + for(var/i in 1 to 4) + new /obj/item/ammo_box/magazine/spitter_9mm(src) new /obj/item/grenade/frag(src) /obj/item/storage/belt/security/military/frontiersmen/flamer/PopulateContents() diff --git a/code/modules/clothing/factions/gezena.dm b/code/modules/clothing/factions/gezena.dm index 96c6eee3c734..3eea9ebec461 100644 --- a/code/modules/clothing/factions/gezena.dm +++ b/code/modules/clothing/factions/gezena.dm @@ -36,10 +36,12 @@ item_state = "bluecloth" blood_overlay_type = "coat" togglename = "zipper" - body_parts_covered = CHEST + body_parts_covered = CHEST|GROIN|ARMS + cold_protection = CHEST|GROIN|ARMS + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) pocket_storage_component_path = /datum/component/storage/concrete/pockets/exo supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON - armor = list("melee" = 20, "bullet" = 20, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 0) //Armored suit @@ -130,6 +132,9 @@ desc = "The standard cap of the PGF military, in Navy colors. “betzu-il”, translating to “sun-blocker”, refers to the flap at the back for protection against natural hazards such as sunburns, sandstorms, and biting insects." icon_state = "navalflap" item_state = "bluecloth" + cold_protection = HEAD + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) /obj/item/clothing/head/gezena/marine name = "\improper PGFMC Cap" @@ -137,7 +142,7 @@ icon_state = "marinehat" item_state = "marinecloth" -/obj/item/clothing/head/gezena/marine/flap +/obj/item/clothing/head/gezena/flap/marine name = "\improper PGFMC Betzu-il cap" desc = "The standard cap of the PGF military, in Marine Corps colors. “betzu-il”, translating to “sun-blocker”, refers to the flap at the back for protection against natural hazards such as sunburns, sandstorms, and biting insects." icon_state = "marineflap" @@ -149,7 +154,7 @@ icon_state = "squadhat" item_state = "marinecloth" -/obj/item/clothing/head/gezena/marine/lead/flap +/obj/item/clothing/head/gezena/flap/marine/lead name = "\improper PGFMC Commander's' Betzu-il cap" desc = "The standard cap of the PGF military, in Marine Corps colors. “betzu-il”, translating to “sun-blocker”, refers to the flap at the back for protection against natural hazards such as sunburns, sandstorms, and biting insects. The silver markings denote it as a commander's cap." icon_state = "squadflap" @@ -161,7 +166,7 @@ icon_state = "medichat" item_state = "whitecloth" -/obj/item/clothing/head/gezena/medic/flap +/obj/item/clothing/head/gezena/flap/medic name = "\improper PGF medic Betzu-il cap" desc = "The standard cap of the PGF military. “betzu-il”, translating to “sun-blocker”, refers to the flap at the back for protection against natural hazards such as sunburns, sandstorms, and biting insects. The coloring indicates the wearer as a medical officer." icon_state = "medicflap" @@ -212,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 @@ -260,8 +265,8 @@ item_state = "blackcloth" /obj/item/clothing/neck/cloak/gezena/lead - name = "sergeant's Azuilhauz" - desc = "The “Aziulhauz”, or “rank-cape”, is the method with which PGF military members display their rank to others. Wearing one while on duty is required by uniform code. This variant displays the wearer's rank as a squad commander." + name = "marine officer's Azuilhauz" + desc = "The “Aziulhauz”, or “rank-cape”, is the method with which PGF military members display their rank to others. Wearing one while on duty is required by uniform code. This variant displays the wearer's rank as a squad leader." icon_state = "squadcape" item_state = "blackcloth" @@ -278,7 +283,7 @@ item_state = "whitecloth" /obj/item/clothing/neck/cloak/gezena/command - name = "officer's Azuilhauz" + name = "navy officer's Azuilhauz" desc = "The “Aziulhauz”, or “rank-cape”, is the method with which PGF military members display their rank to others. Wearing one while on duty is required by uniform code. This variant displays the wearer's rank as an officer." icon_state = "commandcape" item_state = "whitecloth" diff --git a/code/modules/clothing/factions/hardliners.dm b/code/modules/clothing/factions/hardliners.dm index 5c3423f745c0..43faee3ccb19 100644 --- a/code/modules/clothing/factions/hardliners.dm +++ b/code/modules/clothing/factions/hardliners.dm @@ -44,6 +44,20 @@ icon_state = "hl_hazard" item_state = "whitecloth" +/obj/item/clothing/suit/hooded/wintercoat/security/hardliners + name = "hardliner winter coat" + desc = "A stark-white winter coat used by Marauders of the Hardliner movement, the zipper tab displaying the cracked emblem of the Gorlex Marauders." + icon_state = "coathl" + item_state = "coathl" + icon = 'icons/obj/clothing/faction/hardliners/suits.dmi' + mob_overlay_icon = 'icons/mob/clothing/faction/hardliners/suits.dmi' + hoodtype = /obj/item/clothing/head/hooded/winterhood/security/hardliners + +/obj/item/clothing/head/hooded/winterhood/security/hardliners + icon_state = "hood_hl" + icon = 'icons/obj/clothing/faction/hardliners/head.dmi' + mob_overlay_icon = 'icons/mob/clothing/faction/hardliners/head.dmi' + ////////////////// //Armored suits// ///////////////// @@ -69,22 +83,22 @@ /obj/item/clothing/suit/armor/hardliners/sergeant name = "hardliners sergeant jacket" desc = "An armored jacket typically worn by sergeant of the Hardliners. They're reminiscent of the garb worn by old Gorlex navymen, prior to its destruction." - body_parts_covered = CHEST|GROIN|ARMS + body_parts_covered = CHEST|GROIN icon_state = "hl_sergeant" item_state = "hl_sergeant" blood_overlay_type = "coat" - armor = list("melee" = 35, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list("melee" = 35, "bullet" = 35, "laser" = 35, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) /obj/item/clothing/suit/toggle/armor/vest/hardliners name = "hardliners captain coat" desc = "An imposing armored coat worn by captains of Hardliner fleets, hand-designed by Cybersun tailors to provide maximum protection to its wearer." - body_parts_covered = CHEST|GROIN|ARMS + body_parts_covered = CHEST|GROIN icon_state = "hl_captain" item_state = "hl_captain" icon = 'icons/obj/clothing/faction/hardliners/suits.dmi' mob_overlay_icon = 'icons/mob/clothing/faction/hardliners/suits.dmi' blood_overlay_type = "coat" - armor = list("melee" = 35, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list("melee" = 35, "bullet" = 35, "laser" = 35, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) togglename = "buttons" /////////////// @@ -114,6 +128,28 @@ lightweight = 1 jetpack = null +/obj/item/clothing/head/helmet/space/hardsuit/syndi/elite/hl + name = "elite white-red hardsuit helmet" + desc = "An elite version of the infamous white-red Hardliner hardsuit, with improved armor and fireproofing. It is in EVA mode. Property of Gorlex Marauders." + alt_desc = "An elite version of the infamous white-red Hardliner hardsuit, with improved armor and fireproofing. It is in combat mode. Property of Gorlex Marauders." + icon_state = "hardsuit0-hlelite" + hardsuit_type = "hlelite" + icon = 'icons/obj/clothing/faction/hardliners/head.dmi' + mob_overlay_icon = 'icons/mob/clothing/faction/hardliners/head.dmi' + +/obj/item/clothing/suit/space/hardsuit/syndi/elite/hl + name = "elite white-red hardsuit" + desc = "An elite version of the infamous white-red Hardliner hardsuit, with improved armor and fireproofing. It is in travel mode." + alt_desc = "An elite version of the infamous white-red Hardliner hardsuit, with improved armor and fireproofing. It is in combat mode." + icon_state = "hardsuit0-hlelite" + item_state = "hardsuit0-hlelite" + hardsuit_type = "hlelite" + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/elite/hl + icon = 'icons/obj/clothing/faction/hardliners/suits.dmi' + mob_overlay_icon = 'icons/mob/clothing/faction/hardliners/suits.dmi' + lightweight = 1 + jetpack = null + ///////// //Hats// //////// @@ -150,7 +186,7 @@ /obj/item/clothing/head/helmet/hardliners/swat name = "hardliners pilot helmet" - desc = "A modified X-11 helmet utilized by regular pilots, as well as the feared mech pilots of the Hardliner movement. The attached visor helps protect against sudden flashes from explosions." + desc = "A modified X-11 helmet utilized by regular pilots, as well as the feared exosuit pilots of the Hardliner movement. The attached visor helps protect against sudden flashes from explosions." flash_protect = FLASH_PROTECTION_WELDER icon_state = "hl_pilot" item_state = "hl_pilot" diff --git a/code/modules/clothing/factions/nanotrasen.dm b/code/modules/clothing/factions/nanotrasen.dm index 664c534d236e..6e605d5471b2 100644 --- a/code/modules/clothing/factions/nanotrasen.dm +++ b/code/modules/clothing/factions/nanotrasen.dm @@ -230,7 +230,7 @@ icon_state = "armor" item_state = "blackcloth" body_parts_covered = CHEST|GROIN - armor = list("melee" = 30, "bullet" = 40, "laser" = 30, "energy" = 50, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 90) + armor = list("melee" = 35, "bullet" = 35, "laser" = 35, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) resistance_flags = FIRE_PROOF /obj/item/clothing/suit/armor/nanotrasen/slim @@ -241,8 +241,8 @@ name = "security director's overcoat" desc = "A tailored black overcoat, made from cutting-edge ballistic fabrics and composites. Vigilitas's 'VI' logo is embossed on every button. Intimidating and profoundly stylish." icon_state = "command_coat" - body_parts_covered = CHEST|GROIN|ARMS - armor = list("melee" = 30, "bullet" = 0, "laser" = 30, "energy" = 20, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 90) + body_parts_covered = CHEST|GROIN + armor = list("melee" = 35, "bullet" = 35, "laser" = 35, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 90) /obj/item/clothing/suit/armor/nanotrasen/captain name = "captain's jacket" @@ -250,7 +250,7 @@ icon_state = "armor_captain" item_state = "bluecloth" body_parts_covered = CHEST|GROIN - armor = list("melee" = 50, "bullet" = 60, "laser" = 60, "energy" = 50, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 90) + armor = list("melee" = 50, "bullet" = 40, "laser" = 50, "energy" = 50, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 90) resistance_flags = FIRE_PROOF /obj/item/clothing/suit/armor/nanotrasen/captain/parade @@ -258,7 +258,7 @@ desc = "An exquisitely-decorated fine blue jacket, suitable for especially formal situations, or for a commanding officer who wants to flaunt their status even more than usual. Richly decorated with gold thread and embroidered Nanotrasen logos." icon_state = "captain_formal" item_state = "bluecloth" - body_parts_covered = CHEST|GROIN|ARMS + body_parts_covered = CHEST|GROIN armor = list("melee" = 30, "bullet" = 0, "laser" = 30, "energy" = 20, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 90) // Hats // @@ -337,7 +337,7 @@ icon_state = "officer_peaked" item_state = "bluecloth" -/obj/item/clothing/head/nanotrasen/officer +/obj/item/clothing/head/nanotrasen/officer/fedora name = "officer's fedora" desc = "A fedora in a violent shade of Nanotrasen Blue, with a red silk band." icon_state = "officer_fedora" diff --git a/code/modules/clothing/factions/ngr.dm b/code/modules/clothing/factions/ngr.dm index 7892a098b50d..401f82795f68 100644 --- a/code/modules/clothing/factions/ngr.dm +++ b/code/modules/clothing/factions/ngr.dm @@ -14,7 +14,7 @@ /obj/item/clothing/under/syndicate/ngr/fatigues name = "\improper NGR fatigues" - desc = "Beige fatigues used primarily by the ship and mech pilots of the New Gorlex Republic." + desc = "Beige fatigues used primarily by the shuttle and exosuit pilots of the New Gorlex Republic." icon_state = "ngr_fatigues" item_state = "ngr_fatigues" @@ -64,6 +64,21 @@ mob_overlay_icon = 'icons/mob/clothing/faction/ngr/suits.dmi' icon_state = "ngr_hazard" item_state = "redcloth" + supports_variations = VOX_VARIATION + +/obj/item/clothing/suit/hooded/wintercoat/security/ngr + name = "NGR winter coat" + desc = "A sleek beige winter coat used by the Second Battlegroup of the New Gorlex Republic, the zipper tab proudly displays the official emblem of the NGR." + icon_state = "coatngr" + item_state = "coatngr" + icon = 'icons/obj/clothing/faction/ngr/suits.dmi' + mob_overlay_icon = 'icons/mob/clothing/faction/ngr/suits.dmi' + hoodtype = /obj/item/clothing/head/hooded/winterhood/security/ngr + +/obj/item/clothing/head/hooded/winterhood/security/ngr + icon_state = "hood_ngr" + icon = 'icons/obj/clothing/faction/ngr/head.dmi' + mob_overlay_icon = 'icons/mob/clothing/faction/ngr/head.dmi' ////////////////// //Armored suits// @@ -81,20 +96,20 @@ /obj/item/clothing/suit/armor/ngr/lieutenant name = "\improper 2nd Battlegroup overcoat" desc = "An armored overcoat worn by the lieutenants of the New Gorlex Republic's 2nd Battlegroup." - body_parts_covered = CHEST|GROIN|ARMS + body_parts_covered = CHEST|GROIN icon_state = "ngr_lieutenant" item_state = "ngr_lieutenant" blood_overlay_type = "coat" - armor = list("melee" = 35, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list("melee" = 35, "bullet" = 35, "laser" = 35, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) /obj/item/clothing/suit/armor/ngr/captain name = "\improper 2nd Battlegroup coat" desc = "An armored coat worn by captains the New Gorlex Republic's 2nd Battlegroup." - body_parts_covered = CHEST|GROIN|ARMS + body_parts_covered = CHEST|GROIN icon_state = "ngr_captain" item_state = "ngr_captain" blood_overlay_type = "coat" - armor = list("melee" = 35, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list("melee" = 35, "bullet" = 35, "laser" = 35, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) /////////////// //Spacesuits// @@ -122,6 +137,7 @@ helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/ngr lightweight = 1 jetpack = null + greyscale_colors = list("#33353a", "#d9ad82", "#8c1a34") /obj/item/clothing/head/helmet/space/plasmaman/ngr name = "NGR phorid envirosuit helmet" @@ -141,7 +157,6 @@ icon_state = "ngr_garrison" icon = 'icons/obj/clothing/faction/ngr/head.dmi' mob_overlay_icon = 'icons/mob/clothing/faction/ngr/head.dmi' - armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) /obj/item/clothing/head/ngr/flap name = "beige flap cap" @@ -230,6 +245,7 @@ icon_state = "ngr_shemagh" icon = 'icons/obj/clothing/faction/ngr/neck.dmi' mob_overlay_icon = 'icons/mob/clothing/faction/ngr/neck.dmi' + supports_variations = VOX_VARIATION ////////// //Belts// diff --git a/code/modules/clothing/factions/srm.dm b/code/modules/clothing/factions/srm.dm index cd901306b7a7..34e6b4218fe4 100644 --- a/code/modules/clothing/factions/srm.dm +++ b/code/modules/clothing/factions/srm.dm @@ -10,6 +10,7 @@ can_adjust = FALSE icon = 'icons/obj/clothing/faction/srm/uniforms.dmi' mob_overlay_icon = 'icons/mob/clothing/faction/srm/uniforms.dmi' + supports_variations = KEPORI_VARIATION ////////////////// //Armored suits// @@ -20,17 +21,19 @@ desc = "A coat made from hard leather. Meant to withstand long hunts in harsh wilderness." icon_state = "armor_rouma" item_state = "rouma_coat" - body_parts_covered = CHEST|GROIN|ARMS + body_parts_covered = CHEST|GROIN cold_protection = CHEST|GROIN|ARMS heat_protection = CHEST|GROIN|ARMS icon = 'icons/obj/clothing/faction/srm/suits.dmi' mob_overlay_icon = 'icons/mob/clothing/faction/srm/suits.dmi' + supports_variations = KEPORI_VARIATION /obj/item/clothing/suit/armor/roumain/shadow name = "saint-roumain shadow duster" desc = "A coat made from hard leather. Its rough, barely-treated finish is typical of one of the Saint-Roumain Militia's trainees." icon_state = "armor_rouma_shadow" item_state = "rouma_shadow_coat" + supports_variations = KEPORI_VARIATION /obj/item/clothing/suit/toggle/labcoat/roumain_med name = "saint-roumain medical duster" @@ -38,7 +41,8 @@ icon = 'icons/obj/clothing/faction/srm/suits.dmi' mob_overlay_icon = 'icons/mob/clothing/faction/srm/suits.dmi' icon_state = "rouma_med_coat" - armor = list("melee" = 35, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 50, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list("melee" = 35, "bullet" = 35, "laser" = 35, "energy" = 40, "bomb" = 25, "bio" = 50, "rad" = 0, "fire" = 50, "acid" = 50) + supports_variations = KEPORI_VARIATION /obj/item/clothing/suit/hazardvest/roumain name = "saint-roumain machinist leather vest" @@ -47,31 +51,34 @@ mob_overlay_icon = 'icons/mob/clothing/faction/srm/suits.dmi' icon_state = "armor_rouma_machinist" item_state = "rouma_coat" - armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 40, "bomb" = 35, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60) + armor = list("melee" = 35, "bullet" = 20, "laser" = 20, "energy" = 40, "bomb" = 35, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60) /obj/item/clothing/suit/armor/roumain/flamebearer name = "saint-roumain flamebearer robes" desc = "A set of ashy-grey robes made from hard leather, adorned with gold trims. Its rough finish after a near-char and application of aromatics is heavily favored for the ecclesiastical sect of the Church of Saint Roumain, a living reminder of the Ashen Huntsman himself." icon_state = "armor_rouma_flamebearer" + supports_variations = KEPORI_VARIATION /obj/item/clothing/suit/armor/roumain/colligne name = "saint-roumain colligne coat" desc = "A well-maintained hard leather coat typically worn to denote the rank of Colligne, a trainee Hunter Montagne. It is treated with bullet-resistant materials, and lined with the dark fur of Illestrian dire wolves." icon_state = "armor_rouma_colligne" item_state = "rouma_coat" - body_parts_covered = CHEST|GROIN|ARMS|LEGS + body_parts_covered = CHEST|GROIN cold_protection = CHEST|GROIN|LEGS|ARMS heat_protection = CHEST|GROIN|LEGS|ARMS + supports_variations = KEPORI_VARIATION /obj/item/clothing/suit/armor/roumain/montagne name = "saint-roumain montagne coat" desc = "A stylish red coat to indicate that you are, in fact, a Hunter Montagne. Made of extra hard exotic leather, treated with bullet-resistant materials, and lined with the fur of some unidentifiable creature." icon_state = "armor_rouma_montagne" item_state = "rouma_montagne_coat" - body_parts_covered = CHEST|GROIN|ARMS|LEGS - armor = list("melee" = 30, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 90) + body_parts_covered = CHEST|GROIN + armor = list("melee" = 35, "bullet" = 35, "laser" = 35, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) cold_protection = CHEST|GROIN|LEGS|ARMS heat_protection = CHEST|GROIN|LEGS|ARMS + supports_variations = KEPORI_VARIATION /////////////// //Spacesuits// @@ -86,6 +93,7 @@ item_state = "hardsuit0-roumain" hardsuit_type = "roumain" worn_y_offset = 4 + supports_variations = KEPORI_VARIATION /obj/item/clothing/suit/space/hardsuit/solgov/roumain name = "\improper roumain hardsuit" @@ -96,6 +104,7 @@ item_state = "hardsuit-roumain" helmettype = /obj/item/clothing/head/helmet/space/hardsuit/solgov/roumain slowdown = 0.5 + supports_variations = KEPORI_VARIATION ///////// //Hats// @@ -107,11 +116,13 @@ icon_state = "rouma_hat" icon = 'icons/obj/clothing/faction/srm/head.dmi' mob_overlay_icon = 'icons/mob/clothing/faction/srm/head.dmi' + supports_variations = KEPORI_VARIATION /obj/item/clothing/head/cowboy/sec/roumain/shadow name = "shadow's hat" desc = "A rough, simple hat. The way it covers your eyes makes you feel badass, but you just look like a wannabe hunter." icon_state = "rouma_shadow_hat" + supports_variations = KEPORI_VARIATION /obj/item/clothing/head/cowboy/sec/roumain/machinist name = "machinist's hat" @@ -122,21 +133,25 @@ name = "medical hunter's hat" desc = "A very wide-brimmed, round hat treated with oil and wax. Somehow manages to look stylish and creepy at the same time." icon_state = "rouma_med_hat" + supports_variations = KEPORI_VARIATION /obj/item/clothing/head/cowboy/sec/roumain/flamebearer name = "flamebearer's hat" desc = "A wide-brimmed, pointed hat with charred leather, granting it an ash-grey appearance. The design honors the one the Ashen Huntsman himself wore, according to legend." icon_state = "rouma_flamebearer_hat" + supports_variations = KEPORI_VARIATION /obj/item/clothing/head/cowboy/sec/roumain/colligne name = "colligne's hat" desc = "A fancy, pointy leather hat with a large feather plume to signal that you are, in fact... A Hunter Colligne. You still have some ways to go before you gain the title of Montagne." icon_state = "rouma_colligne_hat" + supports_variations = KEPORI_VARIATION /obj/item/clothing/head/cowboy/sec/roumain/montagne name = "montagne's hat" desc = "A very fancy hat with a large feather plume to signal that you are, in fact, a Hunter Montagne. The exotic fur lining is impeccably soft." icon_state = "rouma_montagne_hat" + supports_variations = KEPORI_VARIATION /////////////// //Accessories// diff --git a/code/modules/clothing/factions/suns.dm b/code/modules/clothing/factions/suns.dm index df6d831e479b..bce8586c9139 100644 --- a/code/modules/clothing/factions/suns.dm +++ b/code/modules/clothing/factions/suns.dm @@ -162,7 +162,7 @@ ///////////////// -/obj/item/clothing/suit/armor/vest/bulletproof/suns +/obj/item/clothing/suit/armor/vest/suns name = "peacekeeper plating" desc = "A standard issue set of plate assigned to peacekeepers, both durable and stylish." icon_state = "suns_pkarmor" @@ -171,21 +171,22 @@ mob_overlay_icon = 'icons/mob/clothing/faction/suns/suits.dmi' lefthand_file = 'icons/mob/inhands/faction/suns/suns_lefthand.dmi' righthand_file = 'icons/mob/inhands/faction/suns/suns_righthand.dmi' - body_parts_covered = CHEST|GROIN|ARMS|LEGS cold_protection = CHEST|GROIN|LEGS|ARMS heat_protection = CHEST|GROIN|LEGS|ARMS -/obj/item/clothing/suit/armor/vest/bulletproof/suns/hos +/obj/item/clothing/suit/armor/vest/suns/hos name = "gilded peacekeeper plating" desc = "A set of plate assigned to peacekeepers, both durable and stylish. This one has a gold lining to indicate rank." icon_state = "suns_lpkarmor" item_state = "suns_pkarmor" + armor = list("melee" = 35, "bullet" = 35, "laser" = 35, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) -/obj/item/clothing/suit/armor/vest/bulletproof/suns/ehos //remind me to make this something to buy +/obj/item/clothing/suit/armor/vest/suns/ehos //remind me to make this something to buy name = "peacekeeper greatcoat" desc = "A funky armored coat worn by eccentric peacekeepers. Closing the coat is socially improper." icon_state = "suns_greatcoat" item_state = "suns_greatcoat" + armor = list("melee" = 35, "bullet" = 35, "laser" = 35, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) /obj/item/clothing/suit/toggle/suns/pkcoat name = "peacekeeper coat" @@ -195,23 +196,23 @@ armor = list("melee" = 15, "bullet" = 30, "laser" = 10, "energy" = 10, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 25) lefthand_file = 'icons/mob/inhands/faction/suns/suns_lefthand.dmi' righthand_file = 'icons/mob/inhands/faction/suns/suns_righthand.dmi' - body_parts_covered = CHEST|GROIN|ARMS|LEGS + body_parts_covered = CHEST|GROIN cold_protection = CHEST|GROIN|LEGS|ARMS heat_protection = CHEST|GROIN|LEGS|ARMS -/obj/item/clothing/suit/armor/vest/bulletproof/suns/captain +/obj/item/clothing/suit/armor/vest/suns/captain name = "decorated academic coat" desc = "An armored coat intended for SUNS captains on the frontier. Go forth, and spread the message of the academy." icon_state = "suns_captaincoat" item_state = "suns_overblack" + armor = list("melee" = 35, "bullet" = 35, "laser" = 35, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) -/obj/item/clothing/suit/armor/vest/bulletproof/suns/xo +/obj/item/clothing/suit/armor/vest/suns/xo name = "academic staff coat" desc = "A white coat used by SUNS academic staff. It designates the second in command on the ship." icon_state = "suns_xojacket" item_state = "suns_overwhite" - /////////////// //Spacesuits// ////////////// @@ -343,7 +344,7 @@ icon_state = "sunsvisor" item_state = "suns_pkhelmet" tint = 0 - armor = list("melee" = 15, "bullet" = 60, "laser" = 10, "energy" = 10, "bomb" = 40, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) // identical stats to bulletproof helmet, as chest matches bulletproof vest + armor = list("melee" = 35, "bullet" = 35, "laser" = 35, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) // identical stats to vest clothing_flags = BLOCK_GAS_SMOKE_EFFECT | ALLOWINTERNALS //Why? Because I'm not giving PK's sec masks nor hud sunglasses. icon = 'icons/obj/clothing/faction/suns/head.dmi' mob_overlay_icon = 'icons/mob/clothing/faction/suns/head.dmi' @@ -465,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/glasses/_glasses.dm b/code/modules/clothing/glasses/_glasses.dm index f33a789156e9..c2dd59ecc1fb 100644 --- a/code/modules/clothing/glasses/_glasses.dm +++ b/code/modules/clothing/glasses/_glasses.dm @@ -1,7 +1,8 @@ //Glasses /obj/item/clothing/glasses name = "glasses" - icon = 'icons/obj/clothing/glasses.dmi' + icon = 'icons/obj/clothing/eyes/eyes.dmi' + mob_overlay_icon = 'icons/mob/clothing/eyes/eyes.dmi' lefthand_file = 'icons/mob/inhands/clothing/glasses_lefthand.dmi' righthand_file = 'icons/mob/inhands/clothing/glasses_righthand.dmi' w_class = WEIGHT_CLASS_SMALL @@ -43,8 +44,6 @@ user.update_sight() if(icon_state == "welding-g") change_glass_color(user, /datum/client_colour/glass_colour/gray) - else if(icon_state == "bustin-g") - change_glass_color(user, /datum/client_colour/glass_colour/green) else change_glass_color(user, null) @@ -82,19 +81,6 @@ lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE glass_colour_type = /datum/client_colour/glass_colour/green -/obj/item/clothing/glasses/meson/gar - name = "gar mesons" - icon_state = "garm" - item_state = "garm" - desc = "Do the impossible, see the invisible!" - force = 10 - throwforce = 10 - throw_speed = 4 - attack_verb = list("sliced") - hitsound = 'sound/weapons/bladeslice.ogg' - sharpness = IS_SHARP - custom_price = 500 - /obj/item/clothing/glasses/science name = "science goggles" desc = "A pair of snazzy goggles used to protect against chemical spills. Fitted with an analyzer for scanning items and reagents." @@ -163,12 +149,6 @@ qdel(src) user.put_in_hands(double_patch) -/obj/item/clothing/glasses/monocle - name = "monocle" - desc = "Such a dapper eyepiece!" - icon_state = "monocle" - supports_variations = VOX_VARIATION - /obj/item/clothing/glasses/material name = "optical material scanner" desc = "Very confusing glasses." @@ -182,19 +162,6 @@ desc = "Used by miners to detect ores deep within the rock." darkness_view = 0 -/obj/item/clothing/glasses/material/mining/gar - name = "gar material scanner" - icon_state = "garm" - item_state = "garm" - desc = "Do the impossible, see the invisible!" - force = 10 - throwforce = 20 - throw_speed = 4 - attack_verb = list("sliced") - hitsound = 'sound/weapons/bladeslice.ogg' - sharpness = IS_SHARP - glass_colour_type = /datum/client_colour/glass_colour/lightgreen - /obj/item/clothing/glasses/regular name = "prescription glasses" desc = "Made by Nerd. Co." @@ -263,47 +230,13 @@ clothing_flags = SCAN_REAGENTS glass_colour_type = /datum/client_colour/glass_colour/darkpurple -/obj/item/clothing/glasses/sunglasses/garb - name = "black gar glasses" - desc = "Go beyond impossible and kick reason to the curb!" - icon_state = "garb" - item_state = "garb" - force = 10 - throwforce = 10 - throw_speed = 4 - attack_verb = list("sliced") - hitsound = 'sound/weapons/bladeslice.ogg' - sharpness = IS_SHARP - -/obj/item/clothing/glasses/sunglasses/garb/supergarb - name = "black giga gar glasses" - desc = "Believe in us humans." - icon_state = "supergarb" - item_state = "garb" - force = 12 - throwforce = 12 - -/obj/item/clothing/glasses/sunglasses/gar - name = "gar glasses" - desc = "Just who the hell do you think I am?!" - icon_state = "gar" - item_state = "gar" - force = 10 - throwforce = 10 - throw_speed = 4 - attack_verb = list("sliced") - hitsound = 'sound/weapons/bladeslice.ogg' - sharpness = IS_SHARP - glass_colour_type = /datum/client_colour/glass_colour/orange - -/obj/item/clothing/glasses/sunglasses/gar/supergar - name = "giga gar glasses" - desc = "We evolve past the person we were a minute before. Little by little we advance with each turn. That's how a drill works!" - icon_state = "supergar" - item_state = "gar" - force = 12 - throwforce = 12 - glass_colour_type = /datum/client_colour/glass_colour/red +/obj/item/clothing/glasses/sunglasses/ballistic + name = "ballistic goggles" + desc = "A pair of flash-proof ballistic goggles." + icon_state = "ballistic_goggles" + item_state = "ballistic_goggles" + supports_variations = KEPORI_VARIATION | VOX_VARIATION + glass_colour_type = /datum/client_colour/glass_colour/lightblue /obj/item/clothing/glasses/welding name = "welding goggles" @@ -314,7 +247,7 @@ flash_protect = FLASH_PROTECTION_WELDER custom_materials = list(/datum/material/iron = 250) tint = 2 - visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT + visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT | SEALS_EYES flags_cover = GLASSESCOVERSEYES glass_colour_type = /datum/client_colour/glass_colour/gray supports_variations = VOX_VARIATION @@ -322,17 +255,6 @@ /obj/item/clothing/glasses/welding/attack_self(mob/user) weldingvisortoggle(user) -/obj/item/clothing/glasses/welding/ghostbuster - name = "optical ecto-scanner" - desc = "A bulky pair of unwieldy glasses that lets you see things best left unseen. Obscures vision, but also gives a bit of eye protection" - icon_state = "bustin-g" - item_state = "bustin-g" - invis_view = SEE_INVISIBLE_OBSERVER - invis_override = null - flash_protect = 1 - visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT | VISOR_INVISVIEW - glass_colour_type = /datum/client_colour/glass_colour/green - /obj/item/clothing/glasses/blindfold name = "blindfold" desc = "Covers the eyes, preventing sight." @@ -378,10 +300,10 @@ colored_before = TRUE /obj/item/clothing/glasses/blindfold/white/worn_overlays(isinhands = FALSE, file2use) - . = list() + . = ..() if(!isinhands && ishuman(loc) && !colored_before) var/mob/living/carbon/human/H = loc - var/mutable_appearance/M = mutable_appearance('icons/mob/clothing/eyes.dmi', "blindfoldwhite") + var/mutable_appearance/M = mutable_appearance('icons/mob/clothing/eyes/eyes.dmi', "blindfoldwhite") M.appearance_flags |= RESET_COLOR M.color = "#[H.eye_color]" . += M @@ -447,20 +369,6 @@ return chameleon_action.emp_randomise() -/obj/item/clothing/glasses/thermal/monocle - name = "thermoncle" - desc = "Never before has seeing through walls felt so gentlepersonly." - icon_state = "thermoncle" - flags_1 = null //doesn't protect eyes because it's a monocle, duh - -/obj/item/clothing/glasses/thermal/monocle/examine(mob/user) //Different examiners see a different description! - if(user.gender == MALE) - desc = replacetext(desc, "person", "man") - else if(user.gender == FEMALE) - desc = replacetext(desc, "person", "woman") - . = ..() - desc = initial(desc) - /obj/item/clothing/glasses/thermal/eyepatch name = "optical thermal eyepatch" desc = "An eyepatch with built-in thermal optics." @@ -485,12 +393,14 @@ desc = "A pair of goggles meant for low temperatures." icon_state = "cold" item_state = "cold" + flags_cover = GLASSESCOVERSEYES | SEALS_EYES /obj/item/clothing/glasses/heat name = "heat goggles" desc = "A pair of goggles meant for high temperatures." icon_state = "heat" item_state = "heat" + flags_cover = GLASSESCOVERSEYES | SEALS_EYES /obj/item/clothing/glasses/orange name = "orange glasses" @@ -506,35 +416,6 @@ item_state = "redglasses" glass_colour_type = /datum/client_colour/glass_colour/red -/obj/item/clothing/glasses/godeye - name = "eye of god" - desc = "A strange eye, said to have been torn from an omniscient creature that used to roam the wastes." - icon_state = "godeye" - item_state = "godeye" - vision_flags = SEE_TURFS|SEE_MOBS|SEE_OBJS - darkness_view = 8 - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - resistance_flags = LAVA_PROOF | FIRE_PROOF - clothing_flags = SCAN_REAGENTS - -/obj/item/clothing/glasses/godeye/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, EYE_OF_GOD_TRAIT) - -/obj/item/clothing/glasses/godeye/attackby(obj/item/W as obj, mob/user as mob, params) - if(istype(W, src) && W != src && W.loc == user) - if(W.icon_state == "godeye") - W.icon_state = "doublegodeye" - W.item_state = "doublegodeye" - W.desc = "A pair of strange eyes, said to have been torn from an omniscient creature that used to roam the wastes. There's no real reason to have two, but that isn't stopping you." - if(iscarbon(user)) - var/mob/living/carbon/C = user - C.update_inv_wear_mask() - else - to_chat(user, "The eye winks at you and vanishes into the abyss, you feel really unlucky.") - qdel(src) - ..() - /obj/item/clothing/glasses/AltClick(mob/user) if(glass_colour_type && ishuman(user)) var/mob/living/carbon/human/H = user @@ -572,7 +453,7 @@ desc = "Medical, security and diagnostic hud. Alt click to toggle xray." icon_state = "nvgmeson" item_state = "nvgmeson" - flags_cover = GLASSESCOVERSEYES + flags_cover = GLASSESCOVERSEYES | SEALS_EYES darkness_view = 8 flash_protect = FLASH_PROTECTION_WELDER lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 559816007b13..6891ac7de31a 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -162,26 +162,6 @@ lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE glass_colour_type = /datum/client_colour/glass_colour/green -/obj/item/clothing/glasses/hud/security/sunglasses/gars - name = "\improper HUD gar glasses" - desc = "GAR glasses with a HUD." - icon_state = "gars" - item_state = "garb" - force = 10 - throwforce = 10 - throw_speed = 4 - attack_verb = list("sliced") - hitsound = 'sound/weapons/bladeslice.ogg' - sharpness = IS_SHARP - -/obj/item/clothing/glasses/hud/security/sunglasses/gars/supergars - name = "giga HUD gar glasses" - desc = "GIGA GAR glasses with a HUD." - icon_state = "supergars" - item_state = "garb" - force = 12 - throwforce = 12 - /obj/item/clothing/glasses/hud/toggle name = "Toggle HUD" desc = "A hud with multiple functions." diff --git a/code/modules/clothing/gloves/_gloves.dm b/code/modules/clothing/gloves/_gloves.dm index 61c06125d8f8..a6e9f22ea3e7 100644 --- a/code/modules/clothing/gloves/_gloves.dm +++ b/code/modules/clothing/gloves/_gloves.dm @@ -25,7 +25,7 @@ return TRUE /obj/item/clothing/gloves/worn_overlays(isinhands = FALSE) - . = list() + . = ..() if(!isinhands) if(damaged_clothes) . += mutable_appearance('icons/effects/item_damage.dmi', "damagedgloves") diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index cbac3e0e8901..0447f62aab9e 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -177,10 +177,10 @@ icon_state = "brown" /obj/item/clothing/gloves/color/captain - desc = "Regal white gloves, with a nice gold trim, a diamond anti-shock coating, and an integrated thermal barrier, and armoured bracers. Swanky." + desc = "Regal white gloves, with a nice gold trim, an integrated thermal barrier, and armoured bracers. Swanky." name = "captain's gloves" icon_state = "captain" - siemens_coefficient = 0 + siemens_coefficient = 0.5 permeability_coefficient = 0.05 cold_protection = HANDS min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT @@ -190,7 +190,7 @@ armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 50) /obj/item/clothing/gloves/color/captain/nt - desc = "Regal blue gloves, with a nice gold trim, a diamond anti-shock coating, and an integrated thermal barrier, and armoured bracers. Swanky." + desc = "Regal blue gloves with gold trim and a fire and acid-resistant coating. Swanky." name = "captain's gloves" icon_state = "captainnt" @@ -231,7 +231,7 @@ name = "infiltrator gloves" desc = "Specialized combat gloves for carrying people around. Transfers tactical kidnapping knowledge into the user via nanochips." icon_state = "infiltrator" - siemens_coefficient = 0 + siemens_coefficient = 0.5 permeability_coefficient = 0.3 resistance_flags = FIRE_PROOF | ACID_PROOF diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 9d8db3c035d8..e326b55f58f3 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -23,13 +23,14 @@ heat_protection = HANDS max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT resistance_flags = NONE + clothing_traits = list(TRAIT_PLANT_SAFE) armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 30) /obj/item/clothing/gloves/combat name = "combat gloves" - desc = "These tactical gloves are fireproof and electrically insulated." + desc = "These tactical gloves are extra-durable, offering some fire and acid protection." icon_state = "combat" - siemens_coefficient = 0 + siemens_coefficient = 0.5 permeability_coefficient = 0.05 strip_delay = 80 cold_protection = HANDS @@ -42,12 +43,12 @@ /obj/item/clothing/gloves/combat/maid name = "combat maid sleeves" - desc = "These 'tactical' gloves and sleeves are fireproof and electrically insulated. Warm to boot." + desc = "These 'tactical' gloves and sleeves are fireproof and acid-resistant. Warm to boot." icon_state = "syndimaid_arms" /obj/item/clothing/gloves/combat/maid/inteq name = "inteq combat maid sleeves" - desc = "Tacticute and comfy, along with being both fireproof and electrically insulated." + desc = "Tacticute and comfy, along with being both fireproof and acid-resistant." icon_state = "inteqmaid_arms" /obj/item/clothing/gloves/bracer @@ -125,7 +126,7 @@ name = "explorer envirogloves" icon_state = "explorerplasma" -/obj/item/clothing/gloves/color/botanic_leather/plasmaman +/obj/item/clothing/gloves/botanic_leather/plasmaman name = "botany envirogloves" desc = "Covers up those scandalous boney hands." icon_state = "botanyplasma" @@ -142,5 +143,5 @@ /obj/item/clothing/gloves/combat/wizard name = "enchanted gloves" - desc = "These gloves have been enchanted with a spell that makes them electrically insulated and fireproof." + desc = "These gloves have been enchanted with a spell that makes them fireproof and acid-resistant." icon_state = "wizard" diff --git a/code/modules/clothing/gloves/tacklers.dm b/code/modules/clothing/gloves/tacklers.dm index 0ae7f48089e9..2667297dc358 100644 --- a/code/modules/clothing/gloves/tacklers.dm +++ b/code/modules/clothing/gloves/tacklers.dm @@ -67,7 +67,7 @@ name = "guerrilla gloves" desc = "Superior quality combative gloves, good for performing tackle takedowns as well as absorbing electrical shocks." icon_state = "combat" - siemens_coefficient = 0 + siemens_coefficient = 0.5 permeability_coefficient = 0.05 /obj/item/clothing/gloves/tackler/rocket diff --git a/code/modules/clothing/head/_head.dm b/code/modules/clothing/head/_head.dm index 4039402588fd..aa1114e6b182 100644 --- a/code/modules/clothing/head/_head.dm +++ b/code/modules/clothing/head/_head.dm @@ -60,7 +60,7 @@ /obj/item/clothing/head/worn_overlays(isinhands = FALSE) - . = list() + . = ..() if(!isinhands) if(damaged_clothes) . += mutable_appearance('icons/effects/item_damage.dmi', "damagedhelmet") diff --git a/code/modules/clothing/head/beanie.dm b/code/modules/clothing/head/beanie.dm index 5aa39eb0ba57..3a930d728ad7 100644 --- a/code/modules/clothing/head/beanie.dm +++ b/code/modules/clothing/head/beanie.dm @@ -53,10 +53,6 @@ //Striped Beanies have unique sprites -/obj/item/clothing/head/beanie/christmas - name = "christmas beanie" - icon_state = "beaniechristmas" - /obj/item/clothing/head/beanie/striped name = "striped beanie" icon_state = "beaniestriped" @@ -78,15 +74,3 @@ desc = "A beanie made from durathread, its resilient fibres provide some protection to the wearer." icon_state = "beaniedurathread" armor = list("melee" = 15, "bullet" = 5, "laser" = 15, "energy" = 25, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 5) - -/obj/item/clothing/head/beanie/waldo - name = "red striped bobble hat" - desc = "If you're going on a worldwide hike, you'll need some cold protection." - icon_state = "waldo_hat" - -/obj/item/clothing/head/beanie/rasta - name = "rastacap" - desc = "Perfect for tucking in those dreadlocks." - icon_state = "beanierasta" - -//No dog fashion sprites yet :( poor Ian can't be dope like the rest of us yet diff --git a/code/modules/clothing/head/berets.dm b/code/modules/clothing/head/berets.dm index 9d3ca21ed4f0..78d77908cd30 100644 --- a/code/modules/clothing/head/berets.dm +++ b/code/modules/clothing/head/berets.dm @@ -5,18 +5,6 @@ icon_state = "beret" dog_fashion = /datum/dog_fashion/head/beret -/obj/item/clothing/head/beret/vintage - name = "vintage beret" - desc = "A well-worn beret." - icon_state = "vintageberet" - dog_fashion = null - -/obj/item/clothing/head/beret/archaic - name = "archaic beret" - desc = "An absolutely ancient beret." - icon_state = "archaicberet" - dog_fashion = null - /obj/item/clothing/head/beret/black name = "black beret" desc = "A black beret." diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm index 036d6ffbd417..9aa05ea897ce 100644 --- a/code/modules/clothing/head/collectable.dm +++ b/code/modules/clothing/head/collectable.dm @@ -5,17 +5,6 @@ name = "collectable hat" desc = "A rare collectable hat." -/obj/item/clothing/head/collectable/petehat - name = "ultra rare Pete's hat!" - desc = "It smells faintly of plasma." - icon_state = "petehat" - -/obj/item/clothing/head/collectable/xenom - name = "collectable xenomorph helmet!" - desc = "Hiss hiss hiss!" - clothing_flags = SNUG_FIT - icon_state = "xenom" - /obj/item/clothing/head/collectable/chef name = "collectable chef's hat" desc = "A rare chef's hat meant for hat collectors!" @@ -24,12 +13,6 @@ dog_fashion = /datum/dog_fashion/head/chef -/obj/item/clothing/head/collectable/paper - name = "collectable paper hat" - desc = "What looks like an ordinary paper hat is actually a rare and valuable collector's edition paper hat. Keep away from water, fire, and Curators." - icon_state = "paper" - dog_fashion = /datum/dog_fashion/head - /obj/item/clothing/head/collectable/tophat name = "collectable top hat" desc = "A top hat worn by only the most prestigious hat collectors." @@ -64,12 +47,6 @@ item_state = "welding" clothing_flags = SNUG_FIT -/obj/item/clothing/head/collectable/slime - name = "collectable slime hat" - desc = "Just like a real brain slug!" - icon_state = "headslime" - clothing_flags = SNUG_FIT - /obj/item/clothing/head/collectable/flatcap name = "collectable flat cap" desc = "A collectible laborer's flat cap! Smells like No. 9 coal..." @@ -91,13 +68,6 @@ dog_fashion = /datum/dog_fashion/head/kitty -/obj/item/clothing/head/collectable/rabbitears - name = "collectable rabbit ears" - desc = "Not as lucky as the feet!" - icon_state = "bunny" - - dog_fashion = /datum/dog_fashion/head/rabbit - /obj/item/clothing/head/collectable/wizard name = "collectable wizard's hat" desc = "NOTE: Any magical powers gained from wearing this hat are purely coincidental." @@ -111,16 +81,6 @@ icon_state = "hardhat_standard" dog_fashion = /datum/dog_fashion/head -/obj/item/clothing/head/collectable/HoS - name = "collectable HoS hat" - desc = "Now you too can beat prisoners, set silly sentences, and arrest for no reason!" - icon_state = "hoscap" - -/obj/item/clothing/head/collectable/HoP - name = "collectable HoP hat" - desc = "It's your turn to demand excessive paperwork, signatures, stamps, and hire more clowns! Papers, please!" - icon_state = "hopcap_nt" - dog_fashion = /datum/dog_fashion/head/head_of_personnel /obj/item/clothing/head/collectable/thunderdome name = "collectable Thunderdome helmet" diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index dba4c2f80406..9b28c58d03cf 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -116,7 +116,7 @@ max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT cold_protection = HEAD min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT - flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF + flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF | SEALS_EYES /obj/item/clothing/head/hardhat/mining name = "mining helmet" diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index a6de8769642a..cefff9c4c76f 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -6,7 +6,7 @@ icon_state = "helmet" item_state = "helmet" var/flashlight_state = "helmet_flight_overlay" - armor = list("melee" = 35, "bullet" = 30, "laser" = 30,"energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list("melee" = 35, "bullet" = 35, "laser" = 35,"energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) cold_protection = HEAD min_cold_protection_temperature = HELMET_MIN_TEMP_PROTECT heat_protection = HEAD @@ -219,6 +219,7 @@ can_flashlight = TRUE dog_fashion = null allow_post_reskins = TRUE + supports_variations = KEPORI_VARIATION unique_reskin = list( "None" = "helmetalt", "Desert" = "helmetalt_desert", @@ -286,7 +287,7 @@ visor_flags_inv = HIDEFACE toggle_cooldown = 0 flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF - visor_flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF + visor_flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF | SEALS_EYES dog_fashion = null /obj/item/clothing/head/helmet/justice @@ -327,7 +328,7 @@ desc = "An extremely robust, space-worthy helmet in a nefarious red and black stripe pattern." icon_state = "swatsyndie" item_state = "swatsyndie" - armor = list("melee" = 40, "bullet" = 30, "laser" = 30,"energy" = 40, "bomb" = 50, "bio" = 90, "rad" = 20, "fire" = 100, "acid" = 100) + armor = list("melee" = 40, "bullet" = 35, "laser" = 35,"energy" = 40, "bomb" = 50, "bio" = 90, "rad" = 20, "fire" = 100, "acid" = 100) cold_protection = HEAD min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT heat_protection = HEAD @@ -492,7 +493,7 @@ resistance_flags = FIRE_PROOF | ACID_PROOF flash_protect = FLASH_PROTECTION_WELDER flags_inv = HIDEHAIR|HIDEFACIALHAIR|HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE - flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF + flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF | SEALS_EYES strip_delay = 80 /obj/item/clothing/head/helmet/swat/inteq @@ -567,6 +568,7 @@ icon_state = "m10helm" can_flashlight = TRUE dog_fashion = null + supports_variations = null unique_reskin = list( "None" = "m10helm", "Desert" = "m10helm_desert", @@ -582,6 +584,7 @@ can_flashlight = TRUE dog_fashion = null allow_post_reskins = TRUE + supports_variations = null unique_reskin = list( "None" = "x11helm", "Desert" = "x11helm_desert", diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 3e04245e1a14..416fa20df39c 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -33,10 +33,6 @@ desc = "A commanding white stetson adorned with a general's badge. Why this belongs to a captain is anybody's guess." icon_state = "cowboycap" -/obj/item/clothing/head/caphat/nt - name = "captain's hat" - icon_state = "captain_nt" - /obj/item/clothing/head/frontier/peaked name = "\improper Frontiersmen commander's cap" desc = "An imposing peaked cap, meant for a commander of the Frontiersmen." @@ -47,41 +43,6 @@ desc = "An imposing peaked cap meant for only the highest of officers of the Frontiersmen pirate fleet." icon_state = "frontier_admiral_cap" -//Head of Personnel -/obj/item/clothing/head/hopcap - name = "head of personnel's cap" - icon_state = "hopcap" - desc = "The symbol of true bureaucratic micromanagement." - dog_fashion = /datum/dog_fashion/head/head_of_personnel - -/obj/item/clothing/head/hopcap/nt - icon_state = "hopcap_nt" - dog_fashion = /datum/dog_fashion/head/head_of_personnel - -//Cargo -/obj/item/clothing/head/supply_chief - name = "supply chief's cap" - desc = "The one thing between you and 40 boxes of orderable pizza is the person wearing this hat." - icon_state = "supply_chief_cap" - -/obj/item/clothing/head/deliveries_officer - name = "deliveries officer's cap" - desc = "Whether through fires, the vacuum of space, or hordes of souless husks of grey suited criminals, your crate will always be delivered!" - icon_state = "deliveries_officer_cap" - -//Chaplain -/obj/item/clothing/head/nun_hood - name = "nun hood" - desc = "Maximum piety in this star system." - icon_state = "nun_hood" - flags_inv = HIDEHAIR - flags_cover = HEADCOVERSEYES - -/obj/item/clothing/head/bishopmitre - name = "bishop mitre" - desc = "An opulent hat that functions as a radio to God. Or as a lightning rod, depending on who you ask." - icon_state = "bishopmitre" - //Detective /obj/item/clothing/head/fedora/det_hat name = "detective's fedora" @@ -252,12 +213,3 @@ #undef DRILL_SHOUTING #undef DRILL_YELLING #undef DRILL_CANADIAN - -/obj/item/clothing/head/witchunter - name = "witchunter hat" - desc = "This hat saw much use back in the day." - icon_state = "witchhunterhat" - item_state = "witchhunterhat" - flags_cover = HEADCOVERSEYES - flags_inv = HIDEEYES|HIDEHAIR - armor = list("melee" = 30, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80) diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 61f032b5ef61..b2636b02871b 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -17,18 +17,6 @@ armor = list("melee" = 30, "bullet" = 15, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) strip_delay = (8 SECONDS) -/obj/item/clothing/head/spacepolice - name = "space police cap" - desc = "A blue cap for patrolling the daily beat." - icon_state = "policecap_families" - item_state = "policecap_families" - -/obj/item/clothing/head/powdered_wig - name = "powdered wig" - desc = "A powdered wig." - icon_state = "pwig" - item_state = "pwig" - /obj/item/clothing/head/that name = "top-hat" desc = "It's an amish looking hat." @@ -37,30 +25,6 @@ dog_fashion = /datum/dog_fashion/head throwforce = 1 -/obj/item/clothing/head/canada - name = "striped red tophat" - desc = "It smells like fresh donut holes. / Il sent comme des trous de beignets frais." - icon_state = "canada" - item_state = "canada" - -/obj/item/clothing/head/redcoat - name = "redcoat's hat" - icon_state = "redcoat" - desc = "'I guess it's a redhead.'" - -/obj/item/clothing/head/plaguedoctorhat - name = "plague doctor's hat" - desc = "These were once used by plague doctors. They're pretty much useless." - icon_state = "plaguedoctor" - permeability_coefficient = 0.01 - -/obj/item/clothing/head/hasturhood - name = "hastur's hood" - desc = "It's unspeakably stylish." - icon_state = "hasturhood" - flags_inv = HIDEHAIR - flags_cover = HEADCOVERSEYES - /obj/item/clothing/head/nursehat name = "nurse's hat" desc = "It allows quick identification of trained medical personnel." @@ -78,15 +42,6 @@ clothing_flags = SNUG_FIT flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR -/obj/item/clothing/head/cueball - name = "cueball helmet" - desc = "A large, featureless white orb meant to be worn on your head. How do you even see out of this thing?" - icon_state = "cueball" - item_state="cueball" - clothing_flags = SNUG_FIT - flags_cover = HEADCOVERSEYES|HEADCOVERSMOUTH - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - /obj/item/clothing/head/snowman name = "Snowman Head" desc = "A ball of white styrofoam. So festive." @@ -96,38 +51,6 @@ flags_cover = HEADCOVERSEYES flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR -/obj/item/clothing/head/justice - name = "justice hat" - desc = "Fight for what's righteous!" - icon_state = "justicered" - item_state = "justicered" - clothing_flags = SNUG_FIT - flags_inv = HIDEHAIR|HIDEEARS|HIDEEYES|HIDEFACE|HIDEFACIALHAIR - flags_cover = HEADCOVERSEYES - -/obj/item/clothing/head/justice/blue - icon_state = "justiceblue" - item_state = "justiceblue" - -/obj/item/clothing/head/justice/yellow - icon_state = "justiceyellow" - item_state = "justiceyellow" - -/obj/item/clothing/head/justice/green - icon_state = "justicegreen" - item_state = "justicegreen" - -/obj/item/clothing/head/justice/pink - icon_state = "justicepink" - item_state = "justicepink" - -/obj/item/clothing/head/rabbitears - name = "rabbit ears" - desc = "A headband with a pair of faux rabbit ears." - icon_state = "bunny" - - dog_fashion = /datum/dog_fashion/head/rabbit - /obj/item/clothing/head/pirate name = "pirate hat" desc = "Yarr." @@ -170,42 +93,12 @@ icon_state = "bandana" item_state = "bandana" -/obj/item/clothing/head/bowler - name = "bowler-hat" - desc = "Gentleman, elite aboard!" - icon_state = "bowler" - item_state = "bowler" - -/obj/item/clothing/head/witchwig - name = "witch costume wig" - desc = "Eeeee~heheheheheheh!" - icon_state = "witch" - item_state = "witch" - flags_inv = HIDEHAIR - -/obj/item/clothing/head/chicken - name = "chicken suit head" - desc = "Bkaw!" - icon_state = "chickenhead" - item_state = "chickensuit" - clothing_flags = SNUG_FIT - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - /obj/item/clothing/head/bearpelt name = "bear pelt hat" desc = "Fuzzy." icon_state = "bearpelt" item_state = "bearpelt" -/obj/item/clothing/head/xenos - name = "xenos helmet" - icon_state = "xenos" - item_state = "xenos_helm" - desc = "A helmet made out of chitinous alien hide." - clothing_flags = SNUG_FIT - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH - /obj/item/clothing/head/fedora name = "fedora" icon_state = "fedora" @@ -229,34 +122,6 @@ item_state = "hat_solgov" desc = "A slick blue hat used by both solarian civilians and physicists." -/obj/item/clothing/head/sombrero - name = "sombrero" - icon_state = "sombrero" - item_state = "sombrero" - desc = "You can practically taste the fiesta." - flags_inv = HIDEHAIR - - dog_fashion = /datum/dog_fashion/head/sombrero - -/obj/item/clothing/head/sombrero/green - name = "green sombrero" - icon_state = "greensombrero" - item_state = "greensombrero" - desc = "As elegant as a dancing cactus." - flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS - dog_fashion = null - -/obj/item/clothing/head/sombrero/shamebrero - name = "shamebrero" - icon_state = "shamebrero" - item_state = "shamebrero" - desc = "Once it's on, it never comes off." - dog_fashion = null - -/obj/item/clothing/head/sombrero/shamebrero/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, SHAMEBRERO_TRAIT) - /obj/item/clothing/head/flatcap name = "flat cap" desc = "A working man's hat." @@ -297,14 +162,6 @@ min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT dog_fashion = /datum/dog_fashion/head/santa -/obj/item/clothing/head/jester - name = "jester hat" - desc = "A hat with bells, to add some merriness to the suit." - icon_state = "jester_hat" - -/obj/item/clothing/head/jester/alt - icon_state = "jester2" - /obj/item/clothing/head/rice_hat name = "rice hat" desc = "Welcome to the rice fields, motherfucker." @@ -328,45 +185,6 @@ icon_state = "crown" resistance_flags = FIRE_PROOF -/obj/item/clothing/head/crown/fancy - name = "magnificent crown" - desc = "A crown worn by only the highest emperors of the land space." - icon_state = "fancycrown" - -/obj/item/clothing/head/scarecrow_hat - name = "scarecrow hat" - desc = "A simple straw hat." - icon_state = "scarecrow_hat" - -/obj/item/clothing/head/lobsterhat - name = "foam lobster head" - desc = "When everything's going to crab, protecting your head is the best choice." - icon_state = "lobster_hat" - clothing_flags = SNUG_FIT - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - -/obj/item/clothing/head/drfreezehat - name = "doctor freeze's wig" - desc = "A cool wig for cool people." - icon_state = "drfreeze_hat" - flags_inv = HIDEHAIR - -/obj/item/clothing/head/pharaoh - name = "pharaoh hat" - desc = "Walk like an Egyptian." - icon_state = "pharoah_hat" - item_state = "pharoah_hat" - -/obj/item/clothing/head/nemes - name = "headdress of Nemes" - desc = "Lavish space tomb not included." - icon_state = "nemes_headdress" - -/obj/item/clothing/head/delinquent - name = "delinquent hat" - desc = "Good grief." - icon_state = "delinquent" - /obj/item/clothing/head/frenchberet name = "french beret" desc = "A quality beret, infused with the aroma of chain-smoking, wine-swilling Parisians. You feel less inclined to engage in military conflict, for some reason." @@ -402,56 +220,12 @@ message += pick(" Honh honh honh!"," Honh!"," Zut Alors!") speech_args[SPEECH_MESSAGE] = trim(message) -/obj/item/clothing/head/clownmitre - name = "Hat of the Honkmother" - desc = "It's hard for parishoners to see a banana peel on the floor when they're looking up at your glorious chapeau." - icon_state = "clownmitre" - -/obj/item/clothing/head/kippah - name = "kippah" - desc = "Signals that you follow the Jewish Halakha. Keeps the head covered and the soul extra-Orthodox." - icon_state = "kippah" - -/obj/item/clothing/head/taqiyahwhite - name = "white taqiyah" - desc = "An extra-mustahabb way of showing your devotion to Allah." - icon_state = "taqiyahwhite" - pocket_storage_component_path = /datum/component/storage/concrete/pockets/small - -/obj/item/clothing/head/taqiyahred - name = "red taqiyah" - desc = "An extra-mustahabb way of showing your devotion to Allah." - icon_state = "taqiyahred" - pocket_storage_component_path = /datum/component/storage/concrete/pockets/small - -/obj/item/clothing/head/shrine_wig - name = "shrine maiden's wig" - desc = "Purify in style!" - flags_inv = HIDEHAIR //bald - mob_overlay_icon = 'icons/mob/large-worn-icons/64x64/head.dmi' - icon_state = "shrine_wig" - item_state = "shrine_wig" - worn_x_dimension = 64 - worn_y_dimension = 64 - /obj/item/clothing/head/intern name = "\improper CentCom Head Intern beancap" desc = "A horrifying mix of beanie and softcap in CentCom green. You'd have to be pretty desperate for power over your peers to agree to wear this." icon_state = "intern_hat" item_state = "intern_hat" -/obj/item/clothing/head/goatpelt - name = "goat pelt hat" - desc = "Fuzzy and Warm!" - icon_state = "goatpelt" - item_state = "goatpelt" - -/obj/item/clothing/head/jackbros - name = "frosty hat" - desc = "Hee-ho!" - icon_state = "JackFrostHat" - item_state = "JackFrostHat" - /obj/item/clothing/head/maidheadband/syndicate name = "tactical maid headband" desc = "Tacticute." diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 24e2f95f03bd..3cd7c022887c 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -33,82 +33,6 @@ /obj/item/clothing/head/welding/attack_self(mob/user) weldingvisortoggle(user) -/* - * Cakehat - */ -/obj/item/clothing/head/hardhat/cakehat - name = "cakehat" - desc = "You put the cake on your head. Brilliant." - icon_state = "hardhat_cakehat" - item_state = "hardhat_cakehat" - lefthand_file = 'icons/mob/inhands/clothing_lefthand.dmi' - righthand_file = 'icons/mob/inhands/clothing_righthand.dmi' - hitsound = 'sound/weapons/tap.ogg' - var/hitsound_on = 'sound/weapons/sear.ogg' //so we can differentiate between cakehat and energyhat - var/hitsound_off = 'sound/weapons/tap.ogg' - var/force_on = 15 - var/throwforce_on = 15 - var/damtype_on = BURN - flags_inv = HIDEEARS|HIDEHAIR - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - light_range = 2 //luminosity when on - flags_cover = HEADCOVERSEYES - heat = 999 - - dog_fashion = /datum/dog_fashion/head - -/obj/item/clothing/head/hardhat/cakehat/process() - var/turf/location = src.loc - if(ishuman(location)) - var/mob/living/carbon/human/M = location - if(M.is_holding(src) || M.head == src) - location = M.loc - - if(isturf(location)) - location.hotspot_expose(700, 1) - -/obj/item/clothing/head/hardhat/cakehat/turn_on(mob/living/user) - ..() - force = force_on - throwforce = throwforce_on - damtype = damtype_on - hitsound = hitsound_on - START_PROCESSING(SSobj, src) - -/obj/item/clothing/head/hardhat/cakehat/turn_off(mob/living/user) - ..() - force = 0 - throwforce = 0 - damtype = BRUTE - hitsound = hitsound_off - STOP_PROCESSING(SSobj, src) - -/obj/item/clothing/head/hardhat/cakehat/get_temperature() - return on * heat - -/obj/item/clothing/head/hardhat/cakehat/energycake - name = "energy cake" - desc = "You put the energy sword on your cake. Brilliant." - icon_state = "hardhat_energycake" - item_state = "hardhat_energycake" - hitsound = 'sound/weapons/tap.ogg' - hitsound_on = 'sound/weapons/blade1.ogg' - hitsound_off = 'sound/weapons/tap.ogg' - damtype_on = BRUTE - force_on = 18 //same as epen (but much more obvious) - light_range = 3 //ditto - heat = 0 - -/obj/item/clothing/head/hardhat/cakehat/energycake/turn_on(mob/living/user) - playsound(user, 'sound/weapons/saberon.ogg', 5, TRUE) - to_chat(user, "You turn on \the [src].") - ..() - -/obj/item/clothing/head/hardhat/cakehat/energycake/turn_off(mob/living/user) - playsound(user, 'sound/weapons/saberoff.ogg', 5, TRUE) - to_chat(user, "You turn off \the [src].") - ..() - /* * Trapper Hat */ @@ -181,17 +105,6 @@ if(ishuman(user)) add_atom_colour("#[user.hair_color]", FIXED_COLOUR_PRIORITY) -/obj/item/clothing/head/hardhat/reindeer - name = "novelty reindeer hat" - desc = "Some fake antlers and a very fake red nose." - icon_state = "hardhat_reindeer" - item_state = "hardhat_reindeer" - flags_inv = 0 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - light_range = 1 //luminosity when on - - dog_fashion = /datum/dog_fashion/head/reindeer - /obj/item/clothing/head/cardborg name = "cardborg helmet" desc = "A helmet made out of a box." @@ -241,7 +154,7 @@ return ..() /obj/item/clothing/head/wig/worn_overlays(isinhands = FALSE, file2use) - . = list() + . = ..() if(!isinhands) var/datum/sprite_accessory/S = GLOB.hairstyles_list[hairstyle] if(!S) @@ -304,69 +217,6 @@ flags_inv = HIDEEARS|HIDEHAIR armor = list("melee" = 5, "bullet" = 0, "laser" = -5, "energy" = -15, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 20) -/obj/item/clothing/head/foilhat - name = "tinfoil hat" - desc = "Thought control rays, psychotronic scanning. Don't mind that, I'm protected cause I made this hat." - icon_state = "foilhat" - item_state = "foilhat" - armor = list("melee" = 0, "bullet" = 0, "laser" = -5,"energy" = -15, "bomb" = 0, "bio" = 0, "rad" = -5, "fire" = 0, "acid" = 0) - equip_delay_other = 140 - clothing_flags = ANTI_TINFOIL_MANEUVER - var/datum/brain_trauma/mild/phobia/conspiracies/paranoia - var/warped = FALSE - -/obj/item/clothing/head/foilhat/equipped(mob/living/carbon/human/user, slot) - . = ..() - if(slot != ITEM_SLOT_HEAD || warped) - return - if(paranoia) - QDEL_NULL(paranoia) - paranoia = new() - - user.gain_trauma(paranoia, TRAUMA_RESILIENCE_MAGIC) - to_chat(user, "As you don the foiled hat, an entire world of conspiracy theories and seemingly insane ideas suddenly rush into your mind. What you once thought unbelievable suddenly seems.. undeniable. Everything is connected and nothing happens just by accident. You know too much and now they're out to get you. ") - -/obj/item/clothing/head/foilhat/MouseDrop(atom/over_object) - //God Im sorry - if(!warped && iscarbon(usr)) - var/mob/living/carbon/C = usr - if(src == C.head) - to_chat(C, "Why would you want to take this off? Do you want them to get into your mind?!") - return - return ..() - -/obj/item/clothing/head/foilhat/dropped(mob/user) - . = ..() - if(paranoia) - QDEL_NULL(paranoia) - -/obj/item/clothing/head/foilhat/proc/warp_up() - name = "scorched tinfoil hat" - desc = "A badly warped up hat. Quite unprobable this will still work against any of fictional and contemporary dangers it used to." - warped = TRUE - clothing_flags &= ~ANTI_TINFOIL_MANEUVER - if(!isliving(loc) || !paranoia) - return - var/mob/living/target = loc - if(target.get_item_by_slot(ITEM_SLOT_HEAD) != src) - return - QDEL_NULL(paranoia) - if(target.stat < UNCONSCIOUS) - to_chat(target, "Your zealous conspirationism rapidly dissipates as the donned hat warps up into a ruined mess. All those theories starting to sound like nothing but a ridicolous fanfare.") - -/obj/item/clothing/head/foilhat/attack_hand(mob/user) - if(!warped && iscarbon(user)) - var/mob/living/carbon/C = user - if(src == C.head) - to_chat(user, "Why would you want to take this off? Do you want them to get into your mind?!") - return - return ..() - -/obj/item/clothing/head/foilhat/microwave_act(obj/machinery/microwave/M) - . = ..() - if(!warped) - warp_up() - /obj/item/clothing/head/plastic_flower name = "plastic flower" desc = "A realistic imitation of a flower. Not edible though." diff --git a/code/modules/clothing/masks/_masks.dm b/code/modules/clothing/masks/_masks.dm index 03ca246b60af..a4c1d5d509fa 100644 --- a/code/modules/clothing/masks/_masks.dm +++ b/code/modules/clothing/masks/_masks.dm @@ -32,7 +32,7 @@ /obj/item/clothing/mask/proc/handle_speech() /obj/item/clothing/mask/worn_overlays(isinhands = FALSE) - . = list() + . = ..() if(!isinhands) if(body_parts_covered & HEAD) if(damaged_clothes) diff --git a/code/modules/clothing/masks/boxing.dm b/code/modules/clothing/masks/boxing.dm index c532202a3df3..6bb58bb2b4e5 100644 --- a/code/modules/clothing/masks/boxing.dm +++ b/code/modules/clothing/masks/boxing.dm @@ -4,7 +4,7 @@ icon_state = "balaclava" item_state = "balaclava" flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - visor_flags_inv = HIDEFACE|HIDEFACIALHAIR + visor_flags_inv = HIDEFACE|HIDEHAIR|HIDEFACIALHAIR w_class = WEIGHT_CLASS_SMALL actions_types = list(/datum/action/item_action/adjust) diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 34e77816c941..e5d3717b2b65 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -8,7 +8,7 @@ item_state = "gas_alt" gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 - flags_cover = MASKCOVERSEYES | MASKCOVERSMOUTH | PEPPERPROOF + flags_cover = MASKCOVERSEYES | MASKCOVERSMOUTH | PEPPERPROOF | SEALS_EYES resistance_flags = NONE /obj/item/clothing/mask/gas/atmos diff --git a/code/modules/clothing/neck/_neck.dm b/code/modules/clothing/neck/_neck.dm index 3f431df81ccb..2165baaa2b0e 100644 --- a/code/modules/clothing/neck/_neck.dm +++ b/code/modules/clothing/neck/_neck.dm @@ -11,7 +11,7 @@ greyscale_icon_state = "scarf" /obj/item/clothing/neck/worn_overlays(isinhands = FALSE) - . = list() + . = ..() if(!isinhands) if(body_parts_covered & HEAD) if(damaged_clothes) @@ -167,6 +167,7 @@ desc = "An outdated medical apparatus for listening to the sounds of the human body. It also makes you look like you know what you're doing." icon_state = "stethoscope" cuttable = FALSE + supports_variations = VOX_VARIATION /obj/item/clothing/neck/stethoscope/attack(mob/living/carbon/human/M, mob/living/user) if(ishuman(M) && isliving(user)) @@ -267,6 +268,7 @@ name = "shemagh" desc = "An oversized shemagh, for those with a keen sense of fashion, or those operating tactically." icon_state = "shemagh" + supports_variations = VOX_VARIATION //The three following scarves don't have the scarf subtype //This is because Ian can equip anything from that subtype @@ -275,21 +277,25 @@ name = "striped red scarf" icon_state = "stripedredscarf" custom_price = 10 + supports_variations = VOX_VARIATION /obj/item/clothing/neck/stripedgreenscarf name = "striped green scarf" icon_state = "stripedgreenscarf" custom_price = 10 + supports_variations = VOX_VARIATION /obj/item/clothing/neck/stripedbluescarf name = "striped blue scarf" icon_state = "stripedbluescarf" custom_price = 10 + supports_variations = VOX_VARIATION /obj/item/clothing/neck/stripedsolgovscarf name = "striped solgov scarf" icon_state = "stripedsolgovscarf" custom_price = 10 + supports_variations = VOX_VARIATION /obj/item/clothing/neck/petcollar name = "pet collar" diff --git a/code/modules/clothing/outfits/ert/frontiersmen_ert.dm b/code/modules/clothing/outfits/ert/frontiersmen_ert.dm index b3a2b20f687c..8401455bf7d8 100644 --- a/code/modules/clothing/outfits/ert/frontiersmen_ert.dm +++ b/code/modules/clothing/outfits/ert/frontiersmen_ert.dm @@ -44,7 +44,7 @@ suit = pickweight(list( /obj/item/clothing/suit/armor/vest = 5, /obj/item/clothing/suit/armor/vest/bulletproof/frontier = 5, - /obj/item/clothing/suit/armor/vest/scrap_armor = 1)) + /obj/item/clothing/suit/armor/vest/scrap = 1)) if(prob(30)) mask = pickweight(list( @@ -59,7 +59,7 @@ /obj/item/storage/backpack/satchel = 20, /obj/item/storage/backpack/messenger = 20, /obj/item/melee/baton/cattleprod/loaded = 5, - /obj/item/reagent_containers/food/snacks/baguette = 2, // yes you can put this on your back + /obj/item/food/baguette = 2, // yes you can put this on your back /obj/item/deployable_turret_folded = 1, /obj/item/gun/ballistic/automatic/hmg/skm_lmg/extended = 1, )) @@ -123,9 +123,9 @@ /obj/item/gun/energy/e_gun/mini)) if("Melee") r_hand = pickweight(list( - /obj/item/kitchen/knife/combat/survival = 15, + /obj/item/melee/knife/survival = 15, /obj/item/melee/baseball_bat = 10, - /obj/item/melee/roastingstick = 2, + /obj/item/roastingstick = 2, /obj/item/kitchen/fork = 1, /obj/item/melee/flyswatter = 1, )) @@ -139,16 +139,29 @@ backpack_contents = list(/obj/item/clothing/mask/gas/frontiersmen) /datum/outfit/job/frontiersmen/ert/grunt/skm - name = "ERT - Frontiersman Grunt (SKM-24)" + name = "ERT - Frontiersman Grunt (SKM-24 AR)" suit_store = /obj/item/gun/ballistic/automatic/assault/skm belt = /obj/item/storage/belt/security/military/frontiersmen/skm_ammo -/datum/outfit/job/frontiersmen/ert/grunt/aps_mp //remember. Remind me to replace this with the spitter. - name = "ERT - Frontiersman Grunt (Stechkin APS)" +/datum/outfit/job/frontiersmen/ert/grunt/mauler_mp + name = "ERT - Frontiersman Grunt (Mauler MP)" - suit_store = /obj/item/gun/ballistic/automatic/pistol/APS - belt = /obj/item/storage/belt/security/military/frontiersmen/aps_mp_ammo + suit_store = /obj/item/gun/ballistic/automatic/pistol/mauler + belt = /obj/item/storage/belt/security/military/frontiersmen/mauler_mp_ammo + +/datum/outfit/job/frontiersmen/ert/grunt/spitter_mp + name = "ERT - Frontiersman Grunt (Spitter MP)" + + suit_store = /obj/item/gun/ballistic/automatic/pistol/spitter + belt = /obj/item/storage/belt/security/military/frontiersmen/spitter_ammo + +/datum/outfit/job/frontiersmen/ert/grunt/pounder_smg + name = "ERT - Frontiersman Grunt (Pounder SMG)" + + suit_store = /obj/item/gun/ballistic/automatic/smg/pounder + belt = null + backpack_contents = list(/obj/item/clothing/mask/gas/frontiersmen=1, /obj/item/ammo_box/magazine/c22lr_pounder_pan=2) /datum/outfit/job/frontiersmen/ert/leader name = "ERT - Frontiersman Officer" @@ -160,14 +173,14 @@ suit = /obj/item/clothing/suit/armor/frontier suit_store = /obj/item/gun/ballistic/automatic/pistol/deagle - backpack_contents = list(/obj/item/clothing/mask/gas/frontiersmen, /obj/item/ammo_box/magazine/m50=2, /obj/item/binoculars=1, /obj/item/kitchen/knife/combat/survival) + backpack_contents = list(/obj/item/clothing/mask/gas/frontiersmen, /obj/item/ammo_box/magazine/m50=2, /obj/item/binoculars=1, /obj/item/melee/knife/survival) /datum/outfit/job/frontiersmen/ert/leader/unnarmed name = "ERT - Frontiersman Officer (Unnarmed)" suit_store = null - backpack_contents = list(/obj/item/clothing/mask/gas/frontiersmen, /obj/item/binoculars=1, /obj/item/kitchen/knife/combat/survival) + backpack_contents = list(/obj/item/clothing/mask/gas/frontiersmen, /obj/item/binoculars=1, /obj/item/melee/knife/survival) /datum/outfit/job/frontiersmen/ert/medic name = "ERT - Frontiersman Medic" @@ -177,9 +190,9 @@ mask = /obj/item/clothing/mask/surgical gloves = /obj/item/clothing/gloves/color/latex/nitrile belt = /obj/item/storage/belt/medical/webbing/frontiersmen/surgery - suit_store = /obj/item/gun/ballistic/automatic/pistol/APS + suit_store = /obj/item/gun/ballistic/automatic/pistol/mauler - backpack_contents = list(/obj/item/clothing/mask/gas/frontiersmen, /obj/item/storage/firstaid/medical=1, /obj/item/reagent_containers/hypospray/medipen/stimpack=3, /obj/item/ammo_box/magazine/pistolm9mm=2) + backpack_contents = list(/obj/item/clothing/mask/gas/frontiersmen, /obj/item/storage/firstaid/medical=1, /obj/item/reagent_containers/hypospray/medipen/stimpack=3, /obj/item/ammo_box/magazine/m9mm_mauler=2) /datum/outfit/job/frontiersmen/ert/engineer @@ -211,7 +224,7 @@ /datum/outfit/job/frontiersmen/ert/sentry_lmg - name = "ERT - Frontiersman Sentry (SKM-24v)" + name = "ERT - Frontiersman Sentry (SKM-24v LMG)" head = /obj/item/clothing/head/helmet/marine/frontier mask = /obj/item/clothing/mask/gas/sechailer/balaclava @@ -222,3 +235,18 @@ belt = /obj/item/gun/ballistic/revolver/mateba backpack_contents = list(/obj/item/ammo_box/magazine/skm_762_40/drum=2,/obj/item/ammo_box/a357=2,/obj/item/grenade/frag=1,/obj/item/radio=1) + +/datum/outfit/job/frontiersmen/ert/sentry_shredder + name = "ERT - Frontiersman Sentry (Shredder LMG)" + + head = /obj/item/clothing/head/helmet/marine/frontier + mask = /obj/item/clothing/mask/gas/sechailer/balaclava + suit = /obj/item/clothing/suit/armor/vest/marine/frontier + gloves = /obj/item/clothing/gloves/combat + + belt = /obj/item/gun/ballistic/revolver/mateba + + + l_hand = /obj/item/gun/ballistic/automatic/hmg/shredder // this doesnt even fit on the suit storage slot + + backpack_contents = list(/obj/item/ammo_box/magazine/m12_shredder=2,/obj/item/ammo_box/a357=2,/obj/item/grenade/frag=1,/obj/item/radio=1) diff --git a/code/modules/clothing/outfits/ert/indie_ert.dm b/code/modules/clothing/outfits/ert/indie_ert.dm index e45f0895d0f4..236f9ee75c57 100644 --- a/code/modules/clothing/outfits/ert/indie_ert.dm +++ b/code/modules/clothing/outfits/ert/indie_ert.dm @@ -75,7 +75,7 @@ jobtype = /datum/job/chief_engineer job_icon = "chiefengineer" - back = /obj/item/fireaxe + back = /obj/item/melee/axe/fire suit = /obj/item/clothing/suit/space/hardsuit/engine suit_store = /obj/item/tank/internals/oxygen/red head = null diff --git a/code/modules/clothing/outfits/ert/inteq_ert.dm b/code/modules/clothing/outfits/ert/inteq_ert.dm index b3fc0c61970c..9fd796d04516 100644 --- a/code/modules/clothing/outfits/ert/inteq_ert.dm +++ b/code/modules/clothing/outfits/ert/inteq_ert.dm @@ -15,7 +15,7 @@ belt = /obj/item/storage/belt/security/webbing/inteq/skm back = /obj/item/storage/backpack/fireproof - l_pocket = /obj/item/kitchen/knife/combat + l_pocket = /obj/item/melee/knife/combat r_pocket = /obj/item/flashlight/seclite backpack_contents = list(/obj/item/radio=1) diff --git a/code/modules/clothing/outfits/ert/minutemen_ert.dm b/code/modules/clothing/outfits/ert/minutemen_ert.dm index bc440d3bc612..d5a3ec72e94c 100644 --- a/code/modules/clothing/outfits/ert/minutemen_ert.dm +++ b/code/modules/clothing/outfits/ert/minutemen_ert.dm @@ -4,12 +4,12 @@ job_icon = "clip_cmm2" suit = /obj/item/clothing/suit/armor/vest/marine/heavy - suit_store = /obj/item/gun/ballistic/shotgun/bulldog/minutemen + suit_store = /obj/item/gun/ballistic/shotgun/cm15 mask = /obj/item/clothing/mask/gas/clip head = /obj/item/clothing/head/helmet/riot/clip belt = /obj/item/storage/belt/military/clip/cm15 glasses = /obj/item/clothing/glasses/hud/health/night - r_pocket = /obj/item/kitchen/knife/combat + r_pocket = /obj/item/melee/knife/combat l_pocket = /obj/item/extinguisher/mini backpack_contents = list( @@ -58,7 +58,7 @@ belt = /obj/item/storage/belt/military/clip/e50 uniform = /obj/item/clothing/under/clip/officer suit = /obj/item/clothing/suit/armor/vest/marine - suit_store = /obj/item/gun/energy/laser/e50 + suit_store = /obj/item/gun/energy/laser/e50/clip r_pocket = /obj/item/grenade/c4 l_pocket = /obj/item/reagent_containers/hypospray/medipen/stimpack diff --git a/code/modules/clothing/outfits/ert/nanotrasen_ert.dm b/code/modules/clothing/outfits/ert/nanotrasen_ert.dm index 4cec7ad56f8a..1ca40cd640e3 100644 --- a/code/modules/clothing/outfits/ert/nanotrasen_ert.dm +++ b/code/modules/clothing/outfits/ert/nanotrasen_ert.dm @@ -29,7 +29,7 @@ belt = /obj/item/storage/belt/security/full backpack_contents = list(/obj/item/storage/box/survival/engineer=1,\ /obj/item/melee/baton/loaded=1) - l_pocket = /obj/item/kitchen/knife/switchblade + l_pocket = /obj/item/melee/knife/switchblade /datum/outfit/centcom/ert/commander/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) ..() @@ -287,7 +287,7 @@ ) belt = /obj/item/storage/belt/military/assault glasses = /obj/item/clothing/glasses/hud/security/sunglasses/eyepatch - l_pocket = /obj/item/kitchen/knife/combat + l_pocket = /obj/item/melee/knife/combat r_pocket = /obj/item/tank/internals/emergency_oxygen/double uniform = /obj/item/clothing/under/rank/security/officer/military accessory = /obj/item/clothing/accessory/holster/marine @@ -399,7 +399,7 @@ box = /obj/item/storage/box/survival/security l_pocket = /obj/item/restraints/handcuffs - r_pocket = /obj/item/kitchen/knife/combat + r_pocket = /obj/item/melee/knife/combat backpack_contents = list(/obj/item/radio=1, /obj/item/stock_parts/cell/gun/upgraded=2, /obj/item/screwdriver=1) @@ -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/solgov_ert.dm b/code/modules/clothing/outfits/ert/solgov_ert.dm index da3a1146648d..d6830b751498 100644 --- a/code/modules/clothing/outfits/ert/solgov_ert.dm +++ b/code/modules/clothing/outfits/ert/solgov_ert.dm @@ -6,7 +6,7 @@ id = /obj/item/card/id/solgov uniform = /obj/item/clothing/under/solgov - suit = /obj/item/clothing/suit/armor/vest/bulletproof/solgov + suit = /obj/item/clothing/suit/armor/vest/solgov mask = null ears = /obj/item/radio/headset/solgov/alt gloves = /obj/item/clothing/gloves/combat diff --git a/code/modules/clothing/outfits/ert/syndicate_ert.dm b/code/modules/clothing/outfits/ert/syndicate_ert.dm index 29da95448ee4..c37dab500091 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 @@ -14,7 +14,7 @@ back = /obj/item/storage/backpack/security belt = /obj/item/storage/belt/military/c20r - r_pocket = /obj/item/kitchen/knife/combat + r_pocket = /obj/item/melee/knife/combat l_pocket = /obj/item/grenade/frag implants = list(/obj/item/implant/weapons_auth) @@ -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,9 +73,9 @@ 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 + r_pocket = /obj/item/melee/knife/survival l_pocket = /obj/item/binoculars backpack_contents = list(/obj/item/ammo_box/magazine/sniper_rounds=2, /obj/item/radio=1) @@ -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 @@ -133,7 +133,7 @@ head = /obj/item/clothing/head/soft/cybersun/medical belt = /obj/item/storage/belt/medical/webbing/paramedic back = /obj/item/storage/backpack/ert/medical - l_pocket = /obj/item/kitchen/knife/combat/survival + l_pocket = /obj/item/melee/knife/survival r_pocket = /obj/item/pinpointer/crew accessory = /obj/item/clothing/accessory/holster/marine diff --git a/code/modules/clothing/outfits/event.dm b/code/modules/clothing/outfits/event.dm deleted file mode 100644 index 18af4e8b663f..000000000000 --- a/code/modules/clothing/outfits/event.dm +++ /dev/null @@ -1,26 +0,0 @@ -/datum/outfit/santa //ho ho ho! - name = "Santa Claus" - - uniform = /obj/item/clothing/under/color/red - shoes = /obj/item/clothing/shoes/sneakers/red - suit = /obj/item/clothing/suit/space/santa - head = /obj/item/clothing/head/santa - back = /obj/item/storage/backpack/santabag - r_pocket = /obj/item/flashlight - gloves = /obj/item/clothing/gloves/color/red - - box = /obj/item/storage/box/survival/engineer - backpack_contents = list(/obj/item/a_gift/anything = 5) - -/datum/outfit/santa/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - if(visualsOnly) - return - H.fully_replace_character_name(H.real_name, "Santa Claus") - H.mind.assigned_role = "Santa" - H.mind.special_role = "Santa" - - H.hairstyle = "Long Hair 3" - H.facial_hairstyle = "Beard (Full)" - H.hair_color = "FFF" - H.facial_hair_color = "FFF" - H.update_hair() diff --git a/code/modules/clothing/outfits/factions/frontiersmen.dm b/code/modules/clothing/outfits/factions/frontiersmen.dm index 7045f5182188..997eec2209d4 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 @@ -133,7 +133,7 @@ shoes = /obj/item/clothing/shoes/jackboots head = /obj/item/clothing/head/beret/sec/frontier/officer gloves = /obj/item/clothing/gloves/combat - r_pocket = /obj/item/kitchen/knife/combat/survival + r_pocket = /obj/item/melee/knife/survival // Head of Security /datum/outfit/job/frontiersmen/hos @@ -184,7 +184,7 @@ accessory = /obj/item/clothing/accessory/armband/med uniform = /obj/item/clothing/under/frontiersmen glasses = /obj/item/clothing/glasses/hud/health - r_pocket = /obj/item/kitchen/knife/combat/survival + r_pocket = /obj/item/melee/knife/survival suit = /obj/item/clothing/suit/frontiersmen head = /obj/item/clothing/head/frontier belt = /obj/item/storage/belt/medical/webbing/frontiersmen diff --git a/code/modules/clothing/outfits/factions/independent.dm b/code/modules/clothing/outfits/factions/independent.dm index db227c2903c7..ba883d59f4dd 100644 --- a/code/modules/clothing/outfits/factions/independent.dm +++ b/code/modules/clothing/outfits/factions/independent.dm @@ -53,7 +53,7 @@ uniform = /obj/item/clothing/under/utility head = /obj/item/clothing/head/soft/black shoes = /obj/item/clothing/shoes/combat - l_pocket = /obj/item/kitchen/knife/combat/survival + l_pocket = /obj/item/melee/knife/survival gloves = /obj/item/clothing/gloves/combat implants = list(/obj/item/implant/radio) @@ -145,7 +145,7 @@ suit = /obj/item/clothing/suit/armor/vest/marine/medium head = /obj/item/clothing/head/soft/black shoes = /obj/item/clothing/shoes/combat - l_pocket = /obj/item/kitchen/knife/combat + l_pocket = /obj/item/melee/knife/combat implants = list(/obj/item/implant/radio) accessory = null @@ -173,7 +173,6 @@ uniform = /obj/item/clothing/under/rank/command/head_of_personnel dcoat = /obj/item/clothing/suit/hooded/wintercoat/captain shoes = /obj/item/clothing/shoes/sneakers/brown - head = /obj/item/clothing/head/hopcap backpack_contents = list(/obj/item/storage/box/ids=1,\ /obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced = 1) @@ -298,7 +297,7 @@ uniform = /obj/item/clothing/under/utility head = /obj/item/clothing/head/soft/black shoes = /obj/item/clothing/shoes/combat - l_pocket = /obj/item/kitchen/knife/combat + l_pocket = /obj/item/melee/knife/combat backpack_contents = list(/obj/item/melee/baton/loaded=1) @@ -349,8 +348,8 @@ uniform = /obj/item/clothing/under/utility 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 + l_pocket = /obj/item/melee/knife/survival + gloves = /obj/item/clothing/gloves/color/red/insulated implants = list(/obj/item/implant/radio) @@ -536,11 +535,10 @@ ears = /obj/item/radio/headset/headset_cargo uniform = /obj/item/clothing/under/rank/cargo/qm - head = /obj/item/clothing/head/supply_chief dcoat = /obj/item/clothing/suit/hooded/wintercoat/cargo shoes = /obj/item/clothing/shoes/sneakers/brown glasses = /obj/item/clothing/glasses/sunglasses - l_hand = /obj/item/clipboard + r_pocket = /obj/item/clipboard backpack_contents = list(/obj/item/modular_computer/tablet/preset/cargo=1) chameleon_extras = /obj/item/stamp/qm @@ -548,12 +546,16 @@ /datum/outfit/job/independent/quartermaster/western name = "Independent - Quartermaster (Western)" - uniform = /obj/item/clothing/under/rank/cargo/qm - suit = /obj/item/clothing/suit/toggle/hazard + uniform = /obj/item/clothing/under/rank/security/detective + suit = /obj/item/clothing/suit/hazardvest shoes = /obj/item/clothing/shoes/workboots + gloves = /obj/item/clothing/gloves/fingerless glasses = /obj/item/clothing/glasses/sunglasses head = /obj/item/clothing/head/cowboy/sec + backpack = /obj/item/storage/backpack/industrial + satchel = /obj/item/storage/backpack/satchel/eng + /datum/outfit/job/independent/miner name = "Independent - Miner" jobtype = /datum/job/mining @@ -568,7 +570,7 @@ l_pocket = /obj/item/storage/bag/ore backpack_contents = list( /obj/item/flashlight/seclite=1,\ - /obj/item/kitchen/knife/combat/survival=1,\ + /obj/item/melee/knife/survival=1,\ /obj/item/stack/marker_beacon/ten=1,\ /obj/item/radio/weather_monitor=1) diff --git a/code/modules/clothing/outfits/factions/inteq.dm b/code/modules/clothing/outfits/factions/inteq.dm index 6ad58203e2e6..16d1456361be 100644 --- a/code/modules/clothing/outfits/factions/inteq.dm +++ b/code/modules/clothing/outfits/factions/inteq.dm @@ -91,7 +91,7 @@ mask = /obj/item/clothing/mask/gas/sechailer/balaclava/inteq dcoat = /obj/item/clothing/suit/hooded/wintercoat/security/inteq shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/color/yellow belt = /obj/item/storage/belt/utility/full id = /obj/item/card/id/silver diff --git a/code/modules/clothing/outfits/factions/minutemen.dm b/code/modules/clothing/outfits/factions/minutemen.dm index 5c038b05f181..2301855c6809 100644 --- a/code/modules/clothing/outfits/factions/minutemen.dm +++ b/code/modules/clothing/outfits/factions/minutemen.dm @@ -93,6 +93,7 @@ head = /obj/item/clothing/head/hardhat/white ears = /obj/item/radio/headset/clip uniform = /obj/item/clothing/under/clip + gloves = /obj/item/clothing/gloves/color/yellow alt_uniform = null suit = /obj/item/clothing/suit/toggle/lawyer/clip alt_suit = null @@ -552,16 +553,16 @@ backpack_contents = list(/obj/item/clothing/mask/gas/clip=1, /obj/item/storage/ration/chicken_wings_hot_sauce=1) /datum/outfit/job/clip/minutemen/grunt/dressed/armed - name = "CLIP Minutemen - Minuteman (Armed - CM-16)" + name = "CLIP Minutemen - Minuteman (Armed - CM-82)" - suit_store = /obj/item/gun/ballistic/automatic/assault/p16/minutemen - belt = /obj/item/storage/belt/military/clip/p16 + suit_store = /obj/item/gun/ballistic/automatic/assault/cm82 + belt = /obj/item/storage/belt/military/clip/cm82 -/datum/outfit/job/clip/minutemen/grunt/dressed/armed/f4 //f4 is rename of GAL, don't wanna repath upon adding the clip guns though, if i forget to remove this during then, fucking yell at me - name = "CLIP Minutemen - Minuteman (Armed - CM-GAL)" +/datum/outfit/job/clip/minutemen/grunt/dressed/armed/f4 + name = "CLIP Minutemen - Minuteman (Armed - F4)" - suit_store = /obj/item/gun/ballistic/automatic/marksman/gal - belt = /obj/item/storage/belt/military/clip/gal + suit_store = /obj/item/gun/ballistic/automatic/marksman/f4 + belt = /obj/item/storage/belt/military/clip/f4 /datum/outfit/job/clip/minutemen/grunt/dressed/armed/cm5 name = "CLIP Minutemen - Minuteman (Armed - CM-5)" @@ -580,9 +581,9 @@ belt = /obj/item/storage/belt/military/clip/engi /datum/outfit/job/clip/minutemen/grunt/dressed/engi/armed - name = "CLIP Minutemen - Field Engineer (Armed - CM-16)" + name = "CLIP Minutemen - Field Engineer (Armed - CM-82)" - suit_store = /obj/item/gun/ballistic/automatic/assault/p16/minutemen + suit_store = /obj/item/gun/ballistic/automatic/assault/cm82 backpack_contents = list(/obj/item/clothing/mask/gas/clip=1, /obj/item/storage/ration/chili_macaroni=1, /obj/item/grenade/c4=2, /obj/item/ammo_box/magazine/p16=3) /datum/outfit/job/clip/minutemen/grunt/dressed/med @@ -598,20 +599,25 @@ suit_store = /obj/item/gun/ballistic/automatic/smg/cm5 - backpack_contents = list(/obj/item/clothing/mask/gas/clip=1, /obj/item/storage/ration/cheese_pizza_slice, /obj/item/defibrillator/compact/loaded=1, /obj/item/storage/firstaid/medical=1, /obj/item/ammo_box/magazine/smgm9mm=3) + backpack_contents = list(/obj/item/clothing/mask/gas/clip=1, /obj/item/storage/ration/cheese_pizza_slice, /obj/item/defibrillator/compact/loaded=1, /obj/item/storage/firstaid/medical=1, /obj/item/ammo_box/magazine/cm5_9mm=3) + +/obj/item/storage/belt/military/clip/gunner/ComponentInitialize() + . = ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.max_w_class = WEIGHT_CLASS_NORMAL /obj/item/storage/belt/military/clip/gunner/PopulateContents() for(var/i in 1 to 5) - new /obj/item/ammo_box/magazine/skm_762_40/extended(src) + new /obj/item/ammo_box/magazine/cm40_762_40_box(src) new /obj/item/grenade/frag(src) /datum/outfit/job/clip/minutemen/grunt/dressed/gunner_armed - name = "CLIP Minutemen - Field Gunner (Armed - SKM-24u)" //See above, replace with CLIP LMG when added + name = "CLIP Minutemen - Field Gunner (Armed - CM-40)" id_assignment = "Machinegunner" accessory = /obj/item/clothing/accessory/armband belt = /obj/item/storage/belt/military/clip/gunner - suit_store = /obj/item/gun/ballistic/automatic/hmg/skm_lmg/extended + suit_store = /obj/item/gun/ballistic/automatic/hmg/cm40 backpack_contents = list(/obj/item/clothing/mask/gas/clip=1, /obj/item/reagent_containers/food/snacks/rationpack=1) @@ -639,8 +645,8 @@ /datum/outfit/job/clip/minutemen/grunt/lead/armed name = "CLIP Minutemen - Field Sergeant (Armed)" - suit_store = /obj/item/gun/ballistic/automatic/assault/p16/minutemen - belt = /obj/item/storage/belt/military/clip/p16 + suit_store = /obj/item/gun/ballistic/automatic/assault/cm82 + belt = /obj/item/storage/belt/military/clip/cm82 //replace commander with the cm23 when its impemented, see the cm-f4 above backpack_contents = list(/obj/item/clothing/mask/gas/clip=1, /obj/item/reagent_containers/food/snacks/rationpack=1, /obj/item/gun/ballistic/automatic/pistol/commander=1) diff --git a/code/modules/clothing/outfits/factions/nanotrasen.dm b/code/modules/clothing/outfits/factions/nanotrasen.dm index f03c91d51a11..3c9e379e74db 100644 --- a/code/modules/clothing/outfits/factions/nanotrasen.dm +++ b/code/modules/clothing/outfits/factions/nanotrasen.dm @@ -316,7 +316,7 @@ backpack_contents = list( /obj/item/flashlight/seclite=1, - /obj/item/kitchen/knife/combat/survival=1, + /obj/item/melee/knife/survival=1, /obj/item/stack/marker_beacon/ten=1, /obj/item/radio/weather_monitor=1, ) @@ -401,6 +401,15 @@ shoes = /obj/item/clothing/shoes/sneakers/black belt = /obj/item/pda +// Janitor +/datum/outfit/job/nanotrasen/janitor + name = "Nanotrasen - Janitor" + jobtype = /datum/job/janitor + job_icon = "janitor" + + uniform = /obj/item/clothing/under/nanotrasen/janitor + head = /obj/item/clothing/head/nanotrasen/cap/janitor + // Lawyer /datum/outfit/job/nanotrasen/lawyer name = "Nanotrasen - Lawyer" @@ -423,8 +432,6 @@ id_assignment = "Corporate Representative" job_icon = "nanotrasen" - uniform = /obj/item/clothing/under/rank/command/head_of_personnel/suit - suit = null ears = /obj/item/radio/headset/headset_cent l_hand = /obj/item/clipboard r_pocket = /obj/item/pen/fountain @@ -472,10 +479,10 @@ accessory = /obj/item/clothing/accessory/holster head = /obj/item/clothing/head/beret/command -// Mech Pilot +// Exosuit Pilot /datum/outfit/job/nanotrasen/security/mech_pilot - name = "Nanotrasen - Mech Pilot" - id_assignment = "Mech Pilot" + name = "Nanotrasen - Exosuit Pilot" + id_assignment = "Exosuit Pilot" uniform = /obj/item/clothing/under/rank/security/officer/military/eng head = /obj/item/clothing/head/beret/sec/officer @@ -495,7 +502,7 @@ gloves = /obj/item/clothing/gloves/color/black uniform = /obj/item/clothing/under/rank/security/head_of_security/alt/lp alt_uniform = /obj/item/clothing/under/rank/security/head_of_security/alt/skirt/lp - dcoat = /obj/item/clothing/suit/jacket + dcoat = /obj/item/clothing/suit/armor/nanotrasen/sec_director shoes = /obj/item/clothing/shoes/jackboots head = /obj/item/clothing/head/beret/command @@ -569,7 +576,7 @@ backpack = /obj/item/storage/backpack/ert/security belt = /obj/item/storage/belt/military id = /obj/item/card/id/ert/security - r_pocket = /obj/item/kitchen/knife/combat/survival + r_pocket = /obj/item/melee/knife/survival backpack_contents = list(/obj/item/radio, /obj/item/flashlight/seclite) /datum/outfit/job/nanotrasen/security/ert/engi @@ -580,7 +587,7 @@ backpack = /obj/item/storage/backpack/ert/engineer belt = /obj/item/storage/belt/utility/full/ert id = /obj/item/card/id/ert/security - r_pocket = /obj/item/kitchen/knife/combat/survival + r_pocket = /obj/item/melee/knife/survival backpack_contents = list(/obj/item/radio, /obj/item/flashlight/seclite) accessory = /obj/item/clothing/accessory/armband/engine glasses = /obj/item/clothing/glasses/hud/diagnostic/sunglasses @@ -593,7 +600,7 @@ backpack = /obj/item/storage/backpack/ert/medical belt = /obj/item/storage/belt/medical/webbing/paramedic id = /obj/item/card/id/ert/security - r_pocket = /obj/item/kitchen/knife/combat/survival + r_pocket = /obj/item/melee/knife/survival backpack_contents = list(/obj/item/radio, /obj/item/flashlight/seclite) accessory = /obj/item/clothing/accessory/armband/med glasses = /obj/item/clothing/glasses/hud/health/night diff --git a/code/modules/clothing/outfits/factions/solgov.dm b/code/modules/clothing/outfits/factions/solgov.dm index 972b863bbbda..c4aed59c7e21 100644 --- a/code/modules/clothing/outfits/factions/solgov.dm +++ b/code/modules/clothing/outfits/factions/solgov.dm @@ -7,7 +7,7 @@ . = ..() if(visualsOnly) return - H.faction |= list(FACTION_PLAYER_SOLGOV) + H.faction |= list(FACTION_PLAYER_SOLCON) /datum/outfit/job/solgov/assistant name = "SolGov - Scribe" @@ -47,7 +47,7 @@ gloves = /obj/item/clothing/gloves/combat ears = /obj/item/radio/headset/solgov/alt/captain uniform = /obj/item/clothing/under/solgov/formal/captain - suit = /obj/item/clothing/suit/armor/vest/bulletproof/solgov/captain + suit = /obj/item/clothing/suit/armor/vest/solgov/captain shoes = /obj/item/clothing/shoes/laceup head = /obj/item/clothing/head/solgov/captain backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1) @@ -69,7 +69,7 @@ id = /obj/item/card/id/solgov uniform = /obj/item/clothing/under/solgov - suit = /obj/item/clothing/suit/armor/vest/bulletproof/solgov + suit = /obj/item/clothing/suit/armor/vest/solgov ears = /obj/item/radio/headset/solgov/alt gloves = /obj/item/clothing/gloves/combat head = /obj/item/clothing/head/solgov/sonnensoldner @@ -101,7 +101,7 @@ implants = list(/obj/item/implant/mindshield) backpack_contents = list( - /obj/item/kitchen/knife/letter_opener = 1 + /obj/item/melee/knife/letter_opener = 1 ) /datum/outfit/job/solgov/overseer @@ -115,7 +115,7 @@ uniform = /obj/item/clothing/under/solgov/formal head = /obj/item/clothing/head/solgov neck = /obj/item/clothing/neck/cloak/overseer - suit = /obj/item/clothing/suit/armor/vest/bulletproof/solgov/overseer + suit = /obj/item/clothing/suit/armor/vest/solgov/overseer shoes = /obj/item/clothing/shoes/laceup backpack_contents = list(/obj/item/storage/box/ids=1,\ @@ -159,7 +159,7 @@ r_pocket = /obj/item/storage/bag/ore //causes issues if spawned in backpack backpack_contents = list( /obj/item/flashlight/seclite=1,\ - /obj/item/kitchen/knife/combat/survival=1,\ + /obj/item/melee/knife/survival=1,\ /obj/item/stack/marker_beacon/ten=1) backpack = /obj/item/storage/backpack/explorer diff --git a/code/modules/clothing/outfits/factions/syndicate.dm b/code/modules/clothing/outfits/factions/syndicate.dm index 4dbbe0826e21..1d91a94b766d 100644 --- a/code/modules/clothing/outfits/factions/syndicate.dm +++ b/code/modules/clothing/outfits/factions/syndicate.dm @@ -4,7 +4,7 @@ name = "Syndicate - Base Outfit" uniform = /obj/item/clothing/under/color/black - box = /obj/item/storage/box/survival/syndie + box = /obj/item/storage/box/survival id = /obj/item/card/id/syndicate_command/crew_id faction_icon = "bg_syndicate" @@ -52,7 +52,7 @@ duffelbag = /obj/item/storage/backpack/duffelbag/syndie courierbag = /obj/item/storage/backpack/messenger/sec - box = /obj/item/storage/box/survival/syndie + box = /obj/item/storage/box/survival /datum/outfit/job/syndicate/assistant/gorlex name = "Syndicate - Junior Agent (Hardliner)" @@ -106,8 +106,6 @@ duffelbag = /obj/item/storage/backpack/duffelbag/syndie courierbag = /obj/item/storage/backpack/messenger/sec - box = /obj/item/storage/box/survival/syndie - /datum/outfit/job/syndicate/assistant/twink/post_equip(mob/living/carbon/human/H) . = ..() @@ -246,8 +244,6 @@ duffelbag = /obj/item/storage/backpack/duffelbag/syndie courierbag = /obj/item/storage/backpack/messenger/sec - box = /obj/item/storage/box/survival/syndie - /datum/outfit/job/syndicate/bartender/twink/post_equip(mob/living/carbon/human/H) . = ..() assign_codename(H) @@ -301,8 +297,6 @@ duffelbag = /obj/item/storage/backpack/duffelbag/sec courierbag = /obj/item/storage/backpack/messenger/sec - box = /obj/item/storage/box/survival/syndie - /datum/outfit/job/syndicate/captain/aclf name = "Captain (ACLF)" @@ -359,7 +353,7 @@ shoes = /obj/item/clothing/shoes/combat/suns head = /obj/item/clothing/head/suns/captain gloves = /obj/item/clothing/gloves/suns/captain - suit = /obj/item/clothing/suit/armor/vest/bulletproof/suns/captain + suit = /obj/item/clothing/suit/armor/vest/suns/captain belt = /obj/item/storage/belt/sabre/suns/captain mask = /obj/item/clothing/mask/breath/suns neck = /obj/item/clothing/neck/cloak/suns/cap @@ -450,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)" @@ -462,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 @@ -483,6 +477,7 @@ l_hand = /obj/item/storage/firstaid/medical suit_store = /obj/item/flashlight/pen backpack_contents = list(/obj/item/melee/classic_baton/telescopic=1) + box = /obj/item/storage/box/survival/medical /datum/outfit/job/syndicate/cmo/suns name = "Syndicate - Medical Instructor (SUNS)" @@ -521,7 +516,7 @@ head = /obj/item/clothing/head/HoS/beret/syndicate gloves = /obj/item/clothing/gloves/color/white id = /obj/item/card/id/syndicate_command/crew_id - r_pocket = /obj/item/kitchen/knife/combat/survival + r_pocket = /obj/item/melee/knife/survival glasses = /obj/item/clothing/glasses/hud/health backpack_contents = list(/obj/item/storage/box/ids=1,\ /obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced = 1) @@ -537,7 +532,7 @@ head = /obj/item/clothing/head/HoS/cybersun gloves = /obj/item/clothing/gloves/combat id = /obj/item/card/id/syndicate_command/crew_id - r_pocket = /obj/item/kitchen/knife/combat/survival + r_pocket = /obj/item/melee/knife/survival glasses = /obj/item/clothing/glasses/sunglasses /datum/outfit/job/syndicate/head_of_personnel/suns @@ -545,7 +540,7 @@ id_assignment = "Academic Staff" uniform = /obj/item/clothing/under/syndicate/suns/xo - suit = /obj/item/clothing/suit/armor/vest/bulletproof/suns/xo + suit = /obj/item/clothing/suit/armor/vest/suns/xo belt = /obj/item/storage/belt/sabre/suns shoes = /obj/item/clothing/shoes/combat/suns head = /obj/item/clothing/head/suns @@ -577,6 +572,7 @@ r_pocket = /obj/item/assembly/flash/handheld l_pocket = /obj/item/restraints/handcuffs backpack_contents = list(/obj/item/melee/baton/loaded=1) + box = /obj/item/storage/box/survival/security /datum/outfit/job/syndicate/hos/gorlex name = "Syndicate - Sergeant (Hardliner)" @@ -587,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)" @@ -598,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 @@ -628,8 +624,6 @@ duffelbag = /obj/item/storage/backpack/duffelbag/syndie courierbag = /obj/item/storage/backpack/messenger/sec - box = /obj/item/storage/box/survival/syndie - /datum/outfit/job/syndicate/hos/twink/post_equip(mob/living/carbon/human/H) . = ..() assign_codename(H) @@ -639,8 +633,8 @@ id_assignment = "Senior Peacekeeper" uniform = /obj/item/clothing/under/syndicate/suns/pkuniform - suit = /obj/item/clothing/suit/armor/vest/bulletproof/suns/hos - belt = /obj/item/melee/sabre/suns/telescopic + suit = /obj/item/clothing/suit/armor/vest/suns/hos + belt = /obj/item/melee/sword/sabre/suns/telescopic gloves = /obj/item/clothing/gloves/tackler/dolphin/suns shoes = /obj/item/clothing/shoes/combat/suns head = /obj/item/clothing/head/welding/suns/hos @@ -654,7 +648,7 @@ /datum/outfit/job/syndicate/hos/suns/alt name = "Syndicate - Senior Peacekeeper Alt (SUNS)" - suit = /obj/item/clothing/suit/armor/vest/bulletproof/suns/ehos + suit = /obj/item/clothing/suit/armor/vest/suns/ehos head = /obj/item/clothing/head/HoS/syndicate/suns /datum/outfit/job/syndicate/hos/suns/twink @@ -685,6 +679,7 @@ shoes = /obj/item/clothing/shoes/sneakers/white alt_suit = /obj/item/clothing/suit/apron/surgical l_hand = /obj/item/storage/firstaid/medical + box = /obj/item/storage/box/survival/medical /datum/outfit/job/syndicate/doctor/suns name = "Syndicate - Medical Doctor (SUNS)" @@ -716,7 +711,7 @@ head = /obj/item/clothing/head/hardliners suit = /obj/item/clothing/suit/hardliners glasses = /obj/item/clothing/glasses/hud/health - r_pocket = /obj/item/kitchen/knife/combat/survival + r_pocket = /obj/item/melee/knife/survival back = /obj/item/storage/backpack/duffelbag/syndie/med id = /obj/item/card/id/syndicate_command/crew_id backpack_contents = list(/obj/item/storage/box/survival/syndie=1, /obj/item/storage/firstaid/medical,) @@ -728,7 +723,7 @@ head = /obj/item/clothing/head/ngr/surgical suit = /obj/item/clothing/suit/ngr/smock glasses = /obj/item/clothing/glasses/hud/health - r_pocket = /obj/item/kitchen/knife/combat/survival + r_pocket = /obj/item/melee/knife/survival back = /obj/item/storage/backpack/duffelbag/syndie/med id = /obj/item/card/id/syndicate_command/crew_id backpack_contents = list(/obj/item/storage/box/survival/syndie=1, /obj/item/storage/firstaid/medical,) @@ -755,6 +750,7 @@ suit_store = /obj/item/flashlight/pen backpack_contents = list(/obj/item/roller=1) pda_slot = ITEM_SLOT_LPOCKET + box = /obj/item/storage/box/survival/medical /datum/outfit/job/syndicate/paramedic/gorlex name = "Syndicate - Paramedic (Gorlex)" @@ -793,8 +789,6 @@ duffelbag = /obj/item/storage/backpack/duffelbag/syndie/med courierbag = /obj/item/storage/backpack/messenger/sec - box = /obj/item/storage/box/survival/syndie - /datum/outfit/job/syndicate/paramedic/twink/post_equip(mob/living/carbon/human/H) . = ..() assign_codename(H) @@ -903,7 +897,7 @@ job_icon = "securityofficer" uniform = /obj/item/clothing/under/syndicate - r_pocket = /obj/item/kitchen/knife/combat/survival + r_pocket = /obj/item/melee/knife/survival belt = /obj/item/storage/belt/military back = /obj/item/storage/backpack suit = /obj/item/clothing/suit/armor/vest @@ -920,6 +914,8 @@ /obj/item/melee/baton/loaded=1, ) + box = /obj/item/storage/box/survival/security + /datum/outfit/job/syndicate/security/gorlex name = "Syndicate - Trooper (Hardliner)" @@ -935,7 +931,7 @@ l_pocket = /obj/item/restraints/handcuffs r_pocket = /obj/item/assembly/flash/handheld -/datum/outfit/job/syndicate/security/gorlex +/datum/outfit/job/syndicate/security/gorlex/pilot name = "Syndicate - Pilot (Hardliner)" id_assignment = "Pilot" job_icon = "securityofficer" @@ -987,8 +983,6 @@ duffelbag = /obj/item/storage/backpack/duffelbag/syndie courierbag = /obj/item/storage/backpack/messenger/sec - box = /obj/item/storage/box/survival/syndie - /datum/outfit/job/syndicate/security/twink/post_equip(mob/living/carbon/human/H) . = ..() assign_codename(H) @@ -998,9 +992,9 @@ id_assignment = "Peacekeeper" uniform = /obj/item/clothing/under/syndicate/suns/pkuniform - suit = /obj/item/clothing/suit/armor/vest/bulletproof/suns + suit = /obj/item/clothing/suit/armor/vest/suns alt_suit = /obj/item/clothing/suit/toggle/suns/pkcoat - belt = /obj/item/melee/sabre/suns/telescopic + belt = /obj/item/melee/sword/sabre/suns/telescopic gloves = /obj/item/clothing/gloves/tackler/dolphin/suns shoes = /obj/item/clothing/shoes/jackboots/suns/long head = /obj/item/clothing/head/welding/suns @@ -1026,10 +1020,12 @@ r_pocket = /obj/item/storage/bag/ore backpack_contents = list( /obj/item/flashlight/seclite=1,\ - /obj/item/kitchen/knife/combat/survival=1,\ + /obj/item/melee/knife/survival=1,\ /obj/item/mining_voucher=1,\ /obj/item/stack/marker_beacon/ten=1) + box = /obj/item/storage/box/survival/mining + /datum/outfit/job/syndicate/miner/gorlex name = "Syndicate - Wrecker (Hardliner)" id_assignment = "Wrecker" @@ -1175,8 +1171,6 @@ r_pocket = null implants = list(/obj/item/implant/weapons_auth) - box = /obj/item/storage/box/survival/syndie - /datum/outfit/job/syndicate/engineer/twink/post_equip(mob/living/carbon/human/H) . = ..() assign_codename(H) diff --git a/code/modules/clothing/outfits/plasmaman.dm b/code/modules/clothing/outfits/plasmaman.dm index 05b8c0e1a42c..544259603174 100644 --- a/code/modules/clothing/outfits/plasmaman.dm +++ b/code/modules/clothing/outfits/plasmaman.dm @@ -17,7 +17,7 @@ head = /obj/item/clothing/head/helmet/space/plasmaman/botany uniform = /obj/item/clothing/under/plasmaman/botany - gloves = /obj/item/clothing/gloves/color/botanic_leather/plasmaman + gloves = /obj/item/clothing/gloves/botanic_leather/plasmaman /datum/outfit/plasmaman/curator name = "Curator Plasmaman" diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index 100cc7ff0f52..108475c982b9 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -96,14 +96,6 @@ W.update_label() ..() -/datum/outfit/ghost_cultist - name = "Cultist Ghost" - - uniform = /obj/item/clothing/under/color/black/ghost - suit = /obj/item/clothing/suit/hooded/cultrobes/alt/ghost - shoes = /obj/item/clothing/shoes/cult/alt/ghost - r_hand = /obj/item/melee/cultblade/ghost - /datum/outfit/wizard name = "Blue Wizard" @@ -126,25 +118,6 @@ if(S) S.owner = H -/datum/outfit/wizard/apprentice - name = "Wizard Apprentice" - r_hand = null - l_hand = null - r_pocket = /obj/item/teleportation_scroll/apprentice - -/datum/outfit/wizard/red - name = "Red Wizard" - - suit = /obj/item/clothing/suit/wizrobe/red - head = /obj/item/clothing/head/wizard/red - -/datum/outfit/wizard/weeb - name = "Marisa Wizard" - - suit = /obj/item/clothing/suit/wizrobe/marisa - shoes = /obj/item/clothing/shoes/sandal/marisa - head = /obj/item/clothing/head/wizard/marisa - /datum/outfit/plasmaman name = "Plasmaman" diff --git a/code/modules/clothing/shoes/_shoes.dm b/code/modules/clothing/shoes/_shoes.dm index 336ac43c7d4d..cd4474588090 100644 --- a/code/modules/clothing/shoes/_shoes.dm +++ b/code/modules/clothing/shoes/_shoes.dm @@ -29,7 +29,7 @@ var/atom/movable/screen/alert/our_alert /obj/item/clothing/shoes/worn_overlays(isinhands = FALSE) - . = list() + . = ..() if(!isinhands) if(damaged_clothes) . += mutable_appearance('icons/effects/item_damage.dmi', "damagedshoe") diff --git a/code/modules/clothing/shoes/bananashoes.dm b/code/modules/clothing/shoes/bananashoes.dm deleted file mode 100644 index 4ed246a587be..000000000000 --- a/code/modules/clothing/shoes/bananashoes.dm +++ /dev/null @@ -1,68 +0,0 @@ -//banana flavored chaos and horror ahead - -/obj/item/clothing/shoes/clown_shoes/banana_shoes - name = "mk-honk prototype shoes" - desc = "Lost prototype of advanced clown tech. Powered by bananium, these shoes leave a trail of chaos in their wake." - icon_state = "clown_prototype_off" - actions_types = list(/datum/action/item_action/toggle) - var/on = FALSE - var/always_noslip = FALSE - -/obj/item/clothing/shoes/clown_shoes/banana_shoes/Initialize() - . = ..() - if(always_noslip) - clothing_flags |= NOSLIP - -/obj/item/clothing/shoes/clown_shoes/banana_shoes/ComponentInitialize() - . = ..() - AddElement(/datum/element/update_icon_updates_onmob) - AddComponent(/datum/component/material_container, list(/datum/material/hellstone), 200000, TRUE, /obj/item/stack) - AddComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg'=1), 75, falloff_exponent = 20) - -/obj/item/clothing/shoes/clown_shoes/banana_shoes/step_action() - . = ..() - var/mob/wearer = loc - var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container) - if(on && istype(wearer)) - if(bananium.get_material_amount(/datum/material/hellstone) < 100) - on = !on - if(!always_noslip) - clothing_flags &= ~NOSLIP - update_appearance() - to_chat(loc, "You ran out of bananium!") - else - new /obj/item/grown/bananapeel/specialpeel(get_step(src,turn(wearer.dir, 180))) //honk - bananium.use_amount_mat(100, /datum/material/hellstone) - -/obj/item/clothing/shoes/clown_shoes/banana_shoes/attack_self(mob/user) - var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container) - var/sheet_amount = bananium.retrieve_all() - if(sheet_amount) - to_chat(user, "You retrieve [sheet_amount] sheets of bananium from the prototype shoes.") - else - to_chat(user, "You cannot retrieve any bananium from the prototype shoes!") - -/obj/item/clothing/shoes/clown_shoes/banana_shoes/examine(mob/user) - . = ..() - . += "The shoes are [on ? "enabled" : "disabled"]." - -/obj/item/clothing/shoes/clown_shoes/banana_shoes/ui_action_click(mob/user) - var/datum/component/material_container/bananium = GetComponent(/datum/component/material_container) - if(bananium.get_material_amount(/datum/material/hellstone)) - on = !on - update_appearance() - to_chat(user, "You [on ? "activate" : "deactivate"] the prototype shoes.") - if(!always_noslip) - if(on) - clothing_flags |= NOSLIP - else - clothing_flags &= ~NOSLIP - else - to_chat(user, "You need bananium to turn the prototype shoes on!") - -/obj/item/clothing/shoes/clown_shoes/banana_shoes/update_icon_state() - if(on) - icon_state = "clown_prototype_on" - else - icon_state = "clown_prototype_off" - return ..() diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 4c078a7e0ad1..234917e03d6d 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -16,23 +16,6 @@ lace_time = 12 SECONDS greyscale_icon_state = "boots" -/obj/item/clothing/shoes/combat/sneakboots - name = "sneakboots" - desc = "These boots have special noise cancelling soles. Perfect for stealth, if it wasn't for the color scheme." - icon_state = "sneakboots" - item_state = "sneakboots" - w_class = WEIGHT_CLASS_SMALL - resistance_flags = FIRE_PROOF | ACID_PROOF - -/obj/item/clothing/shoes/combat/sneakboots/equipped(mob/living/carbon/human/user, slot) - . = ..() - if(slot == ITEM_SLOT_FEET) - ADD_TRAIT(user, TRAIT_SILENT_FOOTSTEPS, SHOES_TRAIT) - -/obj/item/clothing/shoes/combat/sneakboots/dropped(mob/living/carbon/human/user) - REMOVE_TRAIT(user, TRAIT_SILENT_FOOTSTEPS, SHOES_TRAIT) - return ..() - /obj/item/clothing/shoes/combat/swat //overpowered boots for death squads name = "\improper SWAT boots" desc = "High speed, no drag combat boots." @@ -84,61 +67,6 @@ can_be_tied = FALSE greyscale_icon_state = "boots" -/obj/item/clothing/shoes/galoshes/dry - name = "absorbent galoshes" - desc = "A pair of orange rubber boots, designed to prevent slipping on wet surfaces while also drying them." - icon_state = "galoshes_dry" - -/obj/item/clothing/shoes/galoshes/dry/step_action() - var/turf/open/t_loc = get_turf(src) - SEND_SIGNAL(t_loc, COMSIG_TURF_MAKE_DRY, TURF_WET_WATER, TRUE, INFINITY) - -/obj/item/clothing/shoes/clown_shoes - desc = "The prankster's standard-issue clowning shoes. Damn, they're huge! Ctrl-click to toggle waddle dampeners." - name = "clown shoes" - icon_state = "clown" - item_state = "clown_shoes" - slowdown = SHOES_SLOWDOWN+1 - pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes/clown - var/enabled_waddle = TRUE - lace_time = 20 SECONDS // how the hell do these laces even work?? - -/obj/item/clothing/shoes/clown_shoes/Initialize() - . = ..() - AddComponent(/datum/component/squeak, list('sound/effects/clownstep1.ogg'=1,'sound/effects/clownstep2.ogg'=1), 50, falloff_exponent = 20) //die off quick please) - -/obj/item/clothing/shoes/clown_shoes/equipped(mob/user, slot) - . = ..() - if(slot == ITEM_SLOT_FEET) - if(enabled_waddle) - user.AddElement(/datum/element/waddling) - if(user.mind && user.mind.assigned_role == "Clown") - SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "clownshoes", /datum/mood_event/clownshoes) - -/obj/item/clothing/shoes/clown_shoes/dropped(mob/user) - . = ..() - user.RemoveElement(/datum/element/waddling) - if(user.mind && user.mind.assigned_role == "Clown") - SEND_SIGNAL(user, COMSIG_CLEAR_MOOD_EVENT, "clownshoes") - -/obj/item/clothing/shoes/clown_shoes/CtrlClick(mob/living/user) - if(!isliving(user)) - return - if(user.get_active_held_item() != src) - to_chat(user, "You must hold the [src] in your hand to do this!") - return - if (!enabled_waddle) - to_chat(user, "You switch off the waddle dampeners!") - enabled_waddle = TRUE - else - to_chat(user, "You switch on the waddle dampeners!") - enabled_waddle = FALSE - -/obj/item/clothing/shoes/clown_shoes/jester - name = "jester shoes" - desc = "A court jester's shoes, updated with modern squeaking technology." - icon_state = "jester_shoes" - /obj/item/clothing/shoes/jackboots name = "jackboots" desc = "Ankle-high combat boots for combat scenarios or combat situations. All combat, all the time." @@ -198,59 +126,12 @@ icon_state = "explorer" resistance_flags = FIRE_PROOF -/obj/item/clothing/shoes/cult - name = "\improper Nar'Sien invoker boots" - desc = "A pair of boots worn by the followers of Nar'Sie." - icon_state = "cult" - item_state = "cult" - cold_protection = FEET - min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT - heat_protection = FEET - max_heat_protection_temperature = SHOES_MAX_TEMP_PROTECT - lace_time = 10 SECONDS - greyscale_icon_state = "boots" - -/obj/item/clothing/shoes/cult/alt - name = "cultist boots" - icon_state = "cultalt" - -/obj/item/clothing/shoes/cult/alt/ghost - item_flags = DROPDEL - -/obj/item/clothing/shoes/cult/alt/ghost/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT) - -/obj/item/clothing/shoes/cyborg - name = "cyborg boots" - desc = "Shoes for a cyborg costume." - icon_state = "boots" - /obj/item/clothing/shoes/laceup name = "laceup shoes" desc = "The height of fashion, and they're pre-polished!" icon_state = "laceups" equip_delay_other = 50 -/obj/item/clothing/shoes/roman - name = "roman sandals" - desc = "Sandals with buckled leather straps on it." - icon_state = "roman" - item_state = "roman" - strip_delay = 100 - equip_delay_other = 100 - permeability_coefficient = 0.9 - can_be_tied = FALSE - -/obj/item/clothing/shoes/griffin - name = "griffon boots" - desc = "A pair of costume boots fashioned after bird talons." - icon_state = "griffinboots" - item_state = "griffinboots" - pocket_storage_component_path = /datum/component/storage/concrete/pockets/shoes - lace_time = 8 SECONDS - greyscale_icon_state = "boots" - /obj/item/clothing/shoes/bhop name = "jump boots" desc = "The EXOCOM's Cortez launch boot line represents a specialized pair of mining boots with a built-in propulsion system, designed for rapid foward movement." @@ -287,57 +168,6 @@ else to_chat(user, "Something prevents you from dashing forward!") -/obj/item/clothing/shoes/bronze - name = "bronze boots" - desc = "A giant, clunky pair of shoes crudely made out of bronze. Why would anyone wear these?" - icon = 'icons/obj/clothing/clockwork_garb.dmi' - icon_state = "clockwork_treads" - lace_time = 8 SECONDS - greyscale_icon_state = "boots" - -/obj/item/clothing/shoes/bronze/Initialize() - . = ..() - AddComponent(/datum/component/squeak, list('sound/machines/clockcult/integration_cog_install.ogg' = 1, 'sound/magic/clockwork/fellowship_armory.ogg' = 1), 50, extrarange = SHORT_RANGE_SOUND_EXTRARANGE) - -/obj/item/clothing/shoes/wheelys - name = "Wheely-Heels" - desc = "Uses patented retractable wheel technology. Never sacrifice speed for style - not that this provides much of either." //Thanks Fel - icon_state = "wheelys" - item_state = "wheelys" - actions_types = list(/datum/action/item_action/wheelys) - var/wheelToggle = FALSE //False means wheels are not popped out - var/obj/vehicle/ridden/scooter/wheelys/W - -/obj/item/clothing/shoes/wheelys/Initialize() - . = ..() - W = new /obj/vehicle/ridden/scooter/wheelys(null) - -/obj/item/clothing/shoes/wheelys/ui_action_click(mob/user, action) - if(!isliving(user)) - return - if(!istype(user.get_item_by_slot(ITEM_SLOT_FEET), /obj/item/clothing/shoes/wheelys)) - to_chat(user, "You must be wearing the wheely-heels to use them!") - return - if(!(W.is_occupant(user))) - wheelToggle = FALSE - if(wheelToggle) - W.unbuckle_mob(user) - wheelToggle = FALSE - return - W.forceMove(get_turf(user)) - W.buckle_mob(user) - wheelToggle = TRUE - -/obj/item/clothing/shoes/wheelys/dropped(mob/user) - if(wheelToggle) - W.unbuckle_mob(user) - wheelToggle = FALSE - ..() - -/obj/item/clothing/shoes/wheelys/Destroy() - QDEL_NULL(W) - . = ..() - /obj/item/clothing/shoes/kindleKicks name = "Kindle Kicks" desc = "They'll sure kindle something in you, and it's not childhood nostalgia..." @@ -351,7 +181,6 @@ var/lightCycle = 0 var/active = FALSE - /obj/item/clothing/shoes/kindleKicks/ui_action_click(mob/user, action) if(active) return @@ -433,21 +262,3 @@ desc = "A pair of authentic haute couture boots. You doubt they have ever been close to cattle." icon_state = "cowboy_fancy" permeability_coefficient = 0.08 - -/obj/item/clothing/shoes/cookflops - desc = "All this talk of antags, greytiding, and griefing... I just wanna grill for god's sake!" - name = "grilling sandals" - icon_state = "cookflops" - can_be_tied = FALSE - -/obj/item/clothing/shoes/yakuza - name = "tojo clan shoes" - desc = "Steel-toed and intimidating." - icon_state = "MajimaShoes" - item_state = "MajimaShoes_worn" - -/obj/item/clothing/shoes/jackbros - name = "frosty boots" - desc = "For when you're stepping on up to the plate." - icon_state = "JackFrostShoes" - item_state = "JackFrostShoes_worn" diff --git a/code/modules/clothing/spacesuits/_spacesuits.dm b/code/modules/clothing/spacesuits/_spacesuits.dm index cb98f607089c..f96ad54adb88 100644 --- a/code/modules/clothing/spacesuits/_spacesuits.dm +++ b/code/modules/clothing/spacesuits/_spacesuits.dm @@ -18,7 +18,7 @@ flash_protect = FLASH_PROTECTION_WELDER strip_delay = 50 equip_delay_other = 50 - flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF + flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF | SEALS_EYES resistance_flags = NONE dog_fashion = null content_overlays = FALSE diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 02fbb162892b..25788f4556ae 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -17,7 +17,7 @@ actions_types = list(/datum/action/item_action/toggle_helmet) flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - visor_flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF + visor_flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF | SEALS_EYES var/rad_count = 0 var/rad_record = 0 var/grace_count = 0 @@ -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() @@ -734,23 +732,6 @@ item_state = "capspacesuit" helmettype = /obj/item/clothing/head/helmet/space/hardsuit/swat/captain - //Clown -/obj/item/clothing/head/helmet/space/hardsuit/clown - name = "cosmohonk hardsuit helmet" - desc = "A special helmet designed for work in a hazardous, low-humor environment. Has radiation shielding." - icon_state = "hardsuit0-clown" - item_state = "hardsuit0-clown" - armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 60, "acid" = 30) - hardsuit_type = "clown" - -/obj/item/clothing/suit/space/hardsuit/clown - name = "cosmohonk hardsuit" - desc = "A special suit that protects against hazardous, low humor environments. Has radiation shielding. Only a true clown can wear it." - icon_state = "hardsuit-clown" - item_state = "clown_hardsuit" - armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 60, "acid" = 30) - helmettype = /obj/item/clothing/head/helmet/space/hardsuit/clown - //Old Prototype /obj/item/clothing/head/helmet/space/hardsuit/ancient name = "prototype RIG hardsuit helmet" @@ -863,7 +844,7 @@ C.update_inv_wear_suit() /obj/item/clothing/suit/space/hardsuit/shielded/worn_overlays(isinhands) - . = list() + . = ..() if(!isinhands) . += mutable_appearance('icons/effects/effects.dmi', shield_state, MOB_LAYER + 0.01) @@ -938,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 @@ -1045,7 +1026,7 @@ item_state = "independent_sec_helm" hardsuit_type = "independent-sec" armor = list("melee" = 35, "bullet" = 25, "laser" = 20,"energy" = 40, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 75, "acid" = 75) - supports_variations = VOX_VARIATION + supports_variations = VOX_VARIATION | SNOUTED_VARIATION /obj/item/clothing/suit/space/hardsuit/security/independent icon_state = "hardsuit-independent-sec" @@ -1056,7 +1037,7 @@ hardsuit_type = "independent-sec" helmettype = /obj/item/clothing/head/helmet/space/hardsuit/security/independent armor = list("melee" = 35, "bullet" = 25, "laser" = 20, "energy" = 40, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 75, "acid" = 75) - supports_variations = VOX_VARIATION + supports_variations = VOX_VARIATION | DIGITIGRADE_VARIATION //Mining /obj/item/clothing/head/helmet/space/hardsuit/mining/independent @@ -1082,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 @@ -1106,7 +1088,7 @@ name = "pilot space suit" icon_state = "space-pilot" item_state = "space-pilot" - desc = "A lightweight, unarmored space suit designed for mech and fighter pilots. Special attachment points make mounting and dismounting from mechs much easier." + desc = "A lightweight, unarmored space suit designed for exosuit and shuttle pilots. Special attachment points make mounting and dismounting from exosuits much easier." clothing_flags = STOPSPRESSUREDAMAGE | THICKMATERIAL | FAST_EMBARK pocket_storage_component_path = /datum/component/storage/concrete/pockets/exo/large @@ -1114,7 +1096,7 @@ name = "pilot helmet" icon_state = "space-pilot-plain0" item_state = "space-pilot-plain" - desc = "A specialized space helmet designed for mech and fighter pilots. Offers limited impact protection." + desc = "A specialized space helmet designed for exosuit and shuttle pilots. Offers limited impact protection." var/skin = "plain" var/blurb = " Its simple design is quite ancient." up = FALSE @@ -1147,7 +1129,7 @@ if("corvid") blurb = " It is sloppily painted with thin teal and red paint. There are some dark stains on the lining..." - desc = "A specialized space helmet designed for mech and fighter pilots. Offers limited impact protection.[blurb]" + desc = "A specialized space helmet designed for exosuit and shuttle pilots. Offers limited impact protection.[blurb]" update_icon_state() /obj/item/clothing/head/helmet/space/pilot/random/New() @@ -1218,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 @@ -1242,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/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index 67dc7ce529b3..6e825e48ea4b 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -36,7 +36,7 @@ Contains: desc = "A prototype designed to replace the ageing MK.II SWAT suit. Based on the streamlined MK.II model, the traditional ceramic and graphene plate construction was replaced with plasteel, allowing superior armor against most threats. There's room for some kind of energy projection device on the back." icon_state = "deathsquad" item_state = "swat_suit" - allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/kitchen/knife/combat) + allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/melee/knife/combat) armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 60, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT @@ -50,7 +50,7 @@ Contains: desc = "A tactical space suit first developed in a joint effort by the defunct IS-ERI and Nanotrasen in 20XX for military space operations. A tried and true workhorse, it is very difficult to move in but offers robust protection against all threats!" icon_state = "heavy" item_state = "swat_suit" - allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/kitchen/knife/combat) + allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/melee/knife/combat) armor = list("melee" = 40, "bullet" = 30, "laser" = 30,"energy" = 40, "bomb" = 50, "bio" = 90, "rad" = 20, "fire" = 100, "acid" = 100) strip_delay = 120 resistance_flags = FIRE_PROOF | ACID_PROOF @@ -363,7 +363,7 @@ Contains: armor = list("melee" = 30, "bullet" = 10, "laser" = 10, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 10, "fire" = 100, "acid" = 100) max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/spear, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife, /obj/item/kinetic_crusher, /obj/item/resonator, /obj/item/melee/transforming/cleaving_saw) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/melee/spear, /obj/item/organ/regenerative_core/legion, /obj/item/kinetic_crusher, /obj/item/resonator, /obj/item/melee/transforming/cleaving_saw) /obj/item/clothing/suit/space/hardsuit/berserker/RemoveHelmet() var/obj/item/clothing/head/helmet/space/hardsuit/berserker/helm = helmet @@ -489,7 +489,7 @@ Contains: desc = "A custom version of the MK.II SWAT suit, modified to look rugged and tough. Works as a space suit, if you can find a helmet." icon_state = "hunter" item_state = "swat_suit" - allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/kitchen/knife/combat) + allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/melee/knife/combat) armor = list("melee" = 60, "bullet" = 40, "laser" = 40, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) strip_delay = 130 resistance_flags = FIRE_PROOF | ACID_PROOF diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm index 43dc5a5dd8d0..895dea5156aa 100644 --- a/code/modules/clothing/spacesuits/plasmamen.dm +++ b/code/modules/clothing/spacesuits/plasmamen.dm @@ -58,7 +58,7 @@ actions_types = list(/datum/action/item_action/toggle_helmet_light) visor_vars_to_toggle = VISOR_FLASHPROTECT | VISOR_TINT flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - flags_cover = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF + flags_cover = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF | SEALS_EYES visor_flags_inv = HIDEEYES|HIDEFACE // WS Begin - plasmeme command helmets buff - used for RD bomb scanner diff --git a/code/modules/clothing/spacesuits/syndi.dm b/code/modules/clothing/spacesuits/syndi.dm index e5a98c7215e5..e2a405176c21 100644 --- a/code/modules/clothing/spacesuits/syndi.dm +++ b/code/modules/clothing/spacesuits/syndi.dm @@ -164,6 +164,7 @@ icon_state = "syndicate-black-engie" item_state = "syndicate-black" desc = "A space suit made of high-grade ballistic fabric with thermal and radiation shielding. More compact than a normal space suit while amost matching powered hardsuits for protection. Almost." + siemens_coefficient = 0 armor = list("melee" = 30, "bullet" = 10, "laser" = 10, "energy" = 40, "bomb" = 20, "bio" = 100, "rad" = 75, "fire" = 100, "acid" = 75) allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/tank/internals, /obj/item/t_scanner, /obj/item/construction/rcd, /obj/item/pipe_dispenser) resistance_flags = FIRE_PROOF diff --git a/code/modules/clothing/suits/_suits.dm b/code/modules/clothing/suits/_suits.dm index 0e7edb63f068..30d3c3c3c9ba 100644 --- a/code/modules/clothing/suits/_suits.dm +++ b/code/modules/clothing/suits/_suits.dm @@ -19,7 +19,7 @@ mob_overlay_icon = 'icons/mob/clothing/suit.dmi' /obj/item/clothing/suit/worn_overlays(isinhands = FALSE) - . = list() + . = ..() if(!isinhands) if(damaged_clothes) . += mutable_appearance('icons/effects/item_damage.dmi', "damageduniform") diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 9dfd23210d9c..b9eb2b6d7c53 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -2,7 +2,7 @@ icon = 'icons/obj/clothing/suits/armor.dmi' mob_overlay_icon = 'icons/mob/clothing/suits/armor.dmi' allowed = null - body_parts_covered = CHEST + body_parts_covered = CHEST|GROIN cold_protection = CHEST|GROIN min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT heat_protection = CHEST|GROIN @@ -11,7 +11,7 @@ equip_delay_other = 40 max_integrity = 250 resistance_flags = NONE - armor = list("melee" = 35, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list("melee" = 35, "bullet" = 35, "laser" = 35, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) greyscale_colors = list(list(18, 19), list(13, 18), list(20, 15)) greyscale_icon_state = "armor" @@ -81,7 +81,6 @@ desc = "A long, intimidating black coat. This one is reinforced and ideal for protecting its wearer from rain, sun, dust, and bullets." icon_state = "armor_duster" item_state = "duster_sec" - body_parts_covered = CHEST|GROIN|ARMS|LEGS cold_protection = CHEST|GROIN|LEGS|ARMS heat_protection = CHEST|GROIN|LEGS|ARMS @@ -90,8 +89,7 @@ desc = "A greatcoat enhanced with a special alloy for some extra protection and style for those with a commanding presence." icon_state = "armor_hos" item_state = "greatcoat" - body_parts_covered = CHEST|GROIN|ARMS|LEGS - armor = list("melee" = 30, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 90) + armor = list("melee" = 35, "bullet" = 35, "laser" = 35, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 90) cold_protection = CHEST|GROIN|LEGS|ARMS heat_protection = CHEST|GROIN|LEGS|ARMS strip_delay = 80 @@ -108,7 +106,6 @@ desc = "A black armored jacket with silver shoulder designations and '/Warden/' stitched into one of the chest pockets." icon_state = "armor_warden" item_state = "armor" - body_parts_covered = CHEST|GROIN|ARMS cold_protection = CHEST|GROIN|ARMS|HANDS heat_protection = CHEST|GROIN|ARMS|HANDS strip_delay = 70 @@ -135,7 +132,6 @@ desc = "Lightly armored leather overcoat meant as casual wear for high-ranking officers. Bears the crest of Nanotrasen Security." icon_state = "armor_leathercoat-sec" item_state = "hostrench" - body_parts_covered = CHEST|GROIN|ARMS|LEGS cold_protection = CHEST|GROIN|LEGS|ARMS heat_protection = CHEST|GROIN|LEGS|ARMS dog_fashion = null @@ -145,7 +141,6 @@ desc = "A fireproof armored chestpiece reinforced with ceramic plates and plasteel pauldrons to provide additional protection whilst still offering maximum mobility and flexibility. Issued only to NT's finest, although it does chafe your nipples." icon_state = "carapace_nt" item_state = "armor" - body_parts_covered = CHEST|GROIN armor = list("melee" = 50, "bullet" = 40, "laser" = 50, "energy" = 50, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 90) dog_fashion = null resistance_flags = FIRE_PROOF @@ -209,7 +204,6 @@ icon_state = "laserproof" item_state = "armor_reflec" blood_overlay_type = "armor" - body_parts_covered = CHEST|GROIN|ARMS cold_protection = CHEST|GROIN|ARMS heat_protection = CHEST|GROIN|ARMS armor = list("melee" = 10, "bullet" = 10, "laser" = 60, "energy" = 60, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) @@ -283,7 +277,7 @@ desc = "A classic suit of plate armour, highly effective at stopping melee attacks." icon_state = "riot_knight_green" item_state = "riot_knight_green" - allowed = list(/obj/item/nullrod, /obj/item/claymore, /obj/item/banner, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/oxygen, /obj/item/tank/internals/plasmaman) + allowed = list(/obj/item/melee/sword/claymore, /obj/item/banner, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/oxygen, /obj/item/tank/internals/plasmaman) /obj/item/clothing/suit/armor/riot/knight/yellow icon_state = "riot_knight_yellow" @@ -330,7 +324,7 @@ icon_state = "armor_inteq_honorable_battlecoat" item_state = "inteq_honorable_battlecoat" armor = list("melee" = 40, "bullet" = 50, "laser" = 50, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 90) - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION /obj/item/clothing/suit/armor/inteq/corpsman name = "inteq corpsman vest" @@ -360,28 +354,37 @@ /obj/item/melee/baton, ) -/obj/item/clothing/suit/armor/vest/bulletproof/solgov +/obj/item/clothing/suit/armor/vest/solgov name = "\improper Sonnensoldner gambison" desc = "A standard armor vest fielded for SolGov's Sonnensoldners." icon_state = "solgov_gambison" item_state = "solgov_gambison" supports_variations = DIGITIGRADE_VARIATION + body_parts_covered = CHEST|GROIN + cold_protection = CHEST|GROIN|ARMS + heat_protection = CHEST|GROIN|ARMS -/obj/item/clothing/suit/armor/vest/bulletproof/solgov/overseer +/obj/item/clothing/suit/armor/vest/solgov/overseer name = "\improper SolGov Overseer robe" desc = "An elaborately designed robe utilized by SolGov overseers." icon_state = "solgov_overseer_robe" item_state = "solgov_overseer_robe" supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON + armor = list("melee" = 35, "bullet" = 35, "laser" = 35, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + cold_protection = CHEST|GROIN|LEGS|ARMS + heat_protection = CHEST|GROIN|LEGS|ARMS -/obj/item/clothing/suit/armor/vest/bulletproof/solgov/captain +/obj/item/clothing/suit/armor/vest/solgov/captain name = "\improper SolGov Captain coat" desc = "An armored coat typically used by SolGov captains." icon_state = "solgov_coat" item_state = "solgov_coat" supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON + armor = list("melee" = 35, "bullet" = 35, "laser" = 35, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + cold_protection = CHEST|GROIN|LEGS|ARMS + heat_protection = CHEST|GROIN|LEGS|ARMS -/obj/item/clothing/suit/armor/vest/bulletproof/solgov/Initialize() +/obj/item/clothing/suit/armor/vest/solgov/Initialize() . = ..() allowed |= list(/obj/item/gun/ballistic/automatic/assault/swiss_cheese, /obj/item/tank) @@ -397,13 +400,6 @@ icon_state = "armor_syndie" item_state = "syndiearmor" -/obj/item/clothing/suit/armor/vest/scrap_armor - name = "scrap armor" - desc = "An 'armor' vest consisting of sheet metal held together with cable. Who thought this was a good idea?" - icon_state = "scraparmor" - item_state = "scraparmor" - armor = list("melee" = 5) - /obj/item/clothing/suit/armor/curator name = "treasure hunter's coat" desc = "Both fashionable and lightly armoured, this jacket is favoured by treasure hunters the galaxy over." @@ -421,7 +417,6 @@ desc = "A solgov official's trenchcoat. Has a lot of pockets." icon_state = "armor_solgov_trenchcoat" item_state = "trenchcoat_solgov" - body_parts_covered = CHEST|LEGS|ARMS armor = list("melee" = 25, "bullet" = 10, "laser" = 25, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) cold_protection = CHEST|LEGS|ARMS heat_protection = CHEST|LEGS|ARMS @@ -430,7 +425,6 @@ //JACKETS /obj/item/clothing/suit/armor/vest/security item_state = "armor" - body_parts_covered = CHEST|ARMS cold_protection = CHEST|GROIN|ARMS|HANDS heat_protection = CHEST|GROIN|ARMS|HANDS strip_delay = 70 @@ -441,32 +435,27 @@ name = "security officer's jacket" desc = "This jacket is for those special occasions when a security officer isn't required to wear their armor." icon_state = "armor_officerjacket" - body_parts_covered = CHEST|ARMS /obj/item/clothing/suit/armor/vest/security/warden name = "warden's jacket" desc = "Perfectly suited for the warden that wants to leave an impression of style on those who visit the brig." icon_state = "armor_warden" - body_parts_covered = CHEST|ARMS /obj/item/clothing/suit/armor/vest/security/hos name = "head of security's jacket" desc = "This piece of clothing was specifically designed for asserting superior authority." icon_state = "armor_hosjacket" - body_parts_covered = CHEST|ARMS /obj/item/clothing/suit/armor/vest/security/brig_phys name = "brig physician's jacket" desc = "A black jacket with dark blue and silver accents, for the brig physician to prove they're a real member of security in style." icon_state = "armor_brigphysjacket" - body_parts_covered = CHEST|ARMS /obj/item/clothing/suit/toggle/armor/vest/centcom_formal name = "\improper CentCom formal coat" desc = "A stylish coat given to CentCom Commanders. Perfect for sending ERTs to suicide missions with style!" icon_state = "centcom_formal" item_state = "centcom" - body_parts_covered = CHEST|GROIN|ARMS armor = list("melee" = 35, "bullet" = 40, "laser" = 40, "energy" = 50, "bomb" = 35, "bio" = 10, "rad" = 10, "fire" = 10, "acid" = 60) togglename = "buttons" diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index 1131c4e9166c..c62d0e92b8c0 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -8,7 +8,7 @@ armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 20, "fire" = 30, "acid" = 100) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEHAIR|HIDEFACIALHAIR|HIDEFACE resistance_flags = ACID_PROOF - flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF + flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF | SEALS_EYES /obj/item/clothing/suit/bio_suit name = "bio suit" @@ -98,4 +98,4 @@ /obj/item/clothing/suit/bio_suit/plaguedoctorsuit/Initialize() . = ..() - allowed += list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/cane) + allowed += list(/obj/item/storage/book/bible, /obj/item/cane) diff --git a/code/modules/clothing/suits/chaplainsuits.dm b/code/modules/clothing/suits/chaplainsuits.dm index 58802e01b8a1..30436045da2f 100644 --- a/code/modules/clothing/suits/chaplainsuits.dm +++ b/code/modules/clothing/suits/chaplainsuits.dm @@ -1,73 +1,7 @@ //Chaplain Suit Subtypes //If any new staple chaplain items get added, put them in these lists /obj/item/clothing/suit/chaplainsuit - allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) + allowed = list(/obj/item/storage/book/bible, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) /obj/item/clothing/suit/hooded/chaplainsuit - allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) - -//Suits -/obj/item/clothing/suit/chaplainsuit/holidaypriest - name = "holiday priest" - desc = "This is a nice holiday, my son." - icon_state = "holidaypriest" - item_state = "w_suit" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - flags_inv = HIDEJUMPSUIT - -/obj/item/clothing/suit/chaplainsuit/nun - name = "nun robe" - desc = "Maximum piety in this star system." - icon_state = "nun" - item_state = "nun" - body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS - flags_inv = HIDESHOES|HIDEJUMPSUIT - -/obj/item/clothing/suit/chaplainsuit/bishoprobe - name = "bishop's robes" - desc = "Glad to see the tithes you collected were well spent." - icon_state = "bishoprobe" - item_state = "bishoprobe" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - flags_inv = HIDEJUMPSUIT - -/obj/item/clothing/suit/hooded/chaplainsuit/monkhabit - name = "monk's habit" - desc = "A few steps above rended sackcloth." - icon_state = "monkfrock" - item_state = "monkfrock" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - hoodtype = /obj/item/clothing/head/hooded/monkhabit - -/obj/item/clothing/head/hooded/monkhabit - name = "monk's hood" - desc = "For when a man wants to cover up his tonsure." - icon_state = "monkhood" - item_state = "monkhood" - body_parts_covered = HEAD - flags_inv = HIDEHAIR|HIDEEARS - -/obj/item/clothing/suit/chaplainsuit/monkrobeeast - name = "eastern monk's robes" - desc = "Best combined with a shaved head." - icon_state = "monkrobeeast" - item_state = "monkrobeeast" - body_parts_covered = GROIN|LEGS - flags_inv = HIDEJUMPSUIT - -/obj/item/clothing/suit/chaplainsuit/whiterobe - name = "white robe" - desc = "Good for clerics and sleepy crewmembers." - icon_state = "whiterobe" - item_state = "whiterobe" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - flags_inv = HIDEJUMPSUIT - -/obj/item/clothing/suit/chaplainsuit/clownpriest - name = "Robes of the Honkmother" - desc = "Meant for a clown of the cloth." - icon_state = "clownpriest" - item_state = "clownpriest" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - flags_inv = HIDEJUMPSUIT - allowed = list(/obj/item/megaphone/clown, /obj/item/soap, /obj/item/reagent_containers/food/snacks/pie/cream, /obj/item/bikehorn, /obj/item/bikehorn/golden, /obj/item/bikehorn/airhorn, /obj/item/instrument/bikehorn, /obj/item/reagent_containers/food/drinks/soda_cans/canned_laughter, /obj/item/toy/crayon, /obj/item/toy/crayon/spraycan, /obj/item/toy/crayon/spraycan/lubecan, /obj/item/grown/bananapeel, /obj/item/reagent_containers/food/snacks/grown/banana) + allowed = list(/obj/item/storage/book/bible, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) diff --git a/code/modules/clothing/suits/cloaks.dm b/code/modules/clothing/suits/cloaks.dm index 4e3f6d5e3a9c..982b3804f586 100644 --- a/code/modules/clothing/suits/cloaks.dm +++ b/code/modules/clothing/suits/cloaks.dm @@ -76,7 +76,7 @@ name = "goliath cloak" icon_state = "goliath_cloak" desc = "A staunch, practical cape made out of numerous monster materials, it is coveted amongst exiles & hermits." - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/spear, /obj/item/organ/regenerative_core/legion, /obj/item/kitchen/knife/combat/bone, /obj/item/kitchen/knife/combat/survival) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/melee/spear, /obj/item/organ/regenerative_core/legion, /obj/item/melee/knife/bone, /obj/item/melee/knife/survival) armor = list("melee" = 35, "bullet" = 10, "laser" = 25, "energy" = 35, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60) //a fair alternative to bone armor, requiring alternative materials and gaining a suit slot hoodtype = /obj/item/clothing/head/hooded/cloakhood/goliath body_parts_covered = CHEST|GROIN|ARMS @@ -94,7 +94,7 @@ name = "drake armour" icon_state = "dragon" desc = "A suit of armour fashioned from the remains of an ash drake." - 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, /obj/item/spear) + 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, /obj/item/melee/spear) armor = list("melee" = 50, "bullet" = 10, "laser" = 40, "energy" = 50, "bomb" = 50, "bio" = 60, "rad" = 50, "fire" = 100, "acid" = 100) hoodtype = /obj/item/clothing/head/hooded/cloakhood/drake heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS @@ -180,19 +180,3 @@ resistance_flags = NONE flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE flags_cover = HEADCOVERSEYES - -/obj/item/clothing/suit/hooded/cloak/goliath/polar - name = "polar cloak" - icon_state = "polarcloak" - hoodtype = /obj/item/clothing/head/hooded/cloakhood/goliath/polar - desc = "A tribal hood made from a polar bears pelt. Keeps it's wearer warm and looks badass while doing it." - min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - cold_protection = CHEST|GROIN|LEGS|FEET|ARMS - -/obj/item/clothing/head/hooded/cloakhood/goliath/polar - name = "polar cloak" - icon_state = "hoodie_gray" - mob_overlay_state = "polhood" - desc = "Wear bear on head show little man you big man, kill bear for cloak." - min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - cold_protection = HEAD diff --git a/code/modules/clothing/suits/hoodies.dm b/code/modules/clothing/suits/hoodies.dm index b69061cffbd1..e1507af5c229 100644 --- a/code/modules/clothing/suits/hoodies.dm +++ b/code/modules/clothing/suits/hoodies.dm @@ -1,6 +1,7 @@ /obj/item/clothing/suit/hooded/hoodie name = "hoodie" desc = "HOW" + icon_state = null hoodtype = /obj/item/clothing/head/hooded/hood body_parts_covered = CHEST|ARMS pocket_storage_component_path = /datum/component/storage/concrete/pockets/exo/large @@ -19,6 +20,9 @@ /obj/item/clothing/head/hooded/hood name = "hood" desc = "HOW" + icon_state = null + icon = 'icons/obj/clothing/head/winterhood.dmi' + mob_overlay_icon = 'icons/mob/clothing/head/winterhood.dmi' body_parts_covered = HEAD flags_inv = HIDEHAIR|HIDEEARS armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) //it's just a hoodie. diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 56018c288b6a..2b06e695851c 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -114,6 +114,8 @@ item_state = "highvis" blood_overlay_type = "coat" body_parts_covered = CHEST|ARMS + cold_protection = CHEST|ARMS + min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT togglename = "zipper" allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/t_scanner, /obj/item/radio) resistance_flags = NONE @@ -194,7 +196,7 @@ //Mime /obj/item/clothing/suit/toggle/suspenders name = "suspenders" - desc = "They suspend the illusion of the mime's play." + desc = "The symbol of hard labor and dirty jobs." icon = 'icons/obj/clothing/belts.dmi' icon_state = "suspenders" blood_overlay_type = "armor" //it's the less thing that I can put here @@ -268,24 +270,6 @@ icon_state = "coat_terragov" item_state = "coat_terragov" -/obj/item/clothing/suit/hooded/enginseer - name = "enginseer regalia" - desc = "You hold the secrets of the Machine." - icon_state = "enginseer" - item_state = "enginseer" - hoodtype = /obj/item/clothing/head/hooded/enginseer - body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS - flags_inv = HIDESHOES|HIDEJUMPSUIT|HIDEGLOVES - allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/gun, /obj/item/melee, /obj/item/nullrod, /obj/item/radio, /obj/item/storage/book) - -/obj/item/clothing/head/hooded/enginseer - name = "enginseer's hood" - desc = "You are honored that they require your skills." - icon_state = "enginseerhood" - item_state = "enginseerhood" - body_parts_covered = HEAD - flags_inv = HIDEHAIR|HIDEEARS|HIDEFACE|HIDEFACIALHAIR - /obj/item/clothing/suit/armor/witchhunter name = "witchunter garb" desc = "This worn outfit saw much use back in the day." diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index f8e8c3f69909..c8e54edb2e01 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -31,20 +31,6 @@ /* * Costume */ -/obj/item/clothing/suit/hooded/flashsuit - name = "flashy costume" - desc = "What did you expect?" - icon_state = "flashsuit" - item_state = "armor" - body_parts_covered = CHEST|GROIN - hoodtype = /obj/item/clothing/head/hooded/flashsuit - -/obj/item/clothing/head/hooded/flashsuit - name = "flash button" - desc = "You will learn to fear the flash." - icon_state = "flashsuit" - body_parts_covered = HEAD - flags_inv = HIDEHAIR|HIDEEARS|HIDEFACIALHAIR|HIDEFACE|HIDEMASK /obj/item/clothing/suit/pirate name = "pirate coat" @@ -59,27 +45,6 @@ icon_state = "hgpirate" item_state = "hgpirate" - -/obj/item/clothing/suit/cyborg_suit - name = "cyborg suit" - desc = "Suit for a cyborg costume." - icon_state = "death" - item_state = "death" - mob_overlay_state = "cardborg" - flags_1 = CONDUCT_1 - fire_resist = T0C+5200 - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - - -/obj/item/clothing/suit/justice - name = "justice suit" - desc = "this pretty much looks ridiculous" //Needs no fixing - icon_state = "justice" - item_state = "justice" - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - armor = list("melee" = 35, "bullet" = 30, "laser" = 30, "energy" = 40, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) - - /obj/item/clothing/suit/judgerobe name = "judge's robe" desc = "This robe commands authority." @@ -116,42 +81,6 @@ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT resistance_flags = NONE -/obj/item/clothing/suit/hastur - name = "\improper Hastur's robe" - desc = "Robes not meant to be worn by man." - icon_state = "hastur" - item_state = "hastur" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - - -/obj/item/clothing/suit/imperium_monk - name = "\improper Imperium monk suit" - desc = "Have YOU killed a xeno today?" - icon_state = "imperium_monk" - item_state = "imperium_monk" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - flags_inv = HIDESHOES|HIDEJUMPSUIT - allowed = list(/obj/item/storage/book/bible, /obj/item/nullrod, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/fancy/candle_box, /obj/item/candle, /obj/item/tank/internals/emergency_oxygen) - - -/obj/item/clothing/suit/chickensuit - name = "chicken suit" - desc = "A suit made long ago by the ancient empire KFC." - icon_state = "chickensuit" - item_state = "chickensuit" - body_parts_covered = CHEST|ARMS|GROIN|LEGS|FEET - flags_inv = HIDESHOES|HIDEJUMPSUIT - - -/obj/item/clothing/suit/monkeysuit - name = "monkey suit" - desc = "A suit that looks like a primate." - icon_state = "monkeysuit" - item_state = "monkeysuit" - body_parts_covered = CHEST|ARMS|GROIN|LEGS|FEET|HANDS - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - /obj/item/clothing/suit/toggle/owlwings name = "owl cloak" desc = "A soft brown cloak made of synthetic feathers. Soft to the touch, stylish, and a 2 meter wing span that will drive the ladies mad." @@ -208,42 +137,6 @@ body_parts_covered = CHEST|GROIN flags_inv = HIDEJUMPSUIT -/obj/item/clothing/suit/poncho - name = "poncho" - desc = "Your classic, non-racist poncho." - icon_state = "classicponcho" - item_state = "classicponcho" - -/obj/item/clothing/suit/poncho/green - name = "green poncho" - desc = "Your classic, non-racist poncho. This one is green." - icon_state = "greenponcho" - item_state = "greenponcho" - -/obj/item/clothing/suit/poncho/red - name = "red poncho" - desc = "Your classic, non-racist poncho. This one is red." - icon_state = "redponcho" - item_state = "redponcho" - -/obj/item/clothing/suit/poncho/ponchoshame - name = "poncho of shame" - desc = "Forced to live on your shameful acting as a fake Mexican, you and your poncho have grown inseparable. Literally." - icon_state = "ponchoshame" - item_state = "ponchoshame" - -/obj/item/clothing/suit/poncho/ponchoshame/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, SHAMEBRERO_TRAIT) - -/obj/item/clothing/suit/whitedress - name = "white dress" - desc = "A fancy white dress." - icon_state = "white_dress" - item_state = "w_suit" - body_parts_covered = CHEST|GROIN|LEGS|FEET - flags_inv = HIDEJUMPSUIT|HIDESHOES - /obj/item/clothing/suit/hooded/carp_costume name = "carp costume" desc = "A costume made from 'synthetic' carp scales, it smells." @@ -274,44 +167,6 @@ if (user.head == src) user.faction -= "carp" -/obj/item/clothing/suit/hooded/ian_costume //It's Ian, rub his bell- oh god what happened to his inside parts? - name = "corgi costume" - desc = "A costume that looks like someone made a human-like corgi, it won't guarantee belly rubs." - icon_state = "ian" - item_state = "labcoat" - body_parts_covered = CHEST|GROIN|ARMS - //cold_protection = CHEST|GROIN|ARMS - //min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - allowed = list() - hoodtype = /obj/item/clothing/head/hooded/ian_hood - dog_fashion = /datum/dog_fashion/back - -/obj/item/clothing/head/hooded/ian_hood - name = "corgi hood" - desc = "A hood that looks just like a corgi's head, it won't guarantee dog biscuits." - icon_state = "ian" - body_parts_covered = HEAD - //cold_protection = HEAD - //min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - flags_inv = HIDEHAIR|HIDEEARS - -/obj/item/clothing/suit/hooded/bee_costume // It's Hip! - name = "bee costume" - desc = "Bee the true Queen!" - icon_state = "bee" - item_state = "labcoat" - body_parts_covered = CHEST|GROIN|ARMS - clothing_flags = THICKMATERIAL - hoodtype = /obj/item/clothing/head/hooded/bee_hood - -/obj/item/clothing/head/hooded/bee_hood - name = "bee hood" - desc = "A hood attached to a bee costume." - icon_state = "bee" - body_parts_covered = HEAD - clothing_flags = THICKMATERIAL - flags_inv = HIDEHAIR|HIDEEARS - /obj/item/clothing/suit/hooded/bloated_human //OH MY GOD WHAT HAVE YOU DONE!?!?!? name = "bloated human suit" desc = "A horribly bloated suit made from human skins." @@ -333,14 +188,6 @@ flags_cover = HEADCOVERSEYES flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR -/obj/item/clothing/suit/shrine_maiden - name = "shrine maiden's outfit" - desc = "Makes you want to exterminate some troublesome youkai." - icon_state = "shrine_maiden" - item_state = "shrine_maiden" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - flags_inv = HIDEJUMPSUIT - /* * Misc */ @@ -378,18 +225,6 @@ icon_state = "nerdshirt" item_state = "nerdshirt" -/obj/item/clothing/suit/vapeshirt //wearing this is asking to get beat. - name = "Vape Naysh shirt" - desc = "A cheap white T-shirt with a big tacky \"VN\" on the front, Why would you wear this unironically?" - icon_state = "vapeshirt" - item_state = "vapeshirt" - -/obj/item/clothing/suit/striped_sweater - name = "striped sweater" - desc = "Reminds you of someone, but you just can't put your finger on it..." - icon_state = "waldo_shirt" - item_state = "waldo_shirt" - /obj/item/clothing/suit/jacket name = "bomber jacket" desc = "Aviators not included." @@ -409,13 +244,6 @@ max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/revolver, /obj/item/gun/ballistic/revolver/detective, /obj/item/radio) -/obj/item/clothing/suit/jacket/leather/overcoat - name = "leather overcoat" - desc = "That's a damn fine coat." - icon_state = "leathercoat" - body_parts_covered = CHEST|GROIN|ARMS|LEGS - cold_protection = CHEST|GROIN|ARMS|LEGS - /obj/item/clothing/suit/jacket/leather/duster name = "leather duster" desc = "A long, utilitarian leather coat. Ideal for protecting its wearer from rain, sun, and dust." @@ -478,40 +306,12 @@ icon_state = "letterman_n" item_state = "letterman_n" -/obj/item/clothing/suit/dracula - name = "dracula coat" - desc = "Looks like this belongs in a very old movie set." - icon_state = "draculacoat" - item_state = "draculacoat" - -/obj/item/clothing/suit/drfreeze_coat - name = "doctor freeze's labcoat" - desc = "A labcoat imbued with the power of features and freezes." - icon_state = "drfreeze_coat" - item_state = "drfreeze_coat" - /obj/item/clothing/suit/gothcoat name = "gothic coat" desc = "Perfect for those who want to stalk around a corner of a bar." icon_state = "gothcoat" item_state = "gothcoat" -/obj/item/clothing/suit/xenos - name = "xenos suit" - desc = "A suit made out of chitinous alien hide." - icon_state = "xenos" - item_state = "xenos_helm" - body_parts_covered = CHEST|GROIN|LEGS|ARMS|HANDS - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - allowed = list(/mob/living/simple_animal/hostile/facehugger/toy) - -/obj/item/clothing/suit/nemes - name = "pharoah tunic" - desc = "Lavish space tomb not included." - icon_state = "pharoah" - item_state = "pharoah" - body_parts_covered = CHEST|GROIN - /obj/item/clothing/suit/caution name = "wet floor sign" desc = "No running." @@ -528,34 +328,6 @@ attack_verb = list("warned", "cautioned", "smashed") armor = list("melee" = 5, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) -/obj/item/clothing/suit/changshan_red - name = "red changshan" - desc = "A gorgeously embroidered silk shirt." - icon_state = "changshan_red" - item_state = "changshan_red" - body_parts_covered = CHEST|GROIN|ARMS|LEGS - -/obj/item/clothing/suit/changshan_blue - name = "blue changshan" - desc = "A gorgeously embroidered silk shirt." - icon_state = "changshan_blue" - item_state = "changshan_blue" - body_parts_covered = CHEST|GROIN|ARMS|LEGS - -/obj/item/clothing/suit/cheongsam_red - name = "red cheongsam" - desc = "A gorgeously embroidered silk dress." - icon_state = "cheongsam_red" - item_state = "cheongsam_red" - body_parts_covered = CHEST|GROIN|ARMS|LEGS - -/obj/item/clothing/suit/cheongsam_blue - name = "blue cheongsam" - desc = "A gorgeously embroidered silk dress." - icon_state = "cheongsam_blue" - item_state = "cheongsam_blue" - body_parts_covered = CHEST|GROIN|ARMS|LEGS - /obj/item/clothing/head/hooded/ablative name = "ablative hood" desc = "Hood hopefully belonging to an ablative trenchcoat. Includes a visor for cool-o-vision." @@ -606,20 +378,6 @@ if (prob(hit_reflect_chance)) return TRUE -/obj/item/clothing/suit/spookyghost - name = "spooky ghost" - desc = "This is obviously just a bedsheet, but maybe try it on?" - icon_state = "bedsheet" - user_vars_to_edit = list("name" = "Spooky Ghost", "real_name" = "Spooky Ghost" , "incorporeal_move" = INCORPOREAL_MOVE_BASIC, "appearance_flags" = KEEP_TOGETHER|TILE_BOUND, "alpha" = 150) - alternate_worn_layer = ABOVE_BODY_FRONT_LAYER //so the bedsheet goes over everything but fire - -/obj/item/clothing/suit/bronze - name = "bronze suit" - desc = "A big and clanky suit made of bronze that offers no protection and looks very unfashionable. Nice." - icon = 'icons/obj/clothing/clockwork_garb.dmi' - icon_state = "clockwork_cuirass_old" - armor = list("melee" = 5, "bullet" = 0, "laser" = -5, "energy" = -15, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 20) - /obj/item/clothing/suit/ghost_sheet name = "ghost sheet" desc = "The hands float by themselves, so it's extra spooky." @@ -644,40 +402,8 @@ icon = 'icons/obj/clothing/belts.dmi' icon_state = "suspenders_gray" -/obj/item/clothing/suit/hooded/mysticrobe - name = "mystic's robe" - desc = "Wearing this makes you feel more attuned with the nature of the universe... as well as a bit more irresponsible. " - icon_state = "mysticrobe" - item_state = "mysticrobe" - body_parts_covered = CHEST|GROIN|LEGS|ARMS - allowed = list(/obj/item/spellbook, /obj/item/storage/book/bible) - flags_inv = HIDEJUMPSUIT - hoodtype = /obj/item/clothing/head/hooded/mysticrobe - -/obj/item/clothing/head/hooded/mysticrobe - name = "mystic's hood" - desc = "The balance of reality tips towards order." - icon_state = "mystichood" - item_state = "mystichood" - body_parts_covered = HEAD - flags_inv = HIDEHAIR|HIDEEARS|HIDEFACIALHAIR|HIDEFACE|HIDEMASK - /obj/item/clothing/suit/hawaiian name = "floral shirt" desc = "From grills to guns, this shirt's seen it all." icon_state = "hawaiian_blue" item_state = "hawaiian_blue" - -/obj/item/clothing/suit/yakuza - name = "tojo clan jacket" - desc = "The jacket of a mad dog." - icon_state = "MajimaJacket" - item_state = "MajimaJacket" - body_parts_covered = ARMS - -/obj/item/clothing/suit/dutch - name = "dutch's jacket" - desc = "For those long nights on the beach in Tahiti." - icon_state = "DutchJacket" - item_state = "DutchJacket" - body_parts_covered = ARMS diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index ac91351c2324..88661d6b835c 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -67,7 +67,7 @@ max_heat_protection_temperature = HELMET_MAX_TEMP_PROTECT strip_delay = 70 equip_delay_other = 70 - flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF + flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF | SEALS_EYES resistance_flags = NONE @@ -126,7 +126,7 @@ armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 60, "rad" = 100, "fire" = 30, "acid" = 30) strip_delay = 60 equip_delay_other = 60 - flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF + flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH | PEPPERPROOF | SEALS_EYES resistance_flags = NONE flags_1 = RAD_PROTECT_CONTENTS_1 supports_variations = VOX_VARIATION diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index 451d428760f3..e0d7f1c7e124 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -11,47 +11,6 @@ resistance_flags = FIRE_PROOF | ACID_PROOF dog_fashion = /datum/dog_fashion/head/blue_wizard -/obj/item/clothing/head/wizard/red - name = "red wizard hat" - desc = "Strange-looking red hat-wear that most certainly belongs to a real magic user." - icon_state = "redwizard" - dog_fashion = /datum/dog_fashion/head/red_wizard - -/obj/item/clothing/head/wizard/yellow - name = "yellow wizard hat" - desc = "Strange-looking yellow hat-wear that most certainly belongs to a powerful magic user." - icon_state = "yellowwizard" - dog_fashion = null - -/obj/item/clothing/head/wizard/black - name = "black wizard hat" - desc = "Strange-looking black hat-wear that most certainly belongs to a real skeleton. Spooky." - icon_state = "blackwizard" - dog_fashion = null - -/obj/item/clothing/head/wizard/fake - name = "wizard hat" - desc = "It has WIZZARD written across it in sequins. Comes with a cool beard." - icon_state = "wizard-fake" - gas_transfer_coefficient = 1 - permeability_coefficient = 1 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - resistance_flags = FLAMMABLE - dog_fashion = /datum/dog_fashion/head/blue_wizard - -/obj/item/clothing/head/wizard/marisa - name = "witch hat" - desc = "Strange-looking hat-wear. Makes you want to cast fireballs." - icon_state = "marisa" - dog_fashion = null - -/obj/item/clothing/head/wizard/magus - name = "\improper Magus helm" - desc = "A mysterious helmet that hums with an unearthly power." - icon_state = "magus" - item_state = "magus" - dog_fashion = null - /obj/item/clothing/head/wizard/santa name = "Santa's hat" desc = "Ho ho ho. Merrry X-mas!" @@ -76,78 +35,12 @@ equip_delay_other = 50 resistance_flags = FIRE_PROOF | ACID_PROOF -/obj/item/clothing/suit/wizrobe/red - name = "red wizard robe" - desc = "A magnificent red gem-lined robe that seems to radiate power." - icon_state = "redwizard" - item_state = "redwizrobe" - -/obj/item/clothing/suit/wizrobe/yellow - name = "yellow wizard robe" - desc = "A magnificent yellow gem-lined robe that seems to radiate power." - icon_state = "yellowwizard" - item_state = "yellowwizrobe" - -/obj/item/clothing/suit/wizrobe/black - name = "black wizard robe" - desc = "An unnerving black gem-lined robe that reeks of death and decay." - icon_state = "blackwizard" - item_state = "blackwizrobe" - -/obj/item/clothing/suit/wizrobe/marisa - name = "witch robe" - desc = "Magic is all about the spell power, ZE!" - icon_state = "marisa" - item_state = "marisarobe" - -/obj/item/clothing/suit/wizrobe/magusblue - name = "\improper Magus robe" - desc = "A set of armored robes that seem to radiate a dark power." - icon_state = "magusblue" - item_state = "magusblue" - -/obj/item/clothing/suit/wizrobe/magusred - name = "\improper Magus robe" - desc = "A set of armored robes that seem to radiate a dark power." - icon_state = "magusred" - item_state = "magusred" - - /obj/item/clothing/suit/wizrobe/santa name = "Santa's suit" desc = "Festive!" icon_state = "santa" item_state = "santa" -/obj/item/clothing/suit/wizrobe/fake - name = "wizard robe" - desc = "A rather dull blue robe meant to mimic real wizard robes." - icon_state = "wizard-fake" - item_state = "wizrobe" - gas_transfer_coefficient = 1 - permeability_coefficient = 1 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - resistance_flags = FLAMMABLE - -/obj/item/clothing/head/wizard/marisa/fake - name = "witch hat" - desc = "Strange-looking hat-wear, makes you want to cast fireballs." - icon_state = "marisa" - gas_transfer_coefficient = 1 - permeability_coefficient = 1 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - resistance_flags = FLAMMABLE - -/obj/item/clothing/suit/wizrobe/marisa/fake - name = "witch robe" - desc = "Magic is all about the spell power, ZE!" - icon_state = "marisa" - item_state = "marisarobe" - gas_transfer_coefficient = 1 - permeability_coefficient = 1 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) - resistance_flags = FLAMMABLE - /obj/item/clothing/suit/space/hardsuit/shielded/wizard name = "battlemage armour" desc = "Not all wizards are afraid of getting up close and personal." diff --git a/code/modules/clothing/towels.dm b/code/modules/clothing/towels.dm index 22c1b29976fc..f35c608a042a 100644 --- a/code/modules/clothing/towels.dm +++ b/code/modules/clothing/towels.dm @@ -32,7 +32,7 @@ item_flags = NOBLUDGEON resistance_flags = FLAMMABLE flags_inv = HIDEHAIR // Only relevant when in head shape, but useful to keep around regardless. - supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON + supports_variations = DIGITIGRADE_VARIATION_NO_NEW_ICON | VOX_VARIATION /// The shape we're currently in. var/shape = TOWEL_FOLDED diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index a28d6d323a83..bc8cb512906b 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -27,7 +27,7 @@ supports_variations = VOX_VARIATION /obj/item/clothing/under/worn_overlays(isinhands = FALSE) - . = list() + . = ..() if(!isinhands) if(damaged_clothes) . += mutable_appearance('icons/effects/item_damage.dmi', "damageduniform") diff --git a/code/modules/clothing/under/accessories.dm b/code/modules/clothing/under/accessories.dm index f7710d52a12d..0d05c4e0cf7f 100644 --- a/code/modules/clothing/under/accessories.dm +++ b/code/modules/clothing/under/accessories.dm @@ -137,6 +137,7 @@ icon_state = "bronze" custom_materials = list(/datum/material/iron=1000) resistance_flags = FIRE_PROOF + attachment_slot = null var/medaltype = "medal" //Sprite used for medalbox var/commended = FALSE @@ -393,7 +394,6 @@ desc = "A legion skull fitted to a codpiece, intended to protect the important things in life." icon_state = "skull" above_suit = TRUE - armor = list("melee" = 10, "bullet" = 10, "laser" = 5, "energy" = 5, "bomb" = 20, "bio" = 20, "rad" = 5, "fire" = 40, "acid" = 40) attachment_slot = GROIN /obj/item/clothing/accessory/skilt @@ -402,7 +402,6 @@ icon_state = "skilt" above_suit = TRUE minimize_when_attached = FALSE - armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 20, "bio" = 20, "rad" = 5, "fire" = 0, "acid" = 25) attachment_slot = GROIN /obj/item/clothing/accessory/holster @@ -411,6 +410,7 @@ icon_state = "holster" item_state = "holster" pocket_storage_component_path = /datum/component/storage/concrete/pockets/holster + attachment_slot = null /obj/item/clothing/accessory/holster/detective name = "detective's shoulder holster" @@ -479,7 +479,7 @@ icon_state = "rilena_pin" above_suit = FALSE minimize_when_attached = TRUE - attachment_slot = CHEST + attachment_slot = null /obj/item/clothing/accessory/rilena_pin/on_uniform_equip(obj/item/clothing/under/U, user) var/mob/living/L = user diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index bbd0d962601f..a6f3bfa7cf9d 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -15,7 +15,7 @@ /obj/item/clothing/under/color/random/Initialize() ..() - var/obj/item/clothing/under/color/C = pick(subtypesof(/obj/item/clothing/under/color) - typesof(/obj/item/clothing/under/color/jumpskirt) - /obj/item/clothing/under/color/random - /obj/item/clothing/under/color/grey/ancient - /obj/item/clothing/under/color/black/ghost) + var/obj/item/clothing/under/color/C = pick(subtypesof(/obj/item/clothing/under/color) - typesof(/obj/item/clothing/under/color/jumpskirt) - /obj/item/clothing/under/color/random - /obj/item/clothing/under/color/grey/ancient) if(ishuman(loc)) var/mob/living/carbon/human/H = loc H.equip_to_slot_or_del(new C(H), ITEM_SLOT_ICLOTHING) //or else you end up with naked assistants running around everywhere... @@ -48,13 +48,6 @@ icon_state = "black_skirt" item_state = "bl_suit" -/obj/item/clothing/under/color/black/ghost - item_flags = DROPDEL - -/obj/item/clothing/under/color/black/ghost/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, CULT_TRAIT) - /obj/item/clothing/under/color/grey name = "grey jumpsuit" desc = "A tasteful grey jumpsuit that reminds you of the good old days." diff --git a/code/modules/clothing/under/costume.dm b/code/modules/clothing/under/costume.dm index bfc7524149cb..ac7eeea5dc23 100644 --- a/code/modules/clothing/under/costume.dm +++ b/code/modules/clothing/under/costume.dm @@ -167,7 +167,7 @@ can_adjust = FALSE resistance_flags = NONE -/obj/item/clothing/under/costume/mech_suit +/obj/item/clothing/under/costume/mech_suit //these still have "mech" in the name because they're costumes, not serious utility wear name = "red mech pilot's suit" desc = "A red mech pilot's suit. Might make your butt look big." icon_state = "red_mech_suit" diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm index 2283e6a45b07..82b4b663a66b 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/emoji/emoji_parse.dm b/code/modules/emoji/emoji_parse.dm index 185341d294c2..16e1eeef6c95 100644 --- a/code/modules/emoji/emoji_parse.dm +++ b/code/modules/emoji/emoji_parse.dm @@ -2,7 +2,7 @@ . = text if(!CONFIG_GET(flag/emojis)) return - var/static/list/emojis = icon_states(icon('icons/emoji.dmi')) + var/static/list/emojis = icon_states(icon(EMOJI_SET)) var/parsed = "" var/pos = 1 var/search = 0 @@ -34,7 +34,7 @@ . = text if(!CONFIG_GET(flag/emojis)) return - var/static/list/emojis = icon_states(icon('icons/emoji.dmi')) + var/static/list/emojis = icon_states(icon(EMOJI_SET)) var/final = "" //only tags are added to this var/pos = 1 var/search = 0 diff --git a/code/modules/events/blob.dm b/code/modules/events/blob.dm deleted file mode 100644 index 18131e6ed9ce..000000000000 --- a/code/modules/events/blob.dm +++ /dev/null @@ -1,30 +0,0 @@ -/datum/round_event_control/blob - name = "Blob" - typepath = /datum/round_event/ghost_role/blob - weight = 10 - max_occurrences = 1 - - min_players = 20 - - gamemode_blacklist = list("blob") //Just in case a blob survives that long - -/datum/round_event/ghost_role/blob - announceChance = 0 - role_name = "blob overmind" - fakeable = TRUE - -/datum/round_event/ghost_role/blob/announce(fake) - priority_announce("Confirmed outbreak of level 5 biohazard in the vicinity of [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/ai/outbreak5.ogg') - -/datum/round_event/ghost_role/blob/spawn_role() - if(!GLOB.blobstart.len) - return MAP_ERROR - var/list/candidates = get_candidates(ROLE_BLOB, null, ROLE_BLOB) - if(!candidates.len) - return NOT_ENOUGH_PLAYERS - var/mob/dead/observer/new_blob = pick(candidates) - var/mob/camera/blob/BC = new_blob.become_overmind() - spawned_mobs += BC - message_admins("[ADMIN_LOOKUPFLW(BC)] has been made into a blob overmind by an event.") - log_game("[key_name(BC)] was spawned as a blob overmind by an event.") - return SUCCESSFUL_SPAWN diff --git a/code/modules/events/devil.dm b/code/modules/events/devil.dm deleted file mode 100644 index 656888f068bc..000000000000 --- a/code/modules/events/devil.dm +++ /dev/null @@ -1,53 +0,0 @@ -/datum/round_event_control/devil - name = "Create Devil" - typepath = /datum/round_event/ghost_role/devil - max_occurrences = 0 - -/datum/round_event/ghost_role/devil - var/success_spawn = 0 - role_name = "devil" - fakeable = FALSE - -/datum/round_event/ghost_role/devil/kill() - if(!success_spawn && control) - control.occurrences-- - return ..() - -/datum/round_event/ghost_role/devil/spawn_role() - //selecting a candidate player - var/list/candidates = get_candidates(ROLE_DEVIL, null, ROLE_DEVIL) - if(!candidates.len) - return NOT_ENOUGH_PLAYERS - - var/mob/dead/selected_candidate = pick_n_take(candidates) - var/key = selected_candidate.key - - var/datum/mind/Mind = create_devil_mind(key) - Mind.active = 1 - - var/mob/living/carbon/human/devil = create_event_devil() - Mind.transfer_to(devil) - add_devil(devil, ascendable = FALSE) - - spawned_mobs += devil - message_admins("[ADMIN_LOOKUPFLW(devil)] has been made into a devil by an event.") - log_game("[key_name(devil)] was spawned as a devil by an event.") - var/datum/job/jobdatum = new /datum/job/assistant() - devil.job = jobdatum.name - jobdatum.equip(devil) - return SUCCESSFUL_SPAWN - - -/proc/create_event_devil(spawn_loc) - var/mob/living/carbon/human/new_devil = new(spawn_loc) - var/datum/preferences/A = new() //Randomize appearance for the devil. - A.copy_to(new_devil) - new_devil.dna.update_dna_identity() - return new_devil - -/proc/create_devil_mind(key) - var/datum/mind/Mind = new /datum/mind(key) - Mind.assigned_role = ROLE_DEVIL - Mind.special_role = ROLE_DEVIL - SSticker.mode.devils |= Mind - return Mind diff --git a/code/modules/events/holiday/xmas.dm b/code/modules/events/holiday/xmas.dm index f38d21b868c4..43e60c3137c3 100644 --- a/code/modules/events/holiday/xmas.dm +++ b/code/modules/events/holiday/xmas.dm @@ -74,13 +74,3 @@ /datum/round_event/santa/announce(fake) priority_announce("Santa is coming to town!", "Unknown Transmission") - -/datum/round_event/santa/start() - var/list/candidates = pollGhostCandidates("Santa is coming to town! Do you want to be Santa?", poll_time=150) - if(LAZYLEN(candidates)) - var/mob/dead/observer/C = pick(candidates) - santa = new /mob/living/carbon/human(pick(GLOB.blobstart)) - santa.key = C.key - - var/datum/antagonist/santa/A = new - santa.mind.add_antag_datum(A) diff --git a/code/modules/events/immovable_rod.dm b/code/modules/events/immovable_rod.dm index adde1124935f..4ba2d878ad46 100644 --- a/code/modules/events/immovable_rod.dm +++ b/code/modules/events/immovable_rod.dm @@ -62,7 +62,7 @@ In my current plan for it, 'solid' will be defined as anything with density == 1 z_original = z destination = end special_target = aimed_at - GLOB.poi_list += src + SSpoints_of_interest.make_point_of_interest(src) var/special_target_valid = FALSE if(special_target) @@ -81,7 +81,7 @@ In my current plan for it, 'solid' will be defined as anything with density == 1 ghost.ManualFollow(src) /obj/effect/immovablerod/Destroy() - GLOB.poi_list -= src + SSpoints_of_interest.remove_point_of_interest(src) . = ..() /obj/effect/immovablerod/Moved() diff --git a/code/modules/events/major_dust.dm b/code/modules/events/major_dust.dm deleted file mode 100644 index 7fb00124a94d..000000000000 --- a/code/modules/events/major_dust.dm +++ /dev/null @@ -1,19 +0,0 @@ -/datum/round_event_control/meteor_wave/major_dust - name = "Major Space Dust" - typepath = /datum/round_event/meteor_wave/major_dust - weight = 8 - -/datum/round_event/meteor_wave/major_dust - wave_name = "space dust" - -/datum/round_event/meteor_wave/major_dust/announce(fake) - var/reason = pick( - "The station is passing through a debris cloud, expect minor damage \ - to external fittings and fixtures.", - "Nanotrasen Superweapons Division is testing a new prototype \ - [pick("field","projection","nova","super-colliding","reactive")] \ - [pick("cannon","artillery","tank","cruiser","\[REDACTED\]")], \ - some mild debris is expected.", - "A neighbouring station is throwing rocks at you. (Perhaps they've \ - grown tired of your messages.)") - priority_announce(pick(reason), "Collision Alert") diff --git a/code/modules/events/meateor_wave.dm b/code/modules/events/meateor_wave.dm deleted file mode 100644 index 11af56526c88..000000000000 --- a/code/modules/events/meateor_wave.dm +++ /dev/null @@ -1,11 +0,0 @@ -/datum/round_event_control/meteor_wave/meaty - name = "Meteor Wave: Meaty" - typepath = /datum/round_event/meteor_wave/meaty - weight = 2 - max_occurrences = 1 - -/datum/round_event/meteor_wave/meaty - wave_name = "meaty" - -/datum/round_event/meteor_wave/meaty/announce(fake) - priority_announce("Meaty ores have been detected on collision course with the station.", "Oh crap, get the mop.",'sound/ai/meteors.ogg') diff --git a/code/modules/events/meteor_wave.dm b/code/modules/events/meteor_wave.dm deleted file mode 100644 index a8ddab5aa76a..000000000000 --- a/code/modules/events/meteor_wave.dm +++ /dev/null @@ -1,76 +0,0 @@ -// Normal strength - -/datum/round_event_control/meteor_wave - name = "Meteor Wave: Normal" - typepath = /datum/round_event/meteor_wave - weight = 4 - min_players = 15 - max_occurrences = 3 - earliest_start = 25 MINUTES - -/datum/round_event/meteor_wave - startWhen = 6 - endWhen = 66 - announceWhen = 1 - var/list/wave_type - var/wave_name = "normal" - -/datum/round_event/meteor_wave/New() - ..() - if(!wave_type) - determine_wave_type() - -/datum/round_event/meteor_wave/proc/determine_wave_type() - if(!wave_name) - wave_name = pickweight(list( - "normal" = 50, - "threatening" = 40, - "catastrophic" = 10)) - switch(wave_name) - if("normal") - wave_type = GLOB.meteors_normal - if("threatening") - wave_type = GLOB.meteors_threatening - if("catastrophic") - if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) - wave_type = GLOB.meteorsSPOOKY - else - wave_type = GLOB.meteors_catastrophic - if("meaty") - wave_type = GLOB.meteorsB - if("space dust") - wave_type = GLOB.meteorsC - if("halloween") - wave_type = GLOB.meteorsSPOOKY - else - WARNING("Wave name of [wave_name] not recognised.") - kill() - -/datum/round_event/meteor_wave/announce(fake) - priority_announce("Meteors have been detected on collision course with the station.", "Meteor Alert", 'sound/ai/meteors.ogg') - -/datum/round_event/meteor_wave/tick() - if(ISMULTIPLE(activeFor, 3)) - spawn_meteors(5, wave_type) //meteor list types defined in gamemode/meteor/meteors.dm - -/datum/round_event_control/meteor_wave/threatening - name = "Meteor Wave: Threatening" - typepath = /datum/round_event/meteor_wave/threatening - weight = 5 - min_players = 20 - max_occurrences = 3 - earliest_start = 35 MINUTES - -/datum/round_event/meteor_wave/threatening - wave_name = "threatening" - -/datum/round_event_control/meteor_wave/catastrophic - name = "Meteor Wave: Catastrophic" - typepath = /datum/round_event/meteor_wave/catastrophic - weight = 7 - min_players = 25 - max_occurrences = 3 - earliest_start = 45 MINUTES - -/datum/round_event/meteor_wave/catastrophic - wave_name = "catastrophic" diff --git a/code/modules/events/wizard/blobies.dm b/code/modules/events/wizard/blobies.dm deleted file mode 100644 index 7438b462f60c..000000000000 --- a/code/modules/events/wizard/blobies.dm +++ /dev/null @@ -1,10 +0,0 @@ -/datum/round_event_control/wizard/blobies //avast! - name = "Zombie Outbreak" - weight = 3 - typepath = /datum/round_event/wizard/blobies - max_occurrences = 3 - -/datum/round_event/wizard/blobies/start() - - for(var/mob/living/carbon/human/H in GLOB.dead_mob_list) - new /mob/living/simple_animal/hostile/blob/blobspore(H.loc) diff --git a/code/modules/events/wizard/curseditems.dm b/code/modules/events/wizard/curseditems.dm deleted file mode 100644 index e99b0d754910..000000000000 --- a/code/modules/events/wizard/curseditems.dm +++ /dev/null @@ -1,60 +0,0 @@ -/datum/round_event_control/wizard/cursed_items //fashion disasters - name = "Cursed Items" - weight = 3 - typepath = /datum/round_event/wizard/cursed_items - max_occurrences = 3 - earliest_start = 0 MINUTES - -//Note about adding items to this: Because of how NODROP_1 works if an item spawned to the hands can also be equiped to a slot -//it will be able to be put into that slot from the hand, but then get stuck there. To avoid this make a new subtype of any -//item you want to equip to the hand, and set its slots_flags = null. Only items equiped to hands need do this. - -/datum/round_event/wizard/cursed_items/start() - var/item_set = pick("wizardmimic", "swords", "bigfatdoobie", "boxing", "voicemodulators", "catgirls2015") - var/list/loadout[SLOTS_AMT] - var/ruins_spaceworthiness - var/ruins_wizard_loadout - - switch(item_set) - if("wizardmimic") - loadout[ITEM_SLOT_OCLOTHING] = /obj/item/clothing/suit/wizrobe - loadout[ITEM_SLOT_FEET] = /obj/item/clothing/shoes/sandal/magic - loadout[ITEM_SLOT_HEAD] = /obj/item/clothing/head/wizard - ruins_spaceworthiness = 1 - if("swords") - loadout[ITEM_SLOT_HANDS] = /obj/item/katana/cursed - if("bigfatdoobie") - loadout[ITEM_SLOT_MASK] = /obj/item/clothing/mask/cigarette/rollie/trippy - ruins_spaceworthiness = 1 - if("boxing") - loadout[ITEM_SLOT_MASK] = /obj/item/clothing/mask/luchador - loadout[ITEM_SLOT_GLOVES] = /obj/item/clothing/gloves/boxing - ruins_spaceworthiness = 1 - if("voicemodulators") - loadout[ITEM_SLOT_MASK] = /obj/item/clothing/mask/chameleon - if("catgirls2015") - loadout[ITEM_SLOT_HEAD] = /obj/item/clothing/head/kitty - ruins_spaceworthiness = 1 - ruins_wizard_loadout = 1 - - for(var/mob/living/carbon/human/H as anything in GLOB.human_list) - if(ruins_spaceworthiness && isspaceturf(H.loc) || isplasmaman(H)) - continue //#savetheminers - if(ruins_wizard_loadout && iswizard(H)) - continue - if(item_set == "catgirls2015") //Wizard code means never having to say you're sorry - H.gender = FEMALE - for(var/i in 1 to loadout.len) - if(loadout[i]) - var/obj/item/J = loadout[i] - var/obj/item/I = new J //dumb but required because of byond throwing a fit anytime new gets too close to a list - H.dropItemToGround(H.get_item_by_slot(i), TRUE) - H.equip_to_slot_or_del(I, i) - ADD_TRAIT(I, TRAIT_NODROP, CURSED_ITEM_TRAIT) - I.item_flags |= DROPDEL - I.name = "cursed " + I.name - - for(var/mob/living/carbon/human/H as anything in GLOB.human_list) - var/datum/effect_system/smoke_spread/smoke = new - smoke.set_up(0, H.loc) - smoke.start() diff --git a/code/modules/events/wizard/greentext.dm b/code/modules/events/wizard/greentext.dm index 890bbc0f1f2b..8e4baab893fc 100644 --- a/code/modules/events/wizard/greentext.dm +++ b/code/modules/events/wizard/greentext.dm @@ -34,7 +34,7 @@ /obj/item/greentext/Initialize(mapload) . = ..() - GLOB.poi_list |= src + SSpoints_of_interest.make_point_of_interest(src) roundend_callback = CALLBACK(src, PROC_REF(check_winner)) SSticker.OnRoundend(roundend_callback) @@ -83,7 +83,7 @@ if(!(resistance_flags & ON_FIRE) && !force) return QDEL_HINT_LETMELIVE - GLOB.poi_list.Remove(src) + SSpoints_of_interest.remove_point_of_interest(src) LAZYREMOVE(SSticker.round_end_events, roundend_callback) roundend_callback = null //This ought to free the callback datum, and prevent us from harddeling for(var/i in GLOB.player_list) diff --git a/code/modules/faction/faction_datum.dm b/code/modules/faction/faction_datum.dm new file mode 100644 index 000000000000..450ee9688953 --- /dev/null +++ b/code/modules/faction/faction_datum.dm @@ -0,0 +1,62 @@ +/datum/faction + var/name + var/parent_faction + var/list/prefixes + +/datum/faction/syndicate + name = FACTION_SYNDICATE + parent_faction = /datum/faction/syndicate + prefixes = list("SEV", "SSV") + +/datum/faction/syndicate/ngr + name = FACTION_NGR + prefixes = list("NGRV") + +/datum/faction/syndicate/cybersun + name = FACTION_CYBERSUN + prefixes = list("CSSV") + +/datum/faction/syndicate/suns + name = FACTION_SUNS + prefixes = list("SUNS") + +/datum/faction/solgov + name = FACTION_SOLGOV + prefixes = list("SCSV") + +/datum/faction/srm + name = FACTION_SRM + prefixes = list("SRSV") + +/datum/faction/inteq + name = FACTION_INTEQ + prefixes = list("IRMV") + +/datum/faction/clip + name = FACTION_CLIP + prefixes = list("CMSV", "CMGSV") + +/datum/faction/nt + name = FACTION_NT + parent_faction = /datum/faction/nt + prefixes = list("NTSV") + +/datum/faction/nt/ns_logi + name = FACTION_NS_LOGI + prefixes = list("NSSV") + +/datum/faction/nt/vigilitas + name = FACTION_VIGILITAS + prefixes = list("VISV") + +/datum/faction/frontier + name = FACTION_FRONTIER + prefixes = list("FFV") + +/datum/faction/pgf + name = FACTION_PGF + prefixes = list("PGF", "PGFMC", "PGFN") + +/datum/faction/independent + name = FACTION_INDEPENDENT + prefixes = list("SV", "IMV", "ISV") diff --git a/code/modules/fishing/fish/_fish.dm b/code/modules/fishing/fish/_fish.dm index f474018739d0..4f2c3cd1343a 100644 --- a/code/modules/fishing/fish/_fish.dm +++ b/code/modules/fishing/fish/_fish.dm @@ -1,6 +1,6 @@ // Fish path used for autogenerated fish /obj/item/fish - name = "generic looking aquarium fish" + name = "generic fish" desc = "very bland" icon = 'icons/obj/aquarium.dmi' icon_state = "trout" //Replace this with "bugfish" from tg please diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index 4774ea852424..8f8e532577c0 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -29,7 +29,7 @@ GLOBAL_LIST_INIT(hallucination_list, list( if(!hallucination) return - hallucination-- + hallucination = max(hallucination - 1, 0) if(world.time < next_hallucination) return @@ -1023,11 +1023,11 @@ GLOBAL_LIST_INIT(hallucination_list, list( if(prob(25)) target.halitem.icon_state = "plasticx40" if(3) //sword - target.halitem.icon = 'icons/obj/transforming_energy.dmi' + target.halitem.icon = 'icons/obj/weapon/energy.dmi' target.halitem.icon_state = "sword0" target.halitem.name = "Energy Sword" if(4) //stun baton - target.halitem.icon = 'icons/obj/items_and_weapons.dmi' + target.halitem.icon = 'icons/obj/items.dmi' target.halitem.icon_state = "stunbaton" target.halitem.name = "Stun Baton" if(5) //emag diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm index 32c4b1a9a09f..ec10f7dfb0f2 100644 --- a/code/modules/food_and_drinks/drinks/drinks.dm +++ b/code/modules/food_and_drinks/drinks/drinks.dm @@ -373,7 +373,7 @@ desc = "A popular Gezenan drink made of fermented honey and spices, known as Gezenan Dark Mead, or GDM for short." icon_state = "beer" list_reagents = list(/datum/reagent/consumable/ethanol/beer = 30) - foodtype = GRAIN | ALCOHOL + foodtype = SUGAR | ALCOHOL custom_price = 60 /obj/item/reagent_containers/food/drinks/beer/light @@ -762,7 +762,7 @@ desc = "If you ever wondered where air came from..." list_reagents = list(/datum/reagent/oxygen = 6, /datum/reagent/nitrogen = 24) icon = 'icons/obj/food/ration.dmi' - icon_state = "ration_package" + icon_state = "ration_drink" drop_sound = 'sound/items/handling/cardboardbox_drop.ogg' pickup_sound = 'sound/items/handling/cardboardbox_pickup.ogg' in_container = TRUE @@ -773,7 +773,7 @@ /obj/item/reagent_containers/food/drinks/ration/proc/open_ration(mob/user) to_chat(user, "You tear open \the [src].") - playsound(user.loc, 'sound/effects/rip3.ogg', 50) + playsound(user.loc, 'sound/items/glass_cap.ogg', 50) reagents.flags |= OPENCONTAINER spillable = TRUE diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index 57d84ee22397..0aa4ac7fad38 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -202,10 +202,10 @@ /obj/item/reagent_containers/food/drinks/bottle/kahlua name = "Keh'Lu'Tex Liqueur" - desc = "An adapted recipe of a caffeine-mixed liqueur originating from Reh'himl, which replaces it's original ingredient with coffee from Terra." + desc = "An adapted recipe of a caffeine-mixed liqueur originating from Reh'himl, which replaces its original ingredient with coffee from Terra." icon_state = "kahluabottle" list_reagents = list(/datum/reagent/consumable/ethanol/kahlua = 100) - foodtype = VEGETABLES + foodtype = SUGAR | ALCOHOL //it's coffee and rum . /obj/item/reagent_containers/food/drinks/bottle/goldschlager name = "Student-Union's Gold Standard" @@ -479,7 +479,13 @@ break if(firestarter && active) hit_atom.fire_act() - new /obj/effect/hotspot(get_turf(hit_atom)) + var/turf/T = get_turf(hit_atom) + T.IgniteTurf(30) + var/turf/otherT + for(var/direction in GLOB.cardinals) + otherT = get_step(T, direction) + otherT.IgniteTurf(30) + new /obj/effect/hotspot(otherT) ..() /obj/item/reagent_containers/food/drinks/bottle/molotov/attackby(obj/item/I, mob/user, params) @@ -602,7 +608,7 @@ desc = "Legend says something amazing happens when you collect enough of these." custom_price = 100 custom_premium_price = 110 - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "sandstar" w_class = WEIGHT_CLASS_TINY custom_materials = list(/datum/material/gold = 200) @@ -618,6 +624,10 @@ custom_materials = list(/datum/material/wood = 800) w_class = WEIGHT_CLASS_BULKY var/sealed = FALSE + var/max_bottles = 6 + var/list/valid_bottles = list(/obj/item/reagent_containers/food/drinks/beer, + /obj/item/reagent_containers/food/drinks/ale, + /obj/item/reagent_containers/food/drinks/bottle) /obj/item/storage/bottles/Initialize() . = ..() @@ -628,12 +638,8 @@ var/datum/component/storage/S = GetComponent(/datum/component/storage) S.max_w_class = WEIGHT_CLASS_NORMAL S.max_combined_w_class = 16 - S.max_items = 6 - S.set_holdable(list( - /obj/item/reagent_containers/food/drinks/beer, - /obj/item/reagent_containers/food/drinks/ale, - /obj/item/reagent_containers/food/drinks/bottle - )) + S.max_items = max_bottles + S.set_holdable(valid_bottles) S.locked = sealed /obj/item/storage/bottles/update_icon_state() @@ -668,3 +674,17 @@ /obj/item/storage/bottles/sandblast/PopulateContents() for(var/i in 1 to 6) new /obj/item/reagent_containers/food/drinks/bottle/sarsaparilla(src) + +/obj/item/storage/bottles/moonshine + name = "moonshine bottle crate" + desc = "Holds four bottles of the strongest hooch this side of the Frontier." + icon_state = "hoochcrate" + max_bottles = 4 + valid_bottles = list(/obj/item/reagent_containers/food/drinks/bottle/moonshine) + +/obj/item/storage/bottles/moonshine/PopulateContents() + for(var/i in 1 to 4) + new /obj/item/reagent_containers/food/drinks/bottle/moonshine(src) + +/obj/item/storage/bottles/moonshine/sealed + sealed = TRUE diff --git a/code/modules/food_and_drinks/food/condiment.dm b/code/modules/food_and_drinks/food/condiment.dm index 0adf98ba5666..bd24a21d1a16 100644 --- a/code/modules/food_and_drinks/food/condiment.dm +++ b/code/modules/food_and_drinks/food/condiment.dm @@ -5,7 +5,7 @@ // to mixed-drinks code. If you want an object that starts pre-loaded, you need to make it in addition to the other code. //Food items that aren't eaten normally and leave an empty container behind. -/obj/item/reagent_containers/food/condiment +/obj/item/reagent_containers/condiment name = "condiment bottle" desc = "Just your average condiment bottle." icon = 'icons/obj/food/containers.dmi' @@ -36,23 +36,25 @@ var/icon_empty = "" fill_icon_thresholds = list(0, 10, 25, 50, 75, 100) -/obj/item/reagent_containers/food/condiment/Initialize() +/obj/item/reagent_containers/condiment/Initialize() . = ..() possible_states = typelist("possible_states", possible_states) update_appearance() -/obj/item/reagent_containers/food/condiment/update_icon() +/obj/item/reagent_containers/condiment/update_icon() cut_overlays() if(reagents.reagent_list.len > 0 && possible_states.len) - var/main_reagent = reagents.get_master_reagent_id() - if(main_reagent in possible_states) - icon_state = possible_states[main_reagent]["icon_state"] - item_state = possible_states[main_reagent]["item_state"] - icon_empty = possible_states[main_reagent]["icon_empty"] - name = possible_states[main_reagent]["name"] - desc = possible_states[main_reagent]["desc"] + + var/datum/reagent/main_reagent_ref = reagents.get_master_reagent() + var/main_reagent_id = main_reagent_ref.type + if(main_reagent_id in possible_states) + icon_state = possible_states[main_reagent_id]["icon_state"] + item_state = possible_states[main_reagent_id]["item_state"] + icon_empty = possible_states[main_reagent_id]["icon_empty"] + name = possible_states[main_reagent_id]["name"] + desc = possible_states[main_reagent_id]["desc"] return ..(TRUE) // Don't fill normally else name = "condiment bottle" @@ -64,7 +66,7 @@ . = ..() -/obj/item/reagent_containers/food/condiment/attack(mob/M, mob/user, def_zone) +/obj/item/reagent_containers/condiment/attack(mob/M, mob/user, def_zone) if(!reagents || !reagents.total_volume) to_chat(user, "None of [src] left, oh no!") @@ -90,7 +92,7 @@ playsound(M.loc,'sound/items/drink.ogg', rand(10,50), TRUE) return 1 -/obj/item/reagent_containers/food/condiment/afterattack(obj/target, mob/user , proximity) +/obj/item/reagent_containers/condiment/afterattack(obj/target, mob/user , proximity) . = ..() if(!proximity) return @@ -119,23 +121,23 @@ to_chat(user, "You transfer [trans] units of the condiment to [target].") playsound(src, 'sound/items/glass_transfer.ogg', 50, 1) -/obj/item/reagent_containers/food/condiment/on_reagent_change(changetype) +/obj/item/reagent_containers/condiment/on_reagent_change(changetype) update_appearance() -/obj/item/reagent_containers/food/condiment/enzyme +/obj/item/reagent_containers/condiment/enzyme name = "universal enzyme" desc = "Used in cooking various dishes." icon_state = "enzyme" list_reagents = list(/datum/reagent/consumable/enzyme = 50) -/obj/item/reagent_containers/food/condiment/sugar +/obj/item/reagent_containers/condiment/sugar name = "sugar sack" desc = "Tasty spacey sugar!" icon_state = "sugar" item_state = "flour" list_reagents = list(/datum/reagent/consumable/sugar = 50) -/obj/item/reagent_containers/food/condiment/saltshaker //Separate from above since it's a small shaker rather then +/obj/item/reagent_containers/condiment/saltshaker //Separate from above since it's a small shaker rather then name = "salt shaker" // a large one. desc = "Salt. From space oceans, presumably." icon_state = "saltshakersmall" @@ -145,7 +147,7 @@ volume = 20 list_reagents = list(/datum/reagent/consumable/sodiumchloride = 20) -/obj/item/reagent_containers/food/condiment/saltshaker/afterattack(obj/target, mob/living/user, proximity) +/obj/item/reagent_containers/condiment/saltshaker/afterattack(obj/target, mob/living/user, proximity) . = ..() if(!proximity) return @@ -158,7 +160,7 @@ new/obj/effect/decal/cleanable/food/salt(target) return -/obj/item/reagent_containers/food/condiment/peppermill +/obj/item/reagent_containers/condiment/peppermill name = "pepper mill" desc = "Often used to flavor food or make people sneeze." icon_state = "peppermillsmall" @@ -168,7 +170,7 @@ volume = 20 list_reagents = list(/datum/reagent/consumable/blackpepper = 20) -/obj/item/reagent_containers/food/condiment/milk +/obj/item/reagent_containers/condiment/milk name = "space milk" desc = "It's milk. White and nutritious goodness!" icon_state = "milk" @@ -177,14 +179,14 @@ righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi' list_reagents = list(/datum/reagent/consumable/milk = 50) -/obj/item/reagent_containers/food/condiment/flour +/obj/item/reagent_containers/condiment/flour name = "flour sack" desc = "A big bag of flour. Good for baking!" icon_state = "flour" item_state = "flour" list_reagents = list(/datum/reagent/consumable/flour = 30) -/obj/item/reagent_containers/food/condiment/soymilk +/obj/item/reagent_containers/condiment/soymilk name = "soy milk" desc = "It's soy milk. White and nutritious goodness!" icon_state = "soymilk" @@ -193,20 +195,20 @@ righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi' list_reagents = list(/datum/reagent/consumable/soymilk = 50) -/obj/item/reagent_containers/food/condiment/rice +/obj/item/reagent_containers/condiment/rice name = "rice sack" desc = "A big bag of rice. Good for cooking!" icon_state = "rice" item_state = "flour" list_reagents = list(/datum/reagent/consumable/rice = 30) -/obj/item/reagent_containers/food/condiment/soysauce +/obj/item/reagent_containers/condiment/soysauce name = "soy sauce" desc = "A salty soy-based flavoring." icon_state = "soysauce" list_reagents = list(/datum/reagent/consumable/soysauce = 50) -/obj/item/reagent_containers/food/condiment/mayonnaise +/obj/item/reagent_containers/condiment/mayonnaise name = "mayonnaise" desc = "An oily condiment made from egg yolks." icon_state = "mayonnaise" @@ -214,7 +216,7 @@ //Food packs. To easily apply deadly toxi... delicious sauces to your food! -/obj/item/reagent_containers/food/condiment/pack +/obj/item/reagent_containers/condiment/pack name = "condiment pack" desc = "A small plastic pack with condiments to put on your food." icon_state = "condi_empty" @@ -234,14 +236,19 @@ /datum/reagent/consumable/bbqsauce = list("condi_bbq", "BBQ sauce", "Hand wipes not included."), ) -/obj/item/reagent_containers/food/condiment/pack/update_icon() +/obj/item/reagent_containers/condiment/pack/create_reagents(max_vol, flags) + . = ..() + RegisterSignals(reagents, list(COMSIG_REAGENTS_NEW_REAGENT, COMSIG_REAGENTS_ADD_REAGENT, COMSIG_REAGENTS_REM_REAGENT), PROC_REF(on_reagent_add), TRUE) + RegisterSignal(reagents, COMSIG_REAGENTS_DEL_REAGENT, PROC_REF(on_reagent_del), TRUE) + +/obj/item/reagent_containers/condiment/pack/update_icon() SHOULD_CALL_PARENT(FALSE) - return ..() + return -/obj/item/reagent_containers/food/condiment/pack/attack(mob/M, mob/user, def_zone) //Can't feed these to people directly. +/obj/item/reagent_containers/condiment/pack/attack(mob/M, mob/user, def_zone) //Can't feed these to people directly. return -/obj/item/reagent_containers/food/condiment/pack/afterattack(obj/target, mob/user , proximity) +/obj/item/reagent_containers/condiment/pack/afterattack(obj/target, mob/user , proximity) . = ..() if(!proximity) return @@ -257,67 +264,74 @@ src.reagents.trans_to(target, amount_per_transfer_from_this, transfered_by = user) qdel(src) -/obj/item/reagent_containers/food/condiment/pack/on_reagent_change(changetype) - if(reagents.reagent_list.len > 0) - var/main_reagent = reagents.get_master_reagent_id() - if(main_reagent in possible_states) - var/list/temp_list = possible_states[main_reagent] - icon_state = temp_list[1] - desc = temp_list[3] - else - icon_state = "condi_mixed" - desc = "A small condiment pack. The label says it contains [originalname]" +/// Handles reagents getting added to the condiment pack. +/obj/item/reagent_containers/condiment/pack/proc/on_reagent_add(datum/reagents/reagents) + SIGNAL_HANDLER + + var/datum/reagent/main_reagent = reagents.get_master_reagent() + + var/main_reagent_type = main_reagent?.type + if(main_reagent_type in possible_states) + var/list/temp_list = possible_states[main_reagent_type] + icon_state = temp_list[1] + desc = temp_list[3] else - icon_state = "condi_empty" - desc = "A small condiment pack. It is empty." + icon_state = "condi_mixed" + desc = "A small condiment pack. The label says it contains [originalname]" + +/// Handles reagents getting removed from the condiment pack. +/obj/item/reagent_containers/condiment/pack/proc/on_reagent_del(datum/reagents/reagents) + SIGNAL_HANDLER + icon_state = "condi_empty" + desc = "A small condiment pack. It is empty." //Ketchup -/obj/item/reagent_containers/food/condiment/pack/ketchup +/obj/item/reagent_containers/condiment/pack/ketchup name = "ketchup pack" originalname = "ketchup" list_reagents = list(/datum/reagent/consumable/ketchup = 10) //Hot sauce -/obj/item/reagent_containers/food/condiment/pack/hotsauce +/obj/item/reagent_containers/condiment/pack/hotsauce name = "hotsauce pack" originalname = "hotsauce" list_reagents = list(/datum/reagent/consumable/capsaicin = 10) -/obj/item/reagent_containers/food/condiment/pack/astrotame +/obj/item/reagent_containers/condiment/pack/astrotame name = "astrotame pack" originalname = "astrotame" list_reagents = list(/datum/reagent/consumable/astrotame = 5) -/obj/item/reagent_containers/food/condiment/pack/bbqsauce +/obj/item/reagent_containers/condiment/pack/bbqsauce name = "bbq sauce pack" originalname = "bbq sauce" list_reagents = list(/datum/reagent/consumable/bbqsauce = 10) -/obj/item/reagent_containers/food/condiment/ketchup +/obj/item/reagent_containers/condiment/ketchup name = "ketchup bottle" desc = "You feel more american already" icon_state = "ketchup" list_reagents = list(/datum/reagent/consumable/ketchup = 50) -/obj/item/reagent_containers/food/condiment/bbqsauce +/obj/item/reagent_containers/condiment/bbqsauce name = "bbq sauce bottle" desc = "Hand wipes not included" icon_state = "bbqsauce" list_reagents = list(/datum/reagent/consumable/bbqsauce = 50) -/obj/item/reagent_containers/food/condiment/hotsauce +/obj/item/reagent_containers/condiment/hotsauce name = "hot sauce bottle" desc = "You can almost TASTE the stomach ulcers now!" icon_state = "hotsauce" list_reagents = list(/datum/reagent/consumable/capsaicin = 50) -/obj/item/reagent_containers/food/condiment/coldsauce +/obj/item/reagent_containers/condiment/coldsauce name = "cold sauce bottle" desc = "Leaves the tounge numb in it's passage" icon_state = "coldsauce" list_reagents = list(/datum/reagent/consumable/frostoil = 50) -/obj/item/reagent_containers/food/condiment/oliveoil +/obj/item/reagent_containers/condiment/oliveoil name = "olive oil bottle" desc = "A delicious oil used in cooking" icon_state = "oliveoil" diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm index fc3df2f74713..3147ee9a5de4 100644 --- a/code/modules/food_and_drinks/food/customizables.dm +++ b/code/modules/food_and_drinks/food/customizables.dm @@ -45,7 +45,7 @@ to_chat(user, "The ingredient is too big for [src]!") else if((ingredients.len >= ingMax) || (reagents.total_volume >= volume)) to_chat(user, "You can't add more ingredients to [src]!") - else if(istype(I, /obj/item/reagent_containers/food/snacks/pizzaslice/custom) || istype(I, /obj/item/reagent_containers/food/snacks/cakeslice/custom)) + else if(istype(I, /obj/item/reagent_containers/food/snacks/pizzaslice/custom)) to_chat(user, "Adding [I.name] to [src] would make a mess.") else if(!user.transferItemToLoc(I, src)) @@ -170,26 +170,6 @@ foodtype = GRAIN -/obj/item/reagent_containers/food/snacks/customizable/bread - name = "bread" - ingMax = 6 - slice_path = /obj/item/reagent_containers/food/snacks/breadslice/custom - slices_num = 5 - icon = 'icons/obj/food/burgerbread.dmi' - icon_state = "tofubread" - foodtype = GRAIN - - -/obj/item/reagent_containers/food/snacks/customizable/cake - name = "cake" - ingMax = 6 - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/custom - slices_num = 5 - icon = 'icons/obj/food/piecake.dmi' - icon_state = "plaincake" - foodtype = GRAIN | DAIRY - - /obj/item/reagent_containers/food/snacks/customizable/kebab name = "kebab" desc = "Delicious food on a stick." @@ -199,15 +179,6 @@ ingMax = 6 icon_state = "rod" -/obj/item/reagent_containers/food/snacks/customizable/pasta - name = "spaghetti" - desc = "Noodles. With stuff. Delicious." - ingredients_placement = INGREDIENTS_SCATTER - ingMax = 6 - icon = 'icons/obj/food/pizzaspaghetti.dmi' - icon_state = "spaghettiboiled" - foodtype = GRAIN - /obj/item/reagent_containers/food/snacks/customizable/pie name = "pie" @@ -238,43 +209,6 @@ icon_state = "bowl" -/obj/item/reagent_containers/food/snacks/customizable/sandwich - name = "toast" - desc = "A timeless classic." - ingredients_placement = INGREDIENTS_STACK - icon = 'icons/obj/food/burgerbread.dmi' - icon_state = "breadslice" - var/finished = 0 - foodtype = GRAIN - -/obj/item/reagent_containers/food/snacks/customizable/sandwich/initialize_custom_food(obj/item/reagent_containers/BASE, obj/item/I, mob/user) - icon_state = BASE.icon_state - ..() - -/obj/item/reagent_containers/food/snacks/customizable/sandwich/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/reagent_containers/food/snacks/breadslice)) //we're finishing the custom food. - var/obj/item/reagent_containers/food/snacks/breadslice/BS = I - if(finished) - return - to_chat(user, "You finish the [src.name].") - finished = 1 - name = "[customname] sandwich" - BS.reagents.trans_to(src, BS.reagents.total_volume, transfered_by = user) - ingMax = ingredients.len //can't add more ingredients after that - var/mutable_appearance/TOP = mutable_appearance(icon, "[BS.icon_state]") - TOP.pixel_y = 2 * ingredients.len + 3 - add_overlay(TOP) - if(istype(BS, /obj/item/reagent_containers/food/snacks/breadslice/custom)) - var/mutable_appearance/filling = new(icon, "[initial(BS.icon_state)]_filling") - filling.color = BS.filling_color - filling.pixel_y = 2 * ingredients.len + 3 - add_overlay(filling) - qdel(BS) - return - else - ..() - - /obj/item/reagent_containers/food/snacks/customizable/soup name = "soup" desc = "A bowl with liquid and... stuff in it." diff --git a/code/modules/food_and_drinks/food/ration.dm b/code/modules/food_and_drinks/food/ration.dm index 261fe707ed7f..6766a6aedbda 100644 --- a/code/modules/food_and_drinks/food/ration.dm +++ b/code/modules/food_and_drinks/food/ration.dm @@ -83,7 +83,7 @@ list_reagents = list(/datum/reagent/consumable/nutriment = 4) /obj/item/reagent_containers/food/snacks/ration/snack - icon_state = "ration_side" + icon_state = "ration_snack" list_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/sugar = 3) /obj/item/reagent_containers/food/snacks/ration/bar @@ -92,7 +92,7 @@ /obj/item/reagent_containers/food/snacks/ration/condiment name = "condiment pack" - desc = "Just your average condiment pacl." + desc = "Just your average condiment pack." icon_state = "ration_condi" volume = 10 amount_per_transfer_from_this = 10 @@ -126,7 +126,7 @@ /obj/item/reagent_containers/food/snacks/ration/pack name = "powder pack" desc = "Mix into a bottle of water and shake." - icon_state = "ration_condi" + icon_state = "ration_pack" volume = 10 amount_per_transfer_from_this = 10 possible_transfer_amounts = list() @@ -742,84 +742,105 @@ /obj/item/reagent_containers/food/snacks/ration/condiment/cheese_spread name = "cheese spread pack" + filling_color = "#ffcc00" list_reagents = list(/datum/reagent/consumable/cheese_spread = 8) /obj/item/reagent_containers/food/snacks/ration/condiment/hot_cheese_spread name = "jalapeno cheddar cheese spread pack" + filling_color = "#ffaa00" list_reagents = list(/datum/reagent/consumable/cheese_spread = 5 , /datum/reagent/consumable/capsaicin = 3) /obj/item/reagent_containers/food/snacks/ration/condiment/garlic_cheese_spread name = "garlic parmesan cheese spread pack" + filling_color = "#ffff00" list_reagents = list(/datum/reagent/consumable/cheese_spread = 8) /obj/item/reagent_containers/food/snacks/ration/condiment/bacon_cheddar_cheese_spread name = "bacon cheddar cheese spread pack" + filling_color = "#ff9900" list_reagents = list(/datum/reagent/consumable/cheese_spread = 8) /obj/item/reagent_containers/food/snacks/ration/condiment/peanut_butter name = "peanut butter pack" + filling_color = "#664400" list_reagents = list(/datum/reagent/consumable/sugar = 5, /datum/reagent/consumable/peanut_butter = 5) /obj/item/reagent_containers/food/snacks/ration/condiment/chunky_peanut_butter name = "chunky peanut butter pack" + filling_color = "#663300" list_reagents = list(/datum/reagent/consumable/peanut_butter = 10) /obj/item/reagent_containers/food/snacks/ration/condiment/maple_syrup name = "maple syrup pack" + filling_color = "#661100" list_reagents = list(/datum/reagent/consumable/sugar = 10) /obj/item/reagent_containers/food/snacks/ration/pack/chocolate_protein_beverage name = "chocolate hazelnut protein drink powder pack" + filling_color = "#664400" list_reagents = list(/datum/reagent/consumable/coco = 5, /datum/reagent/consumable/eggyolk = 5) /obj/item/reagent_containers/food/snacks/ration/pack/fruit_beverage name = "fruit punch beverage powder, carb-electrolyte pack" + filling_color = "#ff4400" list_reagents = list(/datum/reagent/consumable/sugar = 5, /datum/reagent/consumable/applejuice = 2, /datum/reagent/consumable/orangejuice = 2) /obj/item/reagent_containers/food/snacks/ration/pack/fruit_smoothie_beverage name = "tropical blend fruit and vegetable smoothie powder pack" + filling_color = "#ffaa00" list_reagents = list(/datum/reagent/consumable/pineapplejuice = 3, /datum/reagent/consumable/orangejuice = 3, /datum/reagent/consumable/eggyolk = 3) /obj/item/reagent_containers/food/snacks/ration/pack/grape_beverage name = "grape beverage powder, carb-fortified pack" + filling_color = "#9900ff" list_reagents = list(/datum/reagent/consumable/sugar = 5, /datum/reagent/consumable/grapejuice = 5) /obj/item/reagent_containers/food/snacks/ration/pack/grape_beverage_sugar_free name = "sugar-free grape beverage base powder" + filling_color = "#9900ff" list_reagents = list(/datum/reagent/consumable/grapejuice = 10) /obj/item/reagent_containers/food/snacks/ration/pack/lemonade_beverage name = "lemonade drink powder pack" + filling_color = "#ffff80" list_reagents = list(/datum/reagent/consumable/sugar = 5, /datum/reagent/consumable/lemonjuice = 5) /obj/item/reagent_containers/food/snacks/ration/pack/lemonade_beverage_suger_free name = "lemonade sugar-free beverage base pack" + filling_color = "#ffff00" list_reagents = list(/datum/reagent/consumable/lemonjuice = 10) /obj/item/reagent_containers/food/snacks/ration/pack/orange_beverage name = "orange beverage powder, carb-fortified pack" + filling_color = "#ffbb00" list_reagents = list(/datum/reagent/consumable/sugar = 5, /datum/reagent/consumable/orangejuice = 5) /obj/item/reagent_containers/food/snacks/ration/pack/orange_beverage_sugar_free name = "orange beverage base, sugar-free pack" + filling_color = "#ff9900" list_reagents = list(/datum/reagent/consumable/orangejuice = 10) /obj/item/reagent_containers/food/snacks/ration/pack/cherry_beverage name = "cherry high-energy beverage powder pack" + filling_color = "#ff5555" list_reagents = list(/datum/reagent/consumable/sugar = 5, /datum/reagent/consumable/cherryjelly = 5) /obj/item/reagent_containers/food/snacks/ration/pack/pineapple_beverage name = "pinapple fruit beverage base pack" + filling_color = "#fff111" list_reagents = list(/datum/reagent/consumable/pineapplejuice = 10) /obj/item/reagent_containers/food/snacks/ration/pack/freeze_dried_coffee_orange name = "freeze-dried coffee flavored with orange pack" + filling_color = "#cc7400" list_reagents = list(/datum/reagent/consumable/coffee = 5, /datum/reagent/consumable/orangejuice = 3) /obj/item/reagent_containers/food/snacks/ration/pack/freeze_dried_coffee_chocolate name = "freeze-dried coffee flavored with chocolate pack" + filling_color = "#803300" list_reagents = list(/datum/reagent/consumable/coffee = 5, /datum/reagent/consumable/coco = 3) /obj/item/reagent_containers/food/snacks/ration/pack/freeze_dried_coffee_hazelnut name = "freeze-dried coffee flavored with hazelnut pack" + filling_color = "#553300" list_reagents = list(/datum/reagent/consumable/coffee = 5, /datum/reagent/consumable/coco = 3) diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index 61121a3ca950..9e84c272dbb6 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -56,6 +56,16 @@ All foods are distributed among various categories. Use common sense. //Placeholder for effect that trigger on eating that aren't tied to reagents. +/obj/item/reagent_containers/food/snacks/Initialize(mapload) + . = ..() + RegisterSignal(src, COMSIG_ITEM_FRIED, PROC_REF(on_fried)) + + +/obj/item/reagent_containers/food/snacks/proc/on_fried(fry_object) + reagents.trans_to(fry_object, reagents.total_volume) + qdel() + return COMSIG_FRYING_HANDLED + /obj/item/reagent_containers/food/snacks/add_initial_reagents() if(tastes && tastes.len) if(list_reagents) @@ -175,7 +185,7 @@ All foods are distributed among various categories. Use common sense. if(W.w_class > WEIGHT_CLASS_SMALL) to_chat(user, span_warning("[S] is too big for [src]!")) return FALSE - if(istype(S) && (!S.customfoodfilling || istype(W, /obj/item/reagent_containers/food/snacks/customizable) || istype(W, /obj/item/reagent_containers/food/snacks/pizzaslice/custom) || istype(W, /obj/item/reagent_containers/food/snacks/cakeslice/custom))) + if(!S.customfoodfilling || istype(W, /obj/item/reagent_containers/food/snacks/customizable) || istype(W, /obj/item/reagent_containers/food/snacks/pizzaslice/custom)) to_chat(user, span_warning("[src] can't be filled with [S]!")) return FALSE if(contents.len >= 20) @@ -337,26 +347,10 @@ All foods are distributed among various categories. Use common sense. /// All the food items that can store an item inside itself, like bread or cake. /obj/item/reagent_containers/food/snacks/store w_class = WEIGHT_CLASS_NORMAL - var/stored_item = 0 -/obj/item/reagent_containers/food/snacks/store/attackby(obj/item/W, mob/user, params) - ..() - if(W.w_class <= WEIGHT_CLASS_SMALL & !istype(W, /obj/item/reagent_containers/food/snacks)) //can't slip snacks inside, they're used for custom foods. - if(W.get_sharpness()) - return 0 - if(stored_item) - return 0 - if(!iscarbon(user)) - return 0 - if(contents.len >= 20) - to_chat(user, "[src] is full.") - return 0 - to_chat(user, "You slip [W] inside [src].") - user.transferItemToLoc(W, src) - add_fingerprint(user) - contents += W - stored_item = 1 - return 1 // no afterattack here +/obj/item/reagent_containers/food/snacks/store/Initialize() + . = ..() + AddComponent(/datum/component/food_storage) /obj/item/reagent_containers/food/snacks/MouseDrop(atom/over) var/turf/T = get_turf(src) diff --git a/code/modules/food_and_drinks/food/snacks/dough.dm b/code/modules/food_and_drinks/food/snacks/dough.dm index 9567690dc71c..4f5f06379927 100644 --- a/code/modules/food_and_drinks/food/snacks/dough.dm +++ b/code/modules/food_and_drinks/food/snacks/dough.dm @@ -7,7 +7,7 @@ desc = "A piece of dough." icon = 'icons/obj/food/food_ingredients.dmi' icon_state = "dough" - cooked_type = /obj/item/reagent_containers/food/snacks/store/bread/plain + cooked_type = /obj/item/food/bread/plain list_reagents = list(/datum/reagent/consumable/nutriment = 6) w_class = WEIGHT_CLASS_NORMAL tastes = list("dough" = 1) @@ -82,7 +82,7 @@ desc = "Cook it to get a cake." icon = 'icons/obj/food/food_ingredients.dmi' icon_state = "cakebatter" - cooked_type = /obj/item/reagent_containers/food/snacks/store/cake/plain + cooked_type = /obj/item/food/cake/plain list_reagents = list(/datum/reagent/consumable/nutriment = 9) w_class = WEIGHT_CLASS_NORMAL tastes = list("batter" = 1) diff --git a/code/modules/food_and_drinks/food/snacks_bread.dm b/code/modules/food_and_drinks/food/snacks_bread.dm deleted file mode 100644 index 13342a968900..000000000000 --- a/code/modules/food_and_drinks/food/snacks_bread.dm +++ /dev/null @@ -1,302 +0,0 @@ - -/obj/item/reagent_containers/food/snacks/store/bread - icon = 'icons/obj/food/burgerbread.dmi' - volume = 80 - slices_num = 5 - tastes = list("bread" = 10) - foodtype = GRAIN - -/obj/item/reagent_containers/food/snacks/store/bread/Initialize() - . = ..() - AddElement(/datum/element/dunkable, 10) - -/obj/item/reagent_containers/food/snacks/breadslice - icon = 'icons/obj/food/burgerbread.dmi' - bitesize = 2 - custom_food_type = /obj/item/reagent_containers/food/snacks/customizable/sandwich - filling_color = "#FFA500" - list_reagents = list(/datum/reagent/consumable/nutriment = 2) - slot_flags = ITEM_SLOT_HEAD - customfoodfilling = 0 //to avoid infinite bread-ception - foodtype = GRAIN - -/obj/item/reagent_containers/food/snacks/breadslice/Initialize() - . = ..() - AddElement(/datum/element/dunkable, 10) - -/obj/item/reagent_containers/food/snacks/store/bread/plain - name = "bread" - desc = "Some plain old earthen bread." - icon_state = "bread" - bonus_reagents = list(/datum/reagent/consumable/nutriment = 7) - list_reagents = list(/datum/reagent/consumable/nutriment = 10) - custom_food_type = /obj/item/reagent_containers/food/snacks/customizable/bread - slice_path = /obj/item/reagent_containers/food/snacks/breadslice/plain - tastes = list("bread" = 10) - foodtype = GRAIN - -/obj/item/reagent_containers/food/snacks/breadslice/plain - name = "bread slice" - desc = "A slice of home." - icon_state = "breadslice" - customfoodfilling = 1 - foodtype = GRAIN - -/obj/item/reagent_containers/food/snacks/breadslice/moldy - name = "moldy bread slice" - desc = "Entire stations have been ripped apart over arguing whether this is still good to eat." - icon_state = "moldybreadslice" - customfoodfilling = 0 - bonus_reagents = list(/datum/reagent/consumable/mold = 10) - tastes = list("decaying fungus" = 1) - foodtype = GROSS - -/obj/item/reagent_containers/food/snacks/store/bread/meat - name = "meatbread loaf" - desc = "The culinary base of every self-respecting eloquen/tg/entleman." - icon_state = "meatbread" - slice_path = /obj/item/reagent_containers/food/snacks/breadslice/meat - bonus_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/vitamin = 10) - list_reagents = list(/datum/reagent/consumable/nutriment = 30, /datum/reagent/consumable/nutriment/vitamin = 5) - tastes = list("bread" = 10, "meat" = 10) - foodtype = GRAIN | MEAT - -/obj/item/reagent_containers/food/snacks/breadslice/meat - name = "meatbread slice" - desc = "A slice of delicious meatbread." - icon_state = "meatbreadslice" - foodtype = GRAIN | MEAT - -/obj/item/reagent_containers/food/snacks/store/bread/xenomeat - name = "xenomeatbread loaf" - desc = "The culinary base of every self-respecting eloquen/tg/entleman. Extra Heretical." - icon_state = "xenomeatbread" - slice_path = /obj/item/reagent_containers/food/snacks/breadslice/xenomeat - bonus_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/vitamin = 10) - list_reagents = list(/datum/reagent/consumable/nutriment = 30, /datum/reagent/consumable/nutriment/vitamin = 5) - tastes = list("bread" = 10, "acid" = 10) - foodtype = GRAIN | MEAT - -/obj/item/reagent_containers/food/snacks/breadslice/xenomeat - name = "xenomeatbread slice" - desc = "A slice of delicious meatbread. Extra Heretical." - icon_state = "xenobreadslice" - filling_color = "#32CD32" - list_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/nutriment/vitamin = 1) - foodtype = GRAIN | MEAT - -/obj/item/reagent_containers/food/snacks/store/bread/spidermeat - name = "spider meat loaf" - desc = "Reassuringly green meatloaf made from spider meat." - icon_state = "spidermeatbread" - slice_path = /obj/item/reagent_containers/food/snacks/breadslice/spidermeat - bonus_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/vitamin = 10) - list_reagents = list(/datum/reagent/consumable/nutriment = 30, /datum/reagent/toxin = 15, /datum/reagent/consumable/nutriment/vitamin = 5) - tastes = list("bread" = 10, "cobwebs" = 5) - foodtype = GRAIN | MEAT | TOXIC - -/obj/item/reagent_containers/food/snacks/breadslice/spidermeat - name = "spider meat bread slice" - desc = "A slice of meatloaf made from an animal that most likely still wants you dead." - icon_state = "spiderbreadslice" - filling_color = "#7CFC00" - list_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/toxin = 3, /datum/reagent/consumable/nutriment/vitamin = 1) - foodtype = GRAIN | MEAT | TOXIC - -/obj/item/reagent_containers/food/snacks/store/bread/banana - name = "banana-nut bread" - desc = "A heavenly and filling treat." - icon_state = "bananabread" - slice_path = /obj/item/reagent_containers/food/snacks/breadslice/banana - bonus_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/banana = 20) - list_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/banana = 20) - tastes = list("bread" = 10) // bananjuice will also flavour - foodtype = GRAIN | FRUIT - - -/obj/item/reagent_containers/food/snacks/breadslice/banana - name = "banana-nut bread slice" - desc = "A slice of delicious banana bread." - icon_state = "bananabreadslice" - filling_color = "#FFD700" - list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/banana = 4) - foodtype = GRAIN | FRUIT - -/obj/item/reagent_containers/food/snacks/store/bread/tofu - name = "Tofubread" - desc = "Like meatbread but for vegetarians. Not guaranteed to give superpowers." - icon_state = "tofubread" - slice_path = /obj/item/reagent_containers/food/snacks/breadslice/tofu - bonus_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/vitamin = 10) - list_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/nutriment/vitamin = 5) - tastes = list("bread" = 10, "tofu" = 10) - foodtype = GRAIN | VEGETABLES - -/obj/item/reagent_containers/food/snacks/breadslice/tofu - name = "tofubread slice" - desc = "A slice of delicious tofubread." - icon_state = "tofubreadslice" - filling_color = "#FF8C00" - list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/vitamin = 1) - foodtype = GRAIN | VEGETABLES - -/obj/item/reagent_containers/food/snacks/store/bread/creamcheese - name = "cream cheese bread" - desc = "Yum yum yum!" - icon_state = "creamcheesebread" - slice_path = /obj/item/reagent_containers/food/snacks/breadslice/creamcheese - bonus_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/vitamin = 5) - list_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/nutriment/vitamin = 5) - tastes = list("bread" = 10, "cheese" = 10) - foodtype = GRAIN | DAIRY - -/obj/item/reagent_containers/food/snacks/breadslice/creamcheese - name = "cream cheese bread slice" - desc = "A slice of yum!" - icon_state = "creamcheesebreadslice" - filling_color = "#FF8C00" - list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/vitamin = 1) - foodtype = GRAIN | DAIRY - -/obj/item/reagent_containers/food/snacks/store/bread/mimana - name = "mimana bread" - desc = "Best eaten in silence." - icon_state = "mimanabread" - slice_path = /obj/item/reagent_containers/food/snacks/breadslice/mimana - bonus_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/vitamin = 5) - list_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/toxin/mutetoxin = 5, /datum/reagent/consumable/nothing = 5, /datum/reagent/consumable/nutriment/vitamin = 5) - tastes = list("bread" = 10, "silence" = 10) - foodtype = GRAIN | FRUIT - -/obj/item/reagent_containers/food/snacks/breadslice/mimana - name = "mimana bread slice" - desc = "A slice of silence!" - icon_state = "mimanabreadslice" - filling_color = "#C0C0C0" - list_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/toxin/mutetoxin = 1, /datum/reagent/consumable/nothing = 1, /datum/reagent/consumable/nutriment/vitamin = 1) - foodtype = GRAIN | FRUIT - -/obj/item/reagent_containers/food/snacks/breadslice/custom - name = "bread slice" - icon_state = "tofubreadslice" - filling_color = "#FFFFFF" - foodtype = GRAIN - -/obj/item/reagent_containers/food/snacks/baguette - name = "baguette" - desc = "Bon appetit!" - icon = 'icons/obj/food/burgerbread.dmi' - icon_state = "baguette" - item_state = "baguette" - bonus_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/vitamin = 2) - list_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/nutriment/vitamin = 1) - bitesize = 3 - w_class = WEIGHT_CLASS_NORMAL - slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_BELT - attack_verb = list("touche'd") - tastes = list("bread" = 1) - foodtype = GRAIN - -/obj/item/reagent_containers/food/snacks/garlicbread - name = "garlic bread" - desc = "Alas, it is limited." - icon = 'icons/obj/food/burgerbread.dmi' - icon_state = "garlicbread" - item_state = "garlicbread" - bonus_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/vitamin = 2) - list_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/vitamin = 4, /datum/reagent/consumable/garlic = 2) - bitesize = 3 - tastes = list("bread" = 1, "garlic" = 1, "butter" = 1) - foodtype = GRAIN - -/obj/item/reagent_containers/food/snacks/deepfryholder - name = "Deep Fried Foods Holder Obj" - desc = "If you can see this description the code for the deep fryer fucked up." - icon = 'icons/obj/food/food.dmi' - icon_state = "" - bitesize = 2 - -/obj/item/reagent_containers/food/snacks/deepfryholder/Initialize(mapload, obj/item/fried) - . = ..() - name = fried.name //We'll determine the other stuff when it's actually removed - appearance = fried.appearance - layer = initial(layer) - plane = initial(plane) - lefthand_file = fried.lefthand_file - righthand_file = fried.righthand_file - item_state = fried.item_state - desc = fried.desc - w_class = fried.w_class - slowdown = fried.slowdown - equip_delay_self = fried.equip_delay_self - equip_delay_other = fried.equip_delay_other - strip_delay = fried.strip_delay - species_exception = fried.species_exception - item_flags = fried.item_flags - obj_flags = fried.obj_flags - inhand_x_dimension = fried.inhand_x_dimension - inhand_y_dimension = fried.inhand_y_dimension - - if(istype(fried, /obj/item/reagent_containers/food/snacks)) - fried.reagents.trans_to(src, fried.reagents.total_volume) - qdel(fried) - else - fried.forceMove(src) - -/obj/item/reagent_containers/food/snacks/deepfryholder/Destroy() - if(contents) - QDEL_LIST(contents) - . = ..() - -/obj/item/reagent_containers/food/snacks/deepfryholder/On_Consume(mob/living/eater) - if(contents) - QDEL_LIST(contents) - ..() - -/obj/item/reagent_containers/food/snacks/deepfryholder/proc/fry(cook_time = 30) - switch(cook_time) - if(0 to 15) - add_atom_colour(rgb(166,103,54), FIXED_COLOUR_PRIORITY) - name = "lightly-fried [name]" - desc = "[desc] It's been lightly fried in a deep fryer." - if(16 to 49) - add_atom_colour(rgb(103,63,24), FIXED_COLOUR_PRIORITY) - name = "fried [name]" - desc = "[desc] It's been fried, increasing its tastiness value by [rand(1, 75)]%." - if(50 to 59) - add_atom_colour(rgb(63,23,4), FIXED_COLOUR_PRIORITY) - name = "deep-fried [name]" - desc = "[desc] Deep-fried to perfection." - if(60 to INFINITY) - add_atom_colour(rgb(33,19,9), FIXED_COLOUR_PRIORITY) - name = "\proper the physical manifestation of the very concept of fried foods" - desc = "A heavily-fried...something. Who can tell anymore?" - filling_color = color - foodtype |= FRIED - -/obj/item/reagent_containers/food/snacks/butterbiscuit - name = "butter biscuit" - desc = "Well butter my biscuit!" - icon = 'icons/obj/food/food.dmi' - icon_state = "butterbiscuit" - filling_color = "#F0E68C" - list_reagents = list(/datum/reagent/consumable/nutriment = 5) - bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1) - tastes = list("butter" = 1, "biscuit" = 1) - foodtype = GRAIN | BREAKFAST - -/obj/item/reagent_containers/food/snacks/butterdog - name = "butterdog" - desc = "Made from exotic butters." - icon = 'icons/obj/food/food.dmi' - icon_state = "butterdog" - bitesize = 1 - filling_color = "#F1F49A" - list_reagents = list(/datum/reagent/consumable/nutriment = 5) - bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1) - tastes = list("butter", "exotic butter") - foodtype = GRAIN | DAIRY - -/obj/item/reagent_containers/food/snacks/butterdog/ComponentInitialize() - . = ..() - AddComponent(/datum/component/slippery, 80) diff --git a/code/modules/food_and_drinks/food/snacks_cake.dm b/code/modules/food_and_drinks/food/snacks_cake.dm deleted file mode 100644 index d6f6151d47ac..000000000000 --- a/code/modules/food_and_drinks/food/snacks_cake.dm +++ /dev/null @@ -1,431 +0,0 @@ -/obj/item/reagent_containers/food/snacks/store/cake - icon = 'icons/obj/food/piecake.dmi' - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/plain - slices_num = 5 - bitesize = 3 - volume = 80 - list_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/nutriment/vitamin = 5) - tastes = list("cake" = 1) - foodtype = GRAIN | DAIRY - -/obj/item/reagent_containers/food/snacks/cakeslice - icon = 'icons/obj/food/piecake.dmi' - trash = /obj/item/trash/plate - list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/nutriment/vitamin = 1) - customfoodfilling = 0 //to avoid infinite cake-ception - tastes = list("cake" = 1) - foodtype = GRAIN | DAIRY - -/obj/item/reagent_containers/food/snacks/store/cake/plain - name = "plain cake" - desc = "A plain cake, not a lie." - icon_state = "plaincake" - custom_food_type = /obj/item/reagent_containers/food/snacks/customizable/cake - bonus_reagents = list(/datum/reagent/consumable/nutriment = 10, /datum/reagent/consumable/nutriment/vitamin = 2) - tastes = list("sweetness" = 2,"cake" = 5) - foodtype = GRAIN | DAIRY | SUGAR - -/obj/item/reagent_containers/food/snacks/cakeslice/plain - name = "plain cake slice" - desc = "Just a slice of cake, it is enough for everyone." - icon_state = "plaincake_slice" - filling_color = "#FFD700" - customfoodfilling = 1 - tastes = list("sweetness" = 2,"cake" = 5) - foodtype = GRAIN | DAIRY | SUGAR - -/obj/item/reagent_containers/food/snacks/store/cake/carrot - name = "carrot cake" - desc = "A favorite desert of a certain wascally wabbit. Not a lie." - icon_state = "carrotcake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/carrot - slices_num = 5 - bonus_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/medicine/oculine = 5, /datum/reagent/consumable/nutriment/vitamin = 10) - list_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/medicine/oculine = 10, /datum/reagent/consumable/nutriment/vitamin = 5) - tastes = list("cake" = 5, "sweetness" = 2, "carrot" = 1) - foodtype = GRAIN | DAIRY | VEGETABLES | SUGAR - -/obj/item/reagent_containers/food/snacks/cakeslice/carrot - name = "carrot cake slice" - desc = "Carrotty slice of Carrot Cake, carrots are good for your eyes! Also not a lie." - icon_state = "carrotcake_slice" - filling_color = "#FFA500" - list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/medicine/oculine = 2, /datum/reagent/consumable/nutriment/vitamin = 1) - tastes = list("cake" = 5, "sweetness" = 2, "carrot" = 1) - foodtype = GRAIN | DAIRY | VEGETABLES | SUGAR - -/obj/item/reagent_containers/food/snacks/store/cake/brain - name = "brain cake" - desc = "A squishy cake-thing." - icon_state = "braincake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/brain - slices_num = 5 - bonus_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/medicine/mannitol = 10, /datum/reagent/consumable/nutriment/vitamin = 10) - list_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/medicine/mannitol = 10, /datum/reagent/consumable/nutriment/vitamin = 5) - tastes = list("cake" = 5, "sweetness" = 2, "brains" = 1) - foodtype = GRAIN | DAIRY | MEAT | GROSS | SUGAR - -/obj/item/reagent_containers/food/snacks/cakeslice/brain - name = "brain cake slice" - desc = "Lemme tell you something about prions. THEY'RE DELICIOUS." - icon_state = "braincakeslice" - filling_color = "#FF69B4" - list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/medicine/mannitol = 2, /datum/reagent/consumable/nutriment/vitamin = 1) - tastes = list("cake" = 5, "sweetness" = 2, "brains" = 1) - foodtype = GRAIN | DAIRY | MEAT | GROSS | SUGAR - -/obj/item/reagent_containers/food/snacks/store/cake/cheese - name = "cheese cake" - desc = "DANGEROUSLY cheesy." - icon_state = "cheesecake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/cheese - slices_num = 5 - bonus_reagents = list(/datum/reagent/consumable/nutriment/vitamin = 10) - tastes = list("cake" = 4, "cream cheese" = 3) - foodtype = GRAIN | DAIRY - -/obj/item/reagent_containers/food/snacks/cakeslice/cheese - name = "cheese cake slice" - desc = "Slice of pure cheestisfaction." - icon_state = "cheesecake_slice" - filling_color = "#FFFACD" - tastes = list("cake" = 4, "cream cheese" = 3) - foodtype = GRAIN | DAIRY - -/obj/item/reagent_containers/food/snacks/store/cake/orange - name = "orange cake" - desc = "A cake with added orange." - icon_state = "orangecake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/orange - slices_num = 5 - bonus_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 10) - tastes = list("cake" = 5, "sweetness" = 2, "oranges" = 2) - foodtype = GRAIN | DAIRY | FRUIT | SUGAR - -/obj/item/reagent_containers/food/snacks/cakeslice/orange - name = "orange cake slice" - desc = "Just a slice of cake, it is enough for everyone." - icon_state = "orangecake_slice" - filling_color = "#FFA500" - tastes = list("cake" = 5, "sweetness" = 2, "oranges" = 2) - foodtype = GRAIN | DAIRY | FRUIT | SUGAR - -/obj/item/reagent_containers/food/snacks/store/cake/lime - name = "lime cake" - desc = "A cake with added lime." - icon_state = "limecake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/lime - slices_num = 5 - bonus_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 10) - tastes = list("cake" = 5, "sweetness" = 2, "unbearable sourness" = 2) - foodtype = GRAIN | DAIRY | FRUIT | SUGAR - -/obj/item/reagent_containers/food/snacks/cakeslice/lime - name = "lime cake slice" - desc = "Just a slice of cake, it is enough for everyone." - icon_state = "limecake_slice" - filling_color = "#00FF00" - tastes = list("cake" = 5, "sweetness" = 2, "unbearable sourness" = 2) - foodtype = GRAIN | DAIRY | FRUIT | SUGAR - -/obj/item/reagent_containers/food/snacks/store/cake/lemon - name = "lemon cake" - desc = "A cake with added lemon." - icon_state = "lemoncake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/lemon - slices_num = 5 - bonus_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 10) - tastes = list("cake" = 5, "sweetness" = 2, "sourness" = 2) - foodtype = GRAIN | DAIRY | FRUIT | SUGAR - -/obj/item/reagent_containers/food/snacks/cakeslice/lemon - name = "lemon cake slice" - desc = "Just a slice of cake, it is enough for everyone." - icon_state = "lemoncake_slice" - filling_color = "#FFEE00" - tastes = list("cake" = 5, "sweetness" = 2, "sourness" = 2) - foodtype = GRAIN | DAIRY | FRUIT | SUGAR - -/obj/item/reagent_containers/food/snacks/store/cake/chocolate - name = "chocolate cake" - desc = "A cake with added chocolate." - icon_state = "chocolatecake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/chocolate - slices_num = 5 - bonus_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 10) - tastes = list("cake" = 5, "sweetness" = 1, "chocolate" = 4) - foodtype = GRAIN | DAIRY | JUNKFOOD | SUGAR - -/obj/item/reagent_containers/food/snacks/cakeslice/chocolate - name = "chocolate cake slice" - desc = "Just a slice of cake, it is enough for everyone." - icon_state = "chocolatecake_slice" - filling_color = "#A0522D" - tastes = list("cake" = 5, "sweetness" = 1, "chocolate" = 4) - foodtype = GRAIN | DAIRY | JUNKFOOD | SUGAR - -/obj/item/reagent_containers/food/snacks/store/cake/birthday - name = "birthday cake" - desc = "Happy Birthday little clown..." - icon_state = "birthdaycake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/birthday - slices_num = 5 - bonus_reagents = list(/datum/reagent/consumable/nutriment = 7, /datum/reagent/consumable/sprinkles = 10, /datum/reagent/consumable/nutriment/vitamin = 5) - list_reagents = list(/datum/reagent/consumable/nutriment = 20, /datum/reagent/consumable/sprinkles = 10, /datum/reagent/consumable/nutriment/vitamin = 5) - tastes = list("cake" = 5, "sweetness" = 1) - foodtype = GRAIN | DAIRY | JUNKFOOD | SUGAR - -/obj/item/reagent_containers/food/snacks/store/cake/birthday/microwave_act(obj/machinery/microwave/M) //super sekrit club - new /obj/item/clothing/head/hardhat/cakehat(get_turf(src)) - qdel(src) - -/obj/item/reagent_containers/food/snacks/cakeslice/birthday - name = "birthday cake slice" - desc = "A slice of your birthday." - icon_state = "birthdaycakeslice" - filling_color = "#DC143C" - list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/sprinkles = 2, /datum/reagent/consumable/nutriment/vitamin = 1) - tastes = list("cake" = 5, "sweetness" = 1) - foodtype = GRAIN | DAIRY | JUNKFOOD | SUGAR - -/obj/item/reagent_containers/food/snacks/store/cake/birthday/energy - name = "energy cake" - desc = "Just enough calories for a whole nuclear operative squad." - icon_state = "energycake" - force = 5 - hitsound = 'sound/weapons/blade1.ogg' - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/birthday/energy - list_reagents = list(/datum/reagent/consumable/nutriment = 10, /datum/reagent/consumable/sprinkles = 10, /datum/reagent/consumable/nutriment/vitamin = 5, /datum/reagent/consumable/pacfuel = 10, /datum/reagent/consumable/liquidelectricity = 10) - tastes = list("cake" = 3, "a Vlad's Salad" = 1) - -/obj/item/reagent_containers/food/snacks/store/cake/birthday/energy/proc/energy_bite(mob/living/user) - to_chat(user, "As you eat the cake, you accidentally hurt yourself on the embedded energy sword!") - user.apply_damage(30,BRUTE,BODY_ZONE_HEAD) - playsound(user, 'sound/weapons/blade1.ogg', 5, TRUE) - -/obj/item/reagent_containers/food/snacks/store/cake/birthday/energy/attack(mob/living/M, mob/living/user) - . = ..() - if(HAS_TRAIT(user, TRAIT_PACIFISM) && M != user) //Prevents pacifists from attacking others directly - return - energy_bite(M, user) - -/obj/item/reagent_containers/food/snacks/store/cake/birthday/energy/microwave_act(obj/machinery/microwave/M) //super sekriter club - new /obj/item/clothing/head/hardhat/cakehat/energycake(get_turf(src)) - qdel(src) - -/obj/item/reagent_containers/food/snacks/cakeslice/birthday/energy - name = "energy cake slice" - desc = "For the traitor on the go." - icon_state = "energycakeslice" - force = 2 - hitsound = 'sound/weapons/blade1.ogg' - filling_color = "#00FF00" - list_reagents = list(/datum/reagent/consumable/nutriment = 4, /datum/reagent/consumable/sprinkles = 2, /datum/reagent/consumable/nutriment/vitamin = 1, /datum/reagent/consumable/pacfuel = 2, /datum/reagent/consumable/liquidelectricity = 2) - tastes = list("cake" = 3, "a Vlad's Salad" = 1) - -/obj/item/reagent_containers/food/snacks/cakeslice/birthday/energy/proc/energy_bite(mob/living/user) - to_chat(user, "As you eat the cake slice, you accidentally hurt yourself on the embedded energy dagger!") - user.apply_damage(18,BRUTE,BODY_ZONE_HEAD) - playsound(user, 'sound/weapons/blade1.ogg', 5, TRUE) - -/obj/item/reagent_containers/food/snacks/cakeslice/birthday/energy/attack(mob/living/M, mob/living/user) - . = ..() - if(HAS_TRAIT(user, TRAIT_PACIFISM) && M != user) //Prevents pacifists from attacking others directly - return - energy_bite(M, user) - -/obj/item/reagent_containers/food/snacks/store/cake/apple - name = "apple cake" - desc = "A cake centred with Apple." - icon_state = "applecake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/apple - slices_num = 5 - bonus_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 10) - tastes = list("cake" = 5, "sweetness" = 1, "apple" = 1) - foodtype = GRAIN | DAIRY | FRUIT | SUGAR - -/obj/item/reagent_containers/food/snacks/cakeslice/apple - name = "apple cake slice" - desc = "A slice of heavenly cake." - icon_state = "applecakeslice" - filling_color = "#FF4500" - tastes = list("cake" = 5, "sweetness" = 1, "apple" = 1) - foodtype = GRAIN | DAIRY | FRUIT | SUGAR - -/obj/item/reagent_containers/food/snacks/cakeslice/custom - name = "cake slice" - icon_state = "plaincake_slice" - filling_color = "#FFFFFF" - foodtype = GRAIN | DAIRY - -/obj/item/reagent_containers/food/snacks/store/cake/slimecake - name = "Slime cake" - desc = "A cake made of slimes. Probably not electrified." - icon_state = "slimecake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/slimecake - bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 3) - tastes = list("cake" = 5, "sweetness" = 1, "slime" = 1) - foodtype = GRAIN | DAIRY | SUGAR - -/obj/item/reagent_containers/food/snacks/cakeslice/slimecake - name = "slime cake slice" - desc = "A slice of slime cake." - icon_state = "slimecake_slice" - filling_color = "#00FFFF" - tastes = list("cake" = 5, "sweetness" = 1, "slime" = 1) - foodtype = GRAIN | DAIRY | SUGAR - -/obj/item/reagent_containers/food/snacks/store/cake/pumpkinspice - name = "pumpkin spice cake" - desc = "A hollow cake with real pumpkin." - icon_state = "pumpkinspicecake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/pumpkinspice - bonus_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 5) - tastes = list("cake" = 5, "sweetness" = 1, "pumpkin" = 1) - foodtype = GRAIN | DAIRY | VEGETABLES | SUGAR - -/obj/item/reagent_containers/food/snacks/cakeslice/pumpkinspice - name = "pumpkin spice cake slice" - desc = "A spicy slice of pumpkin goodness." - icon_state = "pumpkinspicecakeslice" - filling_color = "#FFD700" - tastes = list("cake" = 5, "sweetness" = 1, "pumpkin" = 1) - foodtype = GRAIN | DAIRY | VEGETABLES | SUGAR - -/obj/item/reagent_containers/food/snacks/store/cake/bsvc // blackberry strawberries vanilla cake - name = "blackberry and strawberry vanilla cake" - desc = "A plain cake, filled with assortment of blackberries and strawberries!" - icon_state = "blackbarry_strawberries_cake_vanilla_cake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/bsvc - bonus_reagents = list(/datum/reagent/consumable/nutriment = 14, /datum/reagent/consumable/nutriment/vitamin = 4) - tastes = list("blackberry" = 2, "strawberries" = 2, "vanilla" = 2, "sweetness" = 2, "cake" = 3) - foodtype = GRAIN | DAIRY | FRUIT | SUGAR - -/obj/item/reagent_containers/food/snacks/cakeslice/bsvc - name = "blackberry and strawberry vanilla cake slice" - desc = "Just a slice of cake filled with assortment of blackberries and strawberries!" - icon_state = "blackbarry_strawberries_cake_vanilla_slice" - filling_color = "#FFD700" - tastes = list("blackberry" = 2, "strawberries" = 2, "vanilla" = 2, "sweetness" = 2,"cake" = 3) - foodtype = GRAIN | DAIRY | FRUIT | SUGAR - -/obj/item/reagent_containers/food/snacks/store/cake/bscc // blackbarry strawberries chocolate cake - name = "blackberry and strawberry chocolate cake" - desc = "A chocolate cake, filled with assortment of blackberries and strawberries!" - icon_state = "blackbarry_strawberries_cake_coco_cake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/bscc - bonus_reagents = list(/datum/reagent/consumable/nutriment = 14, /datum/reagent/consumable/nutriment/vitamin = 4, /datum/reagent/consumable/coco = 5) - tastes = list("blackberry" = 2, "strawberries" = 2, "chocolate" = 2, "sweetness" = 2,"cake" = 3) - foodtype = GRAIN | DAIRY | FRUIT | SUGAR - -/obj/item/reagent_containers/food/snacks/cakeslice/bscc - name = "blackberry and strawberry chocolate cake slice" - desc = "Just a slice of cake filled with assortment of blackberries and strawberries!" - icon_state = "blackbarry_strawberries_cake_coco_slice" - filling_color = "#FFD700" - tastes = list("blackberry" = 2, "strawberries" = 2, "chocolate" = 2, "sweetness" = 2,"cake" = 3) - foodtype = GRAIN | DAIRY | FRUIT | SUGAR - -/obj/item/reagent_containers/food/snacks/store/cake/holy_cake - name = "angel food cake" - desc = "A cake made for angels and chaplains alike! Contains holy water." - icon_state = "holy_cake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/holy_cake_slice - bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 3, /datum/reagent/water/holywater = 10) - tastes = list("cake" = 5, "sweetness" = 1, "clouds" = 1) - foodtype = GRAIN | DAIRY | SUGAR - -/obj/item/reagent_containers/food/snacks/cakeslice/holy_cake_slice - name = "angel food cake slice" - desc = "A slice of heavenly cake." - icon_state = "holy_cake_slice" - filling_color = "#00FFFF" - tastes = list("cake" = 5, "sweetness" = 1, "clouds" = 1) - foodtype = GRAIN | DAIRY | SUGAR - -/obj/item/reagent_containers/food/snacks/store/cake/pound_cake - name = "pound cake" - desc = "A condensed cake made for filling people up quickly." - icon_state = "pound_cake" - slices_num = 7 //Its ment to feed the party - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/pound_cake_slice - bonus_reagents = list(/datum/reagent/consumable/nutriment = 60) - tastes = list("cake" = 5, "sweetness" = 1, "batter" = 1) - foodtype = GRAIN | DAIRY | SUGAR | JUNKFOOD - -/obj/item/reagent_containers/food/snacks/cakeslice/pound_cake_slice - name = "pound cake slice" - desc = "A slice of condensed cake made for filling people up quickly." - icon_state = "pound_cake_slice" - filling_color = "#00FFFF" - tastes = list("cake" = 5, "sweetness" = 5, "batter" = 1) - foodtype = GRAIN | DAIRY | SUGAR | JUNKFOOD - -/obj/item/reagent_containers/food/snacks/store/cake/hardware_cake - name = "hardware cake" - desc = "A quote on quote cake that is made with electronic boards and leaks acid..." - icon_state = "hardware_cake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/hardware_cake_slice - bonus_reagents = list(/datum/reagent/toxin/acid = 15, /datum/reagent/fuel/oil = 15) - tastes = list("acid" = 3, "metal" = 4, "glass" = 5) - foodtype = GRAIN | GROSS - -/obj/item/reagent_containers/food/snacks/cakeslice/hardware_cake_slice - name = "hardware cake slice" - desc = "A slice of electronic boards and some acid." - icon_state = "hardware_cake_slice" - filling_color = "#00FFFF" - tastes = list("acid" = 3, "metal" = 4, "glass" = 5) - foodtype = GRAIN | GROSS - -/obj/item/reagent_containers/food/snacks/store/cake/vanilla_cake - name = "vanilla cake" - desc = "A vanilla frosted cake." - icon_state = "vanillacake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/vanilla_slice - bonus_reagents = list(/datum/reagent/consumable/sugar = 15, /datum/reagent/consumable/vanilla = 15) - tastes = list("cake" = 1, "sugar" = 1, "vanilla" = 10) - foodtype = GRAIN | SUGAR | DAIRY - -/obj/item/reagent_containers/food/snacks/cakeslice/vanilla_slice - name = "vanilla cake slice" - desc = "A slice of vanilla frosted cake." - icon_state = "vanillacake_slice" - filling_color = "#00FFFF" - tastes = list("cake" = 1, "sugar" = 1, "vanilla" = 10) - foodtype = GRAIN | SUGAR | DAIRY - -/obj/item/reagent_containers/food/snacks/store/cake/clown_cake - name = "clown cake" - desc = "A funny cake with a clown face on it." - icon_state = "clowncake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/clown_slice - bonus_reagents = list(/datum/reagent/consumable/sugar = 15) - tastes = list("cake" = 1, "sugar" = 1, "joy" = 10) - foodtype = GRAIN | SUGAR | DAIRY - -/obj/item/reagent_containers/food/snacks/cakeslice/clown_slice - name = "clown cake slice" - desc = "A slice of bad jokes, and silly props." - icon_state = "clowncake_slice" - filling_color = "#00FFFF" - tastes = list("cake" = 1, "sugar" = 1, "joy" = 10) - foodtype = GRAIN | SUGAR | DAIRY - -/obj/item/reagent_containers/food/snacks/store/cake/trumpet - name = "spaceman's cake" - desc = "A spaceman's trumpet frosted cake." - icon_state = "trumpetcake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/trumpet - bonus_reagents = list(/datum/reagent/medicine/polypyr = 15, /datum/reagent/consumable/cream = 5, /datum/reagent/consumable/nutriment/vitamin = 5, /datum/reagent/consumable/berryjuice = 5) - filling_color = "#7A3D80" - tastes = list("cake" = 4, "violets" = 2, "jam" = 2) - foodtype = GRAIN | DAIRY | FRUIT | SUGAR - -/obj/item/reagent_containers/food/snacks/cakeslice/trumpet - name = "spaceman's cake" - desc = "A spaceman's trumpet frosted cake." - icon_state = "trumpetcakeslice" - filling_color = "#7A3D80" - tastes = list("cake" = 4, "violets" = 2, "jam" = 2) - foodtype = GRAIN | DAIRY | FRUIT | SUGAR diff --git a/code/modules/food_and_drinks/food/snacks_egg.dm b/code/modules/food_and_drinks/food/snacks_egg.dm index 360053c28ca4..665d94e1fa9b 100644 --- a/code/modules/food_and_drinks/food/snacks_egg.dm +++ b/code/modules/food_and_drinks/food/snacks_egg.dm @@ -10,6 +10,8 @@ filling_color = "#A0522D" tastes = list("chocolate" = 4, "sweetness" = 1) foodtype = JUNKFOOD | SUGAR + /*food_flags = FOOD_FINGER_FOOD*/ + w_class = WEIGHT_CLASS_TINY /obj/item/reagent_containers/food/snacks/egg name = "egg" @@ -18,7 +20,8 @@ list_reagents = list(/datum/reagent/consumable/eggyolk = 5) cooked_type = /obj/item/reagent_containers/food/snacks/boiledegg filling_color = "#F0E68C" - foodtype = MEAT + foodtype = MEAT | RAW + w_class = WEIGHT_CLASS_TINY grind_results = list() var/static/chick_count = 0 //I copied this from the chicken_count (note the "en" in there) variable from chicken code. @@ -106,6 +109,8 @@ list_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/vitamin = 1) tastes = list("egg" = 1) foodtype = MEAT | BREAKFAST + /*food_flags = FOOD_FINGER_FOOD*/ + w_class = WEIGHT_CLASS_TINY /obj/item/reagent_containers/food/snacks/omelette //FUCK THIS name = "omelette du fromage" diff --git a/code/modules/food_and_drinks/food/snacks_frozen.dm b/code/modules/food_and_drinks/food/snacks_frozen.dm index e35cb7eeb5fe..d79b91507c1b 100644 --- a/code/modules/food_and_drinks/food/snacks_frozen.dm +++ b/code/modules/food_and_drinks/food/snacks_frozen.dm @@ -8,20 +8,24 @@ desc = "Portable Ice-cream in its own packaging." icon = 'icons/obj/food/frozen_treats.dmi' icon_state = "icecreamsandwich" + w_class = WEIGHT_CLASS_TINY bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/ice = 2) list_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/ice = 2) tastes = list("ice cream" = 1) foodtype = GRAIN | DAIRY | SUGAR + /*food_flags = FOOD_FINGER_FOOD*/ /obj/item/reagent_containers/food/snacks/strawberryicecreamsandwich name = "strawberry ice cream sandwich" desc = "Portable ice-cream in its own packaging of the strawberry variety." icon = 'icons/obj/food/frozen_treats.dmi' icon_state = "strawberryicecreamsandwich" + w_class = WEIGHT_CLASS_TINY bonus_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/ice = 2) list_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/ice = 2) tastes = list("ice cream" = 2, "berry" = 2) foodtype = FRUIT | DAIRY | SUGAR + /*food_flags = FOOD_FINGER_FOOD*/ /obj/item/reagent_containers/food/snacks/spacefreezy @@ -29,6 +33,7 @@ desc = "The best icecream in space." icon = 'icons/obj/food/frozen_treats.dmi' icon_state = "spacefreezy" + w_class = WEIGHT_CLASS_TINY bonus_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/vitamin = 2) list_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/bluecherryjelly = 5, /datum/reagent/consumable/nutriment/vitamin = 4) filling_color = "#87CEFA" @@ -40,6 +45,7 @@ desc = "A classic dessert." icon = 'icons/obj/food/frozen_treats.dmi' icon_state = "sundae" + w_class = WEIGHT_CLASS_SMALL bonus_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/vitamin = 1) list_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/banana = 5, /datum/reagent/consumable/nutriment/vitamin = 2) filling_color = "#FFFACD" @@ -66,12 +72,14 @@ desc = "It's just shaved ice. Still fun to chew on." icon = 'icons/obj/food/frozen_treats.dmi' icon_state = "flavorless_sc" + w_class = WEIGHT_CLASS_SMALL trash = /obj/item/reagent_containers/food/drinks/sillycup //We dont eat paper cups bonus_reagents = list(/datum/reagent/water = 10) //Base line will allways give water list_reagents = list(/datum/reagent/water = 1) // We dont get food for water/juices filling_color = "#FFFFFF" //Ice is white tastes = list("ice" = 1, "water" = 1) foodtype = SUGAR //We use SUGAR as a base line to act in as junkfood, other wise we use fruit + /*food_flags = FOOD_FINGER_FOOD*/ /obj/item/reagent_containers/food/snacks/snowcones/lime name = "lime snowcone" diff --git a/code/modules/food_and_drinks/food/snacks_meat.dm b/code/modules/food_and_drinks/food/snacks_meat.dm index 510130ce08be..c088b2259610 100644 --- a/code/modules/food_and_drinks/food/snacks_meat.dm +++ b/code/modules/food_and_drinks/food/snacks_meat.dm @@ -211,6 +211,8 @@ filling_color = "#800000" tastes = list("meat" = 1) foodtype = MEAT + /*food_flags = FOOD_FINGER_FOOD*/ + w_class = WEIGHT_CLASS_SMALL /obj/item/reagent_containers/food/snacks/sausage name = "sausage" @@ -223,6 +225,7 @@ slices_num = 6 slice_path = /obj/item/reagent_containers/food/snacks/salami foodtype = MEAT | BREAKFAST + /*food_flags = FOOD_FINGER_FOOD*/ var/roasted = FALSE /obj/item/reagent_containers/food/snacks/sausage/Initialize() @@ -266,6 +269,8 @@ filling_color = "#CD853F" tastes = list("the jungle" = 1, "bananas" = 1) foodtype = MEAT | SUGAR + /*food_flags = FOOD_FINGER_FOOD*/ + w_class = WEIGHT_CLASS_TINY var/faction var/spawned_mob = /mob/living/carbon/monkey custom_price = 300 @@ -359,6 +364,8 @@ list_reagents = list(/datum/reagent/consumable/nutriment = 2) tastes = list("\"chicken\"" = 1) foodtype = MEAT + /*food_flags = FOOD_FINGER_FOOD*/ + w_class = WEIGHT_CLASS_TINY /obj/item/reagent_containers/food/snacks/nugget/Initialize() . = ..() diff --git a/code/modules/food_and_drinks/food/snacks_other.dm b/code/modules/food_and_drinks/food/snacks_other.dm index 361e36ae9544..0e55d21b3505 100644 --- a/code/modules/food_and_drinks/food/snacks_other.dm +++ b/code/modules/food_and_drinks/food/snacks_other.dm @@ -37,7 +37,9 @@ filling_color = "#FF1493" tastes = list("watermelon" = 1) foodtype = FRUIT + /*food_flags = FOOD_FINGER_FOOD*/ juice_results = list(/datum/reagent/consumable/watermelonjuice = 5) + w_class = WEIGHT_CLASS_SMALL /obj/item/reagent_containers/food/snacks/candy_corn name = "candy corn" @@ -47,6 +49,8 @@ filling_color = "#FF8C00" tastes = list("candy corn" = 1) foodtype = JUNKFOOD | SUGAR + /*food_flags = FOOD_FINGER_FOOD*/ + w_class = WEIGHT_CLASS_TINY /obj/item/reagent_containers/food/snacks/candy_corn/prison name = "desiccated candy corn" @@ -64,6 +68,8 @@ filling_color = "#A0522D" tastes = list("chocolate" = 1) foodtype = JUNKFOOD | SUGAR + /*food_flags = FOOD_FINGER_FOOD*/ + w_class = WEIGHT_CLASS_TINY /obj/item/reagent_containers/food/snacks/hugemushroomslice name = "huge mushroom slice" @@ -179,6 +185,8 @@ list_reagents = list(/datum/reagent/toxin/minttoxin = 2) filling_color = "#800000" foodtype = TOXIC | SUGAR + /*food_flags = FOOD_FINGER_FOOD*/ + w_class = WEIGHT_CLASS_TINY /obj/item/reagent_containers/food/snacks/eggwrap name = "egg wrap" @@ -216,6 +224,8 @@ filling_color = "#00800" tastes = list("cobwebs" = 1, "sugar" = 2) foodtype = JUNKFOOD | SUGAR + /*food_flags = FOOD_FINGER_FOOD*/ + w_class = WEIGHT_CLASS_TINY /obj/item/reagent_containers/food/snacks/chococoin name = "chocolate coin" @@ -226,6 +236,8 @@ filling_color = "#A0522D" tastes = list("chocolate" = 1) foodtype = JUNKFOOD | SUGAR + /*food_flags = FOOD_FINGER_FOOD*/ + w_class = WEIGHT_CLASS_SMALL /obj/item/reagent_containers/food/snacks/fudgedice name = "fudge dice" @@ -237,6 +249,8 @@ trash = /obj/item/dice/fudge tastes = list("fudge" = 1) foodtype = JUNKFOOD | SUGAR + /*food_flags = FOOD_FINGER_FOOD*/ + w_class = WEIGHT_CLASS_SMALL /obj/item/reagent_containers/food/snacks/chocoorange name = "chocolate orange" @@ -247,6 +261,8 @@ filling_color = "#A0522D" tastes = list("chocolate" = 3, "oranges" = 1) foodtype = JUNKFOOD | SUGAR + /*food_flags = FOOD_FINGER_FOOD*/ + w_class = WEIGHT_CLASS_SMALL /obj/item/reagent_containers/food/snacks/eggplantparm name = "eggplant parmigiana" @@ -391,6 +407,8 @@ filling_color = "#F2CE91" tastes = list("oats" = 3, "nuts" = 2, "honey" = 1) foodtype = GRAIN | SUGAR + /*food_flags = FOOD_FINGER_FOOD*/ + w_class = WEIGHT_CLASS_SMALL /obj/item/reagent_containers/food/snacks/stuffedlegion name = "stuffed legion" @@ -471,6 +489,8 @@ next_succ = 0 tastes = list("candy" = 1) foodtype = JUNKFOOD | SUGAR + /*food_flags = FOOD_FINGER_FOOD*/ + w_class = WEIGHT_CLASS_TINY /obj/item/reagent_containers/food/snacks/chewable/lollipop/Initialize() . = ..() @@ -562,6 +582,8 @@ list_reagents = list(/datum/reagent/consumable/sugar = 5, /datum/reagent/medicine/bicaridine = 2, /datum/reagent/medicine/kelotane = 2) //Kek tastes = list("candy") foodtype = JUNKFOOD + /*food_flags = FOOD_FINGER_FOOD*/ + w_class = WEIGHT_CLASS_TINY /obj/item/reagent_containers/food/snacks/gumball/Initialize() . = ..() @@ -642,6 +664,7 @@ desc = "delicious, golden, fatty goodness on a stick." icon_state = "butteronastick" trash = /obj/item/stack/rods + /*food_flags = FOOD_FINGER_FOOD*/ /obj/item/reagent_containers/food/snacks/onionrings name = "onion rings" @@ -652,6 +675,7 @@ gender = PLURAL tastes = list("batter" = 3, "onion" = 1) foodtype = VEGETABLES + w_class = WEIGHT_CLASS_SMALL /obj/item/reagent_containers/food/snacks/pineappleslice name = "pineapple slice" @@ -661,6 +685,7 @@ juice_results = list(/datum/reagent/consumable/pineapplejuice = 3) tastes = list("pineapple" = 1) foodtype = FRUIT | PINEAPPLE + w_class = WEIGHT_CLASS_TINY /obj/item/reagent_containers/food/snacks/tinychocolate name = "chocolate" diff --git a/code/modules/food_and_drinks/food/snacks_pastry.dm b/code/modules/food_and_drinks/food/snacks_pastry.dm index ee0dd7ab58de..7cb9f05900ba 100644 --- a/code/modules/food_and_drinks/food/snacks_pastry.dm +++ b/code/modules/food_and_drinks/food/snacks_pastry.dm @@ -13,6 +13,8 @@ filling_color = "#D2691E" tastes = list("donut" = 1) foodtype = JUNKFOOD | GRAIN | FRIED | SUGAR | BREAKFAST + /*food_flags = FOOD_FINGER_FOOD*/ + w_class = WEIGHT_CLASS_SMALL var/decorated_icon = "donut_homer" var/is_decorated = FALSE var/extra_reagent = null @@ -336,6 +338,8 @@ filling_color = "#F4A460" tastes = list("muffin" = 1) foodtype = GRAIN | SUGAR | BREAKFAST + /*food_flags = FOOD_FINGER_FOOD*/ + w_class = WEIGHT_CLASS_SMALL /obj/item/reagent_containers/food/snacks/muffin/berry name = "berry muffin" @@ -420,6 +424,8 @@ filling_color = "#CD853F" tastes = list("meat" = 2, "dough" = 2, "laziness" = 1) foodtype = GRAIN + /*food_flags = FOOD_FINGER_FOOD*/ + w_class = WEIGHT_CLASS_SMALL /obj/item/reagent_containers/food/snacks/donkpocket/warm name = "warm Donk-pocket" @@ -565,6 +571,8 @@ filling_color = "#F0E68C" tastes = list("cookie" = 1) foodtype = GRAIN | SUGAR + /*food_flags = FOOD_FINGER_FOOD*/ + w_class = WEIGHT_CLASS_SMALL /obj/item/reagent_containers/food/snacks/cookie/Initialize() . = ..() @@ -583,6 +591,8 @@ filling_color = "#F4A460" tastes = list("cookie" = 1) foodtype = GRAIN | SUGAR + /*food_flags = FOOD_FINGER_FOOD*/ + w_class = WEIGHT_CLASS_TINY /obj/item/reagent_containers/food/snacks/fortunecookie/proc/get_fortune() var/atom/drop_location = drop_location() @@ -613,6 +623,8 @@ filling_color = "#F0E68C" tastes = list("pretzel" = 1) foodtype = GRAIN | SUGAR + /*food_flags = FOOD_FINGER_FOOD*/ + w_class = WEIGHT_CLASS_SMALL /obj/item/reagent_containers/food/snacks/plumphelmetbiscuit name = "plump helmet biscuit" @@ -623,6 +635,8 @@ filling_color = "#F0E68C" tastes = list("mushroom" = 1, "biscuit" = 1) foodtype = GRAIN | VEGETABLES + /*food_flags = FOOD_FINGER_FOOD*/ + w_class = WEIGHT_CLASS_SMALL /obj/item/reagent_containers/food/snacks/plumphelmetbiscuit/Initialize() var/fey = prob(10) @@ -644,6 +658,8 @@ filling_color = "#F0E68C" tastes = list("cracker" = 1) foodtype = GRAIN + /*food_flags = FOOD_FINGER_FOOD*/ + w_class = WEIGHT_CLASS_TINY /obj/item/reagent_containers/food/snacks/hotdog name = "hotdog" @@ -732,21 +748,19 @@ name = "cherry cupcake" desc = "A sweet cupcake with cherry bits." icon_state = "cherrycupcake" - bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1) + bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 3) list_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/vitamin = 1) filling_color = "#F0E68C" tastes = list("cake" = 3, "cherry" = 1) foodtype = GRAIN | FRUIT | SUGAR + /*food_flags = FOOD_FINGER_FOOD*/ + w_class = WEIGHT_CLASS_SMALL -/obj/item/reagent_containers/food/snacks/bluecherrycupcake +/obj/item/reagent_containers/food/snacks/cherrycupcake/blue name = "blue cherry cupcake" desc = "Blue cherries inside a delicious cupcake." icon_state = "bluecherrycupcake" - bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 3) - list_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/vitamin = 1) - filling_color = "#F0E68C" tastes = list("cake" = 3, "blue cherry" = 1) - foodtype = GRAIN | FRUIT | SUGAR /obj/item/reagent_containers/food/snacks/honeybun name = "honey bun" diff --git a/code/modules/food_and_drinks/food/snacks_pizza.dm b/code/modules/food_and_drinks/food/snacks_pizza.dm index 9b8e949b06e6..5129911cd311 100644 --- a/code/modules/food_and_drinks/food/snacks_pizza.dm +++ b/code/modules/food_and_drinks/food/snacks_pizza.dm @@ -215,14 +215,3 @@ icon_state = "pizzamargheritaslice" filling_color = "#FFFFFF" foodtype = GRAIN | VEGETABLES - -/obj/item/reagent_containers/food/snacks/pizzaslice/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/kitchen/rollingpin)) - if(!isturf(loc)) - to_chat(user, "You need to put [src] on a surface to roll it out!") - return - new /obj/item/stack/sheet/pizza(loc) - to_chat(user, "You smoosh [src] into a cheesy sheet.") - qdel(src) - return - return ..() diff --git a/code/modules/food_and_drinks/food/snacks_sandwichtoast.dm b/code/modules/food_and_drinks/food/snacks_sandwichtoast.dm index c15a6606be97..169d208bf30d 100644 --- a/code/modules/food_and_drinks/food/snacks_sandwichtoast.dm +++ b/code/modules/food_and_drinks/food/snacks_sandwichtoast.dm @@ -9,6 +9,8 @@ cooked_type = /obj/item/reagent_containers/food/snacks/toastedsandwich tastes = list("meat" = 2, "cheese" = 1, "bread" = 2, "lettuce" = 1) foodtype = GRAIN | VEGETABLES + /*food_flags = FOOD_FINGER_FOOD*/ + w_class = WEIGHT_CLASS_SMALL /obj/item/reagent_containers/food/snacks/toastedsandwich name = "toasted sandwich" @@ -31,6 +33,8 @@ list_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/nutriment/vitamin = 1) tastes = list("toast" = 1, "cheese" = 1) foodtype = GRAIN | DAIRY + /*food_flags = FOOD_FINGER_FOOD*/ + w_class = WEIGHT_CLASS_SMALL /obj/item/reagent_containers/food/snacks/jellysandwich name = "jelly sandwich" diff --git a/code/modules/food_and_drinks/food/snacks_soup.dm b/code/modules/food_and_drinks/food/snacks_soup.dm index c7bcf963faf2..5ec9408dc414 100644 --- a/code/modules/food_and_drinks/food/snacks_soup.dm +++ b/code/modules/food_and_drinks/food/snacks_soup.dm @@ -159,12 +159,12 @@ tastes = list("tomato" = 1, "squirming" = 1) foodtype = MEAT | GORE -/obj/item/reagent_containers/food/snacks/soup/milo - name = "milosoup" +/obj/item/reagent_containers/food/snacks/soup/miso + name = "miso soup" desc = "The universes best soup! Yum!!!" - icon_state = "milosoup" + icon_state = "misosoup" bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 3) - tastes = list("milo" = 1) // wtf is milo + tastes = list("miso" = 1) // wtf is milo foodtype = VEGETABLES /obj/item/reagent_containers/food/snacks/soup/mushroom diff --git a/code/modules/food_and_drinks/food/snacks_spaghetti.dm b/code/modules/food_and_drinks/food/snacks_spaghetti.dm deleted file mode 100644 index 88c1188f1dee..000000000000 --- a/code/modules/food_and_drinks/food/snacks_spaghetti.dm +++ /dev/null @@ -1,106 +0,0 @@ - -/obj/item/reagent_containers/food/snacks/spaghetti - name = "spaghetti" - desc = "Now that's a nic'e pasta!" - icon = 'icons/obj/food/pizzaspaghetti.dmi' - icon_state = "spaghetti" - list_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1) - cooked_type = /obj/item/reagent_containers/food/snacks/spaghetti/boiledspaghetti - filling_color = "#F0E68C" - tastes = list("pasta" = 1) - foodtype = GRAIN - -/obj/item/reagent_containers/food/snacks/spaghetti/Initialize() - . = ..() - if(!cooked_type) // This isn't cooked, why would you put uncooked spaghetti in your pocket? - var/list/display_message = list( - "Something wet falls out of their pocket and hits the ground. Is that... [name]?", - "Oh shit! All your pocket [name] fell out!") - AddComponent(/datum/component/spill, display_message, 'sound/effects/splat.ogg') - -/obj/item/reagent_containers/food/snacks/spaghetti/boiledspaghetti - name = "boiled spaghetti" - desc = "A plain dish of noodles, this needs more ingredients." - icon_state = "spaghettiboiled" - trash = /obj/item/trash/plate - bonus_reagents = list(/datum/reagent/consumable/nutriment = 2) - list_reagents = list(/datum/reagent/consumable/nutriment = 2, /datum/reagent/consumable/nutriment/vitamin = 1) - cooked_type = null - custom_food_type = /obj/item/reagent_containers/food/snacks/customizable/pasta - -/obj/item/reagent_containers/food/snacks/spaghetti/pastatomato - name = "spaghetti" - desc = "Spaghetti and crushed tomatoes. Just like your abusive father used to make!" - icon_state = "pastatomato" - trash = /obj/item/trash/plate - bitesize = 4 - bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/tomatojuice = 10, /datum/reagent/consumable/nutriment/vitamin = 4) - list_reagents = list(/datum/reagent/consumable/nutriment = 6, /datum/reagent/consumable/tomatojuice = 10, /datum/reagent/consumable/nutriment/vitamin = 4) - cooked_type = null - filling_color = "#DC143C" - tastes = list("pasta" = 1, "tomato" = 1) - foodtype = GRAIN | VEGETABLES - -/obj/item/reagent_containers/food/snacks/spaghetti/copypasta - name = "copypasta" - desc = "You probably shouldn't try this, you always hear people talking about how bad it is..." - icon_state = "copypasta" - trash = /obj/item/trash/plate - bitesize = 4 - bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 4) - list_reagents = list(/datum/reagent/consumable/nutriment = 12, /datum/reagent/consumable/tomatojuice = 20, /datum/reagent/consumable/nutriment/vitamin = 8) - cooked_type = null - filling_color = "#DC143C" - tastes = list("pasta" = 1, "tomato" = 1) - foodtype = GRAIN | VEGETABLES - -/obj/item/reagent_containers/food/snacks/spaghetti/meatballspaghetti - name = "spaghetti and meatballs" - desc = "Now that's a nic'e meatball!" - icon_state = "meatballspaghetti" - trash = /obj/item/trash/plate - bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 4) - list_reagents = list(/datum/reagent/consumable/nutriment = 8, /datum/reagent/consumable/nutriment/vitamin = 4) - cooked_type = null - tastes = list("pasta" = 1, "tomato" = 1, "meat" = 1) - foodtype = GRAIN | MEAT - -/obj/item/reagent_containers/food/snacks/spaghetti/spesslaw - name = "spesslaw" - desc = "A lawyers favourite." - icon_state = "spesslaw" - trash = /obj/item/trash/plate - bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 6) - list_reagents = list(/datum/reagent/consumable/nutriment = 8, /datum/reagent/consumable/nutriment/vitamin = 6) - cooked_type = null - tastes = list("pasta" = 1, "tomato" = 1, "meat" = 1) - -/obj/item/reagent_containers/food/snacks/spaghetti/chowmein - name = "chow mein" - desc = "A nice mix of noodles and fried vegetables." - icon_state = "chowmein" - trash = /obj/item/trash/plate - bonus_reagents = list(/datum/reagent/consumable/nutriment = 3, /datum/reagent/consumable/nutriment/vitamin = 4) - list_reagents = list(/datum/reagent/consumable/nutriment = 7, /datum/reagent/consumable/nutriment/vitamin = 6) - cooked_type = null - tastes = list("noodle" = 1, "tomato" = 1) - -/obj/item/reagent_containers/food/snacks/spaghetti/beefnoodle - name = "beef noodle" - desc = "Nutritious, beefy and noodly." - icon_state = "beefnoodle" - trash = /obj/item/reagent_containers/glass/bowl - bonus_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/nutriment/vitamin = 6, /datum/reagent/liquidgibs = 3) - cooked_type = null - tastes = list("noodle" = 1, "meat" = 1) - foodtype = GRAIN | MEAT - -/obj/item/reagent_containers/food/snacks/spaghetti/butternoodles - name = "butter noodles" - desc = "Noodles covered in savory butter. Simple and slippery, but delicious." - icon_state = "butternoodles" - trash = /obj/item/trash/plate - bonus_reagents = list(/datum/reagent/consumable/nutriment = 8, /datum/reagent/consumable/nutriment/vitamin = 1) - cooked_type = null - tastes = list("noodle" = 1, "butter" = 1) - foodtype = GRAIN | DAIRY diff --git a/code/modules/food_and_drinks/food/snacks_vend.dm b/code/modules/food_and_drinks/food/snacks_vend.dm index 94477d1932aa..b071add1027a 100644 --- a/code/modules/food_and_drinks/food/snacks_vend.dm +++ b/code/modules/food_and_drinks/food/snacks_vend.dm @@ -12,6 +12,8 @@ filling_color = "#D2691E" tastes = list("candy" = 1) foodtype = JUNKFOOD | SUGAR + /*food_flags = FOOD_FINGER_FOOD*/ + w_class = WEIGHT_CLASS_TINY /obj/item/reagent_containers/food/snacks/candy/bronx name = "South Bronx Paradise bar" @@ -82,7 +84,9 @@ filling_color = "#8B0000" tastes = list("dried raisins" = 1) foodtype = JUNKFOOD | FRUIT | SUGAR + /*food_flags = FOOD_FINGER_FOOD*/ custom_price = 90 + w_class = WEIGHT_CLASS_SMALL /obj/item/reagent_containers/food/snacks/no_raisin/healthy name = "homemade raisins" @@ -99,7 +103,9 @@ junkiness = 25 filling_color = "#FFD700" foodtype = JUNKFOOD | GRAIN | SUGAR + /*food_flags = FOOD_FINGER_FOOD*/ custom_price = 30 + w_class = WEIGHT_CLASS_SMALL /obj/item/reagent_containers/food/snacks/candy_trash name = "candy cigarette butt" @@ -136,6 +142,7 @@ filling_color = "#F5F5DC" tastes = list("sweetness" = 3, "cake" = 1) foodtype = GRAIN | FRUIT | VEGETABLES + w_class = WEIGHT_CLASS_SMALL /obj/item/reagent_containers/food/snacks/energybar name = "High-power energy bars" @@ -146,3 +153,5 @@ filling_color = "#97ee63" tastes = list("pure electricity" = 3, "fitness" = 2) foodtype = TOXIC + /*food_flags = FOOD_FINGER_FOOD*/ + w_class = WEIGHT_CLASS_SMALL diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm index 8eccd04c8404..bcee075e0dcd 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm @@ -18,6 +18,8 @@ // _- _ // - +//God bless These Deepfried States o7 -2024 + /obj/machinery/deepfryer name = "deep fryer" desc = "Deep fried everything." @@ -27,7 +29,7 @@ use_power = IDLE_POWER_USE idle_power_usage = IDLE_DRAW_LOW layer = BELOW_OBJ_LAYER - var/obj/item/reagent_containers/food/snacks/deepfryholder/frying //What's being fried RIGHT NOW? + var/obj/item/food/deepfryholder/frying //What's being fried RIGHT NOW? var/cook_time = 0 var/oil_use = 0.05 //How much cooking oil is used per tick var/fry_speed = 1 //How quickly we fry food @@ -42,7 +44,7 @@ /obj/item/weldingtool, /obj/item/reagent_containers/glass, /obj/item/reagent_containers/syringe, - /obj/item/reagent_containers/food/condiment, + /obj/item/reagent_containers/condiment, /obj/item/storage, /obj/item/smallDelivery, ) @@ -93,7 +95,7 @@ if(I.resistance_flags & INDESTRUCTIBLE) to_chat(user, "You don't feel it would be wise to fry [I]...") return - if(istype(I, /obj/item/reagent_containers/food/snacks/deepfryholder)) + if(istype(I, /obj/item/food/deepfryholder)) to_chat(user, "Your cooking skills are not up to the legendary Doublefry technique.") return if(default_unfasten_wrench(user, I)) @@ -105,7 +107,7 @@ return ..() else if(!frying && user.transferItemToLoc(I, src)) to_chat(user, "You put [I] into [src].") - frying = new/obj/item/reagent_containers/food/snacks/deepfryholder(src, I) + frying = new/obj/item/food/deepfryholder(src, I) icon_state = "fryer_on" fry_loop.start() diff --git a/code/modules/food_and_drinks/kitchen_machinery/grill.dm b/code/modules/food_and_drinks/kitchen_machinery/grill.dm index c349c7511752..c150fe94498d 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/grill.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/grill.dm @@ -9,7 +9,7 @@ layer = BELOW_OBJ_LAYER use_power = NO_POWER_USE var/grill_fuel = 0 - var/obj/item/reagent_containers/food/grilled_item + var/obj/item/reagent_containers/food/snacks/grilled_item var/grill_time = 0 var/datum/looping_sound/grill/grill_loop @@ -27,68 +27,74 @@ else icon_state = "grill_open" return ..() + +/obj/machinery/grill/examine(mob/user) + . = ..() + if(grill_fuel) + . += span_notice("\The [src] has [grill_fuel] units of fuel left.") + else + . += span_warning("\The [src] is out of fuel! Add some wood or coal!") + /obj/machinery/grill/attackby(obj/item/I, mob/user) if(istype(I, /obj/item/stack/sheet/mineral/coal) || istype(I, /obj/item/stack/sheet/mineral/wood)) var/obj/item/stack/S = I var/stackamount = S.get_amount() - to_chat(user, "You put [stackamount] [I]s in [src].") + to_chat(user, span_notice("You put [stackamount] [I]s in [src].")) if(istype(I, /obj/item/stack/sheet/mineral/coal)) - grill_fuel += (500 * stackamount) - else grill_fuel += (50 * stackamount) + else + grill_fuel += (5 * stackamount) S.use(stackamount) update_appearance() return if(I.resistance_flags & INDESTRUCTIBLE) - to_chat(user, "You don't feel it would be wise to grill [I]...") + to_chat(user, span_warning("You don't feel it would be wise to grill [I]...")) return ..() - if(istype(I, /obj/item/reagent_containers)) - if(istype(I, /obj/item/reagent_containers/food) && !istype(I, /obj/item/reagent_containers/food/drinks)) - var/obj/item/reagent_containers/food/food_item = I - if(HAS_TRAIT(food_item, TRAIT_NODROP) || (food_item.item_flags & (ABSTRACT | DROPDEL))) - return ..() - else if(food_item.foodtype & GRILLED) - to_chat(user, "[food_item] has already been grilled!") - return - else if(!grill_fuel) - to_chat(user, "There is not enough fuel!") - return - else if(!grilled_item && user.transferItemToLoc(food_item, src)) - grilled_item = food_item - grilled_item.foodtype |= GRILLED - to_chat(user, "You put the [grilled_item] on [src].") - update_appearance() - grill_loop.start() - return - else - if(I.reagents.has_reagent(/datum/reagent/consumable/xeno_energy)) - grill_fuel += (20 * (I.reagents.get_reagent_amount(/datum/reagent/consumable/xeno_energy))) - to_chat(user, "You pour the Monkey Energy in [src].") - I.reagents.remove_reagent(/datum/reagent/consumable/xeno_energy, I.reagents.get_reagent_amount(/datum/reagent/consumable/xeno_energy)) - update_appearance() - return + + if(istype(I, /obj/item/reagent_containers/food/snacks)) + var/obj/item/reagent_containers/food/snacks/food_item = I + if(HAS_TRAIT(food_item, TRAIT_NODROP) || (food_item.item_flags & (ABSTRACT | DROPDEL))) + return ..() + else if(food_item.foodtype & GRILLED) + to_chat(user, span_notice("[food_item] has already been grilled!")) + return + else if(grill_fuel <= 0) + to_chat(user, span_warning("There is not enough fuel!")) + return + else if(grilled_item) + to_chat(user,span_warning("\The [src] is already grilling something, take it out first!")) + return + else if(user.transferItemToLoc(food_item, src)) + START_PROCESSING(SSmachines, src) + grilled_item = food_item + to_chat(user, span_notice("You put the [grilled_item] on [src].")) + update_appearance() + grill_loop.start() + return ..() /obj/machinery/grill/process() ..() + if(!grilled_item) + return PROCESS_KILL update_appearance() - if(!grill_fuel) + if(grill_fuel <= 0) + grill_fuel = 0 + visible_message(span_warning("\The [src] is out of fuel!")) + if(grilled_item) + grilled_item.forceMove(loc) + finish_grill() return - else - grill_fuel -= 1 - if(prob(1)) - var/datum/effect_system/smoke_spread/bad/smoke = new - smoke.set_up(1, loc) - smoke.start() - if(grilled_item) - grill_time += 1 - grill_fuel -= 10 - grilled_item.AddComponent(/datum/component/sizzle) + grill_time += 1 + grill_fuel -= 1 + if(prob(1)) + var/datum/effect_system/smoke_spread/bad/smoke = new + smoke.set_up(1, loc) + smoke.start() /obj/machinery/grill/Exited(atom/movable/AM) if(AM == grilled_item) finish_grill() - grilled_item = null . = ..() /obj/machinery/grill/Destroy() @@ -118,13 +124,15 @@ /obj/machinery/grill/attack_hand(mob/user) if(grilled_item) - to_chat(user, "You take out [grilled_item] from [src].") + to_chat(user, span_notice("You take out [grilled_item] from [src].")) grilled_item.forceMove(drop_location()) update_appearance() return return ..() /obj/machinery/grill/proc/finish_grill() + if(grill_time >= 10 && grilled_item.cooked_type) + grilled_item = grilled_item.microwave_act() switch(grill_time) //no 0-9 to prevent spam if(10 to 15) grilled_item.name = "lightly-grilled [grilled_item.name]" @@ -141,8 +149,12 @@ grilled_item.name = "Powerfully Grilled [grilled_item.name]" grilled_item.desc = "A [grilled_item.name]. Reminds you of your wife, wait, no, it's prettier!" grilled_item.foodtype |= FRIED + grilled_item.AddComponent(/datum/component/sizzle, (grill_time * 7.5)) + grilled_item.foodtype |= GRILLED grill_time = 0 grill_loop.stop() + grilled_item = null + update_appearance() /obj/machinery/grill/unwrenched anchored = FALSE diff --git a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm index 1d4e366ad6d9..de4d844aa3ac 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm @@ -210,7 +210,7 @@ return /obj/item/reagent_containers/food/snacks/icecream - name = "ice cream cone" + name = "waffle cone" desc = "Delicious waffle cone, but no ice cream." icon = 'icons/obj/kitchen.dmi' icon_state = "icecream_cone_waffle" //default for admin-spawned cones, href_list["cone"] should overwrite this all the time @@ -220,6 +220,7 @@ var/cone_type bitesize = 4 foodtype = DAIRY | SUGAR + /*food_flags = FOOD_FINGER_FOOD*/ /obj/item/reagent_containers/food/snacks/icecream/Initialize() . = ..() diff --git a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm index 2762892110f8..db88c5d0cc15 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm @@ -362,9 +362,10 @@ name = "flameless ration heater" desc = "A magnisium based ration heater. It can be used to heat up entrees and other food items. reaches the same temperature as a microwave with half the volume." icon = 'icons/obj/food/ration.dmi' - icon_state = "ration_package" + icon_state = "ration_heater" grind_results = list(/datum/reagent/iron = 10, /datum/reagent/water = 10, /datum/reagent/consumable/sodiumchloride = 5) heat = 3800 + w_class = WEIGHT_CLASS_SMALL var/obj/item/tocook = null var/mutable_appearance/ration_overlay var/uses = 3 diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm index 5852ea34742b..9a6b10e0444b 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm @@ -366,7 +366,7 @@ /obj/machinery/smartfridge/drinks/accept_check(obj/item/O) if(!istype(O, /obj/item/reagent_containers) || (O.item_flags & ABSTRACT) || !O.reagents || !O.reagents.reagent_list.len) return FALSE - if(istype(O, /obj/item/reagent_containers/glass) || istype(O, /obj/item/reagent_containers/food/drinks) || istype(O, /obj/item/reagent_containers/food/condiment)) + if(istype(O, /obj/item/reagent_containers/glass) || istype(O, /obj/item/reagent_containers/food/drinks) || istype(O, /obj/item/reagent_containers/condiment)) return TRUE // ---------------------------- diff --git a/code/modules/food_and_drinks/pizzabox.dm b/code/modules/food_and_drinks/pizzabox.dm index 772893e3ff16..b5c4c2c42b85 100644 --- a/code/modules/food_and_drinks/pizzabox.dm +++ b/code/modules/food_and_drinks/pizzabox.dm @@ -96,7 +96,7 @@ . += tag_overlay /obj/item/pizzabox/worn_overlays(isinhands, icon_file) - . = list() + . = ..() var/current_offset = 2 if(isinhands) for(var/V in boxes) //add EXTRA BOX per box diff --git a/code/modules/food_and_drinks/recipes/drinks_recipes.dm b/code/modules/food_and_drinks/recipes/drinks_recipes.dm index 2474d1d53501..9fdacebf8900 100644 --- a/code/modules/food_and_drinks/recipes/drinks_recipes.dm +++ b/code/modules/food_and_drinks/recipes/drinks_recipes.dm @@ -29,6 +29,7 @@ results = list(/datum/reagent/consumable/ethanol/moonshine = 10) required_reagents = list(/datum/reagent/consumable/nutriment = 5, /datum/reagent/consumable/sugar = 5) required_catalysts = list(/datum/reagent/consumable/enzyme = 5) + required_container = /obj/structure/fermenting_barrel /datum/chemical_reaction/wine results = list(/datum/reagent/consumable/ethanol/wine = 10) diff --git a/code/modules/food_and_drinks/recipes/processor_recipes.dm b/code/modules/food_and_drinks/recipes/processor_recipes.dm index 98c5fa053c8f..c13983c6792d 100644 --- a/code/modules/food_and_drinks/recipes/processor_recipes.dm +++ b/code/modules/food_and_drinks/recipes/processor_recipes.dm @@ -31,7 +31,7 @@ /datum/food_processor_process/spaghetti input = /obj/item/reagent_containers/food/snacks/doughslice - output = /obj/item/reagent_containers/food/snacks/spaghetti + output = /obj/item/food/spaghetti/raw /datum/food_processor_process/corn input = /obj/item/reagent_containers/food/snacks/grown/corn 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 f29e948adf4c..751f6017eb90 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm @@ -6,83 +6,72 @@ /datum/crafting_recipe/food/meatbread name = "Meat bread" reqs = list( - /obj/item/reagent_containers/food/snacks/store/bread/plain = 1, + /obj/item/food/bread/plain = 1, /obj/item/reagent_containers/food/snacks/meat/cutlet/plain = 3, /obj/item/reagent_containers/food/snacks/cheesewedge = 3 ) - result = /obj/item/reagent_containers/food/snacks/store/bread/meat + result = /obj/item/food/bread/meat subcategory = CAT_BREAD /datum/crafting_recipe/food/xenomeatbread name = "Xenomeat bread" reqs = list( - /obj/item/reagent_containers/food/snacks/store/bread/plain = 1, + /obj/item/food/bread/plain = 1, /obj/item/reagent_containers/food/snacks/meat/cutlet/xeno = 3, /obj/item/reagent_containers/food/snacks/cheesewedge = 3 ) - result = /obj/item/reagent_containers/food/snacks/store/bread/xenomeat + result = /obj/item/food/bread/xenomeat subcategory = CAT_BREAD /datum/crafting_recipe/food/spidermeatbread name = "Spidermeat bread" reqs = list( - /obj/item/reagent_containers/food/snacks/store/bread/plain = 1, + /obj/item/food/bread/plain = 1, /obj/item/reagent_containers/food/snacks/meat/cutlet/spider = 3, /obj/item/reagent_containers/food/snacks/cheesewedge = 3 ) - result = /obj/item/reagent_containers/food/snacks/store/bread/spidermeat + result = /obj/item/food/bread/spidermeat subcategory = CAT_BREAD /datum/crafting_recipe/food/banananutbread name = "Banana nut bread" reqs = list( /datum/reagent/consumable/milk = 5, - /obj/item/reagent_containers/food/snacks/store/bread/plain = 1, + /obj/item/food/bread/plain = 1, /obj/item/reagent_containers/food/snacks/boiledegg = 3, /obj/item/reagent_containers/food/snacks/grown/banana = 1 ) - result = /obj/item/reagent_containers/food/snacks/store/bread/banana + result = /obj/item/food/bread/banana subcategory = CAT_BREAD /datum/crafting_recipe/food/tofubread name = "Tofu bread" reqs = list( - /obj/item/reagent_containers/food/snacks/store/bread/plain = 1, + /obj/item/food/bread/plain = 1, /obj/item/reagent_containers/food/snacks/tofu = 3, /obj/item/reagent_containers/food/snacks/cheesewedge = 3 ) - result = /obj/item/reagent_containers/food/snacks/store/bread/tofu + result = /obj/item/food/bread/tofu subcategory = CAT_BREAD /datum/crafting_recipe/food/creamcheesebread name = "Cream cheese bread" reqs = list( /datum/reagent/consumable/milk = 5, - /obj/item/reagent_containers/food/snacks/store/bread/plain = 1, + /obj/item/food/bread/plain = 1, /obj/item/reagent_containers/food/snacks/cheesewedge = 2 ) - result = /obj/item/reagent_containers/food/snacks/store/bread/creamcheese - subcategory = CAT_BREAD - -/datum/crafting_recipe/food/mimanabread - name = "Mimana bread" - reqs = list( - /datum/reagent/consumable/soymilk = 5, - /obj/item/reagent_containers/food/snacks/store/bread/plain = 1, - /obj/item/reagent_containers/food/snacks/tofu = 3, - /obj/item/reagent_containers/food/snacks/grown/banana/mime = 1 - ) - result = /obj/item/reagent_containers/food/snacks/store/bread/mimana + result = /obj/item/food/bread/creamcheese subcategory = CAT_BREAD /datum/crafting_recipe/food/garlicbread name = "Garlic Bread" time = 40 reqs = list(/obj/item/reagent_containers/food/snacks/grown/garlic = 1, - /obj/item/reagent_containers/food/snacks/breadslice/plain = 1, + /obj/item/food/breadslice/plain = 1, /obj/item/reagent_containers/food/snacks/butter = 1 ) - result = /obj/item/reagent_containers/food/snacks/garlicbread + result = /obj/item/food/garlicbread subcategory = CAT_BREAD /datum/crafting_recipe/food/butterbiscuit @@ -91,7 +80,7 @@ /obj/item/reagent_containers/food/snacks/bun = 1, /obj/item/reagent_containers/food/snacks/butter = 1 ) - result = /obj/item/reagent_containers/food/snacks/butterbiscuit + result = /obj/item/food/butterbiscuit subcategory = CAT_BREAD /datum/crafting_recipe/food/butterdog @@ -100,14 +89,14 @@ /obj/item/reagent_containers/food/snacks/bun = 1, /obj/item/reagent_containers/food/snacks/butter = 3, ) - result = /obj/item/reagent_containers/food/snacks/butterdog + result = /obj/item/food/butterdog subcategory = CAT_BREAD /datum/crafting_recipe/food/moldybread // why would you make this? name = "Moldy Bread" reqs = list( - /obj/item/reagent_containers/food/snacks/breadslice/plain = 1, + /obj/item/food/breadslice/plain = 1, /obj/item/reagent_containers/food/snacks/grown/mushroom/amanita = 1 ) - result = /obj/item/reagent_containers/food/snacks/breadslice/moldy + result = /obj/item/food/breadslice/moldy subcategory = CAT_BREAD diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm index 38ea04421827..4f5838909486 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm @@ -91,34 +91,6 @@ result = /obj/item/reagent_containers/food/snacks/burger/tofu subcategory = CAT_BURGER -/datum/crafting_recipe/food/ghostburger - name = "Ghost burger" - reqs = list( - /obj/item/ectoplasm = 1, - /datum/reagent/consumable/sodiumchloride = 2, - /obj/item/reagent_containers/food/snacks/bun = 1 - ) - result = /obj/item/reagent_containers/food/snacks/burger/ghost - subcategory = CAT_BURGER - -/datum/crafting_recipe/food/clownburger - name = "Clown burger" - reqs = list( - /obj/item/clothing/mask/gas/clown_hat = 1, - /obj/item/reagent_containers/food/snacks/bun = 1 - ) - result = /obj/item/reagent_containers/food/snacks/burger/clown - subcategory = CAT_BURGER - -/datum/crafting_recipe/food/mimeburger - name = "Mime burger" - reqs = list( - /obj/item/clothing/mask/gas/mime = 1, - /obj/item/reagent_containers/food/snacks/bun = 1 - ) - result = /obj/item/reagent_containers/food/snacks/burger/mime - subcategory = CAT_BURGER - /datum/crafting_recipe/food/redburger name = "Red burger" reqs = list( @@ -199,24 +171,6 @@ result = /obj/item/reagent_containers/food/snacks/burger/white subcategory = CAT_BURGER -/datum/crafting_recipe/food/spellburger - name = "Spell burger" - reqs = list( - /obj/item/clothing/head/wizard/fake = 1, - /obj/item/reagent_containers/food/snacks/bun = 1 - ) - result = /obj/item/reagent_containers/food/snacks/burger/spell - subcategory = CAT_BURGER - -/datum/crafting_recipe/food/spellburger2 - name = "Spell burger" - reqs = list( - /obj/item/clothing/head/wizard = 1, - /obj/item/reagent_containers/food/snacks/bun = 1 - ) - result = /obj/item/reagent_containers/food/snacks/burger/spell - subcategory = CAT_BURGER - /datum/crafting_recipe/food/bigbiteburger name = "Big bite burger" reqs = list( diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm index dcae05095ae8..c79d4cea8474 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm @@ -6,190 +6,170 @@ /datum/crafting_recipe/food/carrotcake name = "Carrot cake" reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/food/cake/plain = 1, /obj/item/reagent_containers/food/snacks/grown/carrot = 2 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/carrot + result = /obj/item/food/cake/carrot subcategory = CAT_CAKE /datum/crafting_recipe/food/cheesecake name = "Cheese cake" reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/food/cake/plain = 1, /obj/item/reagent_containers/food/snacks/cheesewedge = 2 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/cheese + result = /obj/item/food/cake/cheese subcategory = CAT_CAKE /datum/crafting_recipe/food/applecake name = "Apple cake" reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/food/cake/plain = 1, /obj/item/reagent_containers/food/snacks/grown/apple = 2 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/apple + result = /obj/item/food/cake/apple subcategory = CAT_CAKE /datum/crafting_recipe/food/orangecake name = "Orange cake" reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/food/cake/plain = 1, /obj/item/reagent_containers/food/snacks/grown/citrus/orange = 2 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/orange + result = /obj/item/food/cake/orange subcategory = CAT_CAKE /datum/crafting_recipe/food/limecake name = "Lime cake" reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/food/cake/plain = 1, /obj/item/reagent_containers/food/snacks/grown/citrus/lime = 2 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/lime + result = /obj/item/food/cake/lime subcategory = CAT_CAKE /datum/crafting_recipe/food/lemoncake name = "Lemon cake" reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/food/cake/plain = 1, /obj/item/reagent_containers/food/snacks/grown/citrus/lemon = 2 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/lemon + result = /obj/item/food/cake/lemon subcategory = CAT_CAKE /datum/crafting_recipe/food/chocolatecake name = "Chocolate cake" reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/food/cake/plain = 1, /obj/item/reagent_containers/food/snacks/chocolatebar = 2 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/chocolate + result = /obj/item/food/cake/chocolate subcategory = CAT_CAKE /datum/crafting_recipe/food/birthdaycake name = "Birthday cake" reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/food/cake/plain = 1, /obj/item/candle = 1, /datum/reagent/consumable/sugar = 5, /datum/reagent/consumable/caramel = 2 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/birthday + result = /obj/item/food/cake/birthday subcategory = CAT_CAKE /datum/crafting_recipe/food/energycake name = "Energy cake" reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/birthday = 1, + /obj/item/food/cake/birthday = 1, /obj/item/melee/transforming/energy/sword = 1, ) - blacklist = list(/obj/item/reagent_containers/food/snacks/store/cake/birthday/energy) - result = /obj/item/reagent_containers/food/snacks/store/cake/birthday/energy + blacklist = list(/obj/item/food/cake/birthday/energy) + result = /obj/item/food/cake/birthday/energy subcategory = CAT_CAKE /datum/crafting_recipe/food/braincake name = "Brain cake" reqs = list( /obj/item/organ/brain = 1, - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1 + /obj/item/food/cake/plain = 1 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/brain - subcategory = CAT_CAKE - -/datum/crafting_recipe/food/slimecake - name = "Slime cake" - reqs = list( - /obj/item/slime_extract = 1, - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1 - ) - result = /obj/item/reagent_containers/food/snacks/store/cake/slimecake + result = /obj/item/food/cake/brain subcategory = CAT_CAKE /datum/crafting_recipe/food/pumpkinspicecake name = "Pumpkin spice cake" reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/food/cake/plain = 1, /obj/item/reagent_containers/food/snacks/grown/pumpkin = 2 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/pumpkinspice + 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, - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1 + /datum/reagent/consumable/cream = 25, + /obj/item/food/cake/plain = 1 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/holy_cake + result = /obj/item/food/cake/holy_cake subcategory = CAT_CAKE /datum/crafting_recipe/food/poundcake name = "Pound cake" reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 4 + /obj/item/food/cake/plain = 4 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/pound_cake + result = /obj/item/food/cake/pound_cake subcategory = CAT_CAKE /datum/crafting_recipe/food/hardwarecake name = "Hardware cake" reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/food/cake/plain = 1, /obj/item/circuitboard = 2, /datum/reagent/toxin/acid = 5 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/hardware_cake + result = /obj/item/food/cake/hardware_cake subcategory = CAT_CAKE /datum/crafting_recipe/food/bscccake - name = "blackberry and strawberry chocolate cake" + name = "Blackberry and Strawberry Chocolate cake" reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/food/cake/plain = 1, /obj/item/reagent_containers/food/snacks/chocolatebar = 2, /obj/item/reagent_containers/food/snacks/grown/berries = 5 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/bscc + result = /obj/item/food/cake/bscc subcategory = CAT_CAKE /datum/crafting_recipe/food/bscvcake - name = "blackberry and strawberry vanilla cake" + name = "Blackberry and Strawberry Vanilla cake" reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/food/cake/plain = 1, /obj/item/reagent_containers/food/snacks/grown/berries = 5 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/bsvc - subcategory = CAT_CAKE - -/datum/crafting_recipe/food/clowncake - name = "clown cake" - always_availible = FALSE - reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, - /obj/item/reagent_containers/food/snacks/sundae = 2, - /obj/item/reagent_containers/food/snacks/grown/banana = 5 - ) - result = /obj/item/reagent_containers/food/snacks/store/cake/clown_cake + result = /obj/item/food/cake/bsvc subcategory = CAT_CAKE /datum/crafting_recipe/food/vanillacake - name = "vanilla cake" + name = "Vanilla cake" always_availible = FALSE reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/food/cake/plain = 1, /obj/item/reagent_containers/food/snacks/grown/vanillapod = 2 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/vanilla_cake + result = /obj/item/food/cake/vanilla_cake subcategory = CAT_CAKE /datum/crafting_recipe/food/trumpetcake name = "Spaceman's Cake" reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, + /obj/item/food/cake/plain = 1, /obj/item/reagent_containers/food/snacks/grown/trumpet = 2, /datum/reagent/consumable/cream = 5, /datum/reagent/consumable/berryjuice = 5 ) - result = /obj/item/reagent_containers/food/snacks/store/cake/trumpet + result = /obj/item/food/cake/trumpet subcategory = CAT_CAKE @@ -198,7 +178,7 @@ reqs = list( /obj/item/organ/brain = 1, /obj/item/organ/heart = 1, - /obj/item/reagent_containers/food/snacks/store/cake/birthday = 1, + /obj/item/food/cake/birthday = 1, /obj/item/reagent_containers/food/snacks/meat/slab = 3, /datum/reagent/blood = 30, /datum/reagent/consumable/sprinkles = 5, 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 4e0ade4fa22d..2032a33bd46d 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_drink.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_drink.dm @@ -86,28 +86,6 @@ ////////////////////// Non-alcoholic recipes /////////////////// -/datum/crafting_recipe/holybottle - name = "Holy Water Flask" - time = 30 - reqs = list( - /obj/item/reagent_containers/food/drinks/bottle = 1, - /datum/reagent/water/holywater = 100 - ) - result = /obj/item/reagent_containers/food/drinks/bottle/holywater - category = CAT_DRINK - -//flask of unholy water is a beaker for some reason, I will try making it a bottle and add it here once the antag freeze is over. t. kryson - -/datum/crafting_recipe/nothingbottle - name = "Nothing Bottle" - time = 30 - reqs = list( - /obj/item/reagent_containers/food/drinks/bottle = 1, - /datum/reagent/consumable/nothing = 100 - ) - result = /obj/item/reagent_containers/food/drinks/bottle/bottleofnothing - category = CAT_DRINK - /datum/crafting_recipe/smallcarton name = "Small Carton" result = /obj/item/reagent_containers/food/drinks/sillycup/smallcarton @@ -139,7 +117,7 @@ time = 30 reqs = list( /obj/item/storage/bag/trash = 1, - /obj/item/reagent_containers/food/snacks/breadslice/moldy = 1, + /obj/item/food/breadslice/moldy = 1, /obj/item/reagent_containers/food/snacks/grown = 4, /obj/item/reagent_containers/food/snacks/candy_corn = 2, /datum/reagent/water = 15 diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_egg.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_egg.dm index 522f362e777e..a4ab818fdd6f 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_egg.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_egg.dm @@ -36,7 +36,7 @@ reqs = list( /obj/item/reagent_containers/food/snacks/friedegg = 1, /obj/item/reagent_containers/food/snacks/meat/steak = 1, - /obj/item/reagent_containers/food/snacks/breadslice/plain = 1, + /obj/item/food/breadslice/plain = 1, ) result = /obj/item/reagent_containers/food/snacks/benedict subcategory = CAT_EGG diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm index edca42fda076..dbe7f1149631 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_frozen.dm @@ -44,18 +44,6 @@ result = /obj/item/reagent_containers/food/snacks/sundae subcategory = CAT_ICE -/datum/crafting_recipe/food/honkdae - name ="Honkdae" - reqs = list( - /datum/reagent/consumable/cream = 5, - /obj/item/clothing/mask/gas/clown_hat = 1, - /obj/item/reagent_containers/food/snacks/grown/cherries = 1, - /obj/item/reagent_containers/food/snacks/grown/banana = 2, - /obj/item/reagent_containers/food/snacks/icecream = 1 - ) - result = /obj/item/reagent_containers/food/snacks/honkdae - subcategory = CAT_ICE - /datum/crafting_recipe/food/cornuto name = "Cornuto" reqs = list( @@ -182,28 +170,8 @@ result = /obj/item/reagent_containers/food/snacks/snowcones/fruitsalad subcategory = CAT_ICE -/datum/crafting_recipe/food/mime_sc - name = "Mime snowcone" - reqs = list( - /obj/item/reagent_containers/food/drinks/sillycup = 1, - /datum/reagent/consumable/ice = 15, - /datum/reagent/consumable/nothing = 5 - ) - result = /obj/item/reagent_containers/food/snacks/snowcones/mime - subcategory = CAT_ICE - -/datum/crafting_recipe/food/clown_sc - name = "Clown snowcone" - reqs = list( - /obj/item/reagent_containers/food/drinks/sillycup = 1, - /datum/reagent/consumable/ice = 15, - /datum/reagent/consumable/laughter = 5 - ) - result = /obj/item/reagent_containers/food/snacks/snowcones/clown - subcategory = CAT_ICE - /datum/crafting_recipe/food/soda_sc - name = "Space Cola snowcone" + name = "Master Cola snowcone" reqs = list( /obj/item/reagent_containers/food/drinks/sillycup = 1, /datum/reagent/consumable/ice = 15, @@ -213,7 +181,7 @@ subcategory = CAT_ICE /datum/crafting_recipe/food/spacemountainwind_sc - name = "Space Mountain Wind snowcone" + name = "Comet Trail snowcone" reqs = list( /obj/item/reagent_containers/food/drinks/sillycup = 1, /datum/reagent/consumable/ice = 15, @@ -223,7 +191,7 @@ subcategory = CAT_ICE /datum/crafting_recipe/food/pwrgame_sc - name = "Pwrgame snowcone" + name = "Pacfuel snowcone" reqs = list( /obj/item/reagent_containers/food/drinks/sillycup = 1, /datum/reagent/consumable/ice = 15, diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm index 72f2046a3b84..ade14f27241e 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm @@ -242,15 +242,6 @@ result = /obj/item/reagent_containers/food/snacks/bbqribs subcategory = CAT_MEAT -/datum/crafting_recipe/food/meatclown - name = "Meat Clown" - reqs = list( - /obj/item/reagent_containers/food/snacks/meat/steak/plain = 1, - /obj/item/reagent_containers/food/snacks/grown/banana = 1 - ) - result = /obj/item/reagent_containers/food/snacks/meatclown - subcategory = CAT_MEAT - /datum/crafting_recipe/food/gumbo name = "Black eyed gumbo" reqs = list( diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm index 1bb3d250a9ae..1eb1d255c340 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm @@ -102,7 +102,7 @@ /datum/reagent/consumable/blackpepper = 1, /obj/item/reagent_containers/food/snacks/pastrybase = 2 ) - result = /obj/item/reagent_containers/food/snacks/baguette + result = /obj/item/food/baguette subcategory = CAT_MISCFOOD ////////////////////////////////////////////////TOAST//////////////////////////////////////////////// @@ -111,7 +111,7 @@ name = "Slime toast" reqs = list( /datum/reagent/toxin/slimejelly = 5, - /obj/item/reagent_containers/food/snacks/breadslice/plain = 1 + /obj/item/food/breadslice/plain = 1 ) result = /obj/item/reagent_containers/food/snacks/jelliedtoast/slime subcategory = CAT_MISCFOOD @@ -120,7 +120,7 @@ name = "Jellied toast" reqs = list( /datum/reagent/consumable/cherryjelly = 5, - /obj/item/reagent_containers/food/snacks/breadslice/plain = 1 + /obj/item/food/breadslice/plain = 1 ) result = /obj/item/reagent_containers/food/snacks/jelliedtoast/cherry subcategory = CAT_MISCFOOD @@ -128,7 +128,7 @@ /datum/crafting_recipe/food/butteredtoast name = "Buttered Toast" reqs = list( - /obj/item/reagent_containers/food/snacks/breadslice/plain = 1, + /obj/item/food/breadslice/plain = 1, /obj/item/reagent_containers/food/snacks/butter = 1 ) result = /obj/item/reagent_containers/food/snacks/butteredtoast @@ -138,7 +138,7 @@ name = "Two bread" reqs = list( /datum/reagent/consumable/ethanol/wine = 5, - /obj/item/reagent_containers/food/snacks/breadslice/plain = 2 + /obj/item/food/breadslice/plain = 2 ) result = /obj/item/reagent_containers/food/snacks/twobread subcategory = CAT_MISCFOOD @@ -265,7 +265,7 @@ /datum/reagent/consumable/milk = 1, /datum/reagent/consumable/cherryjelly = 5, /obj/item/stock_parts/cell/super =1, - /obj/item/melee/sabre = 1 + /obj/item/melee/sword/sabre = 1 ) result = /obj/item/reagent_containers/food/snacks/powercrepe subcategory = CAT_MISCFOOD 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 cc61c7048fdc..3de7c3c3d75d 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm @@ -370,17 +370,6 @@ result = /obj/item/reagent_containers/food/snacks/donkpocket/pizza subcategory = CAT_PASTRY -/datum/crafting_recipe/food/donkpocket/honk - time = 15 - name = "Honk-Pocket" - reqs = list( - /obj/item/reagent_containers/food/snacks/pastrybase = 1, - /obj/item/reagent_containers/food/snacks/grown/banana = 1, - /datum/reagent/consumable/sugar = 3 - ) - result = /obj/item/reagent_containers/food/snacks/donkpocket/honk - subcategory = CAT_PASTRY - /datum/crafting_recipe/food/donkpocket/berry time = 15 name = "Berry-pocket" @@ -473,7 +462,7 @@ reqs = list( /datum/reagent/consumable/eggyolk = 5, /obj/item/reagent_containers/food/snacks/cheesewedge = 1, - /obj/item/reagent_containers/food/snacks/store/bread/plain = 1 + /obj/item/food/bread/plain = 1 ) result = /obj/item/reagent_containers/food/snacks/khachapuri subcategory = CAT_PASTRY @@ -575,7 +564,7 @@ /obj/item/reagent_containers/food/snacks/pastrybase = 1, /obj/item/reagent_containers/food/snacks/grown/bluecherries = 1 ) - result = /obj/item/reagent_containers/food/snacks/bluecherrycupcake + result = /obj/item/reagent_containers/food/snacks/cherrycupcake/blue subcategory = CAT_PASTRY /datum/crafting_recipe/food/honeybun diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm index 83e923f53fbf..5c9bcc56cc7d 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm @@ -130,18 +130,6 @@ result = /obj/item/reagent_containers/food/snacks/pie/grapetart subcategory = CAT_PIE -/datum/crafting_recipe/food/mimetart - name = "Mime tart" - always_availible = FALSE - reqs = list( - /datum/reagent/consumable/milk = 5, - /datum/reagent/consumable/sugar = 5, - /obj/item/reagent_containers/food/snacks/pie/plain = 1, - /datum/reagent/consumable/nothing = 5 - ) - result = /obj/item/reagent_containers/food/snacks/pie/mimetart - subcategory = CAT_PIE - /datum/crafting_recipe/food/berrytart name = "Berry tart" always_availible = FALSE diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm index 73ccc0f37897..778c639a074e 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm @@ -34,19 +34,6 @@ result = /obj/item/reagent_containers/food/snacks/salad/validsalad subcategory = CAT_SALAD -/datum/crafting_recipe/food/monkeysdelight - name = "Monkeys delight" - reqs = list( - /datum/reagent/consumable/flour = 5, - /datum/reagent/consumable/sodiumchloride = 1, - /datum/reagent/consumable/blackpepper = 1, - /obj/item/reagent_containers/glass/bowl = 1, - /obj/item/reagent_containers/food/snacks/monkeycube = 1, - /obj/item/reagent_containers/food/snacks/grown/banana = 1 - ) - result = /obj/item/reagent_containers/food/snacks/soup/monkeysdelight - subcategory = CAT_SALAD - /datum/crafting_recipe/food/oatmeal name = "Oatmeal" reqs = list( diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm index 41829e9ec2b8..121f15fa972f 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm @@ -9,7 +9,7 @@ /datum/crafting_recipe/food/sandwich name = "Sandwich" reqs = list( - /obj/item/reagent_containers/food/snacks/breadslice/plain = 2, + /obj/item/food/breadslice/plain = 2, /obj/item/reagent_containers/food/snacks/meat/steak = 1, /obj/item/reagent_containers/food/snacks/cheesewedge = 1 ) @@ -19,7 +19,7 @@ /datum/crafting_recipe/food/grilledcheesesandwich name = "Cheese sandwich" reqs = list( - /obj/item/reagent_containers/food/snacks/breadslice/plain = 2, + /obj/item/food/breadslice/plain = 2, /obj/item/reagent_containers/food/snacks/cheesewedge = 2 ) result = /obj/item/reagent_containers/food/snacks/grilledcheese @@ -29,7 +29,7 @@ name = "Jelly sandwich" reqs = list( /datum/reagent/toxin/slimejelly = 5, - /obj/item/reagent_containers/food/snacks/breadslice/plain = 2, + /obj/item/food/breadslice/plain = 2, ) result = /obj/item/reagent_containers/food/snacks/jellysandwich/slime subcategory = CAT_SANDWICH @@ -38,7 +38,7 @@ name = "Jelly sandwich" reqs = list( /datum/reagent/consumable/cherryjelly = 5, - /obj/item/reagent_containers/food/snacks/breadslice/plain = 2, + /obj/item/food/breadslice/plain = 2, ) result = /obj/item/reagent_containers/food/snacks/jellysandwich/cherry subcategory = CAT_SANDWICH @@ -46,7 +46,7 @@ /datum/crafting_recipe/food/notasandwich name = "Not a sandwich" reqs = list( - /obj/item/reagent_containers/food/snacks/breadslice/plain = 2, + /obj/item/food/breadslice/plain = 2, /obj/item/clothing/mask/fakemoustache = 1 ) result = /obj/item/reagent_containers/food/snacks/notasandwich @@ -55,11 +55,11 @@ /datum/crafting_recipe/food/blt name = "BLT" reqs = list( - /obj/item/reagent_containers/food/snacks/breadslice/plain = 2, + /obj/item/food/breadslice/plain = 2, /obj/item/reagent_containers/food/snacks/meat/bacon = 2, /obj/item/reagent_containers/food/snacks/grown/cabbage = 1, /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 d0558f94fdb5..9352e1b371aa 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_soup.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_soup.dm @@ -88,7 +88,6 @@ /obj/item/reagent_containers/food/snacks/meat/cutlet = 2, /obj/item/reagent_containers/food/snacks/grown/chili = 1, /obj/item/reagent_containers/food/snacks/grown/tomato = 1, - /obj/item/clothing/shoes/clown_shoes = 1 ) result = /obj/item/reagent_containers/food/snacks/soup/clownchili subcategory = CAT_SOUP @@ -115,15 +114,15 @@ subcategory = CAT_SOUP -/datum/crafting_recipe/food/milosoup - name = "Milo soup" +/datum/crafting_recipe/food/misosoup + name = "Miso soup" reqs = list( /datum/reagent/water = 10, /obj/item/reagent_containers/glass/bowl = 1, /obj/item/reagent_containers/food/snacks/soydope = 2, /obj/item/reagent_containers/food/snacks/tofu = 2 ) - result = /obj/item/reagent_containers/food/snacks/soup/milo + result = /obj/item/reagent_containers/food/snacks/soup/miso subcategory = CAT_SOUP /datum/crafting_recipe/food/bloodsoup @@ -146,17 +145,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 796c360c3448..f123ced2ffc5 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_spaghetti.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_spaghetti.dm @@ -6,65 +6,56 @@ /datum/crafting_recipe/food/tomatopasta name = "Tomato pasta" reqs = list( - /obj/item/reagent_containers/food/snacks/spaghetti/boiledspaghetti = 1, + /obj/item/food/spaghetti/boiledspaghetti = 1, /obj/item/reagent_containers/food/snacks/grown/tomato = 2 ) - result = /obj/item/reagent_containers/food/snacks/spaghetti/pastatomato + result = /obj/item/food/spaghetti/pastatomato subcategory = CAT_SPAGHETTI /datum/crafting_recipe/food/copypasta name = "Copypasta" reqs = list( - /obj/item/reagent_containers/food/snacks/spaghetti/pastatomato = 2 + /obj/item/food/spaghetti/pastatomato = 2 ) - result = /obj/item/reagent_containers/food/snacks/spaghetti/copypasta + result = /obj/item/food/spaghetti/copypasta subcategory = CAT_SPAGHETTI /datum/crafting_recipe/food/spaghettimeatball name = "Spaghetti meatball" reqs = list( - /obj/item/reagent_containers/food/snacks/spaghetti/boiledspaghetti = 1, + /obj/item/food/spaghetti/boiledspaghetti = 1, /obj/item/reagent_containers/food/snacks/meatball = 2 ) - result = /obj/item/reagent_containers/food/snacks/spaghetti/meatballspaghetti - subcategory = CAT_SPAGHETTI - -/datum/crafting_recipe/food/spesslaw - name = "Spesslaw" - reqs = list( - /obj/item/reagent_containers/food/snacks/spaghetti/boiledspaghetti = 1, - /obj/item/reagent_containers/food/snacks/meatball = 4 - ) - result = /obj/item/reagent_containers/food/snacks/spaghetti/spesslaw + result = /obj/item/food/spaghetti/meatballspaghetti subcategory = CAT_SPAGHETTI /datum/crafting_recipe/food/beefnoodle name = "Beef noodle" reqs = list( /obj/item/reagent_containers/glass/bowl = 1, - /obj/item/reagent_containers/food/snacks/spaghetti/boiledspaghetti = 1, + /obj/item/food/spaghetti/boiledspaghetti = 1, /obj/item/reagent_containers/food/snacks/meat/cutlet = 2, /obj/item/reagent_containers/food/snacks/grown/cabbage = 1 ) - result = /obj/item/reagent_containers/food/snacks/spaghetti/beefnoodle + result = /obj/item/food/spaghetti/beefnoodle subcategory = CAT_SPAGHETTI /datum/crafting_recipe/food/chowmein name = "Chowmein" reqs = list( - /obj/item/reagent_containers/food/snacks/spaghetti/boiledspaghetti = 1, + /obj/item/food/spaghetti/boiledspaghetti = 1, /obj/item/reagent_containers/food/snacks/meat/cutlet = 1, /obj/item/reagent_containers/food/snacks/grown/cabbage = 2, /obj/item/reagent_containers/food/snacks/grown/carrot = 1 ) - result = /obj/item/reagent_containers/food/snacks/spaghetti/chowmein + result = /obj/item/food/spaghetti/chowmein subcategory = CAT_SPAGHETTI /datum/crafting_recipe/food/butternoodles name = "Butter Noodles" reqs = list( - /obj/item/reagent_containers/food/snacks/spaghetti/boiledspaghetti = 1, + /obj/item/food/spaghetti/boiledspaghetti = 1, /obj/item/reagent_containers/food/snacks/butter = 1 ) - result = /obj/item/reagent_containers/food/snacks/spaghetti/butternoodles + result = /obj/item/food/spaghetti/butternoodles subcategory = CAT_SPAGHETTI diff --git a/code/modules/holiday/easter.dm b/code/modules/holiday/easter.dm index 9d88d3107551..a5cf4d78499e 100644 --- a/code/modules/holiday/easter.dm +++ b/code/modules/holiday/easter.dm @@ -84,24 +84,6 @@ . = ..() countEggs() -//Bunny Suit -/obj/item/clothing/head/bunnyhead - name = "Easter Bunny Head" - icon_state = "bunnyhead" - item_state = "bunnyhead" - desc = "Considerably more cute than 'Frank'." - slowdown = -1 - flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR - -/obj/item/clothing/suit/bunnysuit - name = "Easter Bunny Suit" - desc = "Hop Hop Hop!" - icon_state = "bunnysuit" - item_state = "bunnysuit" - slowdown = -1 - body_parts_covered = CHEST|GROIN|LEGS|ARMS - flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT - //Bunny bag! /obj/item/storage/backpack/satchel/bunnysatchel name = "Easter Bunny Satchel" @@ -122,9 +104,7 @@ icon_state = "egg-[eggcolor]" /obj/item/reagent_containers/food/snacks/egg/proc/dispensePrize(turf/where) - var/won = pick(/obj/item/clothing/head/bunnyhead, - /obj/item/clothing/suit/bunnysuit, - /obj/item/storage/backpack/satchel/bunnysatchel, + var/won = pick(/obj/item/storage/backpack/satchel/bunnysatchel, /obj/item/reagent_containers/food/snacks/grown/carrot, /obj/item/toy/balloon, /obj/item/toy/gun, @@ -143,7 +123,7 @@ /obj/item/toy/prize/durand, /obj/item/toy/prize/marauder, /obj/item/toy/prize/seraph, - /obj/item/toy/prize/mauler, + /obj/item/toy/prize/touro, /obj/item/toy/prize/odysseus, /obj/item/toy/prize/phazon, /obj/item/toy/prize/reticence, @@ -151,8 +131,7 @@ /obj/item/toy/plush/carpplushie, /obj/item/toy/plush/spider, /obj/item/toy/redbutton, - /obj/item/toy/windupToolbox, - /obj/item/clothing/head/collectable/rabbitears) + /obj/item/toy/windupToolbox) new won(where) new/obj/item/reagent_containers/food/snacks/chocolateegg(where) @@ -174,36 +153,12 @@ /datum/crafting_recipe/food/hotcrossbun name = "Hot-Cross Bun" reqs = list( - /obj/item/reagent_containers/food/snacks/store/bread/plain = 1, + /obj/item/food/bread/plain = 1, /datum/reagent/consumable/sugar = 1 ) result = /obj/item/reagent_containers/food/snacks/hotcrossbun subcategory = CAT_MISCFOOD - -/obj/item/reagent_containers/food/snacks/store/cake/brioche - name = "brioche cake" - desc = "A ring of sweet, glazed buns." - icon_state = "briochecake" - slice_path = /obj/item/reagent_containers/food/snacks/cakeslice/brioche - slices_num = 6 - bonus_reagents = list(/datum/reagent/consumable/nutriment = 10, /datum/reagent/consumable/nutriment/vitamin = 2) - -/obj/item/reagent_containers/food/snacks/cakeslice/brioche - name = "brioche cake slice" - desc = "Delicious sweet-bread. Who needs anything else?" - icon_state = "briochecake_slice" - filling_color = "#FFD700" - -/datum/crafting_recipe/food/briochecake - name = "Brioche cake" - reqs = list( - /obj/item/reagent_containers/food/snacks/store/cake/plain = 1, - /datum/reagent/consumable/sugar = 2 - ) - result = /obj/item/reagent_containers/food/snacks/store/cake/brioche - subcategory = CAT_MISCFOOD - /obj/item/reagent_containers/food/snacks/scotchegg name = "scotch egg" desc = "A boiled egg wrapped in a delicious, seasoned meatball." @@ -234,7 +189,7 @@ /datum/crafting_recipe/food/mammi name = "Mammi" reqs = list( - /obj/item/reagent_containers/food/snacks/store/bread/plain = 1, + /obj/item/food/bread/plain = 1, /obj/item/reagent_containers/food/snacks/chocolatebar = 1, /datum/reagent/consumable/milk = 5 ) diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm index ae19b1dea376..ac946eee3847 100644 --- a/code/modules/holiday/holidays.dm +++ b/code/modules/holiday/holidays.dm @@ -571,7 +571,6 @@ /datum/holiday/easter name = EASTER - drone_hat = /obj/item/clothing/head/rabbitears var/const/days_early = 1 //to make editing the holiday easier var/const/days_extra = 1 diff --git a/code/modules/holodeck/items.dm b/code/modules/holodeck/items.dm index d56fd4f9c32c..c0d985e89d79 100644 --- a/code/modules/holodeck/items.dm +++ b/code/modules/holodeck/items.dm @@ -13,7 +13,7 @@ /obj/item/holo/esword name = "holographic energy sword" desc = "May the force be with you. Sorta." - icon = 'icons/obj/transforming_energy.dmi' + icon = 'icons/obj/weapon/energy.dmi' icon_state = "sword" lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' @@ -69,7 +69,7 @@ /obj/item/toy/beach_ball/holoball name = "basketball" - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "basketball" item_state = "basketball" desc = "Here's your chance, do your dance at the Space Jam." diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm index a21e9f71afc4..87e0f1a2a429 100644 --- a/code/modules/hydroponics/gene_modder.dm +++ b/code/modules/hydroponics/gene_modder.dm @@ -341,7 +341,6 @@ seed.genes += disk.gene.Copy() if(istype(disk.gene, /datum/plant_gene/reagent)) seed.reagents_from_genes() - disk.gene.apply_vars(seed) repaint_seed() diff --git a/code/modules/hydroponics/genes/attack.dm b/code/modules/hydroponics/genes/attack.dm new file mode 100644 index 000000000000..37dabf0c06a8 --- /dev/null +++ b/code/modules/hydroponics/genes/attack.dm @@ -0,0 +1,128 @@ +/// Traits that turn a plant into a weapon, giving them force and effects on attack. +/datum/plant_gene/trait/attack + name = "On Attack Trait" + description = "It is a very dangerous weapon." + icon = "hand-fist" + /// The multiplier we apply to the potency to calculate force. Set to 0 to not affect the force. + var/force_multiplier = 0 + /// If TRUE, our plant will degrade in force every hit until diappearing. + var/degrades_after_hit = FALSE + /// When we fully degrade, what degraded off of us? + var/degradation_noun = "leaves" + +/datum/plant_gene/trait/attack/on_new_plant(obj/item/our_plant, newloc) + . = ..() + if(!.) + return + + if(force_multiplier) + var/obj/item/seeds/our_seed = our_plant.get_plant_seed() + our_plant.force = round((5 + our_seed.potency * force_multiplier), 1) + RegisterSignal(our_plant, COMSIG_ITEM_ATTACK, PROC_REF(on_plant_attack)) + RegisterSignal(our_plant, COMSIG_ITEM_AFTERATTACK, PROC_REF(after_plant_attack)) + +/// Signal proc for [COMSIG_ITEM_ATTACK] that allows for effects on attack +/datum/plant_gene/trait/attack/proc/on_plant_attack(obj/item/source, mob/living/target, mob/living/user) + SIGNAL_HANDLER + + INVOKE_ASYNC(src, PROC_REF(attack_effect), source, target, user) + +/* + * Effects done when we hit people with our plant, ON attack. + * Override on a per-plant basis. + * + * our_plant - our plant, that we're attacking with + * user - the person who is attacking with the plant + * target - the person who is attacked by the plant + */ +/datum/plant_gene/trait/attack/proc/attack_effect(obj/item/our_plant, mob/living/target, mob/living/user) + return + +/// Signal proc for [COMSIG_ITEM_AFTERATTACK] that allows for effects after an attack is done +/datum/plant_gene/trait/attack/proc/after_plant_attack(obj/item/source, atom/target, mob/user, proximity_flag, click_parameters) + SIGNAL_HANDLER + + if(!proximity_flag) + return + + if(!ismovable(target)) + return + + if(isobj(target)) + var/obj/object_target = target + if(!(object_target.obj_flags & CAN_BE_HIT)) + return . + + INVOKE_ASYNC(src, PROC_REF(after_attack_effect), source, target, user) + return . + +/* + * Effects done when we hit people with our plant, AFTER the attack is done. + * Extend on a per-plant basis. + * + * our_plant - our plant, that we're attacking with + * user - the person who is attacking with the plant + * target - the atom which is attacked by the plant + */ +/datum/plant_gene/trait/attack/proc/after_attack_effect(obj/item/our_plant, atom/target, mob/living/user) + SHOULD_CALL_PARENT(TRUE) + + if(!degrades_after_hit) + return + + // We probably hit something or someone. Reduce our force + if(our_plant.force > 0) + our_plant.force -= rand(1, (our_plant.force / 3) + 1) + return + + // When our force degrades to zero or below, we're all done + to_chat(user, span_warning("All the [degradation_noun] have fallen off [our_plant] from violent whacking!")) + qdel(our_plant) + +/// Novaflower's attack effects (sets people on fire) + degradation on attack +/datum/plant_gene/trait/attack/novaflower_attack + name = "Heated Petals" + description = "Hitting with it may cause things to combust." + force_multiplier = 0.2 + degrades_after_hit = TRUE + degradation_noun = "petals" + +/datum/plant_gene/trait/attack/novaflower_attack/attack_effect(obj/item/our_plant, mob/living/target, mob/living/user) + if(!istype(target)) + return + + var/obj/item/seeds/our_seed = our_plant.get_plant_seed() + to_chat(target, span_danger("You are lit on fire from the intense heat of [our_plant]!")) + target.adjust_fire_stacks(round(our_seed.potency / 20)) + if(target.IgniteMob()) + message_admins("[ADMIN_LOOKUPFLW(user)] set [ADMIN_LOOKUPFLW(target)] on fire with [our_plant] at [AREACOORD(user)]") + user.log_message("set [key_name(target)] on fire with [our_plant]", LOG_ATTACK) + target.log_message("was set on fire by [key_name(user)] with [our_plant].", LOG_ATTACK) + + our_plant.investigate_log("was used by [key_name(user)] to burn [key_name(target)] at [AREACOORD(user)]", INVESTIGATE_BOTANY) + +/// Sunflower's attack effect (shows cute text) +/datum/plant_gene/trait/attack/sunflower_attack + name = "Bright Petals" + description = "Makes others feel the power on hit." + +/datum/plant_gene/trait/attack/sunflower_attack/after_attack_effect(obj/item/our_plant, atom/target, mob/user, proximity_flag, click_parameters) + if(ismob(target)) + var/mob/target_mob = target + user.visible_message("[user] smacks [target_mob] with [user.p_their()] [our_plant.name]! FLOWER POWER!", ignored_mobs = list(target_mob, user)) + if(target_mob != user) + to_chat(target_mob, "[user] smacks you with [our_plant]!FLOWER POWER!") + to_chat(user, "Your [our_plant.name]'s FLOWER POWER strikes [target_mob]!") + + return ..() + +/// Normal nettle's force + degradation on attack +/datum/plant_gene/trait/attack/nettle_attack + name = "Sharpened Leaves" + force_multiplier = 0.2 + degrades_after_hit = TRUE + +/// Deathnettle force + degradation on attack +/datum/plant_gene/trait/attack/nettle_attack/death + name = "Aggressive Sharpened Leaves" + force_multiplier = 0.4 diff --git a/code/modules/hydroponics/genes/backfire.dm b/code/modules/hydroponics/genes/backfire.dm new file mode 100644 index 000000000000..338b0fb17455 --- /dev/null +++ b/code/modules/hydroponics/genes/backfire.dm @@ -0,0 +1,163 @@ +/// Traits for plants with backfire effects. These are negative effects that occur when a plant is handled without gloves/unsafely. +/datum/plant_gene/trait/backfire + name = "Backfire Trait" + icon = "mitten" + description = "Be careful when holding it without protection." + /// Whether our actions are cancelled when the backfire triggers. + var/cancel_action_on_backfire = FALSE + /// A list of extra traits to check to be considered safe. + var/list/traits_to_check + /// A list of extra genes to check to be considered safe. + var/list/genes_to_check + +/datum/plant_gene/trait/backfire/on_new_plant(obj/item/our_plant, newloc) + . = ..() + if(!.) + return + if(genes_to_check) + genes_to_check = string_list(genes_to_check) + if(traits_to_check) + traits_to_check = string_list(traits_to_check) + our_plant.AddElement(/datum/element/plant_backfire, cancel_action_on_backfire, traits_to_check, genes_to_check) + RegisterSignal(our_plant, COMSIG_PLANT_ON_BACKFIRE, PROC_REF(on_backfire)) + +/// Signal proc for [COMSIG_PLANT_ON_BACKFIRE] that causes the backfire effect. +/datum/plant_gene/trait/backfire/proc/on_backfire(obj/item/source, mob/living/carbon/user) + SIGNAL_HANDLER + + INVOKE_ASYNC(src, PROC_REF(backfire_effect), source, user) + +/** + * The actual backfire effect on the user. + * Override with plant-specific effects. + */ +/datum/plant_gene/trait/backfire/proc/backfire_effect(obj/item/our_plant, mob/living/carbon/user) + return + +/// Rose's prick on backfire +/datum/plant_gene/trait/backfire/rose_thorns + name = "Rose Thorns" + description = "The stem has a lot of thorns." + traits_to_check = list(TRAIT_PIERCEIMMUNE) + +/datum/plant_gene/trait/backfire/rose_thorns/backfire_effect(obj/item/our_plant, mob/living/carbon/user) + var/obj/item/seeds/our_seed = our_plant.get_plant_seed() + if(!our_seed.get_gene(/datum/plant_gene/trait/sticky) && prob(66)) + to_chat(user, span_danger("[our_plant]'s thorns nearly prick your hand. Best be careful.")) + return + + to_chat(user, span_danger("[our_plant]'s thorns prick your hand. Ouch.")) + our_plant.investigate_log("rose-pricked [key_name(user)] at [AREACOORD(user)]", INVESTIGATE_BOTANY) + var/obj/item/bodypart/affecting = user.get_active_hand() + affecting?.receive_damage(2) + +/// Novaflower's hand burn on backfire +/datum/plant_gene/trait/backfire/novaflower_heat + name = "Burning Stem" + description = "The stem may burn your hand." + cancel_action_on_backfire = TRUE + +/datum/plant_gene/trait/backfire/novaflower_heat/backfire_effect(obj/item/our_plant, mob/living/carbon/user) + to_chat(user, span_danger("[our_plant] singes your bare hand!")) + our_plant.investigate_log("self-burned [key_name(user)] for [our_plant.force] at [AREACOORD(user)]", INVESTIGATE_BOTANY) + var/obj/item/bodypart/affecting = user.get_active_hand() + return affecting?.receive_damage(0, our_plant.force) + +/// Normal Nettle hannd burn on backfire +/datum/plant_gene/trait/backfire/nettle_burn + name = "Stinging Stem" + description = "The stem may sting your hand." + +/datum/plant_gene/trait/backfire/nettle_burn/backfire_effect(obj/item/our_plant, mob/living/carbon/user) + to_chat(user, span_danger("[our_plant] burns your bare hand!")) + our_plant.investigate_log("self-burned [key_name(user)] for [our_plant.force] at [AREACOORD(user)]", INVESTIGATE_BOTANY) + var/obj/item/bodypart/affecting = user.get_active_hand() + return affecting?.receive_damage(0, our_plant.force) + +/// Deathnettle hand burn + stun on backfire +/datum/plant_gene/trait/backfire/nettle_burn/death + name = "Aggressive Stinging Stem" + cancel_action_on_backfire = TRUE + +/datum/plant_gene/trait/backfire/nettle_burn/death/backfire_effect(obj/item/our_plant, mob/living/carbon/user) + . = ..() + if(!. || prob(50)) + return + + user.Paralyze(10 SECONDS) + to_chat(user, span_userdanger("You are stunned by the powerful acids of [our_plant]!")) + +/* +/// Ghost-Chili heating up on backfire +/datum/plant_gene/trait/backfire/chili_heat + name = "Active Capsicum Glands" + description = "You may survive a cold winter with this in hand." + genes_to_check = list(/datum/plant_gene/trait/chem_heating) + /// The mob currently holding the chili. + var/datum/weakref/held_mob + /// The chili this gene is tied to, to track it for processing. + var/datum/weakref/our_chili + +/datum/plant_gene/trait/backfire/chili_heat/on_new_plant(obj/item/our_plant, newloc) + . = ..() + if(!.) + return + + our_chili = WEAKREF(our_plant) + RegisterSignals(our_plant, list(COMSIG_QDELETING, COMSIG_ITEM_DROPPED), PROC_REF(stop_backfire_effect)) + +/* + * Begin processing the trait on backfire. + * + * our_plant - our source plant, which is backfiring + * user - the mob holding our plant + */ +/datum/plant_gene/trait/backfire/chili_heat/backfire_effect(obj/item/our_plant, mob/living/carbon/user) + held_mob = WEAKREF(user) + START_PROCESSING(SSobj, src) + +/* + * Stop processing the trait when we're dropped or deleted. + * + * our_plant - our source plant + */ +/datum/plant_gene/trait/backfire/chili_heat/proc/stop_backfire_effect(datum/source) + SIGNAL_HANDLER + + held_mob = null + STOP_PROCESSING(SSobj, src) + +/* + * The processing of our trait. Heats up the mob ([held_mob]) currently holding the source plant ([our_chili]). + * Stops processing if we're no longer being held by [held mob]. + */ +/datum/plant_gene/trait/backfire/chili_heat/process(seconds_per_tick) + var/mob/living/carbon/our_mob = held_mob?.resolve() + var/obj/item/our_plant = our_chili?.resolve() + + // If our weakrefs don't resolve, or if our mob is not holding our plant, stop processing. + if(!our_mob || !our_plant || !our_mob.is_holding(our_plant)) + stop_backfire_effect() + return + + our_mob.adjust_bodytemperature(7.5 * TEMPERATURE_DAMAGE_COEFFICIENT * seconds_per_tick) + if(SPT_PROB(5, seconds_per_tick)) + to_chat(our_mob, span_warning("Your hand holding [our_plant] burns!")) + +/// Bluespace Tomato squashing on the user on backfire +/datum/plant_gene/trait/backfire/bluespace + name = "Bluespace Volatility" + description = "You may be spaced out if you hold this unprotected." + cancel_action_on_backfire = TRUE + genes_to_check = list(/datum/plant_gene/trait/squash) + +/datum/plant_gene/trait/backfire/bluespace/backfire_effect(obj/item/our_plant, mob/living/carbon/user) + if(prob(50)) + return + + to_chat(user, span_danger("[our_plant] slips out of your hand!")) + + var/obj/item/seeds/our_seed = our_plant.get_plant_seed() + var/datum/plant_gene/trait/squash/squash_gene = our_seed.get_gene(/datum/plant_gene/trait/squash) + squash_gene.squash_plant(our_plant, user) +*/ diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index ed58e86e16dc..4f2b2420ee55 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -44,8 +44,8 @@ dried_type = src.type if(seed) - for(var/datum/plant_gene/trait/T in seed.genes) - T.on_new(src, loc) + for(var/datum/plant_gene/trait/trait in seed.genes) + trait.on_new_plant(src, loc) seed.prepare_result(src) transform *= TRANSFORM_USING_VARIABLE(seed.potency, 100) + 0.5 //Makes the resulting produce's sprite larger or smaller based on potency! add_juice() @@ -110,15 +110,13 @@ user.visible_message("[user] starts splitting \the [src].", "You dig into \the [src] and start to split it...", "You hear the sound of a sharp object digging into some plant matter.") if(do_after(user, 20, target = src)) to_chat(user, "You split apart the [src]! Sadly you put too much force and it's remains are unusable, but hey, you got your seeds!") - seedify(src, 1, TRUE, FALSE, src, user) - squash(user) + seedify(src, 1, TRUE, TRUE, src, user) if(TOOL_WRENCH) playsound(loc, 'sound/misc/splort.ogg', 50, TRUE, -1) user.visible_message("[user] starts whacking \the [src].", "You start whacking \the [src]...", "You hear the sound of a plant being whacked violently.") if(do_after(user, 17, target = src)) to_chat(user, "You smash [src]! Sadly there's nothing left of it other than the seeds and some junk.") - seedify(src, 1, TRUE, FALSE, src, user) - squash(user) + seedify(src, 1, TRUE, TRUE, src, user) if(!slice_path) if(O.get_sharpness()) playsound(loc, 'sound/weapons/slice.ogg', 50, TRUE, -1) @@ -127,44 +125,11 @@ to_chat(user, "You slice apart the [src]! You went too far and the tiny remaining scraps are worthless!") seedify(src, 1, TRUE, TRUE, src, user) -// Various gene procs -/obj/item/reagent_containers/food/snacks/grown/attack_self(mob/user) - if(seed && seed.get_gene(/datum/plant_gene/trait/squash)) - squash(user) - ..() - /obj/item/reagent_containers/food/snacks/grown/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) if(!..()) //was it caught by a mob? if(seed) for(var/datum/plant_gene/trait/T in seed.genes) T.on_throw_impact(src, hit_atom) - if(seed.get_gene(/datum/plant_gene/trait/squash)) - squash(hit_atom) - -/obj/item/reagent_containers/food/snacks/grown/proc/squash(atom/target) - var/turf/T = get_turf(target) - forceMove(T) - if(ispath(splat_type, /obj/effect/decal/cleanable/food/plant_smudge)) - if(filling_color) - var/obj/O = new splat_type(T) - O.color = filling_color - O.name = "[name] smudge" - else if(splat_type) - new splat_type(T) - - if(trash) - generate_trash(T) - - visible_message("[src] is squashed.","You hear a smack.") - if(seed) - for(var/datum/plant_gene/trait/trait in seed.genes) - trait.on_squash(src, target) - - reagents.expose(T) - for(var/A in T) - reagents.expose(A) - - qdel(src) /obj/item/reagent_containers/food/snacks/grown/On_Consume() if(iscarbon(usr)) diff --git a/code/modules/hydroponics/grown/banana.dm b/code/modules/hydroponics/grown/banana.dm index 64a529f8ea97..b567f0919304 100644 --- a/code/modules/hydroponics/grown/banana.dm +++ b/code/modules/hydroponics/grown/banana.dm @@ -110,12 +110,3 @@ name = "bluespace banana peel" desc = "A peel from a bluespace banana." icon_state = "bluenana_peel" - -// Other -/obj/item/grown/bananapeel/specialpeel //used by /obj/item/clothing/shoes/clown_shoes/banana_shoes - name = "synthesized banana peel" - desc = "A synthetic banana peel." - -/obj/item/grown/bananapeel/specialpeel/ComponentInitialize() - . = ..() - AddComponent(/datum/component/slippery, 40) diff --git a/code/modules/hydroponics/grown/flowers.dm b/code/modules/hydroponics/grown/flowers.dm index 820ecae005d8..9459a1f7a816 100644 --- a/code/modules/hydroponics/grown/flowers.dm +++ b/code/modules/hydroponics/grown/flowers.dm @@ -144,6 +144,7 @@ species = "sunflower" plantname = "Sunflowers" product = /obj/item/grown/sunflower + genes = list(/datum/plant_gene/trait/attack/sunflower_attack) endurance = 20 production = 2 yield = 2 @@ -169,10 +170,6 @@ throw_speed = 1 throw_range = 3 -/obj/item/grown/sunflower/attack(mob/M, mob/user) - to_chat(M, "[user] smacks you with a sunflower!FLOWER POWER!") - to_chat(user, "Your sunflower's FLOWER POWER strikes [M]!") - // Moonflower /obj/item/seeds/sunflower/moonflower name = "pack of moonflower seeds" @@ -211,11 +208,18 @@ icon_grow = "novaflower-grow" icon_dead = "sunflower-dead" product = /obj/item/grown/novaflower + genes = list(/datum/plant_gene/trait/backfire/novaflower_heat, /datum/plant_gene/trait/attack/novaflower_attack) mutatelist = list() reagents_add = list(/datum/reagent/consumable/condensedcapsaicin = 0.25, /datum/reagent/consumable/capsaicin = 0.3, /datum/reagent/consumable/nutriment = 0) rarity = 20 research = PLANT_RESEARCH_TIER_3 +/obj/item/seeds/sunflower/novaflower/Initialize(mapload,nogenes) + . = ..() + if(!nogenes) + unset_mutability(/datum/plant_gene/trait/attack/novaflower_attack, PLANT_GENE_REMOVABLE) + unset_mutability(/datum/plant_gene/trait/backfire/novaflower_heat, PLANT_GENE_REMOVABLE) + /obj/item/grown/novaflower seed = /obj/item/seeds/sunflower/novaflower name = "novaflower" @@ -232,33 +236,3 @@ throw_range = 3 attack_verb = list("roasted", "scorched", "burned") grind_results = list(/datum/reagent/consumable/capsaicin = 0, /datum/reagent/consumable/condensedcapsaicin = 0) - -/obj/item/grown/novaflower/add_juice() - ..() - force = round((5 + seed.potency / 5), 1) - -/obj/item/grown/novaflower/attack(mob/living/carbon/M, mob/user) - if(!..()) - return - if(isliving(M)) - to_chat(M, "You are lit on fire from the intense heat of the [name]!") - M.adjust_fire_stacks(seed.potency / 20) - if(M.IgniteMob()) - message_admins("[ADMIN_LOOKUPFLW(user)] set [ADMIN_LOOKUPFLW(M)] on fire with [src] at [AREACOORD(user)]") - log_game("[key_name(user)] set [key_name(M)] on fire with [src] at [AREACOORD(user)]") - -/obj/item/grown/novaflower/afterattack(atom/A as mob|obj, mob/user,proximity) - . = ..() - if(!proximity) - return - if(force > 0) - force -= rand(1, (force / 3) + 1) - else - to_chat(usr, "All the petals have fallen off the [name] from violent whacking!") - qdel(src) - -/obj/item/grown/novaflower/pickup(mob/living/carbon/human/user) - ..() - if(!user.gloves) - to_chat(user, "The [name] burns your bare hand!") - user.adjustFireLoss(rand(1, 5)) diff --git a/code/modules/hydroponics/grown/misc.dm b/code/modules/hydroponics/grown/misc.dm index 73a322ce81ae..be34ef0ec425 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 17d43d0a31c5..c3488c43f789 100644 --- a/code/modules/hydroponics/grown/mushrooms.dm +++ b/code/modules/hydroponics/grown/mushrooms.dm @@ -220,7 +220,7 @@ endurance = 8 yield = 4 growthstages = 2 - genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism, /datum/plant_gene/reagent/liquidelectricity, /datum/plant_gene/trait/plant_type/carnivory) + genes = list(/datum/plant_gene/trait/plant_type/fungal_metabolism, /datum/plant_gene/reagent/liquidelectricity, /datum/plant_gene/trait/carnivory) growing_icon = 'icons/obj/hydroponics/growing_mushrooms.dmi' reagents_add = list(/datum/reagent/consumable/nutriment = 0.1) research = PLANT_RESEARCH_TIER_3 @@ -229,7 +229,7 @@ . = ..() if(!nogenes) unset_mutability(/datum/plant_gene/reagent/liquidelectricity, PLANT_GENE_EXTRACTABLE) - unset_mutability(/datum/plant_gene/trait/plant_type/carnivory, PLANT_GENE_REMOVABLE) + unset_mutability(/datum/plant_gene/trait/carnivory, PLANT_GENE_REMOVABLE) /obj/item/reagent_containers/food/snacks/grown/mushroom/jupitercup seed = /obj/item/seeds/chanter/jupitercup diff --git a/code/modules/hydroponics/grown/nettle.dm b/code/modules/hydroponics/grown/nettle.dm index 277245138a54..3fa14561b8d1 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,17 +29,23 @@ 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" desc = "It's probably not wise to touch it with bare hands..." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "nettle" lefthand_file = 'icons/mob/inhands/weapons/plants_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/plants_righthand.dmi' @@ -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/grown/root.dm b/code/modules/hydroponics/grown/root.dm index 97773e39f277..d3f847d7e292 100644 --- a/code/modules/hydroponics/grown/root.dm +++ b/code/modules/hydroponics/grown/root.dm @@ -28,7 +28,7 @@ /obj/item/reagent_containers/food/snacks/grown/carrot/attackby(obj/item/I, mob/user, params) if(I.get_sharpness()) to_chat(user, "You sharpen the carrot into a shiv with [I].") - var/obj/item/kitchen/knife/shiv/carrot/Shiv = new /obj/item/kitchen/knife/shiv/carrot + var/obj/item/melee/knife/shiv/carrot/Shiv = new /obj/item/melee/knife/shiv/carrot remove_item_from_storage(user) qdel(src) user.put_in_hands(Shiv) diff --git a/code/modules/hydroponics/growninedible.dm b/code/modules/hydroponics/growninedible.dm index f97596c348f2..ee76f02e02c8 100644 --- a/code/modules/hydroponics/growninedible.dm +++ b/code/modules/hydroponics/growninedible.dm @@ -23,8 +23,9 @@ pixel_y = base_pixel_y + rand(-5, 5) if(seed) - for(var/datum/plant_gene/trait/T in seed.genes) - T.on_new(src, newloc) + // Go through all traits in their genes and call on_new_plant from them. + for(var/datum/plant_gene/trait/trait in seed.genes) + trait.on_new_plant(src, newloc) if(istype(src, seed.product)) // no adding reagents if it is just a trash item seed.prepare_result(src) diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm index 74d004849a2a..56ad2264ce01 100644 --- a/code/modules/hydroponics/hydroitemdefines.dm +++ b/code/modules/hydroponics/hydroitemdefines.dm @@ -59,7 +59,7 @@ /obj/item/cultivator name = "cultivator" desc = "It's used for removing weeds or scratching your back." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "cultivator" item_state = "cultivator" lefthand_file = 'icons/mob/inhands/equipment/hydroponics_lefthand.dmi' @@ -106,7 +106,7 @@ /obj/item/hatchet name = "hatchet" desc = "A very sharp axe blade upon a short fibremetal handle. It has a long history of chopping things, but now it is used for chopping wood." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/weapon/axe.dmi' icon_state = "hatchet" item_state = "hatchet" lefthand_file = 'icons/mob/inhands/equipment/hydroponics_lefthand.dmi' diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index bbfeaeeb5b5a..13faaf5f15a5 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -194,7 +194,7 @@ //Pests & Weeds////////////////////////////////////////////////////////// if(pestlevel >= 8) - if(!myseed.get_gene(/datum/plant_gene/trait/plant_type/carnivory)) + if(!myseed.get_gene(/datum/plant_gene/trait/carnivory)) adjustHealth(-2 / rating) else @@ -202,7 +202,7 @@ adjustPests(-1 / rating) else if(pestlevel >= 4) - if(!myseed.get_gene(/datum/plant_gene/trait/plant_type/carnivory)) + if(!myseed.get_gene(/datum/plant_gene/trait/carnivory)) adjustHealth(-1 / rating) else @@ -210,7 +210,7 @@ if(prob(50)) adjustPests(-1 / rating) - else if(pestlevel < 4 && myseed.get_gene(/datum/plant_gene/trait/plant_type/carnivory)) + else if(pestlevel < 4 && myseed.get_gene(/datum/plant_gene/trait/carnivory)) adjustHealth(-2 / rating) if(prob(5)) adjustPests(-1 / rating) @@ -269,10 +269,7 @@ update_appearance() if(myseed && prob(5 * (11-myseed.production))) - for(var/g in myseed.genes) - if(istype(g, /datum/plant_gene/trait)) - var/datum/plant_gene/trait/selectedtrait = g - selectedtrait.on_grow(src) + SEND_SIGNAL(myseed, COMSIG_SEED_ON_GROW, src) return /obj/machinery/hydroponics/update_appearance(updates) diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm index a57934dc551d..d34490d2bd24 100644 --- a/code/modules/hydroponics/plant_genes.dm +++ b/code/modules/hydroponics/plant_genes.dm @@ -1,6 +1,8 @@ /datum/plant_gene var/name var/mutability_flags = PLANT_GENE_EXTRACTABLE | PLANT_GENE_REMOVABLE ///These flags tells the genemodder if we want the gene to be extractable, only removable or neither. + /// The font awesome icon name representing the gene in the seed extractor UI (Once i port that -Fallcon) + var/icon = "dna" /datum/plant_gene/proc/get_name() // Used for manipulator display and gene disk name. var/formatted_name @@ -14,16 +16,39 @@ formatted_name += name return formatted_name -/datum/plant_gene/proc/can_add(obj/item/seeds/S) - return !istype(S, /obj/item/seeds/sample) // Samples can't accept new genes +/* + * Check if the seed can accept this plant gene. + * + * our_seed - the seed we're adding the gene to + * + * Returns TRUE if the seed can take the gene, and FALSE otherwise. + */ +/datum/plant_gene/proc/can_add(obj/item/seeds/our_seed) + SHOULD_CALL_PARENT(TRUE) + return TRUE +/// Copies over vars and information about our current gene to a new gene and returns the new instance of gene. /datum/plant_gene/proc/Copy() - var/datum/plant_gene/G = new type - G.mutability_flags = mutability_flags - return G - -/datum/plant_gene/proc/apply_vars(obj/item/seeds/S) // currently used for fire resist, can prob. be further refactored - return + var/datum/plant_gene/new_gene = new type + new_gene.mutability_flags = mutability_flags + return new_gene + +/* + * on_new_seed is called when seed genes are initialized on the /obj/seed. + * + * new_seed - the seed being created + */ +/datum/plant_gene/proc/on_new_seed(obj/item/seeds/new_seed) + return // Not implemented + +/* + * on_removed is called when the gene is removed from a seed. + * Also called when a seed is qdel'd (and all the genes are removed and deleted). + * + * old_seed - our seed, before being removed + */ +/datum/plant_gene/proc/on_removed(obj/item/seeds/old_seed) + return // Not implemented // Core plant genes store 5 main variables: lifespan, endurance, production, yield, potency /datum/plant_gene/core @@ -171,28 +196,70 @@ // Various traits affecting the product. /datum/plant_gene/trait + /// The rate at which this trait affects something. This can be anything really - why? I dunno. var/rate = 0.05 var/examine_line = "" - var/trait_id // must be set and equal for any two traits of the same type + /// Bonus lines displayed on examine. + var/description = "" + /// Flag - Traits that share an ID cannot be placed on the same plant. + var/trait_ids + /// Flag - Modifications made to the final product. + var/trait_flags + /// A blacklist of seeds that a trait cannot be attached to. + var/list/obj/item/seeds/seed_blacklist /datum/plant_gene/trait/Copy() var/datum/plant_gene/trait/G = ..() G.rate = rate return G -/datum/plant_gene/trait/can_add(obj/item/seeds/S) +/datum/plant_gene/trait/can_add(obj/item/seeds/source_seed) if(!..()) return FALSE - for(var/datum/plant_gene/trait/R in S.genes) - if(trait_id && R.trait_id == trait_id) + for(var/obj/item/seeds/found_seed as anything in seed_blacklist) + if(istype(source_seed, found_seed)) return FALSE - if(type == R.type) + + for(var/datum/plant_gene/trait/trait in source_seed.genes) + if(trait_ids & trait.trait_ids) + return FALSE + if(type == trait.type) return FALSE + return TRUE -/datum/plant_gene/trait/proc/on_new(obj/item/reagent_containers/food/snacks/grown/G, newloc) - return +/* + * on_new_plant is called for every plant trait on an /obj/item/grown or /obj/item/reagent_containers/food/snacks/grown when initialized. + * + * our_plant - the source plant being created + * newloc - the loc of the plant + */ +/datum/plant_gene/trait/proc/on_new_plant(obj/item/reagent_containers/food/snacks/grown/our_plant, newloc) + // Plants should always have seeds, but if a plant gene is somehow being instantiated on a plant with no seed, stop initializing genes + // (Plants hold their genes on their seeds, so we can't really add them to something that doesn't exist) + if(isnull(our_plant.get_plant_seed())) + stack_trace("[our_plant] ([our_plant.type]) has a nulled seed value while trying to initialize [src]!") + return FALSE + + // Add on any bonus lines on examine + if(description) + RegisterSignal(our_plant, COMSIG_PARENT_EXAMINE, PROC_REF(examine)) + return TRUE + +/* + * on_new_seed is called when seed genes are initialized on the /obj/seed. + * + * new_seed - the seed being created + */ +/datum/plant_gene/trait/on_new_seed(obj/item/seeds/new_seed) + return TRUE + +/// Add on any unique examine text to the plant's examine text. +/datum/plant_gene/trait/proc/examine(obj/item/reagent_containers/food/snacks/grown/our_plant, mob/examiner, list/examine_list) + SIGNAL_HANDLER + + examine_list += span_info("[description]") /datum/plant_gene/trait/proc/on_consume(obj/item/reagent_containers/food/snacks/grown/G, mob/living/carbon/target) return @@ -213,84 +280,173 @@ /datum/plant_gene/trait/proc/on_grow(obj/machinery/hydroponics/H) return +/// Allows the plant to be squashed when thrown or slipped on, leaving a colored mess and trash type item behind. /datum/plant_gene/trait/squash - // Allows the plant to be squashed when thrown or slipped on, leaving a colored mess and trash type item behind. - // Also splashes everything in target turf with reagents and applies other trait effects (teleporting, etc) to the target by on_squash. - // For code, see grown.dm name = "Liquid Contents" - examine_line = "It has a lot of liquid contents inside." + icon = "droplet" + description = "It may burst open from the internal pressure on impact." + trait_ids = THROW_IMPACT_ID | REAGENT_TRANSFER_ID | ATTACK_SELF_ID + mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_EXTRACTABLE + +// Register a signal that our plant can be squashed on add. +/datum/plant_gene/trait/squash/on_new_plant(obj/item/reagent_containers/food/snacks/grown/our_plant, newloc) + . = ..() + if(!.) + return + + RegisterSignal(our_plant, COMSIG_PLANT_ON_SLIP, PROC_REF(squash_plant)) + RegisterSignal(our_plant, COMSIG_MOVABLE_IMPACT, PROC_REF(squash_plant)) + RegisterSignal(our_plant, COMSIG_ITEM_ATTACK_SELF, PROC_REF(squash_plant)) + +/* + * Signal proc to squash the plant this trait belongs to, causing a smudge, exposing the target to reagents, and deleting it, + * + * Arguments + * our_plant - the plant this trait belongs to. + * target - the atom being hit by this squashed plant. + */ +/datum/plant_gene/trait/squash/proc/squash_plant(obj/item/reagent_containers/food/snacks/grown/our_plant, atom/target) + SIGNAL_HANDLER + + var/turf/our_turf = get_turf(target) + our_plant.forceMove(our_turf) + if(istype(our_plant)) + if(ispath(our_plant.splat_type, /obj/effect/decal/cleanable/food/plant_smudge)) + var/obj/plant_smudge = new our_plant.splat_type(our_turf) + plant_smudge.name = "[our_plant.name] smudge" + if(our_plant.filling_color) + plant_smudge.color = our_plant.filling_color + else if(our_plant.splat_type) + new our_plant.splat_type(our_turf) + else + var/obj/effect/decal/cleanable/food/plant_smudge/misc_smudge = new(our_turf) + misc_smudge.name = "[our_plant.name] smudge" + misc_smudge.color = "#82b900" -/datum/plant_gene/trait/squash/on_slip(obj/item/reagent_containers/food/snacks/grown/G, mob/living/carbon/C) - // Squash the plant on slip. - G.squash(C) + our_plant.visible_message(span_warning("[our_plant] is squashed."),span_hear("You hear a smack.")) + SEND_SIGNAL(our_plant, COMSIG_PLANT_ON_SQUASH, target) + our_plant.reagents?.expose(our_turf) + for(var/things in our_turf) + our_plant.reagents?.expose(things) + + qdel(our_plant) + +/* + * Makes plant slippery, unless it has a grown-type trash. Then the trash gets slippery. + * Applies other trait effects (teleporting, etc) to the target by signal. + */ /datum/plant_gene/trait/slip - // Makes plant slippery, unless it has a grown-type trash. Then the trash gets slippery. - // Applies other trait effects (teleporting, etc) to the target by on_slip. name = "Slippery Skin" + description = "Watch your step around this." + icon = "person-falling" rate = 1.6 - examine_line = "It has a very slippery skin." + mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_EXTRACTABLE -/datum/plant_gene/trait/slip/on_new(obj/item/reagent_containers/food/snacks/grown/G, newloc) - ..() - if(istype(G) && ispath(G.trash, /obj/item/grown)) +/datum/plant_gene/trait/slip/on_new_plant(obj/item/our_plant, newloc) + . = ..() + if(!.) + return + + var/obj/item/reagent_containers/food/snacks/grown/grown_plant = our_plant + if(istype(grown_plant) && ispath(grown_plant.trash, /obj/item/grown)) return - var/obj/item/seeds/seed = G.seed - var/stun_len = seed.potency * rate - if(!istype(G, /obj/item/grown/bananapeel) && (!G.reagents || !G.reagents.has_reagent(/datum/reagent/lube))) + var/obj/item/seeds/our_seed = our_plant.get_plant_seed() + var/stun_len = our_seed.potency * rate + + if(!istype(our_plant, /obj/item/grown/bananapeel) && (!our_plant.reagents || !our_plant.reagents.has_reagent(/datum/reagent/lube))) stun_len /= 3 - G.AddComponent(/datum/component/slippery, min(stun_len,140), NONE, CALLBACK(src, PROC_REF(handle_slip), G)) + our_plant.AddComponent(/datum/component/slippery, min(stun_len, 140), NONE, CALLBACK(src, PROC_REF(handle_slip), our_plant)) + +/// On slip, sends a signal that our plant was slipped on out. +/datum/plant_gene/trait/slip/proc/handle_slip(obj/item/reagent_containers/food/snacks/grown/our_plant, mob/slipped_target) + SEND_SIGNAL(our_plant, COMSIG_PLANT_ON_SLIP, slipped_target) -/datum/plant_gene/trait/slip/proc/handle_slip(obj/item/reagent_containers/food/snacks/grown/G, mob/M) - for(var/datum/plant_gene/trait/T in G.seed.genes) - T.on_slip(G, M) +/* + * Cell recharging trait. Charges all mob's power cells to (potency*rate)% mark when eaten. + * Generates sparks on squash. + * Small (potency * rate) chance to shock squish or slip target for (potency * rate) damage. + * Also affects plant batteries see capatative cell production datum + */ /datum/plant_gene/trait/cell_charge - // Cell recharging trait. Charges all mob's power cells to (potency*rate)% mark when eaten. - // Generates sparks on squash. - // Small (potency*rate*5) chance to shock squish or slip target for (potency*rate*5) damage. - // Also affects plant batteries see capatative cell production datum name = "Electrical Activity" + description = "It can electrocute on interaction or recharge batteries when eaten." + icon = "bolt" rate = 0.2 + mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_EXTRACTABLE -/datum/plant_gene/trait/cell_charge/on_slip(obj/item/reagent_containers/food/snacks/grown/G, mob/living/carbon/C) - var/power = G.seed.potency*rate - if(prob(power)) - C.electrocute_act(round(power), G, 1, SHOCK_NOGLOVES) - -/datum/plant_gene/trait/cell_charge/on_squash(obj/item/reagent_containers/food/snacks/grown/G, atom/target) - if(iscarbon(target)) - var/mob/living/carbon/C = target - var/power = G.seed.potency*rate - if(prob(power)) - C.electrocute_act(round(power), G, 1, SHOCK_NOGLOVES) - -/datum/plant_gene/trait/cell_charge/on_consume(obj/item/reagent_containers/food/snacks/grown/G, mob/living/carbon/target) - if(!G.reagents.total_volume) - var/batteries_recharged = 0 - for(var/obj/item/stock_parts/cell/C in target.GetAllContents()) - var/newcharge = min(G.seed.potency*0.01*C.maxcharge, C.maxcharge) - if(C.charge < newcharge) - C.charge = newcharge - if(isobj(C.loc)) - var/obj/O = C.loc - O.update_appearance() //update power meters and such - C.update_appearance() - batteries_recharged = 1 - if(batteries_recharged) - to_chat(target, "Your batteries are recharged!") +/datum/plant_gene/trait/cell_charge/on_new_plant(obj/item/our_plant, newloc) + . = ..() + if(!.) + return + + var/obj/item/seeds/our_seed = our_plant.get_plant_seed() + if(our_seed.get_gene(/datum/plant_gene/trait/squash)) + // If we have the squash gene, let that handle slipping + RegisterSignal(our_plant, COMSIG_PLANT_ON_SQUASH, PROC_REF(zap_target)) + else + RegisterSignal(our_plant, COMSIG_PLANT_ON_SLIP, PROC_REF(zap_target)) + RegisterSignal(our_plant, COMSIG_FOOD_EATEN, PROC_REF(recharge_cells)) +/* + * Zaps the target with a stunning shock. + * + * our_plant - our source plant, shocking the target + * target - the atom being zapped by our plant + */ +/datum/plant_gene/trait/cell_charge/proc/zap_target(obj/item/our_plant, atom/target) + SIGNAL_HANDLER + if(!iscarbon(target)) + return + + our_plant.investigate_log("zapped [key_name(target)] at [AREACOORD(target)]. Last touched by: [our_plant.fingerprintslast].", INVESTIGATE_BOTANY) + var/mob/living/carbon/target_carbon = target + var/obj/item/seeds/our_seed = our_plant.get_plant_seed() + var/power = our_seed.potency * rate + if(prob(power)) + target_carbon.electrocute_act(round(power), our_plant, 1, SHOCK_NOGLOVES) + +/* + * Recharges every cell the person is holding for a bit based on plant potency. + * + * our_plant - our source plant, that we consumed to charge the cells + * eater - the mob that bit the plant + * feeder - the mob that feed the eater the plant + */ +/datum/plant_gene/trait/cell_charge/proc/recharge_cells(obj/item/our_plant, mob/living/carbon/eater, mob/feeder) + SIGNAL_HANDLER + + to_chat(eater, span_notice("You feel energized as you bite into [our_plant].")) + var/batteries_recharged = FALSE + var/obj/item/seeds/our_seed = our_plant.get_plant_seed() + for(var/obj/item/stock_parts/cell/found_cell in eater.get_contents()) + var/newcharge = min(our_seed.potency * 0.01 * found_cell.maxcharge, found_cell.maxcharge) + if(found_cell.charge < newcharge) + found_cell.charge = newcharge + if(isobj(found_cell.loc)) + var/obj/cell_location = found_cell.loc + cell_location.update_appearance() //update power meters and such + found_cell.update_appearance() + batteries_recharged = TRUE + if(batteries_recharged) + to_chat(eater, span_notice("Your batteries are recharged!")) + +/* + * Makes the plant glow. Makes the plant in tray glow, too. + * Adds (1.4 + potency * rate) light range and (potency * (rate + 0.01)) light_power to products. + */ /datum/plant_gene/trait/glow - // Makes plant glow. Makes plant in tray glow too. - // Adds 1 + potency*rate light range and potency*(rate + 0.01) light_power to products. name = "Bioluminescence" + icon = "lightbulb" rate = 0.03 - examine_line = "It emits a soft glow." - trait_id = "glow" + description = "It emits a soft glow." + trait_ids = GLOW_ID + mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_EXTRACTABLE var/glow_color = "#C3E381" /datum/plant_gene/trait/glow/proc/glow_range(obj/item/seeds/S) @@ -299,15 +455,18 @@ /datum/plant_gene/trait/glow/proc/glow_power(obj/item/seeds/S) return max(S.potency*(rate + 0.01), 0.1) -/datum/plant_gene/trait/glow/on_new(obj/item/reagent_containers/food/snacks/grown/G, newloc) +/datum/plant_gene/trait/glow/on_new_plant(obj/item/reagent_containers/food/snacks/grown/G, newloc) . = ..() G.light_system = MOVABLE_LIGHT G.AddComponent(/datum/component/overlay_lighting, glow_range(G.seed), glow_power(G.seed), glow_color) +/* + * Makes plant emit darkness. (Purple-ish shadows) + * Adds - (potency * (rate * 0.2)) light power to products. + */ /datum/plant_gene/trait/glow/shadow - //makes plant emit slightly purple shadows - //adds -potency*(rate*0.2) light power to products name = "Shadow Emission" + icon = "lightbulb-o" rate = 0.04 glow_color = "#AAD84B" @@ -348,157 +507,359 @@ name = "Pink Bioluminescence" glow_color = "#FFB3DA" - - +/* + * Makes plant teleport people when squashed or slipped on. + * Teleport radius is roughly potency / 10. + */ /datum/plant_gene/trait/teleport - // Makes plant teleport people when squashed or slipped on. - // Teleport radius is calculated as max(round(potency*rate), 1) name = "Bluespace Activity" + description = "It causes people to teleport on interaction." + icon = "right-left" rate = 0.1 + mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_EXTRACTABLE -/datum/plant_gene/trait/teleport/on_squash(obj/item/reagent_containers/food/snacks/grown/G, atom/target) - if(isliving(target)) - var/teleport_radius = max(round(G.seed.potency / 10), 1) - var/turf/T = get_turf(target) - new /obj/effect/decal/cleanable/molten_object(T) //Leave a pile of goo behind for dramatic effect... - do_teleport(target, T, teleport_radius, channel = TELEPORT_CHANNEL_BLUESPACE) +/datum/plant_gene/trait/teleport/on_new_plant(obj/item/our_plant, newloc) + . = ..() + if(!.) + return + + var/obj/item/seeds/our_seed = our_plant.get_plant_seed() + if(our_seed.get_gene(/datum/plant_gene/trait/squash)) + // If we have the squash gene, let that handle slipping + RegisterSignal(our_plant, COMSIG_PLANT_ON_SQUASH, PROC_REF(squash_teleport)) + else + RegisterSignal(our_plant, COMSIG_PLANT_ON_SLIP, PROC_REF(slip_teleport)) + +/* + * When squashed, makes the target teleport. + * + * our_plant - our plant, being squashed, and teleporting the target + * target - the atom targeted by the squash + */ +/datum/plant_gene/trait/teleport/proc/squash_teleport(obj/item/our_plant, atom/target) + SIGNAL_HANDLER + + if(!isliving(target)) + return -/datum/plant_gene/trait/teleport/on_slip(obj/item/reagent_containers/food/snacks/grown/G, mob/living/carbon/C) - var/teleport_radius = max(round(G.seed.potency / 10), 1) - var/turf/T = get_turf(C) - to_chat(C, "You slip through spacetime!") - do_teleport(C, T, teleport_radius, channel = TELEPORT_CHANNEL_BLUESPACE) + our_plant.investigate_log("squash-teleported [key_name(target)] at [AREACOORD(target)]. Last touched by: [our_plant.fingerprintslast].", INVESTIGATE_BOTANY) + var/obj/item/seeds/our_seed = our_plant.get_plant_seed() + var/teleport_radius = max(round(our_seed.potency / 10), 1) + var/turf/T = get_turf(target) + new /obj/effect/decal/cleanable/molten_object(T) //Leave a pile of goo behind for dramatic effect... + do_teleport(target, T, teleport_radius, channel = TELEPORT_CHANNEL_BLUESPACE) + +/* + * When slipped on, makes the target teleport and either teleport the source again or delete it. + * + * our_plant - our plant being slipped on + * target - the carbon targeted that was slipped and was teleported + */ +/datum/plant_gene/trait/teleport/proc/slip_teleport(obj/item/our_plant, mob/living/carbon/target) + SIGNAL_HANDLER + + our_plant.investigate_log("slip-teleported [key_name(target)] at [AREACOORD(target)]. Last touched by: [our_plant.fingerprintslast].", INVESTIGATE_BOTANY) + var/obj/item/seeds/our_seed = our_plant.get_plant_seed() + var/teleport_radius = max(round(our_seed.potency / 10), 1) + var/turf/T = get_turf(target) + to_chat(target, span_warning("You slip through spacetime!")) + do_teleport(target, T, teleport_radius, channel = TELEPORT_CHANNEL_BLUESPACE) if(prob(50)) - do_teleport(G, T, teleport_radius, channel = TELEPORT_CHANNEL_BLUESPACE) + do_teleport(our_plant, T, teleport_radius, channel = TELEPORT_CHANNEL_BLUESPACE) else new /obj/effect/decal/cleanable/molten_object(T) //Leave a pile of goo behind for dramatic effect... - qdel(G) - + qdel(our_plant) +/** + * A plant trait that causes the plant's capacity to double. + * + * When harvested, the plant's individual capacity is set to double it's default. + */ /datum/plant_gene/trait/maxchem - // 2x to max reagents volume. name = "Densified Chemicals" + description = "The reagent volume is doubled." + icon = "flask-vial" rate = 2 + mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_EXTRACTABLE -/datum/plant_gene/trait/maxchem/on_new(obj/item/reagent_containers/food/snacks/grown/G, newloc) - ..() - G.reagents.maximum_volume *= rate +/datum/plant_gene/trait/maxchem/on_new_plant(obj/item/reagent_containers/food/snacks/grown/our_plant, newloc) + . = ..() + if(!.) + return + our_plant.reagents?.maximum_volume *= rate + +/// Allows a plant to be harvested multiple times. /datum/plant_gene/trait/repeated_harvest name = "Perennial Growth" - -/datum/plant_gene/trait/repeated_harvest/can_add(obj/item/seeds/S) - if(!..()) - return FALSE - if(istype(S, /obj/item/seeds/replicapod)) - return FALSE - return TRUE - + description = "It may be harvested multiple times from the same plant." + icon = "cubes-stacked" + /// Don't allow replica pods to be multi harvested, please. + seed_blacklist = list( + /obj/item/seeds/replicapod, + ) + mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_EXTRACTABLE + +/* + * Allows a plant to be turned into a battery when cabling is applied. + * 100 potency plants are made into 2 mj batteries. + * Plants with electrical activity has their capacities massively increased (up to 40 mj at 100 potency) + */ /datum/plant_gene/trait/battery name = "Capacitive Cell Production" + description = "It can work like a power cell when wired properly." + icon = "car-battery" + mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_EXTRACTABLE + /// The number of cables needed to make a battery. + var/cables_needed_per_battery = 5 -/datum/plant_gene/trait/battery/on_attackby(obj/item/reagent_containers/food/snacks/grown/G, obj/item/I, mob/user) - if(istype(I, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/C = I - if(C.use(5)) - to_chat(user, "You add some cable to [G] and slide it inside the battery encasing.") - var/obj/item/stock_parts/cell/potato/pocell = new /obj/item/stock_parts/cell/potato(user.loc) - pocell.icon_state = G.icon_state - pocell.maxcharge = G.seed.potency * 20 - - // The secret of potato supercells! - var/datum/plant_gene/trait/cell_charge/CG = G.seed.get_gene(/datum/plant_gene/trait/cell_charge) - if(CG) // Cell charge max is now 40MJ or otherwise known as 400KJ (Same as bluespace powercells) - pocell.maxcharge *= CG.rate*100 - pocell.charge = pocell.maxcharge - pocell.name = "[G.name] battery" - pocell.desc = "A rechargeable plant-based power cell. This one has a rating of [DisplayEnergy(pocell.maxcharge)], and you should not swallow it." - - if(G.reagents.has_reagent(/datum/reagent/toxin/plasma, 2)) - pocell.rigged = TRUE - - qdel(G) - else - to_chat(user, "You need five lengths of cable to make a [G] battery!") +/datum/plant_gene/trait/battery/on_new_plant(obj/item/our_plant, newloc) + . = ..() + if(!.) + return + + RegisterSignal(our_plant, COMSIG_PARENT_ATTACKBY, PROC_REF(make_battery)) + +/* + * When a plant with this gene is hit (attackby) with cables, we turn it into a battery. + * + * our_plant - our plant being hit + * hit_item - the item we're hitting the plant with + * user - the person hitting the plant with an item + */ +/datum/plant_gene/trait/battery/proc/make_battery(obj/item/our_plant, obj/item/hit_item, mob/user) + SIGNAL_HANDLER + + if(!istype(hit_item, /obj/item/stack/cable_coil)) + return + + var/obj/item/seeds/our_seed = our_plant.get_plant_seed() + var/obj/item/stack/cable_coil/cabling = hit_item + if(!cabling.use(cables_needed_per_battery)) + to_chat(user, span_warning("You need five lengths of cable to make a [our_plant] battery!")) + return + to_chat(user, span_notice("You add some cable to [our_plant] and slide it inside the battery encasing.")) + var/obj/item/stock_parts/cell/potato/pocell = new /obj/item/stock_parts/cell/potato(user.loc) + pocell.icon = our_plant.icon // Just in case the plant icons get spread out in different files eventually, this trait won't cause error sprites (also yay downstreams) + pocell.icon_state = our_plant.icon_state + pocell.maxcharge = our_seed.potency + // The secret of potato supercells! + var/datum/plant_gene/trait/cell_charge/electrical_gene = our_seed.get_gene(/datum/plant_gene/trait/cell_charge) + if(electrical_gene) // Cell charge max is now 40MJ or otherwise known as 400KJ (Same as bluespace power cells) + pocell.maxcharge *= (electrical_gene.rate * 100) + + pocell.charge = pocell.maxcharge + pocell.name = "[our_plant.name] battery" + pocell.desc = "A rechargeable plant-based power cell. This one has a rating of [DisplayEnergy(pocell.maxcharge)], and you should not swallow it." + + if(our_plant.reagents.has_reagent(/datum/reagent/toxin/plasma, 2)) + pocell.rigged = TRUE + + qdel(our_plant) + +/* + * Injects a number of chemicals from the plant when you throw it at someone or they slip on it. + * At 0 potency it can inject 1 unit of its chemicals, while at 100 potency it can inject 20 units. + */ /datum/plant_gene/trait/stinging name = "Hypodermic Prickles" + description = "It stings, passing some reagents in the process." + icon = "syringe" + trait_ids = REAGENT_TRANSFER_ID + mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_EXTRACTABLE + +/datum/plant_gene/trait/stinging/on_new_plant(obj/item/our_plant, newloc) + . = ..() + if(!.) + return + + RegisterSignal(our_plant, COMSIG_PLANT_ON_SLIP, PROC_REF(prickles_inject)) + RegisterSignal(our_plant, COMSIG_MOVABLE_IMPACT, PROC_REF(prickles_inject)) + +/* + * Injects a target with a number of reagents from our plant. + * + * our_plant - our plant that's injecting someone + * target - the atom being hit on thrown or slipping on our plant + */ +/datum/plant_gene/trait/stinging/proc/prickles_inject(obj/item/our_plant, atom/target) + SIGNAL_HANDLER -/datum/plant_gene/trait/stinging/on_slip(obj/item/reagent_containers/food/snacks/grown/G, atom/target) - on_throw_impact(G, target) + if(!isliving(target) || !our_plant.reagents?.total_volume) + return -/datum/plant_gene/trait/stinging/on_throw_impact(obj/item/reagent_containers/food/snacks/grown/G, atom/target) - if(isliving(target) && G.reagents && G.reagents.total_volume) - var/mob/living/L = target - if(L.reagents && L.can_inject(null, 0)) - var/injecting_amount = max(1, G.seed.potency*0.2) // Minimum of 1, max of 20 - G.reagents.trans_to(L, injecting_amount, method = INJECT) - to_chat(target, "You are pricked by [G]!") - log_combat(G, L, "pricked and attempted to inject reagents from [G] to [L]. Last touched by: [G.fingerprintslast].") + var/mob/living/living_target = target + var/obj/item/seeds/our_seed = our_plant.get_plant_seed() + if(living_target.reagents && living_target.can_inject()) + var/injecting_amount = max(1, our_seed.potency * 0.2) // Minimum of 1, max of 20 + our_plant.reagents.trans_to(living_target, injecting_amount, method = INJECT) + to_chat(target, span_danger("You are pricked by [our_plant]!")) + log_combat(our_plant, living_target, "pricked and attempted to inject reagents from [our_plant] to [living_target]. Last touched by: [our_plant.fingerprintslast].") + our_plant.investigate_log("pricked and injected [key_name(living_target)] and injected [injecting_amount] reagents at [AREACOORD(living_target)]. Last touched by: [our_plant.fingerprintslast].", INVESTIGATE_BOTANY) +/// Explodes into reagent-filled smoke when squashed. /datum/plant_gene/trait/smoke name = "Gaseous Decomposition" + description = "It can be smashed to turn its Liquid Contents into smoke." + icon = "cloud" + mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_EXTRACTABLE -/datum/plant_gene/trait/smoke/on_squash(obj/item/reagent_containers/food/snacks/grown/G, atom/target) - var/datum/effect_system/smoke_spread/chem/S = new - var/splat_location = get_turf(target) - var/smoke_amount = round(sqrt(G.seed.potency * 0.1), 1) - S.attach(splat_location) - S.set_up(G.reagents, smoke_amount, splat_location, 0) - S.start() - G.reagents.clear_reagents() +/datum/plant_gene/trait/smoke/on_new_plant(obj/item/our_plant, newloc) + . = ..() + if(!.) + return + + RegisterSignal(our_plant, COMSIG_PLANT_ON_SQUASH, PROC_REF(make_smoke)) -/datum/plant_gene/trait/fire_resistance // Lavaland +/* + * Makes a cloud of reagent smoke. + * + * our_plant - our plant being squashed and smoked + * target - the atom the plant was squashed on + */ +/datum/plant_gene/trait/smoke/proc/make_smoke(obj/item/reagent_containers/food/snacks/grown/our_plant, atom/target) + SIGNAL_HANDLER + + our_plant.investigate_log("made smoke at [AREACOORD(target)]. Last touched by: [our_plant.fingerprintslast].", INVESTIGATE_BOTANY) + var/datum/effect_system/smoke_spread/chem/smoke = new + var/splat_location = get_turf(target) + var/smoke_amount = round(sqrt(our_plant.seed.potency * 0.1), 1) + smoke.attach(splat_location) + smoke.set_up(our_plant.reagents, smoke_amount, splat_location, 0) + smoke.start() + our_plant.reagents.clear_reagents() + +/// Makes the plant and its seeds fireproof. From lavaland plants. +/datum/plant_gene/trait/fire_resistance name = "Fire Resistance" + description = "Makes the seeds, plant and produce fireproof." + icon = "fire" + mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_EXTRACTABLE -/datum/plant_gene/trait/fire_resistance/apply_vars(obj/item/seeds/S) - if(!(S.resistance_flags & FIRE_PROOF)) - S.resistance_flags |= FIRE_PROOF +/datum/plant_gene/trait/fire_resistance/on_new_seed(obj/item/seeds/new_seed) + if(!(new_seed.resistance_flags & FIRE_PROOF)) + new_seed.resistance_flags |= FIRE_PROOF -/datum/plant_gene/trait/fire_resistance/on_new(obj/item/reagent_containers/food/snacks/grown/G, newloc) - if(!(G.resistance_flags & FIRE_PROOF)) - G.resistance_flags |= FIRE_PROOF +/datum/plant_gene/trait/fire_resistance/on_removed(obj/item/seeds/old_seed) + if(old_seed.resistance_flags & FIRE_PROOF) + old_seed.resistance_flags &= ~FIRE_PROOF + +/datum/plant_gene/trait/fire_resistance/on_new_plant(obj/item/our_plant, newloc) + . = ..() + if(!.) + return -///Invasive spreading lets the plant jump to other trays, the spreadinhg plant won't replace plants of the same type. + if(!(our_plant.resistance_flags & FIRE_PROOF)) + our_plant.resistance_flags |= FIRE_PROOF + +/// Invasive spreading lets the plant jump to other trays, and the spreading plant won't replace plants of the same type. /datum/plant_gene/trait/invasive name = "Invasive Spreading" + description = "It attempts to spread around if not contained." + icon = "virus" + mutability_flags = PLANT_GENE_REMOVABLE | PLANT_GENE_MUTATABLE | PLANT_GENE_EXTRACTABLE + +/datum/plant_gene/trait/invasive/on_new_seed(obj/item/seeds/new_seed) + RegisterSignal(new_seed, COMSIG_SEED_ON_GROW, PROC_REF(try_spread)) + +/datum/plant_gene/trait/invasive/on_removed(obj/item/seeds/old_seed) + UnregisterSignal(old_seed, COMSIG_SEED_ON_GROW) + +/* + * Attempt to find an adjacent tray we can spread to. + * + * our_seed - our plant's seed, what spreads to other trays + * our_tray - the hydroponics tray we're currently in + */ +/datum/plant_gene/trait/invasive/proc/try_spread(obj/item/seeds/our_seed, obj/machinery/hydroponics/our_tray) + SIGNAL_HANDLER + + if(prob(100 - (5 * (11 - our_seed.production)))) + return -/datum/plant_gene/trait/invasive/on_grow(obj/machinery/hydroponics/H) for(var/step_dir in GLOB.alldirs) - var/obj/machinery/hydroponics/HY = locate() in get_step(H, step_dir) - if(HY && prob(15)) - if(HY.myseed) // check if there is something in the tray. - if(HY.myseed.type == H.myseed.type && HY.dead != 0) - continue //It should not destroy its owm kind. - qdel(HY.myseed) - HY.myseed = null - HY.myseed = H.myseed.Copy() - HY.age = 0 - HY.dead = 0 - HY.plant_health = HY.myseed.endurance - HY.lastcycle = world.time - HY.harvest = 0 - HY.weedlevel = 0 // Reset - HY.pestlevel = 0 // Reset - HY.update_appearance() - HY.visible_message("The [H.myseed.plantname] spreads!") - -/datum/plant_gene/trait/plant_type // Parent type + var/obj/machinery/hydroponics/spread_tray = locate() in get_step(our_tray, step_dir) + if(spread_tray && prob(15)) + if(!our_tray.Adjacent(spread_tray)) + continue //Don't spread through things we can't go through. + + spread_seed(spread_tray, our_tray) + +/* + * Actually spread the plant to the tray we found in try_spread. + * + * target_tray - the tray we're spreading to + * origin_tray - the tray we're currently in + */ +/datum/plant_gene/trait/invasive/proc/spread_seed(obj/machinery/hydroponics/target_tray, obj/machinery/hydroponics/origin_tray) + if(target_tray.myseed) // Check if there's another seed in the next tray. + if(target_tray.myseed.type == origin_tray.myseed.type && target_tray.dead != FALSE) + return FALSE // It should not destroy its own kind. + target_tray.visible_message(span_warning("The [target_tray.myseed.plantname] is overtaken by [origin_tray.myseed.plantname]!")) + QDEL_NULL(target_tray.myseed) + target_tray.myseed = origin_tray.myseed.Copy() + target_tray.age = 0 + target_tray.plant_health = target_tray.myseed.endurance + target_tray.lastcycle = world.time + target_tray.weedlevel = 0 + target_tray.pestlevel = 0 + target_tray.visible_message(span_warning("The [origin_tray.myseed.plantname] spreads!")) + if(target_tray.myseed) + target_tray.name = "[initial(target_tray.name)] ([target_tray.myseed.plantname])" + else + target_tray.name = initial(target_tray.name) + + return TRUE + +/// Makes the plant embed on thrown impact. +/datum/plant_gene/trait/sticky + name = "Prickly Adhesion" + description = "It sticks to people when thrown, also passing reagents if stingy." + icon = "bandage" + trait_ids = THROW_IMPACT_ID + +/datum/plant_gene/trait/sticky/on_new_plant(obj/item/our_plant, newloc) + . = ..() + if(!.) + return + + var/obj/item/seeds/our_seed = our_plant.get_plant_seed() + if(our_seed.get_gene(/datum/plant_gene/trait/stinging)) + our_plant.embedding = EMBED_POINTY + else + our_plant.embedding = EMBED_HARMLESS + our_plant.updateEmbedding() + our_plant.throwforce = (our_seed.potency/20) + +/datum/plant_gene/trait/carnivory + name = "Obligate Carnivory" + description = "Pests have positive effect on the plant health." + icon = "spider" + +/// Plant type traits. Incompatible with one another. +/datum/plant_gene/trait/plant_type name = "you shouldn't see this" - trait_id = "plant_type" + trait_ids = PLANT_TYPE_ID + mutability_flags = PLANT_GENE_EXTRACTABLE +/// Weeds don't get annoyed by weeds in their tray. /datum/plant_gene/trait/plant_type/weed_hardy name = "Weed Adaptation" + description = "It is a weed that needs no nutrients and doesn't suffer from other weeds." + icon = "seedling" +/// Mushrooms need less light and have a minimum yield. /datum/plant_gene/trait/plant_type/fungal_metabolism name = "Fungal Vitality" + description = "It is a mushroom that needs no water, less light and can't be overtaken by weeds." + icon = "droplet-slash" -/datum/plant_gene/trait/plant_type/crystal // WS edit - Crystals - name = "Crystalline Growing Patterns" - +/// Currently unused and does nothing. Appears in strange seeds. /datum/plant_gene/trait/plant_type/alien_properties name ="?????" + icon = "reddit-alien" -/datum/plant_gene/trait/plant_type/carnivory - name = "Obligate Carnivory" +/datum/plant_gene/trait/plant_type/crystal + name = "Crystalline Growing Patterns" diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index ad24dccff43d..65f47357899a 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -40,7 +40,7 @@ var/research = 0 // Defines "discovery value", which will give a one-time point payout if a seed is given to an R&D console. Seed discovery is determined on a ship-by-ship basis. var/seed_flags = MUTATE_EARLY // Determines if a plant is allowed to mutate early at 30+ instability -/obj/item/seeds/Initialize(mapload, nogenes = 0) +/obj/item/seeds/Initialize(mapload, nogenes = FALSE) . = ..() pixel_x = base_pixel_y + rand(-8, 8) pixel_y = base_pixel_x + rand(-8, 8) @@ -66,10 +66,14 @@ genes += new /datum/plant_gene/core/potency(potency) genes += new /datum/plant_gene/core/instability(instability) - for(var/p in genes) - if(ispath(p)) - genes -= p - genes += new p + for(var/plant_gene in genes) + if(ispath(plant_gene)) + genes -= plant_gene + genes += new plant_gene + + // Go through all traits in their genes and call on_new_seed from them. + for(var/datum/plant_gene/trait/traits in genes) + traits.on_new_seed(src) for(var/reag_id in reagents_add) genes += new /datum/plant_gene/reagent(reag_id, reagents_add[reag_id]) @@ -557,3 +561,21 @@ genes += P else qdel(P) + +/* + * Both `/item/food/grown` and `/item/grown` implement a seed variable which tracks + * plant statistics, genes, traits, etc. This proc gets the seed for either grown food or + * grown inedibles and returns it, or returns null if it's not a plant. + * + * Returns an `/obj/item/seeds` ref for grown foods or grown inedibles. + * - returned seed CAN be null in weird cases but in all applications it SHOULD NOT be. + * Returns null if it is not a plant. + */ +/obj/item/proc/get_plant_seed() + return null + +/obj/item/reagent_containers/food/snacks/grown/get_plant_seed() + return seed + +/obj/item/grown/get_plant_seed() + return seed diff --git a/code/modules/jobs/access.dm b/code/modules/jobs/access.dm index 39eb08749872..1d13660682f6 100644 --- a/code/modules/jobs/access.dm +++ b/code/modules/jobs/access.dm @@ -186,7 +186,7 @@ ACCESS_MECH_MINING, ACCESS_MECH_ENGINE, ACCESS_MECH_SCIENCE, ACCESS_MECH_SECURITY, ACCESS_MECH_MEDICAL, ACCESS_VAULT, ACCESS_MINING_STATION, ACCESS_XENOBIOLOGY, ACCESS_CE, ACCESS_HOP, ACCESS_HOS, ACCESS_PHARMACY, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_GATEWAY, ACCESS_MINERAL_STOREROOM, ACCESS_MINISAT, ACCESS_NETWORK, ACCESS_CLONING, ACCESS_SOLGOV - ) //WS Edit - SolGov Rep + ) /proc/get_all_centcom_access() return list(ACCESS_CENT_GENERAL, ACCESS_CENT_THUNDER, ACCESS_CENT_SPECOPS, ACCESS_CENT_MEDICAL, ACCESS_CENT_LIVING, ACCESS_CENT_STORAGE, ACCESS_CENT_TELEPORTER, ACCESS_CENT_CAPTAIN) @@ -368,22 +368,19 @@ if(ACCESS_NETWORK) return "Network Access" if(ACCESS_MECH_MINING) - return "Mining Mech Access" + return "Mining Exosuit Access" if(ACCESS_MECH_MEDICAL) - return "Medical Mech Access" + return "Medical Exosuit Access" if(ACCESS_MECH_SECURITY) - return "Security Mech Access" + return "Security Exosuit Access" if(ACCESS_MECH_SCIENCE) - return "Science Mech Access" + return "Science Exosuit Access" if(ACCESS_MECH_ENGINE) - return "Engineering Mech Access" - -//WS Begin + return "Engineering Exosuit Access" 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/chaplain.dm b/code/modules/jobs/job_types/chaplain.dm index ab4ceb6968c0..5efe0a0a00d2 100644 --- a/code/modules/jobs/job_types/chaplain.dm +++ b/code/modules/jobs/job_types/chaplain.dm @@ -15,20 +15,6 @@ var/obj/item/storage/book/bible/booze/B = new - if(GLOB.religion) - B.deity_name = GLOB.deity - B.name = GLOB.bible_name - B.icon_state = GLOB.bible_icon_state - B.item_state = GLOB.bible_item_state - to_chat(H, "There is already an established religion onboard the station. You are an acolyte of [GLOB.deity]. Defer to the Chaplain.") - H.equip_to_slot_or_del(B, ITEM_SLOT_BACKPACK) - var/nrt = GLOB.holy_weapon_type || /obj/item/nullrod - var/obj/item/nullrod/N = new nrt(H) - H.put_in_hands(N) - if(GLOB.religious_sect) - GLOB.religious_sect.on_conversion(H) - return - var/new_religion = DEFAULT_RELIGION if(M.client && M.client.prefs.custom_names["religion"]) new_religion = M.client.prefs.custom_names["religion"] diff --git a/code/modules/jobs/job_types/clown.dm b/code/modules/jobs/job_types/clown.dm index d131d8ad4cd4..e2c0e24501b1 100644 --- a/code/modules/jobs/job_types/clown.dm +++ b/code/modules/jobs/job_types/clown.dm @@ -22,8 +22,7 @@ belt = /obj/item/pda/clown ears = /obj/item/radio/headset/headset_srv uniform = /obj/item/clothing/under/rank/civilian/clown - alt_uniform = /obj/item/clothing/under/rank/civilian/clown/green //WS Edit - Alt Uniforms - shoes = /obj/item/clothing/shoes/clown_shoes + alt_uniform = /obj/item/clothing/under/rank/civilian/clown/green mask = /obj/item/clothing/mask/gas/clown_hat l_pocket = /obj/item/bikehorn backpack_contents = list( @@ -35,8 +34,6 @@ implants = list(/obj/item/implant/sad_trombone) - backpack = /obj/item/storage/backpack/clown - satchel = /obj/item/storage/backpack/clown duffelbag = /obj/item/storage/backpack/duffelbag/clown //strangely has a duffel box = /obj/item/storage/box/hug/survival diff --git a/code/modules/jobs/job_types/geneticist.dm b/code/modules/jobs/job_types/geneticist.dm index 2720dcf064fd..dd8e5ef8f97a 100644 --- a/code/modules/jobs/job_types/geneticist.dm +++ b/code/modules/jobs/job_types/geneticist.dm @@ -25,7 +25,6 @@ l_pocket = /obj/item/sequence_scanner backpack = /obj/item/storage/backpack/genetics - satchel = /obj/item/storage/backpack/satchel/gen duffelbag = /obj/item/storage/backpack/duffelbag/med courierbag = /obj/item/storage/backpack/messenger/med diff --git a/code/modules/jobs/job_types/head_of_personnel.dm b/code/modules/jobs/job_types/head_of_personnel.dm index a1071d7d3ce4..d535e1fb705e 100644 --- a/code/modules/jobs/job_types/head_of_personnel.dm +++ b/code/modules/jobs/job_types/head_of_personnel.dm @@ -39,7 +39,6 @@ alt_suit = /obj/item/clothing/suit/ianshirt dcoat = /obj/item/clothing/suit/hooded/wintercoat/captain //WS Edit - Alt Uniforms shoes = /obj/item/clothing/shoes/sneakers/brown - head = /obj/item/clothing/head/hopcap backpack_contents = list(/obj/item/storage/box/ids=1,\ /obj/item/melee/classic_baton/telescopic=1, /obj/item/modular_computer/tablet/preset/advanced = 1) diff --git a/code/modules/jobs/job_types/janitor.dm b/code/modules/jobs/job_types/janitor.dm index 60c8ab9672b4..1c9393a49c94 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/jobs/job_types/shaft_miner.dm b/code/modules/jobs/job_types/shaft_miner.dm index 1469e592b4de..341116d30c8c 100644 --- a/code/modules/jobs/job_types/shaft_miner.dm +++ b/code/modules/jobs/job_types/shaft_miner.dm @@ -26,7 +26,7 @@ r_pocket = /obj/item/storage/bag/ore //causes issues if spawned in backpack backpack_contents = list( /obj/item/flashlight/seclite=1,\ - /obj/item/kitchen/knife/combat/survival=1,\ + /obj/item/melee/knife/survival=1,\ /obj/item/stack/marker_beacon/ten=1,\ /obj/item/radio/weather_monitor=1) diff --git a/code/modules/language/language_holder.dm b/code/modules/language/language_holder.dm index 6e7e10a7cba6..d96e4591b050 100644 --- a/code/modules/language/language_holder.dm +++ b/code/modules/language/language_holder.dm @@ -291,11 +291,6 @@ Key procs /datum/language/slime = list(LANGUAGE_ATOM)) spoken_languages = list(/datum/language/slime = list(LANGUAGE_ATOM)) -/datum/language_holder/swarmer - understood_languages = list(/datum/language/swarmer = list(LANGUAGE_ATOM)) - spoken_languages = list(/datum/language/swarmer = list(LANGUAGE_ATOM)) - blocked_languages = list(/datum/language/common = list(LANGUAGE_ATOM)) - /datum/language_holder/venus understood_languages = list(/datum/language/sylvan = list(LANGUAGE_ATOM)) spoken_languages = list(/datum/language/sylvan = list(LANGUAGE_ATOM)) diff --git a/code/modules/library/lib_codex_gigas.dm b/code/modules/library/lib_codex_gigas.dm deleted file mode 100644 index 69155c9230d8..000000000000 --- a/code/modules/library/lib_codex_gigas.dm +++ /dev/null @@ -1,104 +0,0 @@ -#define PRE_TITLE 1 -#define TITLE 2 -#define SYLLABLE 3 -#define MULTIPLE_SYLLABLE 4 -#define SUFFIX 5 - -/obj/item/book/codex_gigas - name = "\improper Codex Gigas" - desc = "A book documenting the nature of devils." - icon_state ="demonomicon" - lefthand_file = 'icons/mob/inhands/misc/books_lefthand.dmi' - righthand_file = 'icons/mob/inhands/misc/books_righthand.dmi' - throw_speed = 1 - throw_range = 10 - resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF - author = "Forces beyond your comprehension" - unique = 1 - title = "the Codex Gigas" - var/inUse = 0 - var/currentName = "" - var/currentSection = PRE_TITLE - -/obj/item/book/codex_gigas/attack_self(mob/user) - if(!user.can_read(src)) - return FALSE - if(inUse) - to_chat(user, "Someone else is reading it.") - if(ishuman(user)) - var/mob/living/carbon/human/U = user - if(U.check_acedia()) - to_chat(user, "None of this matters, why are you reading this? You put [title] down.") - return - user.visible_message("[user] opens [title] and begins reading intently.") - ask_name(user) - - -/obj/item/book/codex_gigas/proc/perform_research(mob/user, devilName) - if(!devilName) - user.visible_message("[user] closes [title] without looking anything up.") - return - inUse = TRUE - var/speed = 300 - var/correctness = 85 - if(ishuman(user)) - var/mob/living/carbon/human/U = user - if(U.job in list("Curator")) // the curator is both faster, and more accurate than normal crew members at research - speed = 100 - correctness = 100 - correctness -= U.getOrganLoss(ORGAN_SLOT_BRAIN) * 0.5 //Brain damage makes researching hard. - speed += U.getOrganLoss(ORGAN_SLOT_BRAIN) * 3 - if(do_after(user, speed, user, timed_action_flags = IGNORE_HELD_ITEM)) - var/usedName = devilName - if(!prob(correctness)) - usedName += "x" - var/datum/antagonist/devil/devil = devilInfo(usedName) - display_devil(devil, user, usedName) - sleep(10) - onclose(user, "book") - inUse = FALSE - -/obj/item/book/codex_gigas/proc/display_devil(datum/antagonist/devil/devil, mob/reader, devilName) - reader << browse("Information on [devilName]


    [GLOB.lawlorify[LORE][devil.ban]]
    [GLOB.lawlorify[LORE][devil.obligation]]
    [GLOB.lawlorify[LORE][devil.banish]]
    [devil.ascendable?"This devil may ascend given enough souls.":""]", "window=book[window_size != null ? ";size=[window_size]" : ""]") - -/obj/item/book/codex_gigas/proc/ask_name(mob/reader) - ui_interact(reader) - -/obj/item/book/codex_gigas/ui_act(action, params) - if(..()) - return - if(!action) - return FALSE - if(action == "search") - SStgui.close_uis(src) - addtimer(CALLBACK(src, PROC_REF(perform_research), usr, currentName), 0) - currentName = "" - currentSection = PRE_TITLE - return FALSE - else - currentName += action - var/oldSection = currentSection - if(GLOB.devil_pre_title.Find(action)) - currentSection = TITLE - else if(GLOB.devil_title.Find(action)) - currentSection = SYLLABLE - else if(GLOB.devil_syllable.Find(action)) - if (currentSection>=SYLLABLE) - currentSection = MULTIPLE_SYLLABLE - else - currentSection = SYLLABLE - else if(GLOB.devil_suffix.Find(action)) - currentSection = SUFFIX - return currentSection != oldSection - -/obj/item/book/codex_gigas/ui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "CodexGigas", name) - ui.open() - -/obj/item/book/codex_gigas/ui_data(mob/user) - var/list/data = list() - data["name"]=currentName - data["currentSection"]=currentSection - return data diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index 55d33ee80d20..9c6e90469fcc 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -319,7 +319,7 @@ scanner.computer.inventory.Add(src) to_chat(user, "[I]'s screen flashes: 'Book stored in buffer. Title added to general inventory.'") - else if(istype(I, /obj/item/kitchen/knife) || I.tool_behaviour == TOOL_WIRECUTTER) + else if(istype(I, /obj/item/melee/knife) || I.tool_behaviour == TOOL_WIRECUTTER) to_chat(user, "You begin to carve out [title]...") if(do_after(user, 30, target = src)) to_chat(user, "You carve out the pages from [title]! You didn't want to read it anyway.") diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index 71de02b3ca1c..38b3728651ce 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -358,7 +358,6 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums return null /obj/machinery/computer/bookmanagement/proc/print_forbidden_lore(mob/user) - new /obj/item/melee/cultblade/dagger(get_turf(src)) to_chat(user, "Your sanity barely endures the seconds spent in the vault's browsing window. The only thing to remind you of this when you stop browsing is a sinister dagger sitting on the desk. You don't even remember where it came from...") user.visible_message("[user] stares at the blank screen for a few moments, [user.p_their()] expression frozen in fear. When [user.p_they()] finally awaken[user.p_s()] from it, [user.p_they()] look[user.p_s()] a lot older.", 2) diff --git a/code/modules/lighting/emissive_blocker.dm b/code/modules/lighting/emissive_blocker.dm index 308ba8f2448c..84c71203dd2a 100644 --- a/code/modules/lighting/emissive_blocker.dm +++ b/code/modules/lighting/emissive_blocker.dm @@ -32,9 +32,6 @@ /atom/movable/emissive_blocker/singularity_pull() return -/atom/movable/emissive_blocker/blob_act() - return - //Prevents people from moving these after creation, because they shouldn't be. /atom/movable/emissive_blocker/forceMove(atom/destination, no_tp=FALSE, harderforce = FALSE) if(harderforce) diff --git a/code/modules/lighting/lighting_object.dm b/code/modules/lighting/lighting_object.dm index 7b6bc79aec45..d2d95678ef04 100644 --- a/code/modules/lighting/lighting_object.dm +++ b/code/modules/lighting/lighting_object.dm @@ -130,9 +130,6 @@ /atom/movable/lighting_object/singularity_pull() return -/atom/movable/lighting_object/blob_act() - return - /atom/movable/lighting_object/wash(clean_types) return diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index e9ac7662edab..251cf46e7c5f 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -280,8 +280,8 @@ INITIALIZE_IMMEDIATE(/obj/effect/mapping_helpers/no_lava) //cake + knife to cut it! if(length(table)) var/turf/food_turf = get_turf(pick(table)) - new /obj/item/kitchen/knife(food_turf) - var/obj/item/reagent_containers/food/snacks/store/cake/birthday/iancake = new(food_turf) + new /obj/item/melee/knife/kitchen(food_turf) + var/obj/item/food/cake/birthday/iancake = new(food_turf) iancake.desc = "Happy birthday, Ian!" //some balloons! this picks an open turf and pops a few balloons in and around that turf, yay. diff --git a/code/modules/mapping/writer.dm b/code/modules/mapping/writer.dm index 35d85edc7849..c07ce0029081 100644 --- a/code/modules/mapping/writer.dm +++ b/code/modules/mapping/writer.dm @@ -59,7 +59,7 @@ GLOBAL_LIST_INIT(save_file_chars, list( var/turf_type = /turf/template_noop var/area/place_area = get_area(place_turf) var/area_type = /area/template_noop - var/is_shuttle_area = istype(place_area, /area/shuttle) + var/is_shuttle_area = istype(place_area, /area/ship) //If there is nothing there, save as a noop (For odd shapes) if(!place_turf) turf_type = /turf/template_noop diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm index d86cfebf1197..406259246db1 100644 --- a/code/modules/mining/abandoned_crates.dm +++ b/code/modules/mining/abandoned_crates.dm @@ -124,6 +124,10 @@ qdel(src) ..() +// No busting open (used to disallow angle grinder cheesing +/obj/structure/closet/crate/secure/loot/bust_open() + boom() + /obj/structure/closet/crate/secure/loot/proc/spawn_loot() var/loot = rand(1,100) //100 different crates with varying chances of spawning switch(loot) @@ -136,7 +140,7 @@ for(var/i in 1 to 3) new /obj/item/clothing/mask/cigarette/rollie(src) if(6 to 10) - new /obj/item/melee/skateboard/pro(src) + new /obj/item/skateboard/pro(src) if(11 to 15) new /mob/living/simple_animal/bot/honkbot(src) if(16 to 20) @@ -178,7 +182,6 @@ new /obj/item/clothing/shoes/kindleKicks(src) if(65 to 66) new /obj/item/clothing/suit/ianshirt(src) - new /obj/item/clothing/suit/hooded/ian_costume(src) if(67 to 68) new /obj/item/toy/plush/awakenedplushie(src) if(69 to 70) @@ -211,7 +214,7 @@ for(var/i in 1 to 30) new /mob/living/simple_animal/hostile/cockroach(src) if(92) - new /obj/item/katana(src) + new /obj/item/melee/sword/katana(src) if(93) new /obj/item/dnainjector/xraymut(src) if(94) @@ -220,7 +223,6 @@ if(95) new /obj/item/toy/plush/nukeplushie(src) if(96) - new /obj/item/banhammer(src) for(var/i in 1 to 3) new /obj/item/mine/pressure/sound(src) if(97) @@ -229,7 +231,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) @@ -237,5 +239,5 @@ if(99) new /obj/item/implanter/sad_trombone(src) if(100) - new /obj/item/melee/skateboard/hoverboard(src) + new /obj/item/skateboard/hoverboard(src) spawned_loot = TRUE diff --git a/code/modules/mining/equipment/angle_grinder.dm b/code/modules/mining/equipment/angle_grinder.dm new file mode 100644 index 000000000000..290cf0d153d7 --- /dev/null +++ b/code/modules/mining/equipment/angle_grinder.dm @@ -0,0 +1,144 @@ +/obj/item/gear_pack/anglegrinder + name = "grinder pack" + desc = "Supplies the high voltage needed to run the attached grinder." + icon = 'icons/obj/item/gear_packs.dmi' + item_state = "anglegrinderpack" + icon_state = "anglegrinderpack" + lefthand_file = 'icons/mob/inhands/equipment/backpack_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/backpack_righthand.dmi' + gear_handle_type = /obj/item/gear_handle/anglegrinder + +/obj/item/gear_handle/anglegrinder + name = "angle grinder" + desc = "A powerful salvage tool used to cut apart walls and airlocks. A hazard sticker recommends ear and eye protection." + icon = 'icons/obj/item/gear_packs.dmi' + icon_state = "anglegrinder" + item_state = "anglegrinder" + lefthand_file = 'icons/mob/inhands/equipment/gear_handle_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/gear_handle_righthand.dmi' + flags_1 = CONDUCT_1 + force = 13 + armour_penetration = 5 + w_class = WEIGHT_CLASS_BULKY + item_flags = ABSTRACT + attack_verb = list("lacerated", "ripped", "sliced", "sawed", "cut", "chopped", "diced") + hitsound = 'sound/weapons/anglegrinder.ogg' + usesound = 'sound/weapons/anglegrinder.ogg' + tool_behaviour = null // is set to TOOL_DECONSTRUCT once wielded + toolspeed = 1 + wall_decon_damage = 200 + usecost = 5 + pack = /obj/item/gear_pack/anglegrinder + var/startsound = 'sound/weapons/chainsawhit.ogg' + var/adv = FALSE + var/wielded = FALSE // track wielded status on item + var/two_hand_force = 24 + +/obj/item/gear_handle/anglegrinder/tool_start_check(mob/living/user, amount) + if(!pack) + to_chat(user, "how do you not have a pack for this. what.") + return FALSE + if(!pack.cell) + to_chat(user, "You need a cell to start!") + return FALSE + var/obj/item/stock_parts/cell/cell = pack.get_cell() + if(cell.charge < usecost) + to_chat(user, "You need more charge to complete this task!") + return FALSE + return TRUE + +/obj/item/gear_handle/anglegrinder/tool_use_check(mob/living/user, amount) + if(!pack.cell) + return FALSE + if(pack.deductcharge(usecost)) + return TRUE + else + to_chat(user, "You need more charge to complete this task!") + return FALSE + +/obj/item/gear_handle/anglegrinder/use(used) + return TRUE + +/obj/item/gear_handle/anglegrinder/Initialize() + . = ..() + RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(on_wield)) + RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(on_unwield)) + +/obj/item/gear_handle/anglegrinder/ComponentInitialize() + . = ..() + AddComponent(/datum/component/butchering, 30, 100, 0, startsound, TRUE) + AddComponent(/datum/component/two_handed, force_unwielded=force, force_wielded=two_hand_force, wieldsound=startsound) + AddElement(/datum/element/tool_bang, 2) + +/// triggered on wield of two handed item +/obj/item/gear_handle/anglegrinder/proc/on_wield(obj/item/source, mob/user) + SIGNAL_HANDLER + + tool_behaviour = TOOL_DECONSTRUCT + wielded = TRUE + sharpness = IS_SHARP + icon_state = "[initial(item_state)]-wield" + item_state = "[initial(item_state)]-wield" + +/// triggered on unwield of two handed item +/obj/item/gear_handle/anglegrinder/proc/on_unwield(obj/item/source, mob/user) + SIGNAL_HANDLER + + tool_behaviour = null + wielded = FALSE + sharpness = initial(sharpness) + icon_state = initial(icon_state) + item_state = initial(item_state) + +/obj/item/gear_handle/anglegrinder/get_dismemberment_chance() + if(wielded) + . = ..() + +/obj/item/gear_handle/anglegrinder/use_tool(atom/target, mob/living/user, delay, amount=1, volume=0, datum/callback/extra_checks) + if(adv) + target.add_overlay(GLOB.advanced_cutting_effect) + . = ..() + target.cut_overlay(GLOB.advanced_cutting_effect) + else + target.add_overlay(GLOB.cutting_effect) + . = ..() + target.cut_overlay(GLOB.cutting_effect) + +/obj/item/gear_pack/anglegrinder/energy + name = "energy supply pack" + desc = "a highly inefficient GEC-E-014 Supply Pack, used to generate and contain an energy field." + item_state = "energyanglegrinderpack" + icon_state = "energyanglegrinderpack" + gear_handle_type = /obj/item/gear_handle/anglegrinder/energy + +/obj/item/gear_handle/anglegrinder/energy + name = "energy saw" + desc = "An early prototype for handheld energy weapons, designed by a joint GEC-Cybersun lab to create an energy field for combat use." + icon_state = "energyanglegrinder" + item_state = "energyanglegrinder" + force = 5 + two_hand_force = 28 + armour_penetration = 16 + w_class = WEIGHT_CLASS_BULKY + item_flags = ABSTRACT + attack_verb = list("lacerated", "ripped", "burned", "sliced", "cauterized", "seared", "diced") + hitsound = 'sound/weapons/blade1.ogg' + usesound = 'sound/weapons/blade1.ogg' + startsound = 'sound/weapons/saberon.ogg' + toolspeed = 0.7 + usecost = 10 + pack = /obj/item/gear_pack/anglegrinder/energy + light_system = MOVABLE_LIGHT + light_range = 3 + light_color = LIGHT_COLOR_ELECTRIC_GREEN + light_on = FALSE + adv = TRUE + +/obj/item/gear_handle/anglegrinder/energy/on_wield(obj/item/source, mob/user) + . = ..() + set_light_on(TRUE) + +/obj/item/gear_handle/anglegrinder/energy/on_unwield(obj/item/source, mob/user) + . = ..() + set_light_on(FALSE) + diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm index 46c20dd02e1b..b5e112713a82 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 @@ -190,3 +190,37 @@ /obj/item/clothing/head/hooded/survivor_hood/Initialize() . = ..() AddComponent(/datum/component/armor_plate) + +/obj/item/clothing/suit/hooded/scrap + name = "scrap suit" + desc = "A ragged makeshift suit." + lefthand_file = 'icons/mob/inhands/clothing_lefthand.dmi' + righthand_file = 'icons/mob/inhands/clothing_righthand.dmi' + icon_state = "survivor" + item_state = "survivor_suit" + body_parts_covered = CHEST|GROIN|LEGS|ARMS + min_cold_protection_temperature = (FIRE_SUIT_MIN_TEMP_PROTECT * 2) + cold_protection = CHEST|GROIN|LEGS|ARMS + max_heat_protection_temperature = (FIRE_SUIT_MAX_TEMP_PROTECT / 2) + heat_protection = CHEST|GROIN|LEGS|ARMS + hoodtype = /obj/item/clothing/head/hooded/scrap + armor = list("melee" = 15, "bullet" = 10, "laser" = 10, "energy" = 15, "bomb" = 20, "bio" = 100, "rad" = 20, "fire" = 50, "acid" = 30) + allowed = list(/obj/item/flashlight, /obj/item/tank/internals) + resistance_flags = FIRE_PROOF + supports_variations = DIGITIGRADE_VARIATION | VOX_VARIATION + +/obj/item/clothing/head/hooded/scrap + name = "scrap hood" + desc = "A loose-fitting hood. It gets the job done." + icon_state = "explorerold" + suit = /obj/item/clothing/suit/hooded/scrap + body_parts_covered = HEAD + flags_inv = HIDEHAIR|HIDEEARS + armor = list("melee" = 15, "bullet" = 10, "laser" = 10, "energy" = 15, "bomb" = 20, "bio" = 100, "rad" = 20, "fire" = 50, "acid" = 30) + +/obj/item/clothing/suit/armor/vest/scrap + name = "scrap armor" + desc = "An 'armor' vest consisting of sheet metal held together with cable. Who thought this was a good idea?" + icon_state = "scraparmor" + item_state = "scraparmor" + armor = list("melee" = 15, "bullet" = 10, "laser" = 10, "energy" = 15, "bomb" = 20, "bio" = 100, "rad" = 20, "fire" = 50, "acid" = 30) diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm index b6073d4c86a2..05e81421ac4f 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -8,7 +8,7 @@ name = "proto-magnetic crusher" desc = "A multipurpose disembarkation and self-defense tool designed by EXOCOM using an incomplete Nanotrasen prototype. \ Found in the grime-stained hands of wannabee explorers across the frontier, it cuts rock and hews flora using magnetic osscilation and a heavy cleaving edge." - force = 0 //You can't hit stuff unless wielded + force = 0 //You can't hit stuff unless it's wielded w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK throwforce = 5 @@ -28,33 +28,19 @@ var/charge_time = 15 var/detonation_damage = 20 var/backstab_bonus = 10 - var/wielded = FALSE // track wielded status on item - -/obj/item/kinetic_crusher/Initialize() - . = ..() - RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(on_wield)) - RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(on_unwield)) /obj/item/kinetic_crusher/ComponentInitialize() . = ..() AddComponent(/datum/component/butchering, 60, 110) //technically it's huge and bulky, but this provides an incentive to use it AddComponent(/datum/component/two_handed, force_unwielded=0, force_wielded=15) -/// triggered on wield of two handed item -/obj/item/kinetic_crusher/proc/on_wield(obj/item/source, mob/user) - wielded = TRUE - -/// triggered on unwield of two handed item -/obj/item/kinetic_crusher/proc/on_unwield(obj/item/source, mob/user) - wielded = FALSE - /obj/item/kinetic_crusher/examine(mob/living/user) . = ..() . += "Induce magnetism in an enemy by striking them with a magnetospheric wave, then hit them in melee to force a waveform collapse for [force + detonation_damage] damage." . += "Does [force + detonation_damage + backstab_bonus] damage if the target is backstabbed, instead of [force + detonation_damage]." /obj/item/kinetic_crusher/attack(mob/living/target, mob/living/carbon/user) - if(!wielded) + if(!HAS_TRAIT(src, TRAIT_WIELDED)) to_chat(user, "[src] is too heavy to use with one hand! You fumble and drop everything.") user.drop_all_held_items() return @@ -66,7 +52,7 @@ /obj/item/kinetic_crusher/afterattack(atom/target, mob/living/user, proximity_flag, clickparams) . = ..() - if(!wielded) + if(!HAS_TRAIT(src, TRAIT_WIELDED)) return if(!proximity_flag && charged)//Mark a target, or mine a tile. var/turf/proj_turf = user.loc @@ -118,7 +104,7 @@ /obj/item/kinetic_crusher/update_icon_state() - item_state = "crusher[wielded]" // this is not icon_state and not supported by 2hcomponent + item_state = "crusher[HAS_TRAIT(src, TRAIT_WIELDED)]" // this is not icon_state and not supported by 2hcomponent return ..() /obj/item/kinetic_crusher/update_overlays() @@ -135,6 +121,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 +140,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. @@ -181,7 +168,7 @@ user.changeNext_move(CLICK_CD_MELEE * 2.0)//...slow swinga. /obj/item/kinetic_crusher/old/update_icon_state() - item_state = "crusherold[wielded]" // still not supported by 2hcomponent + item_state = "crusherold[HAS_TRAIT(src, TRAIT_WIELDED)]" // still not supported by 2hcomponent return ..() //100% original syndicate oc, plz do not steal. More effective against human targets then the typical crusher, with a bit of block chance. @@ -194,7 +181,7 @@ name = "magnetic cleaver" desc = "Designed by Syndicate Research and Development for their resource-gathering operations on hostile worlds. Syndicate Legal Ops would like to stress that you've never seen anything like this before. Ever." armour_penetration = 69//nice cut - force = 0 //You can't hit stuff unless wielded + force = 0 //You can't hit stuff unless HAS_TRAIT(src, TRAIT_WIELDED) w_class = WEIGHT_CLASS_BULKY slot_flags = ITEM_SLOT_BACK throwforce = 5 @@ -215,35 +202,40 @@ charge_time = 15 detonation_damage = 35 backstab_bonus = 15 - wielded = FALSE // track wielded status on item actions_types = list() + +/obj/item/kinetic_crusher/syndie_crusher/Initialize() + . = ..() + RegisterSignal(src, COMSIG_TWOHANDED_WIELD, PROC_REF(on_wield)) + RegisterSignal(src, COMSIG_TWOHANDED_UNWIELD, PROC_REF(on_unwield)) + /obj/item/kinetic_crusher/syndie_crusher/ComponentInitialize() . = ..() AddComponent(/datum/component/butchering, 60, 150) AddComponent(/datum/component/two_handed, force_unwielded=0, force_wielded=10) /// triggered on wield of two handed item -/obj/item/kinetic_crusher/syndie_crusher/on_wield(obj/item/source, mob/user) - . = ..() - wielded = TRUE +/obj/item/kinetic_crusher/syndie_crusher/proc/on_wield(obj/item/source, mob/user) + SIGNAL_HANDLER + icon_state = "crushersyndie1" playsound(user, 'sound/weapons/saberon.ogg', 35, TRUE) - set_light_on(wielded) + set_light_on(HAS_TRAIT(src, TRAIT_WIELDED)) /// triggered on unwield of two handed item -/obj/item/kinetic_crusher/syndie_crusher/on_unwield(obj/item/source, mob/user) - . = ..() - wielded = FALSE +/obj/item/kinetic_crusher/syndie_crusher/proc/on_unwield(obj/item/source, mob/user) + SIGNAL_HANDLER + icon_state = "crushersyndie" playsound(user, 'sound/weapons/saberoff.ogg', 35, TRUE) - set_light_on(wielded) + set_light_on(HAS_TRAIT(src, TRAIT_WIELDED)) /obj/item/kinetic_crusher/syndie_crusher/update_icon_state() - item_state = "crushersyndie[wielded]" // this is not icon_state and not supported by 2hcomponent + item_state = "crushersyndie[HAS_TRAIT(src, TRAIT_WIELDED)]" // this is not icon_state and not supported by 2hcomponent return ..() /obj/item/kinetic_crusher/syndie_crusher/update_overlays() . = ..() - if(wielded) + if(HAS_TRAIT(src, TRAIT_WIELDED)) . += "[icon_state]_lit" diff --git a/code/modules/mining/equipment/mineral_scanner.dm b/code/modules/mining/equipment/mineral_scanner.dm index 7c62a915f65e..4def7dbe5dde 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 d38a3ce8b55b..a0548a2cb9f1 100644 --- a/code/modules/mining/equipment/mining_tools.dm +++ b/code/modules/mining/equipment/mining_tools.dm @@ -17,6 +17,7 @@ toolspeed = 0.5 usesound = list('sound/effects/picaxe1.ogg', 'sound/effects/picaxe2.ogg', 'sound/effects/picaxe3.ogg') attack_verb = list("hit", "pierced", "sliced", "attacked") + wall_decon_damage = MINERAL_WALL_INTEGRITY /obj/item/pickaxe/rusted name = "rusty pickaxe" @@ -24,6 +25,7 @@ attack_verb = list("ineffectively hit") force = 1 throwforce = 1 + wall_decon_damage = 50 /obj/item/pickaxe/mini name = "compact pickaxe" diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm index 7ba30d327444..15f7cb2e3a69 100644 --- a/code/modules/mining/equipment/survival_pod.dm +++ b/code/modules/mining/equipment/survival_pod.dm @@ -5,7 +5,7 @@ dynamic_lighting = DYNAMIC_LIGHTING_FORCED requires_power = FALSE has_gravity = STANDARD_GRAVITY - area_flags = BLOBS_ALLOWED | UNIQUE_AREA + area_flags = UNIQUE_AREA flags_1 = CAN_BE_DIRTY_1 //Survival Capsule @@ -308,17 +308,16 @@ var/possible = list(/obj/item/ship_in_a_bottle, /obj/item/gun/energy/pulse, /obj/item/book/granter/martial/carp, - /obj/item/melee/supermatter_sword, + /obj/item/melee/sword/supermatter, /obj/item/shield/changeling, /obj/item/lava_staff, - /obj/item/energy_katana, + /obj/item/melee/sword/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, - /obj/item/banhammer) + /obj/item/phylactery) /obj/item/fakeartefact/Initialize() . = ..() diff --git a/code/modules/mining/equipment/wormhole_jaunter.dm b/code/modules/mining/equipment/wormhole_jaunter.dm index 2af4c1b5ce4f..e44dd4b14dce 100644 --- a/code/modules/mining/equipment/wormhole_jaunter.dm +++ b/code/modules/mining/equipment/wormhole_jaunter.dm @@ -41,10 +41,7 @@ var/turf/targetturf = find_safe_turf() if(!targetturf) - if(GLOB.blobstart.len > 0) - targetturf = get_turf(pick(GLOB.blobstart)) - else - CRASH("Unable to find a blobstart landmark") + CRASH("Unable to find a blobstart landmark") var/obj/effect/portal/jaunt_tunnel/J = new (get_turf(src), 100, null, FALSE, targetturf) log_game("[user] Has jaunted to [loc_name(targetturf)].") message_admins("[user] Has jaunted to [ADMIN_VERBOSEJMP(targetturf)].") diff --git a/code/modules/mining/lavaland/ash_flora.dm b/code/modules/mining/lavaland/ash_flora.dm index f9563cc078eb..bf6fb15c9332 100644 --- a/code/modules/mining/lavaland/ash_flora.dm +++ b/code/modules/mining/lavaland/ash_flora.dm @@ -419,7 +419,7 @@ /obj/item/seeds/lavaland/puce/attackby(obj/item/item, mob/user, params) . = ..() //anyone intending to add more garnishes using this method should componentize this - if(!istype(item, /obj/item/kitchen/knife)) + if(!istype(item, /obj/item/melee/knife)) return playsound(src, 'sound/effects/glassbr1.ogg', 50, TRUE, -1) to_chat(user, "You start breaking [src] up into shards...") diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index e48f4d5af5aa..73d18f0ab885 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -15,16 +15,12 @@ /obj/structure/closet/crate/necropolis/tendril/PopulateContents() var/loot = rand(1,29) switch(loot) - if(1) + if(1,2) new /obj/item/shared_storage/red(src) - if(2) - new /obj/item/clothing/suit/space/hardsuit/cult(src) if(3) new /obj/item/necromantic_stone/lava(src) - if(4) - new /obj/item/katana/cursed(src) if(5) - new /obj/item/clothing/glasses/godeye(src) + new /obj/item/pickaxe/diamond(src) if(6) new /obj/item/reagent_containers/glass/bottle/potion/flight(src) if(7) @@ -47,7 +43,7 @@ new /obj/item/borg/upgrade/modkit/lifesteal(src) new /obj/item/bedsheet/cult(src) if(14) - new /obj/item/nullrod/scythe/talking/necro(src) + new /obj/item/scythe(src) if(15) new /obj/item/book_of_babel(src) if(16) @@ -80,8 +76,6 @@ new /obj/item/gun/energy/spur(src) if(28) new /obj/item/clothing/suit/armor/ascetic(src) - if(29) - new /obj/item/kitchen/knife/envy(src) /obj/structure/closet/crate/necropolis/tendril/greater desc = "It's watching you wearily. It seems terribly bloated." @@ -96,10 +90,8 @@ new /obj/item/clothing/suit/space/hardsuit/cult(src) if(3) new /obj/item/necromantic_stone/lava(src) - if(4) - new /obj/item/katana/cursed(src) if(5) - new /obj/item/clothing/glasses/godeye(src) + new /obj/item/pickaxe/diamond(src) if(6) new /obj/item/reagent_containers/glass/bottle/potion/flight(src) if(7) @@ -122,7 +114,7 @@ new /obj/item/borg/upgrade/modkit/lifesteal(src) new /obj/item/bedsheet/cult(src) if(14) - new /obj/item/nullrod/scythe/talking/necro(src) + new /obj/item/scythe(src) if(15) new /obj/item/book_of_babel(src) if(16) @@ -155,36 +147,6 @@ new /obj/item/gun/energy/spur(src) if(28) new /obj/item/clothing/suit/armor/ascetic(src) - if(29) - new /obj/item/kitchen/knife/envy(src) - -//KA modkit design discs -/obj/item/disk/design_disk/modkit_disc - name = "KA Mod Disk" - desc = "A design disc containing the design for a unique kinetic accelerator modkit. It's compatible with a research console." - illustration = "accel" - color = "#6F6F6F" - var/modkit_design = /datum/design/unique_modkit - -/obj/item/disk/design_disk/modkit_disc/Initialize() - . = ..() - blueprints[1] = new modkit_design - -/obj/item/disk/design_disk/modkit_disc/mob_and_turf_aoe - name = "Offensive Mining Explosion Mod Disk" - modkit_design = /datum/design/unique_modkit/offensive_turf_aoe - -/obj/item/disk/design_disk/modkit_disc/rapid_repeater - name = "Rapid Repeater Mod Disk" - modkit_design = /datum/design/unique_modkit/rapid_repeater - -/obj/item/disk/design_disk/modkit_disc/resonator_blast - name = "Resonator Blast Mod Disk" - modkit_design = /datum/design/unique_modkit/resonator_blast - -/obj/item/disk/design_disk/modkit_disc/bounty - name = "Death Syphon Mod Disk" - modkit_design = /datum/design/unique_modkit/bounty /datum/design/unique_modkit category = list("Mining Designs", "Cyborg Upgrade Modules") //can't be normally obtained @@ -736,10 +698,9 @@ var/hat = pick(/obj/item/clothing/head/helmet/roman, /obj/item/clothing/head/helmet/roman/legionnaire) H.equip_to_slot_or_del(new hat(H), ITEM_SLOT_HEAD) H.equip_to_slot_or_del(new /obj/item/clothing/under/costume/roman(H), ITEM_SLOT_ICLOTHING) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(H), ITEM_SLOT_FEET) H.put_in_hands(new /obj/item/shield/riot/roman(H), TRUE) - H.put_in_hands(new /obj/item/claymore(H), TRUE) - H.equip_to_slot_or_del(new /obj/item/spear(H), ITEM_SLOT_BACK) + H.put_in_hands(new /obj/item/melee/sword/claymore(H), TRUE) + H.equip_to_slot_or_del(new /obj/item/melee/spear(H), ITEM_SLOT_BACK) //ice cube /obj/item/freeze_cube @@ -933,6 +894,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 +957,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 @@ -1103,7 +1063,7 @@ C.update_inv_wear_suit() /obj/item/clothing/suit/armor/ascetic/worn_overlays(isinhands) - . = list() + . = ..() if(!isinhands) . += mutable_appearance('icons/effects/effects.dmi', shield_state, MOB_LAYER - 0.01) @@ -1205,7 +1165,7 @@ var/loot = rand(1,4) switch(loot) if(1) - new /obj/item/melee/ghost_sword(src) + new /obj/item/melee/sword/claymore(src) if(2) new /obj/item/lava_staff(src) if(3) @@ -1213,91 +1173,6 @@ if(4) new /obj/item/dragons_blood(src) -/obj/item/melee/ghost_sword - name = "\improper spectral blade" - desc = "A rusted and dulled blade. It doesn't look like it'd do much damage. It glows weakly." - icon_state = "spectral" - item_state = "spectral" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - flags_1 = CONDUCT_1 - sharpness = IS_SHARP - w_class = WEIGHT_CLASS_BULKY - force = 1 - throwforce = 1 - hitsound = 'sound/effects/ghost2.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "rended") - var/summon_cooldown = 0 - var/list/mob/dead/observer/spirits - -/obj/item/melee/ghost_sword/Initialize() - . = ..() - spirits = list() - START_PROCESSING(SSobj, src) - GLOB.poi_list |= src - AddComponent(/datum/component/butchering, 150, 90) - -/obj/item/melee/ghost_sword/Destroy() - for(var/mob/dead/observer/G in spirits) - G.invisibility = GLOB.observer_default_invisibility - spirits.Cut() - STOP_PROCESSING(SSobj, src) - GLOB.poi_list -= src - . = ..() - -/obj/item/melee/ghost_sword/attack_self(mob/user) - if(summon_cooldown > world.time) - to_chat(user, "You just recently called out for aid. You don't want to annoy the spirits!") - return - to_chat(user, "You call out for aid, attempting to summon spirits to your side.") - - notify_ghosts("[user] is raising [user.p_their()] [src], calling for your help!", - enter_link="(Click to help)", - source = user, action=NOTIFY_ORBIT, ignore_key = POLL_IGNORE_SPECTRAL_BLADE, header = "Spectral blade") - - summon_cooldown = world.time + 300 - -/obj/item/melee/ghost_sword/process() - ghost_check() - -/obj/item/melee/ghost_sword/proc/ghost_check() - var/ghost_counter = 0 - var/turf/T = get_turf(src) - var/list/contents = T.GetAllContents() - var/mob/dead/observer/current_spirits = list() - for(var/thing in contents) - var/atom/A = thing - A.transfer_observers_to(src) - - for(var/i in orbiters?.orbiters) - if(!isobserver(i)) - continue - var/mob/dead/observer/G = i - ghost_counter++ - G.invisibility = 0 - current_spirits |= G - - for(var/mob/dead/observer/G in spirits - current_spirits) - G.invisibility = GLOB.observer_default_invisibility - - spirits = current_spirits - - return ghost_counter - -/obj/item/melee/ghost_sword/attack(mob/living/target, mob/living/carbon/human/user) - force = 0 - var/ghost_counter = ghost_check() - - force = clamp((ghost_counter * 4), 0, 75) - user.visible_message("[user] strikes with the force of [ghost_counter] vengeful spirits!") - ..() - -/obj/item/melee/ghost_sword/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - var/ghost_counter = ghost_check() - final_block_chance += clamp((ghost_counter * 5), 0, 75) - owner.visible_message("[owner] is protected by a ring of [ghost_counter] ghosts!") - return ..() - //Blood /obj/item/dragons_blood @@ -1767,11 +1642,9 @@ name = "puzzling chest" /obj/structure/closet/crate/necropolis/puzzle/PopulateContents() - var/loot = rand(1,3) + var/loot = rand(1,2) switch(loot) if(1) - new /obj/item/soulstone/anybody(src) - if(2) new /obj/item/wisp_lantern(src) - if(3) + if(2) new /obj/item/prisoncube(src) diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index 15cde601689e..d8a9ecf90cad 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -22,7 +22,6 @@ /obj/item/mining_scanner = 2, /obj/item/t_scanner/adv_mining_scanner = 2, /obj/item/hivelordstabilizer = 3, - /obj/item/clothing/glasses/meson/gar = 2, /obj/item/kinetic_crusher = 1, /obj/item/gun/energy/kinetic_accelerator = 2, /obj/item/pickaxe/silver = 1, @@ -121,6 +120,6 @@ new /obj/item/clothing/suit/hooded/explorer(src) new /obj/item/clothing/mask/gas/explorer(src) new /obj/item/gun/energy/kinetic_accelerator(src) - new /obj/item/kitchen/knife/combat/survival(src) + new /obj/item/melee/knife/survival(src) new /obj/item/flashlight/seclite(src) new /obj/item/clothing/gloves/explorer(src) diff --git a/code/modules/mining/ore_veins.dm b/code/modules/mining/ore_veins.dm index 32b1ffeab8d5..16f6afa8da0c 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/mining/shelters.dm b/code/modules/mining/shelters.dm index ef0e51930828..6c733fd76692 100644 --- a/code/modules/mining/shelters.dm +++ b/code/modules/mining/shelters.dm @@ -8,7 +8,7 @@ /datum/map_template/shelter/New() . = ..() - banned_areas = typecacheof(/area/shuttle) + banned_areas = typecacheof(/area/ship) blacklisted_turfs = typecacheof(list(/turf/closed, /turf/open/indestructible)) whitelisted_turfs = typecacheof(/turf/closed/mineral) banned_objects = typecacheof(/obj/structure/stone_tile) diff --git a/code/modules/mob/camera/camera.dm b/code/modules/mob/camera/camera.dm index 7d5bd8b42860..170cb25b49cf 100644 --- a/code/modules/mob/camera/camera.dm +++ b/code/modules/mob/camera/camera.dm @@ -1,4 +1,4 @@ -// Camera mob, used by AI camera and blob. +// Camera mob, used by AI camera. /mob/camera name = "camera mob" diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 8fbf9c32a38e..2dbbd9d4b65b 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -35,6 +35,7 @@ . = ..() GLOB.new_player_list += src + SSpoints_of_interest.make_point_of_interest(src) /mob/dead/new_player/Destroy() GLOB.new_player_list -= src diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm index cc5a69dd095f..71b66ac54fb4 100644 --- a/code/modules/mob/dead/new_player/preferences_setup.dm +++ b/code/modules/mob/dead/new_player/preferences_setup.dm @@ -52,7 +52,9 @@ var/random_species_type = GLOB.species_list[pick(GLOB.roundstart_races)] pref_species = new random_species_type if(randomise[RANDOM_NAME]) - real_name = pref_species.random_name(gender,1) + real_name = pref_species.random_name(gender, TRUE) + if(randomise[RANDOM_AGE]) + age = rand(pref_species.species_age_min, pref_species.species_age_max) /datum/preferences/proc/update_preview_icon(show_gear = TRUE, show_loadout = FALSE) // Set up the dummy for its photoshoot diff --git a/code/modules/mob/dead/new_player/ship_select.dm b/code/modules/mob/dead/new_player/ship_select.dm index fe88abdf3399..e130f6e404ce 100644 --- a/code/modules/mob/dead/new_player/ship_select.dm +++ b/code/modules/mob/dead/new_player/ship_select.dm @@ -166,7 +166,7 @@ continue var/list/ship_data = list( "name" = T.name, - "faction" = ship_prefix_to_faction(T.prefix), + "faction" = T.faction_name, "desc" = T.description, "tags" = T.tags, "crewCount" = length(T.job_slots), diff --git a/code/modules/mob/dead/new_player/sprite_accessories/elzuose.dm b/code/modules/mob/dead/new_player/sprite_accessories/elzuose.dm index 58317b5ab91a..9a15f0270fdf 100644 --- a/code/modules/mob/dead/new_player/sprite_accessories/elzuose.dm +++ b/code/modules/mob/dead/new_player/sprite_accessories/elzuose.dm @@ -37,6 +37,18 @@ name = "Sharp" icon_state = "sharp" +/datum/sprite_accessory/elzu_horns/cervid + name = "Cervid" + icon_state = "cervid" + +/datum/sprite_accessory/elzu_horns/prong + name = "Prong" + icon_state = "prong" + +/datum/sprite_accessory/elzu_horns/brow + name = "Brow" + icon_state = "brow" + //Start tails /datum/sprite_accessory/tails/elzu diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 4a768fc1c501..0fcfa5c13940 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -62,6 +62,9 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) var/datum/orbit_menu/orbit_menu var/datum/spawners_menu/spawners_menu + // The POI we're orbiting (orbit menu) + var/orbiting_ref + /mob/dead/observer/Initialize() set_invisibility(GLOB.observer_default_invisibility) @@ -142,6 +145,8 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) . = ..() + SSpoints_of_interest.make_point_of_interest(src) + grant_all_languages() show_data_huds() data_huds_on = 1 @@ -495,10 +500,11 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(isobserver(usr)) //Make sure they're an observer! + var/list/dest = list() //List of possible destinations (mobs) var/target = null //Chosen target. - dest += getpois(mobs_only = TRUE) //Fill list, prompt user with list + dest += SSpoints_of_interest.get_mob_pois() target = input("Please, select a player!", "Jump to Mob", null, null) as null|anything in dest if (!target)//Make sure we actually have a target @@ -838,20 +844,24 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob/dead/observer/reset_perspective(atom/A) if(client) if(ismob(client.eye) && (client.eye != src)) - var/mob/target = client.eye - observetarget = null - if(target.observers) - LAZYREMOVE(target.observers, src) + cleanup_observe() if(..()) if(hud_used) client.screen = list() hud_used.show_hud(hud_used.hud_version) +/mob/dead/observer/proc/cleanup_observe() + var/mob/target = client.eye + observetarget = null + client?.perspective = initial(client.perspective) + if(target.observers) + LAZYREMOVE(target.observers, src) + /mob/dead/observer/verb/observe() set name = "Observe" set category = "Ghost" - var/list/creatures = getpois() + var/list/creatures = SSpoints_of_interest.get_mob_pois() reset_perspective(null) diff --git a/code/modules/mob/dead/observer/orbit.dm b/code/modules/mob/dead/observer/orbit.dm index da3bc7c2dfb5..051faa5bedac 100644 --- a/code/modules/mob/dead/observer/orbit.dm +++ b/code/modules/mob/dead/observer/orbit.dm @@ -1,6 +1,9 @@ /datum/orbit_menu + ///mobs worth orbiting. Because spaghetti, all mobs have the point of interest, but only some are allowed to actually show up. + ///this obviously should be changed in the future, so we only add mobs as POI if they actually are interesting, and we don't use + ///a typecache. + var/static/list/mob_allowed_typecache var/mob/dead/observer/owner - var/auto_observe = FALSE /datum/orbit_menu/New(mob/dead/observer/new_owner) if(!istype(new_owner)) @@ -23,89 +26,243 @@ switch(action) if ("orbit") var/ref = params["ref"] - var/atom/movable/poi = (locate(ref) in GLOB.mob_list) || (locate(ref) in GLOB.poi_list) - if (poi == null) - . = TRUE - return + var/auto_observe = params["auto_observe"] + var/atom/movable/poi = SSpoints_of_interest.get_poi_atom_by_ref(ref) + + if((ismob(poi) && !SSpoints_of_interest.is_valid_poi(poi, CALLBACK(src, PROC_REF(validate_mob_poi)))) \ + || !SSpoints_of_interest.is_valid_poi(poi) + ) + to_chat(usr, span_notice("That point of interest is no longer valid.")) + return TRUE + + var/mob/dead/observer/user = usr owner.ManualFollow(poi) owner.reset_perspective(null) + user.orbiting_ref = ref if (auto_observe) owner.do_observe(poi) . = TRUE if ("refresh") update_static_data(owner, ui) . = TRUE - if ("toggle_observe") - auto_observe = !auto_observe - if (auto_observe && owner.orbit_target) - owner.do_observe(owner.orbit_target) - else - owner.reset_perspective(null) + /datum/orbit_menu/ui_data(mob/user) var/list/data = list() - data["auto_observe"] = auto_observe + + if(isobserver(user)) + data["orbiting"] = get_currently_orbiting(user) + return data /datum/orbit_menu/ui_static_data(mob/user) - var/list/data = list() + var/list/new_mob_pois = SSpoints_of_interest.get_mob_pois(CALLBACK(src, PROC_REF(validate_mob_poi)), append_dead_role = FALSE) + var/list/new_other_pois = SSpoints_of_interest.get_other_pois() var/list/alive = list() var/list/antagonists = list() + var/list/critical = list() var/list/dead = list() var/list/ghosts = list() var/list/misc = list() var/list/npcs = list() + var/list/ships = list() - var/list/pois = getpois(skip_mindless = TRUE, specify_dead_role = FALSE, only_realname = TRUE) - for (var/name in pois) + for(var/name in new_mob_pois) var/list/serialized = list() - serialized["name"] = name - - var/poi = pois[name] - - serialized["ref"] = REF(poi) - - var/mob/M = poi - - serialized["fake_name"] = M.name - if (istype(M)) - if (isobserver(M)) - ghosts += list(serialized) - else if (M.stat == DEAD) - dead += list(serialized) - else if (M.mind == null) - npcs += list(serialized) - else - var/number_of_orbiters = M.orbiters?.orbiters?.len - if (number_of_orbiters) - serialized["orbiters"] = number_of_orbiters - - var/datum/mind/mind = M.mind - var/was_antagonist = FALSE - - for (var/_A in mind.antag_datums) - var/datum/antagonist/A = _A - if (A.show_to_ghosts) - was_antagonist = TRUE - serialized["antag"] = A.name - antagonists += list(serialized) - break - - if (!was_antagonist) - alive += list(serialized) + var/mob/mob_poi = new_mob_pois[name] + var/number_of_orbiters = length(mob_poi.get_all_orbiters()) + + if(isnewplayer(mob_poi)) + continue + + serialized["ref"] = REF(mob_poi) + serialized["full_name"] = mob_poi.name + serialized["job"] = mob_poi.job + if(number_of_orbiters) + serialized["orbiters"] = number_of_orbiters + + if(isobserver(mob_poi)) + ghosts += list(serialized) + continue + + if(mob_poi.stat == DEAD) + dead += list(serialized) + continue + + if(isnull(mob_poi.mind)) + if(isliving(mob_poi)) + var/mob/living/npc = mob_poi + serialized["health"] = FLOOR((npc.health / npc.maxHealth * 100), 1) + + npcs += list(serialized) + continue + + serialized["client"] = !!mob_poi.client + serialized["name"] = mob_poi.real_name + + if(isliving(mob_poi)) + serialized += get_living_data(mob_poi) + + var/list/antag_data = get_antag_data(mob_poi.mind) + if(length(antag_data)) + serialized += antag_data + antagonists += list(serialized) + continue + + alive += list(serialized) + + for(var/name in new_other_pois) + var/atom/atom_poi = new_other_pois[name] + + var/list/other_data = get_misc_data(atom_poi) + var/misc_data = list(other_data[1]) + + if(istype(atom_poi, /obj/machinery/computer/helm)) + ships += misc_data else - misc += list(serialized) - - data["alive"] = alive - data["antagonists"] = antagonists - data["dead"] = dead - data["ghosts"] = ghosts - data["misc"] = misc - data["npcs"] = npcs - return data + misc += misc_data + + if(other_data[2]) // Critical = TRUE + critical += misc_data + + return list( + "alive" = alive, + "antagonists" = antagonists, + "critical" = critical, + "dead" = dead, + "ghosts" = ghosts, + "misc" = misc, + "npcs" = npcs, + "ships" = ships, + ) /datum/orbit_menu/ui_assets() . = ..() || list() . += get_asset_datum(/datum/asset/simple/orbit) +/// Helper function to get threat type, group, overrides for job and icon +/datum/orbit_menu/proc/get_antag_data(datum/mind/poi_mind) as /list + var/list/serialized = list() + + for(var/datum/antagonist/antag as anything in poi_mind.antag_datums) + if(!antag.show_to_ghosts) + continue + + serialized["antag"] = antag.name + serialized["antag_group"] = antag.antagpanel_category + serialized["job"] = antag.name + serialized["icon"] = antag.antag_hud_name + + return serialized + +/// Helper to get the current thing we're orbiting (if any) +/datum/orbit_menu/proc/get_currently_orbiting(mob/dead/observer/user) + if(isnull(user.orbiting_ref)) + return + + var/atom/poi = SSpoints_of_interest.get_poi_atom_by_ref(user.orbiting_ref) + if(isnull(poi)) + user.orbiting_ref = null + return + + if((ismob(poi) && !SSpoints_of_interest.is_valid_poi(poi, CALLBACK(src, PROC_REF(validate_mob_poi)))) \ + || !SSpoints_of_interest.is_valid_poi(poi) + ) + user.orbiting_ref = null + return + + var/list/serialized = list() + + if(!ismob(poi)) + var/list/misc_info = get_misc_data(poi) + serialized += misc_info[1] + return serialized + + var/mob/mob_poi = poi + serialized["full_name"] = mob_poi.name + serialized["ref"] = REF(poi) + + if(mob_poi.mind) + serialized["client"] = !!mob_poi.client + serialized["name"] = mob_poi.real_name + + if(isliving(mob_poi)) + serialized += get_living_data(mob_poi) + + return serialized + +/// Helper function to get job / icon / health data for a living mob +/datum/orbit_menu/proc/get_living_data(mob/living/player) as /list + var/list/serialized = list() + + serialized["health"] = FLOOR((player.health / player.maxHealth * 100), 1) + + return serialized + + +/// Gets a list: Misc data and whether it's critical. Handles all snowflakey type cases +/datum/orbit_menu/proc/get_misc_data(atom/movable/atom_poi) as /list + var/list/misc = list() + var/critical = FALSE + + misc["ref"] = REF(atom_poi) + misc["full_name"] = atom_poi.name + + // Display the nuke timer + if(istype(atom_poi, /obj/machinery/nuclearbomb)) + var/obj/machinery/nuclearbomb/bomb = atom_poi + + if(bomb.timing) + misc["extra"] = "Timer: [bomb.countdown?.displayed_text]s" + critical = TRUE + + return list(misc, critical) + + // Display the holder if its a nuke disk + if(istype(atom_poi, /obj/item/disk/nuclear)) + var/obj/item/disk/nuclear/disk = atom_poi + var/mob/holder = disk.pulledby || get(disk, /mob) + misc["extra"] = "Location: [holder?.real_name || "Unsecured"]" + + return list(misc, critical) + + // Display singuloths if they exist + if(istype(atom_poi, /obj/singularity)) + var/obj/singularity/singulo = atom_poi + misc["extra"] = "Energy: [round(singulo.energy)]" + + if(singulo.current_size > 2) + critical = TRUE + + return list(misc, critical) + + if(istype(atom_poi, /obj/machinery/computer/helm)) + var/obj/machinery/computer/helm/helm_poi = atom_poi + if(helm_poi.current_ship) + misc["extra"] = "Ship: [helm_poi.current_ship.name]" + + return list(misc, critical) + + return list(misc, critical) + +/** + * Helper POI validation function passed as a callback to various SSpoints_of_interest procs. + * + * Provides extended validation above and beyond standard, limiting mob POIs without minds or ckeys + * unless they're mobs, camera mobs or megafauna. Also allows exceptions for mobs that are deadchat controlled. + * + * If they satisfy that requirement, falls back to default validation for the POI. + */ +/datum/orbit_menu/proc/validate_mob_poi(datum/point_of_interest/mob_poi/potential_poi) + var/mob/potential_mob_poi = potential_poi.target + if(!potential_mob_poi.mind && !potential_mob_poi.ckey) + if(!mob_allowed_typecache) + mob_allowed_typecache = typecacheof(list( + /mob/living/simple_animal/hostile/megafauna, + /mob/living/simple_animal/hostile/boss + )) + if(!is_type_in_typecache(potential_mob_poi, mob_allowed_typecache) && !potential_mob_poi.GetComponent(/datum/component/deadchat_control)) + return FALSE + + return potential_poi.validate() diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index 1910347e4fdd..8e2962e70d2f 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -51,19 +51,31 @@ if(BLOOD_VOLUME_MAXIMUM to BLOOD_VOLUME_EXCESS) if(prob(10)) to_chat(src, "You feel terribly bloated.") + if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE) - if(prob(5)) + + if(prob(1)) to_chat(src, "You feel [word].") - adjustOxyLoss(round((BLOOD_VOLUME_NORMAL - blood_volume) * 0.01, 1)) + if(oxyloss < 20) + adjustOxyLoss(round((BLOOD_VOLUME_NORMAL - blood_volume) * 0.02, 1)) + if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY) - adjustOxyLoss(round((BLOOD_VOLUME_NORMAL - blood_volume) * 0.02, 1)) - if(prob(5)) - blur_eyes(6) + if(eye_blurry < 50) + adjust_blurriness(5) + if(oxyloss < 40) + adjustOxyLoss(round((BLOOD_VOLUME_NORMAL - blood_volume) * 0.02, 1)) + else + adjustOxyLoss(round((BLOOD_VOLUME_NORMAL - blood_volume) * 0.01, 1)) + + if(prob(15)) + Unconscious(rand(2 SECONDS,6 SECONDS)) to_chat(src, "You feel very [word].") + if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD) - adjustOxyLoss(5) + adjustOxyLoss(round((BLOOD_VOLUME_NORMAL - blood_volume) * 0.02, 1)) + adjustToxLoss(2) if(prob(15)) - Unconscious(rand(20,60)) + Unconscious(rand(2 SECONDS,6 SECONDS)) to_chat(src, "You feel extremely [word].") if(-INFINITY to BLOOD_VOLUME_SURVIVE) if(!HAS_TRAIT(src, TRAIT_NODEATH)) @@ -81,25 +93,76 @@ BP.adjust_bleeding(0.1, BLOOD_LOSS_DAMAGE_MAXIMUM) limb_bleed += BP.bleeding + var/message_cooldown = 5 SECONDS + var/bleeeding_wording +// var/bleed_change_wording + switch(limb_bleed) + if(0 to 0.5) + bleeeding_wording = "You hear droplets of blood drip down." + message_cooldown *= 2.5 + if(0.5 to 1) + bleeeding_wording = "You feel your blood flow quietly to the floor." + message_cooldown *= 2 + if(1 to 2) + bleeeding_wording = "The flow of blood leaving your body onto the ground is worrying..." + message_cooldown *= 1.7 + if(2 to 4) + bleeeding_wording = "You're losing blood very fast, which is freaking you out!" + message_cooldown *= 1.5 + if(4 to INFINITY) + bleeeding_wording = "Your heartbeat beats unstably fast as you lose a massive amount of blood!!" + if(limb_bleed && !bleedsuppress && !HAS_TRAIT(src, TRAIT_FAKEDEATH)) bleed(limb_bleed) + if(!blood_particle) + blood_particle = new(src, /particles/droplets/blood, PARTICLE_ATTACH_MOB) + blood_particle.particles.color = dna.blood_type.color //mouthful + blood_particle.particles.spawning = (limb_bleed/2) + blood_particle.particles.count = (round(clamp((limb_bleed * 2), 1, INFINITY))) + + if(COOLDOWN_FINISHED(src, bloodloss_message) && bleeeding_wording) + to_chat(src, span_warning("[bleeeding_wording]")) + COOLDOWN_START(src, bloodloss_message, message_cooldown) + else + if(blood_particle) + QDEL_NULL(blood_particle) + //Makes a blood drop, leaking amt units of blood from the mob /mob/living/carbon/proc/bleed(amt) if(blood_volume) blood_volume = max(blood_volume - amt, 0) if (prob(sqrt(amt)*BLOOD_DRIP_RATE_MOD)) if(isturf(src.loc) && !isgroundlessturf(src.loc)) //Blood loss still happens in locker, floor stays clean - if(amt >= 10) - add_splatter_floor(src.loc) + if(amt >= 2) + add_splatter_floor(src.loc, amt = amt) else - add_splatter_floor(src.loc, 1) + add_splatter_floor(src.loc, TRUE, amt) /mob/living/carbon/human/bleed(amt) amt *= physiology.bleed_mod if(!(NOBLOOD in dna.species.species_traits)) ..() +/** + * This proc is a helper for spraying blood for things like slashing/piercing wounds and dismemberment. + * + * The strength of the splatter in the second argument determines how much it can dirty and how far it can go + * + * Arguments: + * * splatter_direction: Which direction the blood is flying + * * splatter_strength: How many tiles it can go, and how many items it can pass over and dirty + */ +/mob/living/carbon/proc/spray_blood(splatter_direction, splatter_strength = 3) + if(!isturf(loc)) + return + var/obj/effect/decal/cleanable/blood/hitsplatter/our_splatter = new(loc) + +// our_splatter.transfer_mob_blood_dna(return_blood_DNA(src)) + our_splatter.blood_dna_info = get_blood_dna_list() + our_splatter.transfer_mob_blood_dna(src) + var/turf/targ = get_ranged_target_turf(src, splatter_direction, splatter_strength) + INVOKE_ASYNC(our_splatter, TYPE_PROC_REF(/obj/effect/decal/cleanable/blood/hitsplatter, fly_towards), targ, splatter_strength) /mob/living/proc/restore_blood() @@ -229,13 +292,14 @@ return blood_type.color //to add a splatter of blood or other mob liquid. -/mob/living/proc/add_splatter_floor(turf/T, small_drip) +/mob/living/proc/add_splatter_floor(turf/T, small_drip, amt) if(get_blood_id() != /datum/reagent/blood) return if(!T) T = get_turf(src) var/list/temp_blood_DNA + if(small_drip) // Only a certain number of drips (or one large splatter) can be on a given turf. var/obj/effect/decal/cleanable/blood/drip/drop = locate() in T @@ -248,7 +312,7 @@ else temp_blood_DNA = drop.return_blood_DNA() //we transfer the dna from the drip to the splatter qdel(drop)//the drip is replaced by a bigger splatter - else + else if (amt < 2) drop = new(T, get_static_viruses()) drop.transfer_mob_blood_dna(src) return @@ -261,7 +325,11 @@ B = candidate break if(!B) - B = new /obj/effect/decal/cleanable/blood/splatter(T, get_static_viruses()) + if(amt > 4) + B = new /obj/effect/decal/cleanable/blood(T, get_static_viruses()) + else + B = new /obj/effect/decal/cleanable/blood/splatter(T, get_static_viruses()) + if(QDELETED(B)) //Give it up return B.bloodiness = min((B.bloodiness + BLOOD_AMOUNT_PER_DECAL), BLOOD_POOL_MAX) @@ -269,11 +337,11 @@ if(temp_blood_DNA) B.add_blood_DNA(temp_blood_DNA) -/mob/living/carbon/human/add_splatter_floor(turf/T, small_drip) +/mob/living/carbon/human/add_splatter_floor(turf/T, small_drip, amt) if(!(NOBLOOD in dna.species.species_traits)) ..() -/mob/living/carbon/alien/add_splatter_floor(turf/T, small_drip) +/mob/living/carbon/alien/add_splatter_floor(turf/T, small_drip, amt) if(!T) T = get_turf(src) var/obj/effect/decal/cleanable/xenoblood/B = locate() in T.contents @@ -281,7 +349,7 @@ B = new(T) B.add_blood_DNA(list("UNKNOWN DNA" = "X*")) -/mob/living/silicon/robot/add_splatter_floor(turf/T, small_drip) +/mob/living/silicon/robot/add_splatter_floor(turf/T, small_drip, amt) if(!T) T = get_turf(src) var/obj/effect/decal/cleanable/oil/B = locate() in T.contents diff --git a/code/modules/mob/living/brain/brain.dm b/code/modules/mob/living/brain/brain.dm index 80daa8de3e3c..fa1267bdc232 100644 --- a/code/modules/mob/living/brain/brain.dm +++ b/code/modules/mob/living/brain/brain.dm @@ -41,9 +41,6 @@ /mob/living/brain/ex_act() //you cant blow up brainmobs because it makes transfer_to() freak out when borgs blow up. return -/mob/living/brain/blob_act(obj/structure/blob/B) - return - /mob/living/brain/get_eye_protection()//no eyes return 2 diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 3ed2b86816ac..9a19e198a555 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -386,7 +386,7 @@ /mob/living/carbon/get_standard_pixel_y_offset(lying = 0) if(lying) - return -6 + return PIXEL_Y_OFFSET_LYING else return initial(pixel_y) diff --git a/code/modules/mob/living/carbon/carbon_defense.dm b/code/modules/mob/living/carbon/carbon_defense.dm index 43cefa251e34..62174120a60f 100644 --- a/code/modules/mob/living/carbon/carbon_defense.dm +++ b/code/modules/mob/living/carbon/carbon_defense.dm @@ -352,13 +352,6 @@ if(is_type_in_typecache(active_item, GLOB.shove_disarming_types)) visible_message("[name] regains their grip on \the [active_item]!", "You regain your grip on \the [active_item]", null, COMBAT_MESSAGE_RANGE) -/mob/living/carbon/blob_act(obj/structure/blob/B) - if (stat == DEAD) - return - else - show_message("The blob attacks!") - adjustBruteLoss(10) - /mob/living/carbon/emp_act(severity) . = ..() if(. & EMP_PROTECT_CONTENTS) @@ -653,3 +646,18 @@ ADD_TRAIT(src, TRAIT_KNOCKEDOUT, OXYLOSS_TRAIT) else if(getOxyLoss() <= 50) REMOVE_TRAIT(src, TRAIT_KNOCKEDOUT, OXYLOSS_TRAIT) + +/mob/living/carbon/bullet_act(obj/projectile/P, def_zone, piercing_hit = FALSE) + 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) + 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) + apply_effects(P.stun, P.knockdown, P.unconscious, P.irradiate, P.slur, P.stutter, P.eyeblur, P.drowsy, armor, P.stamina, P.jitter, P.paralyze, P.immobilize) + if(P.dismemberment) + check_projectile_dismemberment(P, def_zone) + return on_hit_state ? BULLET_ACT_HIT : BULLET_ACT_BLOCK diff --git a/code/modules/mob/living/carbon/death.dm b/code/modules/mob/living/carbon/death.dm index 8c1a36c2061b..1804a1497187 100644 --- a/code/modules/mob/living/carbon/death.dm +++ b/code/modules/mob/living/carbon/death.dm @@ -31,6 +31,9 @@ if(prob(50)) step(W, pick(GLOB.alldirs)) var/atom/Tsec = drop_location() + var/amount_of_streams_to_spawn = rand(2,4) + for(var/i in 1 to amount_of_streams_to_spawn) + spray_blood(pick(GLOB.alldirs), rand(1,6)) for(var/mob/M in src) M.forceMove(Tsec) visible_message("[M] bursts out of [src]!") diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 55adc5bd5d17..dad54c17ca0e 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -62,8 +62,6 @@ GLOBAL_LIST_EMPTY(dead_players_during_shift) if(SSticker.HasRoundStarted()) SSblackbox.ReportDeath(src) log_message("has died (BRUTE: [src.getBruteLoss()], BURN: [src.getFireLoss()], TOX: [src.getToxLoss()], OXY: [src.getOxyLoss()], CLONE: [src.getCloneLoss()])", LOG_ATTACK) - if(is_devil(src)) - INVOKE_ASYNC(is_devil(src), TYPE_PROC_REF(/datum/antagonist/devil, beginResurrectionCheck), src) to_chat(src, "You have died. Barring complete bodyloss, you can in most cases be revived by other players. If you do not wish to be brought back, use the \"Do Not Resuscitate\" verb in the ghost tab.") diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 7bbe9fb1de72..295537cfd95b 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -25,7 +25,7 @@ //if we have no guestbook, we just KNOW okay? var/known_name = user.mind?.guestbook ? user.mind.guestbook.get_known_name(user, src, face_name) : face_name if(known_name) - . += "You know them as [known_name]." + . += "You know [t_him] as [known_name]." else . += "You don't recognize [t_him]. You can Ctrl-Shift click [t_him] to memorize their face." else @@ -99,8 +99,6 @@ if(!(ITEM_SLOT_EYES in obscured)) if(glasses) . += "[t_He] [t_has] [glasses.get_examine_string(user)] covering [t_his] eyes." - else if(eye_color == BLOODCULT_EYE && iscultist(src) && HAS_TRAIT(src, CULT_EYES)) - . += "[t_His] eyes are glowing an unnatural red!" //ears if(ears && !(ITEM_SLOT_EARS in obscured)) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 64dfdfde91ce..7a7bc349b26c 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -473,16 +473,6 @@ if(!max_limb_loss) break - -/mob/living/carbon/human/blob_act(obj/structure/blob/B) - if(stat == DEAD) - return - show_message("The blob attacks you!") - var/dam_zone = pick(BODY_ZONE_CHEST, BODY_ZONE_PRECISE_L_HAND, BODY_ZONE_PRECISE_R_HAND, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) - var/obj/item/bodypart/affecting = get_bodypart(ran_zone(dam_zone)) - apply_damage(5, BRUTE, affecting, run_armor_check(affecting, "melee")) - - ///Calculates the siemens coeff based on clothing and species, can also restart hearts. /mob/living/carbon/human/electrocute_act(shock_damage, source, siemens_coeff = 1, flags = NONE) //If it doesnt have physiology its prob still initializing. diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 567523c11d79..df006ead1f39 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -77,3 +77,7 @@ /// How many "units of blood" we have on our hands var/blood_in_hands = 0 + ///blood particle effect + var/obj/effect/abstract/particle_holder/blood_particle + + COOLDOWN_DECLARE(bloodloss_message) diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index 9e2cfe4f1556..b7c5b9877120 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -192,23 +192,65 @@ /mob/living/carbon/human/proc/get_age() var/obscured = check_obscured_slots() var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE)) - if((obscured & ITEM_SLOT_ICLOTHING) && skipface || isipc(src)) + if((obscured & ITEM_SLOT_ICLOTHING) && skipface || isipc(src) || isskeleton(src)) // sorry ladies no middle aged robots return FALSE - switch(age) - if(70 to INFINITY) - return "Geriatric" - if(60 to 70) - return "Elderly" - if(50 to 60) - return "Old" - if(40 to 50) - return "Middle-Aged" - if(24 to 40) - return FALSE //not necessary because this is basically the most common age range - if(18 to 24) - return "Young" - else - return "Puzzling" + if(islizard(src)) + switch(age) + if(175 to INFINITY) + return "Ancient" + if(130 to 175) + return "Elderly" + if(100 to 130) + return "Old" + if(65 to 100) + return "Middle-Aged" + if(40 to 65) + return FALSE + if(18 to 40) + return "Young" + else if(isvox(src)) + switch(age) + if(280 to INFINITY) + return "Ancient" + if(200 to 280) + return "Elderly" + if(160 to 200) + return "Old" + if(120 to 160) + return "Middle-Aged" + if(60 to 120) + return FALSE + if(18 to 60) + return "Young" + else if(iselzuose(src)) + switch(age) + if(300 to INFINITY) + return "Ancient" + if(260 to 300) + return "Elderly" + if(160 to 260) + return "Old" + if(100 to 160) + return "Middle-Aged" + if(40 to 100) + return FALSE // most common age range + if(18 to 40) + return "Young" + else + switch(age) + if(70 to INFINITY) + return "Ancient" + if(60 to 70) + return "Elderly" + if(50 to 60) + return "Old" + if(40 to 50) + return "Middle-Aged" + if(24 to 40) + return FALSE // most common age range + if(18 to 24) + return "Young" + return "Puzzling" /mob/living/carbon/human/proc/get_generic_name(prefixed = FALSE, lowercase = FALSE) var/final_string = "" @@ -228,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/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 77e2045e357c..aab8b681bf50 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -26,25 +26,8 @@ return 0 return ..() -/mob/living/carbon/human/experience_pressure_difference(pressure_difference) - if(pressure_difference > 100) - playsound_local(null, 'sound/effects/space_wind_big.ogg', clamp(pressure_difference / 50, 10, 100), 1) - else - playsound_local(null, 'sound/effects/space_wind.ogg', clamp(pressure_difference, 10, 100), 1) - if(shoes && istype(shoes, /obj/item/clothing)) - var/obj/item/clothing/S = shoes - if((S.clothing_flags & NOSLIP)) - return 0 - return ..() - -/mob/living/carbon/human/mob_has_gravity() - . = ..() - if(!.) - if(mob_negates_gravity()) - . = 1 - /mob/living/carbon/human/mob_negates_gravity() - return ((shoes && shoes.negates_gravity()) || (dna.species.negates_gravity(src))) + return dna.species.negates_gravity(src) || ..() /mob/living/carbon/human/Move(NewLoc, direct) . = ..() diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 756af00f1839..cbaa988aa5a8 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -40,6 +40,45 @@ return s_store return null +/mob/living/carbon/human/get_slot_by_item(obj/item/looking_for) + if(looking_for == belt) + return ITEM_SLOT_BELT + + if(looking_for == wear_id) + return ITEM_SLOT_ID + + if(looking_for == ears) + return ITEM_SLOT_EARS + + if(looking_for == glasses) + return ITEM_SLOT_EYES + + if(looking_for == gloves) + return ITEM_SLOT_GLOVES + + if(looking_for == head) + return ITEM_SLOT_HEAD + + if(looking_for == shoes) + return ITEM_SLOT_FEET + + if(looking_for == wear_suit) + return ITEM_SLOT_OCLOTHING + + if(looking_for == w_uniform) + return ITEM_SLOT_ICLOTHING + + if(looking_for == r_store) + return ITEM_SLOT_RPOCKET + + if(looking_for == l_store) + return ITEM_SLOT_LPOCKET + + if(looking_for == s_store) + return ITEM_SLOT_SUITSTORE + + return ..() + /mob/living/carbon/human/proc/get_all_slots() . = get_head_slots() | get_body_slots() @@ -334,7 +373,8 @@ if(equip_to_slot_if_possible(thing, slot_type)) update_inv_hands() return - if(!SEND_SIGNAL(equipped_item, COMSIG_CONTAINS_STORAGE)) // not a storage item + var/datum/component/storage/storage = equipped_item.GetComponent(/datum/component/storage) + if(!storage) if(!thing) equipped_item.attack_hand(src) else @@ -344,10 +384,11 @@ if(!SEND_SIGNAL(equipped_item, COMSIG_TRY_STORAGE_INSERT, thing, src)) to_chat(src, "You can't fit [thing] into your [equipped_item.name]!") return - if(!equipped_item.contents.len) // nothing to take out + var/atom/real_location = storage.real_location() + if(!real_location.contents.len) // nothing to take out to_chat(src, "There's nothing in your [equipped_item.name] to take out!") return - var/obj/item/stored = equipped_item.contents[equipped_item.contents.len] + var/obj/item/stored = real_location.contents[real_location.contents.len] if(!stored || stored.on_found(src)) return stored.attack_hand(src) // take out thing from item in storage slot diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 730001819de4..18b6cb9ba40e 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -61,6 +61,21 @@ return ONE_ATMOSPHERE return pressure +/mob/living/carbon/human/proc/check_for_seal() + var/obj/item/clothing/clothing_suit = wear_suit + var/obj/item/clothing/clothing_head = head + if(istype(clothing_suit) && istype(clothing_head)) + if (clothing_suit.clothing_flags & clothing_head.clothing_flags & STOPSPRESSUREDAMAGE) + return TRUE + return FALSE + +/mob/living/carbon/human/proc/check_for_goggles() + if(head?.flags_cover & SEALS_EYES) + return head + if(wear_mask?.flags_cover & SEALS_EYES) + return wear_mask + if(glasses?.flags_cover & SEALS_EYES) + return glasses /mob/living/carbon/human/handle_traits() if (getOrganLoss(ORGAN_SLOT_BRAIN) >= 60) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index e2a01d29540c..a1560963b00b 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1,5 +1,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) +#define MINIMUM_MOLS_TO_HARM 1 + /** * # species datum * @@ -144,6 +146,10 @@ GLOBAL_LIST_EMPTY(roundstart_races) var/bodytemp_normal = HUMAN_BODYTEMP_NORMAL /// Minimum amount of kelvin moved toward normal body temperature per tick. var/bodytemp_autorecovery_min = HUMAN_BODYTEMP_AUTORECOVERY_MINIMUM + /// The maximum temperature the species is comfortable at. Going above this does not apply any effects, but warns players that the temperture is hot + var/max_temp_comfortable = (HUMAN_BODYTEMP_NORMAL + 7) + /// The minimum temperature the species is comfortable at. Going below this does not apply any effects, but warns players that the temperture is chilly + var/min_temp_comfortable = (HUMAN_BODYTEMP_NORMAL - 5) /// This is the divisor which handles how much of the temperature difference between the current body temperature and 310.15K (optimal temperature) humans auto-regenerate each tick. The higher the number, the slower the recovery. var/bodytemp_autorecovery_divisor = HUMAN_BODYTEMP_AUTORECOVERY_DIVISOR ///Similar to the autorecovery_divsor, but this is the divisor which is applied at the stage that follows autorecovery. This is the divisor which comes into play when the human's loc temperature is higher than their body temperature. Make it lower to lose bodytemp faster. @@ -158,6 +164,10 @@ GLOBAL_LIST_EMPTY(roundstart_races) var/bodytemp_cooling_rate_max = HUMAN_BODYTEMP_COOLING_MAX /// The maximum rate at which a species can cool down per tick var/bodytemp_heating_rate_max = HUMAN_BODYTEMP_HEATING_MAX + /// How much temp is our body stabilizing naturally? + var/bodytemp_natural_stabilization = 0 + /// How much temp is the environment is causing us to charge? + var/bodytemp_environment_change = 0 ///Does our species have colors for its' damage overlays? var/use_damage_color = TRUE @@ -1788,16 +1798,113 @@ GLOBAL_LIST_EMPTY(roundstart_races) var/areatemp = H.get_temperature(environment) if(H.stat != DEAD) // If you are dead your body does not stabilize naturally - natural_bodytemperature_stabilization(environment, H) + bodytemp_natural_stabilization = natural_bodytemperature_stabilization(environment, H) if(!H.on_fire || areatemp > H.bodytemperature) // If we are not on fire or the area is hotter - H.adjust_bodytemperature((areatemp - H.bodytemperature), use_insulation=TRUE, use_steps=TRUE, hardsuit_fix=bodytemp_normal - H.bodytemperature) + bodytemp_environment_change = H.adjust_bodytemperature((areatemp - H.bodytemperature), use_insulation=TRUE, use_steps=TRUE, hardsuit_fix=bodytemp_normal - H.bodytemperature) + + if(H.check_for_seal()) + return + + var/plasma = environment.get_moles(GAS_PLASMA) + var/tritium = environment.get_moles(GAS_TRITIUM) + var/chlorine = environment.get_moles(GAS_CHLORINE) + var/hydrogen_chloride = environment.get_moles(GAS_HYDROGEN_CHLORIDE) + if(chlorine <= MINIMUM_MOLS_TO_HARM && hydrogen_chloride <= MINIMUM_MOLS_TO_HARM && tritium <= MINIMUM_MOLS_TO_HARM && plasma <= MINIMUM_MOLS_TO_HARM) + return + + var/eyedamage = FALSE + var/irritant = FALSE + var/burndamage = 0 + var/lowerthreshold = 0 + if(HAS_TRAIT(H, TRAIT_METALLIC)) //makes certain species take more damage and start taking damage at lower air amounts + lowerthreshold = 1 + + if(plasma > (MINIMUM_MOLS_TO_HARM * 10)) + eyedamage = TRUE + irritant = TRUE + if(tritium) + burndamage += max(sqrt(tritium) - 2 + lowerthreshold, 0) + if(tritium > MINIMUM_MOLS_TO_HARM) + eyedamage = TRUE + irritant = TRUE + if(chlorine) + burndamage += max(sqrt(chlorine) - 4 + lowerthreshold, 0) + irritant = TRUE + if(chlorine > (MINIMUM_MOLS_TO_HARM * 10)) + eyedamage = TRUE + if(hydrogen_chloride) + burndamage += max(sqrt(hydrogen_chloride) - 1 + lowerthreshold, 0) + eyedamage = TRUE + irritant = TRUE + + if(!eyedamage && !burndamage && !irritant) + return + H.apply_damage(burndamage, BURN, spread_damage = TRUE) + if(prob(50) && burndamage) + if(lowerthreshold) + to_chat(H, "You're corroding!") + else + to_chat(H, "You're melting!") + playsound(H, 'sound/items/welder.ogg', 30, TRUE) + if(!H.check_for_goggles() && eyedamage) + H.adjustOrganLoss(ORGAN_SLOT_EYES, 1) + if(prob(50)) + to_chat(H, "Your eyes burn!") + if(irritant && prob(50)) + if(lowerthreshold) + to_chat(H, "Your outer shell smolders!") + else + to_chat(H, "Your skin itches.") + /// Handle the body temperature status effects for the species /// Traits for resitance to heat or cold are handled here. /datum/species/proc/handle_body_temperature(mob/living/carbon/human/H) + var/body_temp = H.bodytemperature + var/total_change = bodytemp_natural_stabilization + bodytemp_environment_change + + //tempature is no longer comfy, throw alert + if(body_temp > max_temp_comfortable && !HAS_TRAIT(H, TRAIT_RESISTHEAT)) + SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "cold") + if(body_temp > bodytemp_heat_damage_limit) + var/burn_damage = calculate_burn_damage(H) + if(burn_damage < 2) + H.throw_alert("tempfeel", /atom/movable/screen/alert/hot, 3) + else + H.throw_alert("tempfeel", /atom/movable/screen/alert/hot, 2) + else + if(body_temp < (bodytemp_heat_damage_limit - 10)) + // you are cooling down and exiting the danger zone + if(total_change < 0) + H.throw_alert("tempfeel", /atom/movable/screen/alert/warm) + else + H.throw_alert("tempfeel", /atom/movable/screen/alert/hot, 2) + else if(total_change > 1) + H.throw_alert("tempfeel", /atom/movable/screen/alert/warm) + else + H.clear_alert("tempfeel") + else if (body_temp < min_temp_comfortable && !HAS_TRAIT(H, TRAIT_RESISTCOLD)) + SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "hot") + if(body_temp < 200) + H.throw_alert("tempfeel", /atom/movable/screen/alert/cold, 3) + else if(body_temp < bodytemp_cold_damage_limit) + H.throw_alert("tempfeel", /atom/movable/screen/alert/cold, 2) + else if(body_temp < (bodytemp_cold_damage_limit + 10)) + // you are warming up and exiting the danger zone + if(total_change > 0) + H.throw_alert("tempfeel", /atom/movable/screen/alert/chilly) + else + H.throw_alert("tempfeel", /atom/movable/screen/alert/cold, 2) + else if(total_change < -1) + H.throw_alert("tempfeel", /atom/movable/screen/alert/chilly) + else + H.clear_alert("tempfeel") + else + H.clear_alert("tempfeel") + // Body temperature is too hot, and we do not have resist traits - if(H.bodytemperature > bodytemp_heat_damage_limit && !HAS_TRAIT(H, TRAIT_RESISTHEAT)) + if(body_temp > bodytemp_heat_damage_limit && !HAS_TRAIT(H, TRAIT_RESISTHEAT)) // Clear cold mood and apply hot mood SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "cold") SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "hot", /datum/mood_event/hot) @@ -1805,23 +1912,26 @@ GLOBAL_LIST_EMPTY(roundstart_races) //Remove any slowdown from the cold. H.remove_movespeed_modifier(/datum/movespeed_modifier/cold) - var/burn_damage = 0 - var/firemodifier = H.fire_stacks / 50 - if (!H.on_fire) // We are not on fire, reduce the modifier - firemodifier = min(firemodifier, 0) - - // this can go below 5 at log 2.5 - burn_damage = max(log(2 - firemodifier, (H.bodytemperature - H.get_body_temp_normal(apply_change=FALSE))) - 5,0) - - // Display alerts based on the amount of fire damage being taken - if (burn_damage) - switch(burn_damage) - if(1 to 2) - H.throw_alert("temp", /atom/movable/screen/alert/hot, 1) - if(2 to 4) - H.throw_alert("temp", /atom/movable/screen/alert/hot, 2) - else - H.throw_alert("temp", /atom/movable/screen/alert/hot, 3) + var/burn_damage = calculate_burn_damage(H) + + // sweats depending on burn damage, not actually a mechanic but a alternative to pinpoint when you are taking damage + if(burn_damage) + if(H.mob_biotypes & MOB_ROBOTIC) //robors have a alternative cooling fan graphic + switch(burn_damage) + if(0 to 2) + H.throw_alert("temp", /atom/movable/screen/alert/fans, 1) + if(2 to 4) + H.throw_alert("temp", /atom/movable/screen/alert/fans, 2) + else + H.throw_alert("temp", /atom/movable/screen/alert/fans, 3) + else + switch(burn_damage) + if(0 to 2) + H.throw_alert("temp", /atom/movable/screen/alert/sweat, 1) + if(2 to 4) + H.throw_alert("temp", /atom/movable/screen/alert/sweat, 2) + else + H.throw_alert("temp", /atom/movable/screen/alert/sweat, 3) // Apply species and physiology modifiers to heat damage burn_damage = burn_damage * heatmod * H.physiology.heat_mod @@ -1834,7 +1944,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) H.apply_damage(burn_damage, BURN, spread_damage = TRUE) // Body temperature is too cold, and we do not have resist traits - else if(H.bodytemperature < bodytemp_cold_damage_limit && !HAS_TRAIT(H, TRAIT_RESISTCOLD)) + else if(body_temp < bodytemp_cold_damage_limit && !HAS_TRAIT(H, TRAIT_RESISTCOLD)) // clear any hot moods and apply cold mood SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "hot") SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "cold", /datum/mood_event/cold) @@ -1843,17 +1953,16 @@ GLOBAL_LIST_EMPTY(roundstart_races) // Display alerts based on the amount of cold damage being taken // Apply more damage based on how cold you are - var/bodytemp = H.bodytemperature - if(bodytemp < 120) - H.throw_alert("temp", /atom/movable/screen/alert/cold, 3) + if(body_temp < 120) + H.throw_alert("temp", /atom/movable/screen/alert/shiver, 3) H.apply_damage(COLD_DAMAGE_LEVEL_3 * coldmod * H.physiology.cold_mod, BURN) - else if(bodytemp < 200) - H.throw_alert("temp", /atom/movable/screen/alert/cold, 2) + else if(body_temp < 200) + H.throw_alert("temp", /atom/movable/screen/alert/shiver, 2) H.apply_damage(COLD_DAMAGE_LEVEL_2 * coldmod * H.physiology.cold_mod, BURN) else - H.throw_alert("temp", /atom/movable/screen/alert/cold, 1) + H.throw_alert("temp", /atom/movable/screen/alert/shiver, 1) H.apply_damage(COLD_DAMAGE_LEVEL_1 * coldmod * H.physiology.cold_mod, BURN) // We are not to hot or cold, remove status and moods @@ -1863,6 +1972,16 @@ GLOBAL_LIST_EMPTY(roundstart_races) SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "cold") SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "hot") +/datum/species/proc/calculate_burn_damage(mob/living/carbon/human/current_human) + var/burn_damage = 0 + var/firemodifier = current_human.fire_stacks / 50 + if (!current_human.on_fire) // We are not on fire, reduce the modifier + firemodifier = min(firemodifier, 0) + + // this can go below 5 at log 2.5 + burn_damage = max(log(2 - firemodifier, (current_human.bodytemperature - current_human.get_body_temp_normal(apply_change=FALSE))) - 5,0) + return burn_damage + /// Handle the air pressure of the environment /datum/species/proc/handle_environment_pressure(datum/gas_mixture/environment, mob/living/carbon/human/H) var/pressure = environment.return_pressure() @@ -1960,6 +2079,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) // Apply the natural stabilization changes H.adjust_bodytemperature(natural_change) + return natural_change ////////// // FIRE // @@ -2264,3 +2384,5 @@ GLOBAL_LIST_EMPTY(roundstart_races) /datum/species/proc/get_harm_descriptors() return + +#undef MINIMUM_MOLS_TO_HARM diff --git a/code/modules/mob/living/carbon/human/species_types/IPC.dm b/code/modules/mob/living/carbon/human/species_types/IPC.dm index 9410111c9e4f..20d3f81aa38d 100644 --- a/code/modules/mob/living/carbon/human/species_types/IPC.dm +++ b/code/modules/mob/living/carbon/human/species_types/IPC.dm @@ -5,7 +5,7 @@ species_age_min = 0 species_age_max = 300 species_traits = list(NOTRANSSTING,NOEYESPRITES,NO_DNA_COPY,TRAIT_EASYDISMEMBER,NOZOMBIE,MUTCOLORS,REVIVESBYHEALING,NOHUSK,NOMOUTH,NO_BONES) //all of these + whatever we inherit from the real species - inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_VIRUSIMMUNE,TRAIT_NOBREATH,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_LIMBATTACHMENT) + inherent_traits = list(TRAIT_RESISTCOLD,TRAIT_VIRUSIMMUNE,TRAIT_NOBREATH,TRAIT_RADIMMUNE,TRAIT_GENELESS,TRAIT_LIMBATTACHMENT, TRAIT_METALLIC) inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID mutantbrain = /obj/item/organ/brain/mmi_holder/posibrain mutanteyes = /obj/item/organ/eyes/robotic diff --git a/code/modules/mob/living/carbon/human/species_types/ethereal.dm b/code/modules/mob/living/carbon/human/species_types/ethereal.dm index 27362b348cab..b91559edb0ae 100644 --- a/code/modules/mob/living/carbon/human/species_types/ethereal.dm +++ b/code/modules/mob/living/carbon/human/species_types/ethereal.dm @@ -30,6 +30,9 @@ bodytemp_heat_damage_limit = FIRE_MINIMUM_TEMPERATURE_TO_SPREAD // about 150C // Cold temperatures hurt faster as it is harder to move with out the heat energy bodytemp_cold_damage_limit = (T20C - 10) // about 10c + + max_temp_comfortable = HUMAN_BODYTEMP_NORMAL + 100 + hair_color = "fixedmutcolor" hair_alpha = 140 mutant_bodyparts = list("elzu_horns", "tail_elzu") diff --git a/code/modules/mob/living/carbon/human/species_types/kepori.dm b/code/modules/mob/living/carbon/human/species_types/kepori.dm index 7e76fff79c1e..39e3cbc3d07a 100644 --- a/code/modules/mob/living/carbon/human/species_types/kepori.dm +++ b/code/modules/mob/living/carbon/human/species_types/kepori.dm @@ -24,6 +24,8 @@ bodytemp_normal = HUMAN_BODYTEMP_NORMAL + 30 bodytemp_heat_damage_limit = HUMAN_BODYTEMP_HEAT_DAMAGE_LIMIT + 30 bodytemp_cold_damage_limit = HUMAN_BODYTEMP_COLD_DAMAGE_LIMIT + 30 + max_temp_comfortable = HUMAN_BODYTEMP_NORMAL + 40 + min_temp_comfortable = HUMAN_BODYTEMP_NORMAL - 3 mutanttongue = /obj/item/organ/tongue/kepori species_language_holder = /datum/language_holder/kepori var/datum/action/innate/keptackle/keptackle diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index c34a70b3afde..9d539007df4e 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -48,6 +48,9 @@ // Lizards are coldblooded and can stand a greater temperature range than humans bodytemp_heat_damage_limit = HUMAN_BODYTEMP_HEAT_DAMAGE_LIMIT + 20 // This puts lizards 10 above lavaland max heat for ash lizards. bodytemp_cold_damage_limit = HUMAN_BODYTEMP_COLD_DAMAGE_LIMIT - 10 + + max_temp_comfortable = HUMAN_BODYTEMP_NORMAL + 25 + min_temp_comfortable = HUMAN_BODYTEMP_NORMAL - 3 loreblurb = "The Sarathi are a cold-blooded reptilian species originating from the planet Kalixcis, where they evolved alongside the Elzuosa. Kalixcian culture places no importance on blood-bonds, and those from it tend to consider their family anyone they are sufficiently close to, and choose their own names." ass_image = 'icons/ass/asslizard.png' @@ -91,7 +94,7 @@ /// Lizards are cold blooded and do not stabilize body temperature naturally /datum/species/lizard/natural_bodytemperature_stabilization(datum/gas_mixture/environment, mob/living/carbon/human/H) - return + return 0 /datum/species/lizard/random_name(gender,unique,lastname) if(unique) diff --git a/code/modules/mob/living/carbon/human/species_types/mothmen.dm b/code/modules/mob/living/carbon/human/species_types/mothmen.dm index 91169299afba..f8495f783e36 100644 --- a/code/modules/mob/living/carbon/human/species_types/mothmen.dm +++ b/code/modules/mob/living/carbon/human/species_types/mothmen.dm @@ -1,5 +1,5 @@ /datum/species/moth - name = "\improper Mothperson" + name = "\improper Moth" id = SPECIES_MOTH default_color = "00FF00" species_traits = list(LIPS, NOEYESPRITES, TRAIT_ANTENNAE, HAIR, EMOTE_OVERLAY) diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm index daa645a662a8..d5ce34ca412f 100644 --- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm @@ -4,7 +4,10 @@ id = SPECIES_POD default_color = "59CE00" species_traits = list(MUTCOLORS,EYECOLOR) - inherent_traits = list(TRAIT_ALWAYS_CLEAN) + inherent_traits = list( + TRAIT_ALWAYS_CLEAN, + TRAIT_PLANT_SAFE, + ) inherent_factions = list("plants", "vines") fixed_mut_color = "59CE00" attack_verb = "slash" diff --git a/code/modules/mob/living/carbon/human/species_types/snail.dm b/code/modules/mob/living/carbon/human/species_types/snail.dm index 4d9d41bd411d..5f47ab21e479 100644 --- a/code/modules/mob/living/carbon/human/species_types/snail.dm +++ b/code/modules/mob/living/carbon/human/species_types/snail.dm @@ -12,7 +12,6 @@ siemens_coeff = 2 //snails are mostly water changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | RACE_SWAP sexes = FALSE //snails are hermaphrodites - var/shell_type = /obj/item/storage/backpack/snail mutanteyes = /obj/item/organ/eyes/snail mutanttongue = /obj/item/organ/tongue/snail @@ -41,38 +40,8 @@ /datum/species/snail/on_species_gain(mob/living/carbon/C, datum/species/old_species, pref_load) . = ..() - var/obj/item/storage/backpack/bag = C.get_item_by_slot(ITEM_SLOT_BACK) - if(!istype(bag, /obj/item/storage/backpack/snail)) - if(C.dropItemToGround(bag)) //returns TRUE even if its null - C.equip_to_slot_or_del(new /obj/item/storage/backpack/snail(C), ITEM_SLOT_BACK) C.AddElement(/datum/element/snailcrawl) /datum/species/snail/on_species_loss(mob/living/carbon/C) . = ..() C.RemoveElement(/datum/element/snailcrawl) - var/obj/item/storage/backpack/bag = C.get_item_by_slot(ITEM_SLOT_BACK) - if(istype(bag, /obj/item/storage/backpack/snail)) - bag.emptyStorage() - C.temporarilyRemoveItemFromInventory(bag, TRUE) - qdel(bag) - -/obj/item/storage/backpack/snail - name = "snail shell" - desc = "Worn by snails as armor and storage compartment." - icon_state = "snailshell" - item_state = "snailshell" - lefthand_file = 'icons/mob/inhands/equipment/backpack_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/backpack_righthand.dmi' - armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 50) - max_integrity = 200 - resistance_flags = FIRE_PROOF | ACID_PROOF - -/obj/item/storage/backpack/snail/dropped(mob/user, silent) - . = ..() - emptyStorage() - if(!QDELETED(src)) - qdel(src) - -/obj/item/storage/backpack/snail/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_NODROP, "snailshell") diff --git a/code/modules/mob/living/carbon/human/species_types/vox.dm b/code/modules/mob/living/carbon/human/species_types/vox.dm index b9cc8306762e..1a73860ab29f 100644 --- a/code/modules/mob/living/carbon/human/species_types/vox.dm +++ b/code/modules/mob/living/carbon/human/species_types/vox.dm @@ -3,7 +3,6 @@ name = "\improper Vox" id = SPECIES_VOX default_color = "6060FF" - species_age_min = 17 species_age_max = 280 species_traits = list(EYECOLOR, NO_UNDERWEAR) mutant_bodyparts = list("vox_head_quills", "vox_neck_quills") @@ -12,7 +11,7 @@ disliked_food = GRAIN liked_food = MEAT changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | ERT_SPAWN | RACE_SWAP | SLIME_EXTRACT - loreblurb = "Vox test" + loreblurb = "Vox are a big bird-like species with quills, much larger and much more long-lasting than other species. Sadly, not much else is known." attack_verb = "slash" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' @@ -27,6 +26,9 @@ bodytemp_cold_divisor = VOX_BODYTEMP_COLD_DIVISOR bodytemp_autorecovery_min = VOX_BODYTEMP_AUTORECOVERY_MIN + max_temp_comfortable = HUMAN_BODYTEMP_NORMAL + 20 + min_temp_comfortable = HUMAN_BODYTEMP_NORMAL - 20 + bodytype = BODYTYPE_VOX species_chest = /obj/item/bodypart/chest/vox diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 0f3ab70e4034..1400d2c641ca 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -150,8 +150,8 @@ There are several things that need to be remembered: else if(dna.species.bodytype & BODYTYPE_KEPORI) if(U.supports_variations & KEPORI_VARIATION) icon_file = KEPORI_UNIFORM_PATH - if(U.kepoi_override_icon) - icon_file = U.kepoi_override_icon + if(U.kepori_override_icon) + icon_file = U.kepori_override_icon else handled_by_bodytype = TRUE @@ -243,8 +243,8 @@ There are several things that need to be remembered: else if(dna.species.bodytype & BODYTYPE_KEPORI) if(I.supports_variations & KEPORI_VARIATION) icon_file = KEPORI_GLOVES_PATH - if(I.kepoi_override_icon) - icon_file = I.kepoi_override_icon + if(I.kepori_override_icon) + icon_file = I.kepori_override_icon else handled_by_bodytype = TRUE @@ -295,8 +295,8 @@ There are several things that need to be remembered: else if(dna.species.bodytype & BODYTYPE_KEPORI) if(I.supports_variations & KEPORI_VARIATION) icon_file = KEPORI_GLASSES_PATH - if(I.kepoi_override_icon) - icon_file = I.kepoi_override_icon + if(I.kepori_override_icon) + icon_file = I.kepori_override_icon else handled_by_bodytype = TRUE @@ -346,8 +346,8 @@ There are several things that need to be remembered: else if(dna.species.bodytype & BODYTYPE_KEPORI) if(I.supports_variations & KEPORI_VARIATION) icon_file = KEPORI_EARS_PATH - if(I.kepoi_override_icon) - icon_file = I.kepoi_override_icon + if(I.kepori_override_icon) + icon_file = I.kepori_override_icon else handled_by_bodytype = TRUE @@ -407,8 +407,8 @@ There are several things that need to be remembered: else if(dna.species.bodytype & BODYTYPE_KEPORI) if(I.supports_variations & KEPORI_VARIATION) icon_file = KEPORI_SHOES_PATH - if(I.kepoi_override_icon) - icon_file = I.kepoi_override_icon + if(I.kepori_override_icon) + icon_file = I.kepori_override_icon else handled_by_bodytype = TRUE @@ -507,8 +507,8 @@ There are several things that need to be remembered: else if(dna.species.bodytype & BODYTYPE_KEPORI) if(I.supports_variations & KEPORI_VARIATION) icon_file = KEPORI_HEAD_PATH - if(I.kepoi_override_icon) - icon_file = I.kepoi_override_icon + if(I.kepori_override_icon) + icon_file = I.kepori_override_icon else handled_by_bodytype = TRUE @@ -557,8 +557,8 @@ There are several things that need to be remembered: else if(dna.species.bodytype & BODYTYPE_KEPORI) if(I.supports_variations & KEPORI_VARIATION) icon_file = KEPORI_BELT_PATH - if(I.kepoi_override_icon) - icon_file = I.kepoi_override_icon + if(I.kepori_override_icon) + icon_file = I.kepori_override_icon else handled_by_bodytype = TRUE @@ -615,8 +615,8 @@ There are several things that need to be remembered: else if(dna.species.bodytype & BODYTYPE_KEPORI) if(I.supports_variations & KEPORI_VARIATION) icon_file = KEPORI_SUIT_PATH - if(I.kepoi_override_icon) - icon_file = I.kepoi_override_icon + if(I.kepori_override_icon) + icon_file = I.kepori_override_icon else handled_by_bodytype = TRUE @@ -698,8 +698,8 @@ There are several things that need to be remembered: else if(dna.species.bodytype & BODYTYPE_KEPORI) if(I.supports_variations & KEPORI_VARIATION) icon_file = KEPORI_MASK_PATH - if(I.kepoi_override_icon) - icon_file = I.kepoi_override_icon + if(I.kepori_override_icon) + icon_file = I.kepori_override_icon else handled_by_bodytype = TRUE @@ -739,15 +739,16 @@ There are several things that need to be remembered: update_hud_neck(I) + if(!(ITEM_SLOT_NECK in check_obscured_slots())) - if(dna.species.bodytype & BODYTYPE_VOX) // there is neither a vox or kepori neck path, we just tell it to greyscale no matter what -// if(I.supports_variations & VOX_VARIATION) -// icon_file = VOX_NECK_PATH -// if(I.vox_override_icon) -// icon_file = I.vox_override_icon -// else - handled_by_bodytype = TRUE + if(dna.species.bodytype & BODYTYPE_VOX) // there is no kepori neck path, we just tell it to greyscale no matter what + if(I.supports_variations & VOX_VARIATION) + icon_file = VOX_NECK_PATH + if(I.vox_override_icon) + icon_file = I.vox_override_icon + else + handled_by_bodytype = TRUE else if(dna.species.bodytype & BODYTYPE_KEPORI) // if(I.supports_variations & KEPORI_VARIATION) @@ -798,13 +799,15 @@ There are several things that need to be remembered: handled_by_bodytype = TRUE else if(dna.species.bodytype & BODYTYPE_KEPORI) -// if(I.supports_variations & KEPORI_VARIATION) -// icon_file = KEPORI_BACK_PATH -// else - handled_by_bodytype = TRUE + if(I.supports_variations & KEPORI_VARIATION) + icon_file = KEPORI_BACK_PATH + if(I.kepori_override_icon) + icon_file = I.kepori_override_icon + else + handled_by_bodytype = TRUE if(!icon_exists(icon_file, RESOLVE_ICON_STATE(I))) - icon_file = DEFAULT_BACK_PATH + icon_file = I.mob_overlay_icon ? I.mob_overlay_icon : DEFAULT_BACK_PATH handled_by_bodytype = TRUE var/use_autogen = handled_by_bodytype ? dna.species : null diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm index d5b97a942da2..9525ebd6ec9b 100644 --- a/code/modules/mob/living/carbon/inventory.dm +++ b/code/modules/mob/living/carbon/inventory.dm @@ -14,6 +14,30 @@ return legcuffed return null +/mob/living/carbon/get_slot_by_item(obj/item/looking_for) + if(looking_for == back) + return ITEM_SLOT_BACK + + if(back && (looking_for in back)) + return ITEM_SLOT_BACKPACK + + if(looking_for == wear_mask) + return ITEM_SLOT_MASK + + if(looking_for == wear_neck) + return ITEM_SLOT_NECK + + if(looking_for == head) + return ITEM_SLOT_HEAD + + if(looking_for == handcuffed) + return ITEM_SLOT_HANDCUFFED + + if(looking_for == legcuffed) + return ITEM_SLOT_LEGCUFFED + + return ..() + /mob/living/carbon/proc/equip_in_one_of_slots(obj/item/I, list/slots, qdel_on_fail = 1) for(var/slot in slots) if(equip_to_slot_if_possible(I, slots[slot], qdel_on_fail = 0, disable_warning = TRUE)) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index c5145600bbf8..04a870684ccf 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -658,6 +658,7 @@ All effects don't start immediately, but rather get worse over time; the rate is if(bodytemperature >= min_temp && bodytemperature <= max_temp) bodytemperature = clamp(bodytemperature + amount,min_temp,max_temp) + return amount ///////// diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm index c80c9a821fd0..34bd7dd8632c 100644 --- a/code/modules/mob/living/carbon/update_icons.dm +++ b/code/modules/mob/living/carbon/update_icons.dm @@ -211,6 +211,9 @@ //eg: ammo counters, primed grenade flashing, etc. //"icon_file" is used automatically for inhands etc. to make sure it gets the right inhand file /obj/item/proc/worn_overlays(isinhands = FALSE, icon_file) + SHOULD_CALL_PARENT(TRUE) + RETURN_TYPE(/list) + . = list() diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index 6615edb051f0..0687d90da75b 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -1,4 +1,4 @@ -/mob/living/gib(no_brain, no_organs, no_bodyparts) +/mob/living/gib(no_brain, no_organs, no_bodyparts, safe_gib = FALSE) var/prev_lying = lying_angle if(stat != DEAD) death(TRUE) @@ -12,7 +12,8 @@ spread_bodyparts(no_brain, no_organs) spawn_gibs(no_bodyparts) - qdel(src) + if(!safe_gib) + qdel(src) /mob/living/proc/gib_animation() return diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index a25025294497..c054b7d50bf4 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -122,7 +122,7 @@ return /mob/living/proc/handle_gravity() - var/gravity = mob_has_gravity() + var/gravity = has_gravity() update_gravity(gravity) if(gravity > STANDARD_GRAVITY) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 269c74a837bd..76800ce87b1f 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -9,6 +9,7 @@ diag_hud.add_to_hud(src) faction += "[REF(src)]" GLOB.mob_living_list += src + SSpoints_of_interest.make_point_of_interest(src) if(speed) update_living_varspeed() @@ -97,6 +98,7 @@ if(m_intent == MOVE_INTENT_WALK) return TRUE + SEND_SIGNAL(src, COMSIG_LIVING_MOB_BUMP, M) //Even if we don't push/swap places, we "touched" them, so spread fire spreadFire(M) @@ -831,7 +833,7 @@ return pick("trails_1", "trails_2") /mob/living/experience_pressure_difference(pressure_difference, direction, pressure_resistance_prob_delta = 0) - if(buckled) + if(buckled || mob_negates_gravity()) return if(client && client.move_delay >= world.time + world.tick_lag*2) pressure_resistance_prob_delta -= 30 @@ -1131,24 +1133,6 @@ /mob/living/carbon/alien/update_stamina() return -/mob/living/proc/owns_soul() - if(mind) - return mind.soulOwner == mind - return TRUE - -/mob/living/proc/return_soul() - hellbound = 0 - if(mind) - var/datum/antagonist/devil/devilInfo = mind.soulOwner.has_antag_datum(/datum/antagonist/devil) - if(devilInfo)//Not sure how this could be null, but let's just try anyway. - devilInfo.remove_soul(mind) - mind.soulOwner = mind - -/mob/living/proc/check_acedia() - if(mind && mind.has_objective(/datum/objective/sintouched/acedia)) - return TRUE - return FALSE - /mob/living/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, force, gentle = FALSE, quickstart = TRUE) stop_pulling() . = ..() diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 2ed00efe2e4b..69cc19760dda 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -392,32 +392,6 @@ gib() return 20 -/mob/living/narsie_act() - if(status_flags & GODMODE || QDELETED(src)) - return - - if(GLOB.cult_narsie && GLOB.cult_narsie.souls_needed[src]) - GLOB.cult_narsie.souls_needed -= src - GLOB.cult_narsie.souls += 1 - if((GLOB.cult_narsie.souls == GLOB.cult_narsie.soul_goal) && (GLOB.cult_narsie.resolved == FALSE)) - GLOB.cult_narsie.resolved = TRUE - sound_to_playing_players('sound/machines/alarm.ogg') - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(cult_ending_helper), 1), 120) - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(ending_helper)), 270) - if(client) - makeNewConstruct(/mob/living/simple_animal/hostile/construct/harvester, src, cultoverride = TRUE) - else - switch(rand(1, 3)) - if(1) - new /mob/living/simple_animal/hostile/construct/juggernaut/hostile(get_turf(src)) - if(2) - new /mob/living/simple_animal/hostile/construct/wraith/hostile(get_turf(src)) - if(3) - new /mob/living/simple_animal/hostile/construct/artificer/hostile(get_turf(src)) - spawn_dust() - gib() - return TRUE - //called when the mob receives a bright flash /mob/living/proc/flash_act(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /atom/movable/screen/fullscreen/flash) if(HAS_TRAIT(src, TRAIT_NOFLASH)) diff --git a/code/modules/mob/living/silicon/ai/ai_defense.dm b/code/modules/mob/living/silicon/ai/ai_defense.dm index d6cb89bab492..5134b8b1c79a 100644 --- a/code/modules/mob/living/silicon/ai/ai_defense.dm +++ b/code/modules/mob/living/silicon/ai/ai_defense.dm @@ -20,13 +20,6 @@ /mob/living/silicon/ai/attack_slime(mob/living/simple_animal/slime/user) return //immune to slimes -/mob/living/silicon/ai/blob_act(obj/structure/blob/B) - if (stat != DEAD) - adjustBruteLoss(60) - updatehealth() - return 1 - return 0 - /mob/living/silicon/ai/emp_act(severity) . = ..() if(. & EMP_PROTECT_SELF) diff --git a/code/modules/mob/living/silicon/damage_procs.dm b/code/modules/mob/living/silicon/damage_procs.dm index 80c643e0ceef..9813ac88d43e 100644 --- a/code/modules/mob/living/silicon/damage_procs.dm +++ b/code/modules/mob/living/silicon/damage_procs.dm @@ -1,5 +1,5 @@ -/mob/living/silicon/apply_damage(damage = 0,damagetype = BRUTE, def_zone = null, blocked = FALSE, forced = FALSE, break_modifier = 1, sharpness = FALSE) +/mob/living/silicon/apply_damage(damage = 0,damagetype = BRUTE, def_zone = null, blocked = FALSE, forced = FALSE, spread_damage = FALSE, break_modifier = 1, sharpness = FALSE) var/hit_percent = (100-blocked)/100 if((!damage || (!forced && hit_percent <= 0))) return 0 diff --git a/code/modules/mob/living/silicon/laws.dm b/code/modules/mob/living/silicon/laws.dm index 30c7cd435068..5f14b72596ac 100644 --- a/code/modules/mob/living/silicon/laws.dm +++ b/code/modules/mob/living/silicon/laws.dm @@ -19,11 +19,6 @@ addtimer(CALLBACK(src, PROC_REF(deadchat_lawchange)), 0) last_lawchange_announce = world.time -/mob/living/silicon/proc/set_law_sixsixsix(law, announce = TRUE) - laws_sanity_check() - laws.set_law_sixsixsix(law) - post_lawchange(announce) - /mob/living/silicon/proc/set_zeroth_law(law, law_borg, announce = TRUE) laws_sanity_check() laws.set_zeroth_law(law, law_borg) @@ -93,8 +88,3 @@ laws_sanity_check() laws.clear_zeroth_law(force) post_lawchange(announce) - -/mob/living/silicon/proc/clear_law_sixsixsix(force, announce = TRUE) - laws_sanity_check() - laws.clear_law_sixsixsix(force) - post_lawchange(announce) diff --git a/code/modules/mob/living/silicon/login.dm b/code/modules/mob/living/silicon/login.dm index 559ad42b1768..982814d194d2 100644 --- a/code/modules/mob/living/silicon/login.dm +++ b/code/modules/mob/living/silicon/login.dm @@ -1,6 +1,4 @@ /mob/living/silicon/Login() - if(mind && SSticker.mode) - SSticker.mode.remove_cultist(mind, 0, 0) return ..() diff --git a/code/modules/mob/living/silicon/pai/pai_defense.dm b/code/modules/mob/living/silicon/pai/pai_defense.dm index 4a3e284addd6..ecdf3355e5aa 100644 --- a/code/modules/mob/living/silicon/pai/pai_defense.dm +++ b/code/modules/mob/living/silicon/pai/pai_defense.dm @@ -1,7 +1,3 @@ - -/mob/living/silicon/pai/blob_act(obj/structure/blob/B) - return FALSE - /mob/living/silicon/pai/emp_act(severity) . = ..() if(. & EMP_PROTECT_SELF) diff --git a/code/modules/mob/living/silicon/robot/laws.dm b/code/modules/mob/living/silicon/robot/laws.dm index df62df082751..1fc33e9dcdd0 100644 --- a/code/modules/mob/living/silicon/robot/laws.dm +++ b/code/modules/mob/living/silicon/robot/laws.dm @@ -40,12 +40,6 @@ var/datum/ai_laws/master = connected_ai ? connected_ai.laws : null var/temp if (master) - laws.devillaws.len = master.devillaws.len - for (var/index = 1, index <= master.devillaws.len, index++) - temp = master.devillaws[index] - if (length(temp) > 0) - laws.devillaws[index] = temp - laws.ion.len = master.ion.len for (var/index = 1, index <= master.ion.len, index++) temp = master.ion[index] diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm index 376b4ddcca4b..e2eec65479da 100644 --- a/code/modules/mob/living/silicon/robot/robot_defense.dm +++ b/code/modules/mob/living/silicon/robot/robot_defense.dm @@ -391,14 +391,6 @@ GLOBAL_LIST_INIT(blacklisted_borg_hats, typecacheof(list( //Hats that don't real laws.associate(src) update_icons() - -/mob/living/silicon/robot/blob_act(obj/structure/blob/B) - if(stat != DEAD) - adjustBruteLoss(30) - else - gib() - return TRUE - /mob/living/silicon/robot/ex_act(severity, target) switch(severity) if(1) diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 27819d97cf15..f9bb15bb5941 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -782,7 +782,7 @@ basic_modules = list( /obj/item/assembly/flash/cyborg, /obj/item/reagent_containers/glass/beaker/large, //I know a shaker is more appropiate but this is for ease of identification - /obj/item/reagent_containers/food/condiment/enzyme, + /obj/item/reagent_containers/condiment/enzyme, /obj/item/pen, /obj/item/toy/crayon/spraycan/borg, /obj/item/extinguisher/mini, @@ -806,7 +806,7 @@ /obj/item/robot_module/butler/respawn_consumable(mob/living/silicon/robot/R, coeff = 1) ..() - var/obj/item/reagent_containers/O = locate(/obj/item/reagent_containers/food/condiment/enzyme) in basic_modules + var/obj/item/reagent_containers/O = locate(/obj/item/reagent_containers/condiment/enzyme) in basic_modules if(O) O.reagents.add_reagent(/datum/reagent/consumable/enzyme, 2 * coeff) diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 347ec71e84e4..7da3e76d03ff 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -32,7 +32,6 @@ var/lawcheck[1] var/ioncheck[1] var/hackedcheck[1] - var/devillawcheck[5] var/sensors_on = 0 var/med_hud = DATA_HUD_MEDICAL_ADVANCED //Determines the med hud to use @@ -206,16 +205,6 @@ hackedcheck[L] = "Yes" checklaws() - if (href_list["lawdevil"]) // Toggling whether or not a law gets stated by the State Laws verb --NeoFite - var/L = text2num(href_list["lawdevil"]) - switch(devillawcheck[L]) - if ("Yes") - devillawcheck[L] = "No" - if ("No") - devillawcheck[L] = "Yes" - checklaws() - - if (href_list["laws"]) // With how my law selection code works, I changed statelaws from a verb to a proc, and call it through my law selection panel. --NeoFite statelaws() @@ -234,13 +223,6 @@ var/number = 1 sleep(10) - if (laws.devillaws && laws.devillaws.len) - for(var/index = 1, index <= laws.devillaws.len, index++) - if (force || devillawcheck[index] == "Yes") - say("[radiomod] 666. [laws.devillaws[index]]") - sleep(10) - - if (laws.zeroth) if (force || lawcheck[1] == "Yes") say("[radiomod] 0. [laws.zeroth]") @@ -286,12 +268,6 @@ var/list = "Which laws do you want to include when stating them for the crew?

    " - if (laws.devillaws && laws.devillaws.len) - for(var/index = 1, index <= laws.devillaws.len, index++) - if (!devillawcheck[index]) - devillawcheck[index] = "No" - list += {"[devillawcheck[index]] 666: [laws.devillaws[index]]
    "} - if (laws.zeroth) if (!lawcheck[1]) lawcheck[1] = "No" //Given Law 0's usual nature, it defaults to NOT getting reported. --NeoFite diff --git a/code/modules/mob/living/simple_animal/animal_defense.dm b/code/modules/mob/living/simple_animal/animal_defense.dm index aa6a0c368537..f6644bfbe6a7 100644 --- a/code/modules/mob/living/simple_animal/animal_defense.dm +++ b/code/modules/mob/living/simple_animal/animal_defense.dm @@ -142,10 +142,6 @@ bloss = bloss / 1.5 adjustBruteLoss(bloss) -/mob/living/simple_animal/blob_act(obj/structure/blob/B) - adjustBruteLoss(20) - return - /mob/living/simple_animal/do_attack_animation(atom/A, visual_effect_icon, used_item, no_effect) if(!no_effect && !visual_effect_icon && melee_damage_upper) if(melee_damage_upper < 10) diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm index 5229967f0374..665e75da9cef 100644 --- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm +++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm @@ -170,7 +170,7 @@ to_chat(user, "Please close the access panel before locking it.") else to_chat(user, "\The [src] doesn't seem to respect your authority.") - else if(istype(W, /obj/item/kitchen/knife) && user.a_intent != INTENT_HARM) + else if(istype(W, /obj/item/melee/knife) && user.a_intent != INTENT_HARM) to_chat(user, "You start attaching \the [W] to \the [src]...") if(do_after(user, 25, target = src)) deputize(W, user) @@ -235,6 +235,9 @@ if(!target && trash) //Then for trash. target = scan(/obj/item/trash) + if(!target && trash) //Then for Chainsmokers. + target = scan(/obj/item/cigbutt) + if(!target && trash) //Search for dead mices. target = scan(/obj/item/reagent_containers/food/snacks/deadmouse) @@ -317,6 +320,7 @@ target_types += list( /obj/item/trash, /obj/item/reagent_containers/food/snacks/deadmouse, + /obj/item/cigbutt, ) target_types = typecacheof(target_types) @@ -340,7 +344,7 @@ else if(istype(A, /obj/item) || istype(A, /obj/effect/decal/remains)) visible_message("[src] sprays hydrofluoric acid at [A]!") playsound(src, 'sound/effects/spray2.ogg', 50, TRUE, -6) - A.acid_act(75, 10) + A.acid_act(100, 10) target = null else if(istype(A, /mob/living/simple_animal/hostile/cockroach) || istype(A, /mob/living/simple_animal/mouse)) var/mob/living/simple_animal/M = target diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm deleted file mode 100644 index df3cfe349808..000000000000 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ /dev/null @@ -1,497 +0,0 @@ -/mob/living/simple_animal/hostile/construct - name = "Construct" - real_name = "Construct" - desc = "" - gender = NEUTER - mob_biotypes = NONE - speak_emote = list("hisses") - response_help_continuous = "thinks better of touching" - response_help_simple = "think better of touching" - response_disarm_continuous = "flails at" - response_disarm_simple = "flail at" - response_harm_continuous = "punches" - response_harm_simple = "punch" - speak_chance = 1 - icon = 'icons/mob/cult.dmi' - speed = 0 - a_intent = INTENT_HARM - stop_automated_movement = 1 - status_flags = CANPUSH - attack_sound = 'sound/weapons/punch1.ogg' - see_in_dark = 7 - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 0, CLONE = 0, STAMINA = 0, OXY = 0) - 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) - minbodytemp = 0 - maxbodytemp = INFINITY - healable = 0 - faction = list("cult") - movement_type = FLYING - pressure_resistance = 100 - unique_name = 1 - AIStatus = AI_OFF //normal constructs don't have AI - loot = list(/obj/item/ectoplasm) - del_on_death = TRUE - initial_language_holder = /datum/language_holder/construct - deathmessage = "collapses in a shattered heap." - hud_type = /datum/hud/constructs - var/list/construct_spells = list() - var/playstyle_string = "You are a generic construct! Your job is to not exist, and you should probably adminhelp this." - var/master = null - var/seeking = FALSE - var/can_repair_constructs = FALSE - var/can_repair_self = FALSE - var/runetype - var/datum/action/innate/cult/create_rune/our_rune - var/holy = FALSE - -/mob/living/simple_animal/hostile/construct/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT) - update_health_hud() - var/spellnum = 1 - for(var/spell in construct_spells) - var/the_spell = new spell(null) - AddSpell(the_spell) - var/obj/effect/proc_holder/spell/S = mob_spell_list[spellnum] - var/pos = 2+spellnum*31 - if(construct_spells.len >= 4) - pos -= 31*(construct_spells.len - 4) - S.action.button.screen_loc = "6:[pos],4:-2" - S.action.button.moved = "6:[pos],4:-2" - spellnum++ - if(runetype) - our_rune = new runetype(src) - our_rune.Grant(src) - var/pos = 2+spellnum*31 - our_rune.button.screen_loc = "6:[pos],4:-2" - our_rune.button.moved = "6:[pos],4:-2" - add_overlay("glow_[icon_state][holy]") - -/mob/living/simple_animal/hostile/construct/Destroy() - QDEL_NULL(our_rune) - return ..() - -/mob/living/simple_animal/hostile/construct/Login() - . = ..() - if(!. || !client) - return FALSE - to_chat(src, playstyle_string) - -/mob/living/simple_animal/hostile/construct/examine(mob/user) - var/t_He = p_they(TRUE) - var/t_s = p_s() - . = list("This is [icon2html(src, user)] \a [src]!\n[desc]") - if(health < maxHealth) - if(health >= maxHealth/2) - . += "[t_He] look[t_s] slightly dented." - else - . += "[t_He] look[t_s] severely dented!" - . += "" - -/mob/living/simple_animal/hostile/construct/attack_animal(mob/living/simple_animal/M) - if(isconstruct(M)) //is it a construct? - var/mob/living/simple_animal/hostile/construct/C = M - if(!C.can_repair_constructs || (C == src && !C.can_repair_self)) - return ..() - if(holy != C.holy) - return ..() - if(health < maxHealth) - adjustHealth(-5) - if(src != M) - Beam(M,icon_state="sendbeam",time=4) - M.visible_message( - "[M] repairs some of \the [src]'s dents.", - "You repair some of [src]'s dents, leaving [src] at [health]/[maxHealth] health.") - else - M.visible_message( - "[M] repairs some of [p_their()] own dents.", - "You repair some of your own dents, leaving you at [M.health]/[M.maxHealth] health.") - else - if(src != M) - to_chat(M, "You cannot repair [src]'s dents, as [p_they()] [p_have()] none!") - else - to_chat(M, "You cannot repair your own dents, as you have none!") - else if(src != M) - return ..() - -/mob/living/simple_animal/hostile/construct/narsie_act() - return - -/mob/living/simple_animal/hostile/construct/electrocute_act(shock_damage, source, siemens_coeff = 1, flags = NONE) - return 0 - -/mob/living/simple_animal/hostile/construct/adjustHealth(amount, updating_health = TRUE, forced = FALSE) - . = ..() - if(updating_health) - update_health_hud() - -/////////////////Juggernaut/////////////// -/mob/living/simple_animal/hostile/construct/juggernaut - name = "Juggernaut" - real_name = "Juggernaut" - desc = "A massive, armored construct built to spearhead attacks and soak up enemy fire." - icon_state = "juggernaut" - icon_living = "juggernaut" - maxHealth = 150 - health = 150 - response_harm_continuous = "harmlessly punches" - response_harm_simple = "harmlessly punch" - harm_intent_damage = 0 - obj_damage = 90 - melee_damage_lower = 25 - melee_damage_upper = 25 - attack_verb_continuous = "smashes their armored gauntlet into" - attack_verb_simple = "smash your armored gauntlet into" - speed = 2.5 - environment_smash = ENVIRONMENT_SMASH_WALLS - attack_sound = 'sound/weapons/punch3.ogg' - status_flags = 0 - mob_size = MOB_SIZE_LARGE - force_threshold = 10 - construct_spells = list(/obj/effect/proc_holder/spell/targeted/forcewall/cult, - /obj/effect/proc_holder/spell/targeted/projectile/dumbfire/juggernaut) - runetype = /datum/action/innate/cult/create_rune/wall - playstyle_string = "You are a Juggernaut. Though slow, your shell can withstand heavy punishment, \ - create shield walls, rip apart enemies and walls alike, and even deflect energy weapons." - -/mob/living/simple_animal/hostile/construct/juggernaut/hostile //actually hostile, will move around, hit things - AIStatus = AI_ON - environment_smash = ENVIRONMENT_SMASH_STRUCTURES //only token destruction, don't smash the cult wall NO STOP - -/mob/living/simple_animal/hostile/construct/juggernaut/bullet_act(obj/projectile/P) - if(istype(P, /obj/projectile/energy) || istype(P, /obj/projectile/beam)) - var/reflectchance = 40 - round(P.damage/3) - if(prob(reflectchance)) - apply_damage(P.damage * 0.5, P.damage_type) - visible_message("The [P.name] is reflected by [src]'s armored shell!", \ - "The [P.name] is reflected by your armored shell!") - - // Find a turf near or on the original location to bounce to - if(P.starting) - var/new_x = P.starting.x + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) - var/new_y = P.starting.y + pick(0, 0, -1, 1, -2, 2, -2, 2, -2, 2, -3, 3, -3, 3) - var/turf/curloc = get_turf(src) - - // redirect the projectile - P.original = locate(new_x, new_y, P.z) - P.starting = curloc - P.firer = src - P.yo = new_y - curloc.y - P.xo = new_x - curloc.x - var/new_angle_s = P.Angle + rand(120,240) - while(new_angle_s > 180) // Translate to regular projectile degrees - new_angle_s -= 360 - P.setAngle(new_angle_s) - - return BULLET_ACT_FORCE_PIERCE // complete projectile permutation - - return ..() - -//////////////////////////Angelic-Juggernaut//////////////////////////// -/mob/living/simple_animal/hostile/construct/juggernaut/angelic - holy = TRUE - loot = list(/obj/item/ectoplasm/angelic) - -/mob/living/simple_animal/hostile/construct/juggernaut/noncult - -////////////////////////Wraith///////////////////////////////////////////// -/mob/living/simple_animal/hostile/construct/wraith - name = "Wraith" - real_name = "Wraith" - desc = "A wicked, clawed shell constructed to assassinate enemies and sow chaos behind enemy lines." - icon_state = "wraith" - icon_living = "wraith" - maxHealth = 65 - health = 65 - melee_damage_lower = 20 - melee_damage_upper = 20 - retreat_distance = 2 //AI wraiths will move in and out of combat - attack_verb_continuous = "slashes" - attack_verb_simple = "slash" - attack_sound = 'sound/weapons/bladeslice.ogg' - construct_spells = list(/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift) - runetype = /datum/action/innate/cult/create_rune/tele - playstyle_string = "You are a Wraith. Though relatively fragile, you are fast, deadly, can phase through walls, and your attacks will lower the cooldown on phasing." - - var/attack_refund = 10 //1 second per attack - var/crit_refund = 50 //5 seconds when putting a target into critical - var/kill_refund = 250 //full refund on kills - -/mob/living/simple_animal/hostile/construct/wraith/AttackingTarget() //refund jaunt cooldown when attacking living targets - var/prev_stat - if(isliving(target) && !iscultist(target)) - var/mob/living/L = target - prev_stat = L.stat - - . = ..() - - if(. && isnum(prev_stat)) - var/mob/living/L = target - var/refund = 0 - if(QDELETED(L) || (L.stat == DEAD && prev_stat != DEAD)) //they're dead, you killed them - refund += kill_refund - else if(HAS_TRAIT(L, TRAIT_CRITICAL_CONDITION) && prev_stat == CONSCIOUS) //you knocked them into critical - refund += crit_refund - if(L.stat != DEAD && prev_stat != DEAD) - refund += attack_refund - for(var/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/S in mob_spell_list) - S.charge_counter = min(S.charge_counter + refund, S.charge_max) - -/mob/living/simple_animal/hostile/construct/wraith/hostile //actually hostile, will move around, hit things - AIStatus = AI_ON - -//////////////////////////Angelic-Wraith//////////////////////////// -/mob/living/simple_animal/hostile/construct/wraith/angelic - holy = TRUE - construct_spells = list(/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/angelic) - loot = list(/obj/item/ectoplasm/angelic) - -/mob/living/simple_animal/hostile/construct/wraith/noncult - -/////////////////////////////Artificer///////////////////////// -/mob/living/simple_animal/hostile/construct/artificer - name = "Artificer" - real_name = "Artificer" - desc = "A bulbous construct dedicated to building and maintaining the Cult of Nar'Sie's armies." - icon_state = "artificer" - icon_living = "artificer" - maxHealth = 50 - health = 50 - response_harm_continuous = "viciously beats" - response_harm_simple = "viciously beat" - harm_intent_damage = 5 - obj_damage = 60 - melee_damage_lower = 5 - melee_damage_upper = 5 - retreat_distance = 10 - minimum_distance = 10 //AI artificers will flee like fuck - attack_verb_continuous = "rams" - attack_verb_simple = "ram" - environment_smash = ENVIRONMENT_SMASH_WALLS - attack_sound = 'sound/weapons/punch2.ogg' - construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/wall, - /obj/effect/proc_holder/spell/aoe_turf/conjure/floor, - /obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone, - /obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser, - /obj/effect/proc_holder/spell/targeted/projectile/magic_missile/lesser) - runetype = /datum/action/innate/cult/create_rune/revive - playstyle_string = "You are an Artificer. You are incredibly weak and fragile, but you are able to construct fortifications, \ - - use magic missile, repair allied constructs, shades, and yourself (by clicking on them), \ - and, most important of all, create new constructs by producing soulstones to capture souls, \ - and shells to place those soulstones into." - can_repair_constructs = TRUE - can_repair_self = TRUE - -/mob/living/simple_animal/hostile/construct/artificer/Found(atom/A) //what have we found here? - if(isconstruct(A)) //is it a construct? - var/mob/living/simple_animal/hostile/construct/C = A - if(C.health < C.maxHealth) //is it hurt? let's go heal it if it is - return 1 - else - return 0 - else - return 0 - -/mob/living/simple_animal/hostile/construct/artificer/CanAttack(atom/the_target) - if(see_invisible < the_target.invisibility)//Target's invisible to us, forget it - return 0 - if(Found(the_target) || ..()) //If we Found it or Can_Attack it normally, we Can_Attack it as long as it wasn't invisible - return 1 //as a note this shouldn't be added to base hostile mobs because it'll mess up retaliate hostile mobs - -/mob/living/simple_animal/hostile/construct/artificer/MoveToTarget(list/possible_targets) - ..() - if(isliving(target)) - var/mob/living/L = target - if(isconstruct(L) && L.health >= L.maxHealth) //is this target an unhurt construct? stop trying to heal it - LoseTarget() - return 0 - if(L.health <= melee_damage_lower+melee_damage_upper) //ey bucko you're hurt as fuck let's go hit you - retreat_distance = null - minimum_distance = 1 - -/mob/living/simple_animal/hostile/construct/artificer/Aggro() - ..() - if(isconstruct(target)) //oh the target is a construct no need to flee - retreat_distance = null - minimum_distance = 1 - -/mob/living/simple_animal/hostile/construct/artificer/LoseAggro() - ..() - retreat_distance = initial(retreat_distance) - minimum_distance = initial(minimum_distance) - -/mob/living/simple_animal/hostile/construct/artificer/hostile //actually hostile, will move around, hit things, heal other constructs - AIStatus = AI_ON - environment_smash = ENVIRONMENT_SMASH_STRUCTURES //only token destruction, don't smash the cult wall NO STOP - -/////////////////////////////Angelic Artificer///////////////////////// -/mob/living/simple_animal/hostile/construct/artificer/angelic - desc = "A bulbous construct dedicated to building and maintaining holy armies." - holy = TRUE - loot = list(/obj/item/ectoplasm/angelic) - construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone/noncult/purified, - /obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser, - /obj/effect/proc_holder/spell/targeted/projectile/magic_missile/lesser) - -/mob/living/simple_animal/hostile/construct/artificer/noncult - construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/conjure/wall, - /obj/effect/proc_holder/spell/aoe_turf/conjure/floor, - /obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone/noncult, - /obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser, - /obj/effect/proc_holder/spell/targeted/projectile/magic_missile/lesser) - -/////////////////////////////Harvester///////////////////////// -/mob/living/simple_animal/hostile/construct/harvester - name = "Harvester" - real_name = "Harvester" - desc = "A long, thin construct built to herald Nar'Sie's rise. It'll be all over soon." - icon_state = "harvester" - icon_living = "harvester" - maxHealth = 40 - health = 40 - sight = SEE_MOBS - melee_damage_lower = 15 - melee_damage_upper = 20 - attack_verb_continuous = "butchers" - attack_verb_simple = "butcher" - attack_sound = 'sound/weapons/bladeslice.ogg' - construct_spells = list(/obj/effect/proc_holder/spell/aoe_turf/area_conversion, - /obj/effect/proc_holder/spell/targeted/forcewall/cult) - playstyle_string = "You are a Harvester. You are incapable of directly killing humans, but your attacks will remove their limbs: \ - Bring those who still cling to this world of illusion back to the Geometer so they may know Truth. Your form and any you are pulling can pass through runed walls effortlessly." - can_repair_constructs = TRUE - - -/mob/living/simple_animal/hostile/construct/harvester/Bump(atom/AM) - . = ..() - if(istype(AM, /turf/closed/wall/mineral/cult) && AM != loc) //we can go through cult walls - var/atom/movable/stored_pulling = pulling - if(stored_pulling) - stored_pulling.setDir(get_dir(stored_pulling.loc, loc)) - stored_pulling.forceMove(loc) - forceMove(AM) - if(stored_pulling) - start_pulling(stored_pulling, supress_message = TRUE) //drag anything we're pulling through the wall with us by magic - -/mob/living/simple_animal/hostile/construct/harvester/AttackingTarget() - if(iscarbon(target)) - var/mob/living/carbon/C = target - if(HAS_TRAIT(C, TRAIT_NODISMEMBER)) - return ..() //ATTACK! - var/list/parts = list() - var/undismembermerable_limbs = 0 - for(var/X in C.bodyparts) - var/obj/item/bodypart/BP = X - if(BP.body_part != HEAD && BP.body_part != CHEST) - if(BP.dismemberable) - parts += BP - else - undismembermerable_limbs++ - if(!LAZYLEN(parts)) - if(undismembermerable_limbs) //they have limbs we can't remove, and no parts we can, attack! - return ..() - C.Paralyze(60) - visible_message("[src] knocks [C] down!") - to_chat(src, "\"Bring [C.p_them()] to me.\"") - return FALSE - do_attack_animation(C) - var/obj/item/bodypart/BP = pick(parts) - BP.dismember() - return FALSE - . = ..() - -/mob/living/simple_animal/hostile/construct/harvester/Initialize() - . = ..() - var/datum/action/innate/seek_prey/seek = new() - seek.Grant(src) - seek.Activate() - -///////////////////////Master-Tracker/////////////////////// - -/datum/action/innate/seek_master - name = "Seek your Master" - desc = "You and your master share a soul-link that informs you of their location" - background_icon_state = "bg_demon" - buttontooltipstyle = "cult" - button_icon_state = "cult_mark" - var/tracking = FALSE - var/mob/living/simple_animal/hostile/construct/the_construct - - -/datum/action/innate/seek_master/Grant(mob/living/C) - the_construct = C - ..() - -/datum/action/innate/seek_master/Activate() - var/datum/antagonist/cult/C = owner.mind.has_antag_datum(/datum/antagonist/cult) - if(!C) - return - var/datum/objective/eldergod/summon_objective = locate() in C.cult_team.objectives - - if(summon_objective.check_completion()) - the_construct.master = C.cult_team.blood_target - - if(!the_construct.master) - to_chat(the_construct, "You have no master to seek!") - the_construct.seeking = FALSE - return - if(tracking) - tracking = FALSE - the_construct.seeking = FALSE - to_chat(the_construct, "You are no longer tracking your master.") - return - else - tracking = TRUE - the_construct.seeking = TRUE - to_chat(the_construct, "You are now tracking your master.") - - -/datum/action/innate/seek_prey - name = "Seek the Harvest" - desc = "None can hide from Nar'Sie, activate to track a survivor attempting to flee the red harvest!" - icon_icon = 'icons/mob/actions/actions_cult.dmi' - background_icon_state = "bg_demon" - buttontooltipstyle = "cult" - button_icon_state = "cult_mark" - -/datum/action/innate/seek_prey/Activate() - if(GLOB.cult_narsie == null) - return - var/mob/living/simple_animal/hostile/construct/harvester/the_construct = owner - if(the_construct.seeking) - desc = "None can hide from Nar'Sie, activate to track a survivor attempting to flee the red harvest!" - button_icon_state = "cult_mark" - the_construct.seeking = FALSE - to_chat(the_construct, "You are now tracking Nar'Sie, return to reap the harvest!") - return - else - if(LAZYLEN(GLOB.cult_narsie.souls_needed)) - the_construct.master = pick(GLOB.cult_narsie.souls_needed) - var/mob/living/real_target = the_construct.master //We can typecast this way because Narsie only allows /mob/living into the souls list - to_chat(the_construct, "You are now tracking your prey, [real_target.real_name] - harvest [real_target.p_them()]!") - else - to_chat(the_construct, "Nar'Sie has completed her harvest!") - return - desc = "Activate to track Nar'Sie!" - button_icon_state = "sintouch" - the_construct.seeking = TRUE - - -/////////////////////////////ui stuff///////////////////////////// - -/mob/living/simple_animal/hostile/construct/update_health_hud() - if(hud_used) - if(health >= maxHealth) - hud_used.healths.icon_state = "[icon_state]_health0" - else if(health > maxHealth*0.8) - hud_used.healths.icon_state = "[icon_state]_health2" - else if(health > maxHealth*0.6) - hud_used.healths.icon_state = "[icon_state]_health3" - else if(health > maxHealth*0.4) - hud_used.healths.icon_state = "[icon_state]_health4" - else if(health > maxHealth*0.2) - hud_used.healths.icon_state = "[icon_state]_health5" - else - hud_used.healths.icon_state = "[icon_state]_health6" diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 1916a7c52adb..646a3eb8436b 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -270,7 +270,7 @@ maxHealth = 50 gender = FEMALE harm_intent_damage = 10 - butcher_results = list(/obj/item/organ/brain = 1, /obj/item/organ/heart = 1, /obj/item/reagent_containers/food/snacks/cakeslice/birthday = 3, \ + butcher_results = list(/obj/item/organ/brain = 1, /obj/item/organ/heart = 1, /obj/item/food/cakeslice/birthday = 3, \ /obj/item/reagent_containers/food/snacks/meat/slab = 2) response_harm_continuous = "takes a bite out of" response_harm_simple = "take a bite out of" diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index 19eef279a1dc..ebfd85f3ca23 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -481,50 +481,6 @@ fdel(json_file) WRITE_FILE(json_file, json_encode(file_data)) -/mob/living/simple_animal/pet/dog/corgi/Ian/narsie_act() - playsound(src, 'sound/magic/demon_dies.ogg', 75, TRUE) - var/mob/living/simple_animal/pet/dog/corgi/narsie/N = new(loc) - N.setDir(dir) - gib() - -/mob/living/simple_animal/pet/dog/corgi/narsie - name = "Nars-Ian" - desc = "Ia! Ia!" - icon_state = "narsian" - icon_living = "narsian" - icon_dead = "narsian_dead" - faction = list("neutral", "cult") - gold_core_spawnable = NO_SPAWN - nofur = TRUE - unique_pet = TRUE - held_state = "narsian" - -/mob/living/simple_animal/pet/dog/corgi/narsie/Life() - ..() - for(var/mob/living/simple_animal/pet/P in range(1, src)) - if(P != src && !istype(P,/mob/living/simple_animal/pet/dog/corgi/narsie)) - visible_message("[src] devours [P]!", \ - "DELICIOUS SOULS") - playsound(src, 'sound/magic/demon_attack1.ogg', 75, TRUE) - narsie_act() - if(P.mind) - if(P.mind.hasSoul) - P.mind.hasSoul = FALSE //Nars-Ian ate your soul; you don't have one anymore - else - visible_message("... Aw, someone beat me to this one.") - P.gib() - -/mob/living/simple_animal/pet/dog/corgi/narsie/update_corgi_fluff() - ..() - speak = list("Tari'karat-pasnar!", "IA! IA!", "BRRUUURGHGHRHR") - speak_emote = list("growls", "barks ominously") - emote_hear = list("barks echoingly!", "woofs hauntingly!", "yaps in an eldritch manner.", "mutters something unspeakable.") - emote_see = list("communes with the unnameable.", "ponders devouring some souls.", "shakes.") - -/mob/living/simple_animal/pet/dog/corgi/narsie/narsie_act() - adjustBruteLoss(-maxHealth) - - /mob/living/simple_animal/pet/dog/corgi/regenerate_icons() ..() if(inventory_head) diff --git a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm b/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm index e0537594c8ff..76dc1f095009 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/drones_as_items.dm @@ -30,11 +30,6 @@ var/area/A = get_area(src) if(A) notify_ghosts("A drone shell has been created in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE, ignore_key = POLL_IGNORE_DRONE) - GLOB.poi_list |= src - -/obj/effect/mob_spawn/drone/Destroy() - GLOB.poi_list -= src - . = ..() //ATTACK GHOST IGNORING PARENT RETURN VALUE /obj/effect/mob_spawn/drone/attack_ghost(mob/user) diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index a1884b76298e..65baddfee360 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -12,7 +12,7 @@ speak_chance = 1 turns_per_move = 5 see_in_dark = 6 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 4, /obj/item/clothing/head/goatpelt = 1) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 4) response_help_continuous = "pets" response_help_simple = "pet" response_disarm_continuous = "gently pushes aside" diff --git a/code/modules/mob/living/simple_animal/friendly/penguin.dm b/code/modules/mob/living/simple_animal/friendly/penguin.dm index 8376f6741eb7..5e39c3c8a51d 100644 --- a/code/modules/mob/living/simple_animal/friendly/penguin.dm +++ b/code/modules/mob/living/simple_animal/friendly/penguin.dm @@ -35,14 +35,6 @@ gold_core_spawnable = FRIENDLY_SPAWN butcher_results = list(/obj/item/organ/ears/penguin = 1, /obj/item/reagent_containers/food/snacks/meat/slab/penguin = 3) -/mob/living/simple_animal/pet/penguin/emperor/shamebrero - name = "Shamebrero penguin" - desc = "Shameful of all he surveys." - icon_state = "penguin_shamebrero" - icon_living = "penguin_shamebrero" - gold_core_spawnable = NO_SPAWN - unique_pet = TRUE - /mob/living/simple_animal/pet/penguin/baby speak = list("gah", "noot noot", "noot!", "noot", "squeee!", "noo!") name = "Penguin chick" diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index d43d744e2800..b6f5c58b424e 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -115,7 +115,7 @@ name = "pile of bear armor" desc = "A scattered pile of various shaped armor pieces fitted for a bear, some duct tape, and a nail filer. Crude instructions \ are written on the back of one of the plates. This seems like an awful idea." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "bear_armor_upgrade" /obj/item/bear_armor/afterattack(atom/target, mob/user, proximity_flag) 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 4d38e1c5f87f..d8b4af5344ea 100644 --- a/code/modules/mob/living/simple_animal/hostile/human/frontiersman.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/frontiersman.dm @@ -2,26 +2,53 @@ name = "Frontiersman" desc = "A frontiersman! A terrorist that would probably kill everyone without mercy." icon_state = "frontiersmanmelee" + icon = 'icons/mob/simple_frontiersman.dmi' icon_living = "frontiersmanmelee" icon_dead = "frontiersmanmelee_dead" speak_chance = 0 melee_damage_lower = 15 melee_damage_upper = 15 loot = list(/obj/effect/mob_spawn/human/corpse/frontier, - /obj/item/kitchen/knife) + /obj/item/melee/knife/survival) atmos_requirements = list("min_oxy" = 5, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 5, "min_n2" = 0, "max_n2" = 0) faction = list(FACTION_ANTAG_FRONTIERSMEN) + footstep_type = FOOTSTEP_MOB_SHOE + +/mob/living/simple_animal/hostile/human/frontier/internals + icon_state = "frontiersmanmelee_mask" + icon_living = "frontiersmanmelee_mask" + loot = list(/obj/effect/mob_spawn/human/corpse/frontier, + /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) + minbodytemp = 0 + /mob/living/simple_animal/hostile/human/frontier/ranged 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/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) + minbodytemp = 0 + +/mob/living/simple_animal/hostile/human/frontier/ranged/internals/neutered + loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged, + /obj/item/clothing/mask/gas/sechailer, + /obj/item/tank/internals/emergency_oxygen/engi) /mob/living/simple_animal/hostile/human/frontier/ranged/neutered loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged) @@ -34,6 +61,21 @@ casingtype = /obj/item/ammo_casing/a8_50r projectilesound = 'sound/weapons/gun/rifle/mosin.ogg' +/mob/living/simple_animal/hostile/human/frontier/ranged/mosin/internals + icon_state = "frontiersmanrangedrifle_mask" + icon_living = "frontiersmanrangedrifle_mask" + loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged, + /obj/item/gun/ballistic/rifle/illestren, + /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) + minbodytemp = 0 + +/mob/living/simple_animal/hostile/human/frontier/ranged/mosin/internals/neutered + loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged, + /obj/item/clothing/mask/gas/sechailer, + /obj/item/tank/internals/emergency_oxygen/engi) + /mob/living/simple_animal/hostile/human/frontier/ranged/mosin/neutered loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged) @@ -47,6 +89,21 @@ loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper, /obj/item/gun/ballistic/shotgun/brimstone) +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/internals + icon_state = "frontiersmanrangedelite_mask" + icon_living = "frontiersmanrangedelite_mask" + loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper, + /obj/item/gun/ballistic/shotgun/brimstone, + /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) + minbodytemp = 0 + +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/internals/neutered + loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper, + /obj/item/clothing/mask/gas, + /obj/item/tank/internals/emergency_oxygen/engi) + /mob/living/simple_animal/hostile/human/frontier/ranged/trooper/neutered loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper) @@ -60,6 +117,21 @@ loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper, /obj/item/gun/ballistic/automatic/assault/skm) +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/internals + icon_state = "frontiersmanrangedak47_mask" + icon_living = "frontiersmanrangedak47_mask" + loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper, + /obj/item/gun/ballistic/automatic/assault/skm, + /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) + minbodytemp = 0 + +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/internals/neutered + loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper, + /obj/item/clothing/mask/gas, + /obj/item/tank/internals/emergency_oxygen/engi) + /mob/living/simple_animal/hostile/human/frontier/ranged/trooper/skm/neutured loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper) @@ -72,6 +144,21 @@ casingtype = /obj/item/ammo_casing/a8_50r projectilesound = 'sound/weapons/gun/rifle/mosin.ogg' +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/rifle/internals + icon_state = "frontiersmanrangedmosin_mask" + icon_living = "frontiersmanrangedmosin_mask" + loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper, + /obj/item/gun/ballistic/rifle/illestren, + /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) + minbodytemp = 0 + +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/rifle/internals/neutered + loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper, + /obj/item/clothing/mask/gas, + /obj/item/tank/internals/emergency_oxygen/engi) + /mob/living/simple_animal/hostile/human/frontier/ranged/trooper/rifle/neutered loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper) @@ -87,6 +174,21 @@ projectiletype = /obj/projectile/beam/weak/penetrator loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper/heavy) +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/heavy/internals + icon_state = "frontiersmanrangedminigun_mask" + icon_living = "frontiersmanrangedminigun_mask" + loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper/heavy, + /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) + minbodytemp = 0 + + +/mob/living/simple_animal/hostile/human/frontier/ranged/trooper/heavy/neutered + loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper/heavy/gunless, + /obj/item/clothing/mask/gas, + /obj/item/tank/internals/emergency_oxygen/engi) + /mob/living/simple_animal/hostile/human/frontier/ranged/trooper/heavy/neutered loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/trooper/heavy/gunless) @@ -96,15 +198,26 @@ 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/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) + minbodytemp = 0 + +/mob/living/simple_animal/hostile/human/frontier/ranged/officer/internals/neutered + loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/officer, + /obj/item/clothing/mask/gas, + /obj/item/tank/internals/emergency_oxygen/engi) /mob/living/simple_animal/hostile/human/frontier/ranged/officer/neutured loot = list(/obj/effect/mob_spawn/human/corpse/frontier/ranged/officer) - -/mob/living/simple_animal/hostile/human/frontier/ranged/officer/Aggro() - ..() - summon_backup(15) - say(pick("Help!!", "They're right here!!", "Don't let me die!!")) diff --git a/code/modules/mob/living/simple_animal/hostile/human/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/human/skeleton.dm index b251dda91e48..12a3c2b2604c 100644 --- a/code/modules/mob/living/simple_animal/hostile/human/skeleton.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/skeleton.dm @@ -48,8 +48,7 @@ deathmessage = "collapses into a pile of bones, its gear clanging as it hits the ground!" loot = list(/obj/effect/decal/remains/human, /obj/item/clothing/suit/armor/witchhunter, - /obj/item/clothing/head/witchunter, - /obj/item/claymore/weak{name = "holy sword"}) + /obj/item/melee/sword/claymore{name = "holy sword"}) /mob/living/simple_animal/hostile/human/skeleton/ice name = "ice skeleton" diff --git a/code/modules/mob/living/simple_animal/hostile/human/survivors.dm b/code/modules/mob/living/simple_animal/hostile/human/survivors.dm index f7abea96b222..ed356764271f 100644 --- a/code/modules/mob/living/simple_animal/hostile/human/survivors.dm +++ b/code/modules/mob/living/simple_animal/hostile/human/survivors.dm @@ -39,7 +39,7 @@ icon_state = "survivor_hunter" icon_living = "survivor_hunter" projectiletype = null - casingtype = /obj/item/ammo_casing/aac_300blk/recycled + casingtype = /obj/item/ammo_casing/a762_40 projectilesound = 'sound/weapons/gun/rifle/shot.ogg' ranged = 1 rapid_fire_delay = 6 @@ -116,7 +116,7 @@ /obj/item/stack/marker_beacon/ten = 15, /obj/item/mining_scanner = 5, /obj/item/extinguisher/mini = 10, - /obj/item/kitchen/knife/combat = 5, + /obj/item/melee/knife/combat = 5, /obj/item/flashlight/seclite = 10, /obj/item/stack/sheet/sinew = 10, /obj/item/stack/sheet/bone = 5, @@ -132,7 +132,7 @@ /obj/item/stack/marker_beacon/ten = 10, /obj/item/mining_scanner = 20, /obj/item/extinguisher/mini = 10, - /obj/item/kitchen/knife/combat/survival = 10, + /obj/item/melee/knife/survival = 10, /obj/item/flashlight/seclite = 10, /obj/item/stack/sheet/sinew = 10, /obj/item/stack/sheet/bone = 10 @@ -144,11 +144,11 @@ /obj/item/stack/marker_beacon/ten = 5, /obj/item/mining_scanner = 5, /obj/item/extinguisher/mini = 10, - /obj/item/kitchen/knife/combat/survival = 12, + /obj/item/melee/knife/survival = 12, /obj/item/flashlight/seclite = 10, /obj/item/stack/sheet/sinew = 5, /obj/item/stack/sheet/bone = 5, - /obj/item/kitchen/knife/combat = 3, + /obj/item/melee/knife/combat = 3, /obj/item/reagent_containers/food/snacks/rationpack = 30 ) ) @@ -244,7 +244,7 @@ if(prob(20)) l_pocket = /obj/item/reagent_containers/food/snacks/meat/steak/goliath else if(prob(60)) - l_pocket = /obj/item/ammo_box/aac_300blk_stripper + l_pocket = /obj/item/ammo_box/a762_stripper if(prob(20)) new /obj/item/gun/ballistic/rifle/polymer(loc) else diff --git a/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm b/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm index 2a60b3c52fc2..e72211f66012 100644 --- a/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm +++ b/code/modules/mob/living/simple_animal/hostile/mecha_pilot.dm @@ -19,13 +19,13 @@ Featuring: */ /mob/living/simple_animal/hostile/human/syndicate/mecha_pilot - name = "Syndicate Mecha Pilot" + name = "Syndicate Exosuit Pilot" desc = "Death to Nanotrasen. This variant comes in MECHA DEATH flavour." wanted_objects = list() search_objects = 0 mob_biotypes = MOB_ORGANIC|MOB_HUMANOID - var/spawn_mecha_type = /obj/mecha/combat/marauder/mauler/loaded + var/spawn_mecha_type = /obj/mecha/combat/marauder/touro/loaded var/obj/mecha/mecha //Ref to pilot's mecha instance var/required_mecha_charge = 7500 //If the pilot doesn't have a mecha, what charge does a potential Grand Theft Mecha need? (Defaults to half a battery) var/mecha_charge_evacuate = 50 //Amount of charge at which the pilot tries to abandon the mecha diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/codename_claw.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/codename_claw.dm index a762a9298279..d3a50564ca75 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/codename_claw.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/codename_claw.dm @@ -58,7 +58,7 @@ speed = 5 move_to_delay = 5 speak_emote = list("verbalizes") - mob_trophy = /obj/item/nullrod/armblade/tentacle + mob_trophy = /obj/item/melee/synthetic_arm_blade loot = list(/obj/effect/spawner/clawloot) health = 2250 maxHealth = 2250 diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index 863abf56dad1..ff06df9c6113 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -607,12 +607,12 @@ GLOBAL_DATUM(blackbox, /obj/machinery/smartfridge/black_box) var/ready_to_deploy = FALSE /obj/machinery/anomalous_crystal/helpers/Destroy() - GLOB.poi_list -= src + SSpoints_of_interest.remove_point_of_interest(src) . = ..() /obj/machinery/anomalous_crystal/helpers/ActivationReaction(mob/user, method) if(..() && !ready_to_deploy) - GLOB.poi_list |= src + SSpoints_of_interest.make_point_of_interest(src) ready_to_deploy = TRUE notify_ghosts("An anomalous crystal has been activated in [get_area(src)]! This crystal can always be used by ghosts hereafter.", enter_link = "(Click to enter)", ghost_sound = 'sound/effects/ghost2.ogg', source = src, action = NOTIFY_ATTACK, header = "Anomalous crystal activated") diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/cult_templar.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/cult_templar.dm index 08ef1a7b21cb..c06c78068ce9 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/cult_templar.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/cult_templar.dm @@ -23,8 +23,8 @@ ranged_cooldown_time = 20 vision_range = 10 damage_coeff = list(BRUTE = 1, BURN = 0.5, TOX = 0.5, CLONE = 0.5, STAMINA = 0, OXY = 0.5) - loot = list(/obj/item/claymore/cursed, /obj/item/clothing/suit/space/hardsuit/cult/enchanted) - mob_trophy = list(/obj/item/claymore/cursed, /obj/item/clothing/suit/space/hardsuit/cult/enchanted, /obj/item/upgradescroll) + loot = list(/obj/item/melee/sword/claymore, /obj/item/clothing/suit/space/hardsuit/cult/enchanted) + mob_trophy = list(/obj/item/melee/sword/claymore, /obj/item/clothing/suit/space/hardsuit/cult/enchanted, /obj/item/upgradescroll) wander = FALSE del_on_death = TRUE blood_volume = BLOOD_VOLUME_NORMAL @@ -40,7 +40,7 @@ /datum/action/innate/megafauna_attack/rapid_fire) move_force = MOVE_FORCE_NORMAL var/turf/starting - var/obj/item/claymore/cursed/mob/weapon + var/obj/item/melee/sword/claymore/weapon var/charging = FALSE var/dash_cooldown = 6 SECONDS var/runic_blast_cooldown = 14 SECONDS @@ -50,23 +50,6 @@ var/dash_num = 3 var/newcolor = rgb(149, 10, 10) -/obj/item/claymore/cursed - name = "cursed longsword" - desc = "For those who overcame a great challenge. It glows with a dim red light." - icon_state = "cultblade" - item_state = "cultblade" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - w_class = WEIGHT_CLASS_BULKY - throwforce = 25 - block_chance = 65 - armour_penetration = 50 - sharpness = IS_SHARP - -/obj/item/claymore/cursed/mob - block_chance = 0 - force = 16 - /mob/living/simple_animal/hostile/megafauna/cult_templar/Initialize() . = ..() starting = get_turf(src) @@ -421,7 +404,7 @@ /obj/item/clothing/suit/space/hardsuit/cult/enchanted name = "\improper Cursed Nar'Sien hardened armor" desc = "A heavily-armored exosuit worn by warriors of the Nar'Sien cult. This one is cursed, screaming voices into the mind of the wearer." - allowed = list(/obj/item/gun, /obj/item/nullrod, /obj/item/tank/internals) + allowed = list(/obj/item/gun, /obj/item/tank/internals) armor = list("melee" = 75, "bullet" = 50, "laser" = 30, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 80, "fire" = 100, "acid" = 100) max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | LAVA_PROOF diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm deleted file mode 100644 index 04723d80ba5a..000000000000 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/swarmer.dm +++ /dev/null @@ -1,285 +0,0 @@ -/* - -Swarmer Beacon - -A strange machine appears anywhere a normal lavaland mob can it produces a swarmer at a rate of -1/15 seconds, until there are GetTotalAISwarmerCap()/2 swarmers, after this it is up to the swarmers themselves to -increase their population (it will repopulate them should they fall under GetTotalAISwarmerCap()/2 again) - -tl;dr A million of the little hellraisers spawn (controlled by AI) and try to eat mining - -Loot: Not much, besides a shit load of artificial bluespace crystals, Oh and mining doesn't get eaten -that's a plus I suppose. - -Difficulty: Special - -*/ - -GLOBAL_LIST_EMPTY(AISwarmers) -GLOBAL_LIST_EMPTY(AISwarmersByType)//AISwarmersByType[.../resource] = list(1st, 2nd, nth), AISwarmersByType[../ranged] = list(1st, 2nd, nth) etc. -GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swarmer/ai/resource = 30, /mob/living/simple_animal/hostile/swarmer/ai/ranged_combat = 20, /mob/living/simple_animal/hostile/swarmer/ai/melee_combat = 10)) - - -//returns a type of AI swarmer that is NOT at max cap -//type order is shuffled, to prevent bias -/proc/GetUncappedAISwarmerType() - var/static/list/swarmerTypes = subtypesof(/mob/living/simple_animal/hostile/swarmer/ai) - LAZYINITLIST(GLOB.AISwarmersByType) - for(var/t in shuffle(swarmerTypes)) - var/list/amount = GLOB.AISwarmersByType[t] - if(!amount || amount.len < GLOB.AISwarmerCapsByType[t]) - return t - - -//Total of all subtype caps -/proc/GetTotalAISwarmerCap() - var/static/list/swarmerTypes = subtypesof(/mob/living/simple_animal/hostile/swarmer/ai) - . = 0 - LAZYINITLIST(GLOB.AISwarmersByType) - for(var/t in swarmerTypes) - . += GLOB.AISwarmerCapsByType[t] - -//this should. not be a simple mob i think -/mob/living/simple_animal/hostile/megafauna/swarmer_swarm_beacon - name = "swarmer beacon" - desc = "That name is a bit of a mouthful, but stop paying attention to your mouth they're eating everything!" - icon = 'icons/mob/swarmer.dmi' - icon_state = "swarmer_console" - health = 750 - maxHealth = 750 //""""low-ish"""" HP because it's a passive boss, and the swarm itself is the real foe - mob_biotypes = MOB_ROBOTIC - gps_name = "Hungry Signal" - faction = list("mining", "boss", "swarmer") - weather_immunities = list("lava","ash") - stop_automated_movement = TRUE - wander = FALSE - layer = BELOW_MOB_LAYER - AIStatus = AI_OFF - del_on_death = TRUE - var/swarmer_spawn_cooldown = 0 - var/swarmer_spawn_cooldown_amt = 150 //Deciseconds between the swarmers we spawn - var/call_help_cooldown = 0 - var/call_help_cooldown_amt = 150 //Deciseconds between calling swarmers to help us when attacked - var/static/list/swarmer_caps - - -/mob/living/simple_animal/hostile/megafauna/swarmer_swarm_beacon/Initialize() - . = ..() - swarmer_caps = GLOB.AISwarmerCapsByType //for admin-edits - for(var/ddir in GLOB.cardinals) - new /obj/structure/swarmer/blockade (get_step(src, ddir)) - var/mob/living/simple_animal/hostile/swarmer/ai/resource/R = new(loc) - step(R, ddir) //Step the swarmers, instead of spawning them there, incase the turf is solid - - -/mob/living/simple_animal/hostile/megafauna/swarmer_swarm_beacon/Life() - . = ..() - if(.) - var/createtype = GetUncappedAISwarmerType() - if(createtype && world.time > swarmer_spawn_cooldown && GLOB.AISwarmers.len < (GetTotalAISwarmerCap()*0.5)) - swarmer_spawn_cooldown = world.time + swarmer_spawn_cooldown_amt - new createtype(loc) - - -/mob/living/simple_animal/hostile/megafauna/swarmer_swarm_beacon/adjustHealth(amount, updating_health = TRUE, forced = FALSE) - . = ..() - if(. > 0 && world.time > call_help_cooldown) - call_help_cooldown = world.time + call_help_cooldown_amt - summon_backup(25) //long range, only called max once per 15 seconds, so it's not deathlag - - -//SWARMER AI -//AI versions of the swarmer mini-antag -//This is an Abstract Base, it re-enables AI, but does not give the swarmer any goals/targets -/mob/living/simple_animal/hostile/swarmer/ai - wander = 1 - faction = list("swarmer", "mining") - weather_immunities = list("ash") //wouldn't be fun otherwise - AIStatus = AI_ON - -/mob/living/simple_animal/hostile/swarmer/ai/Initialize() - . = ..() - ToggleLight() //so you can see them eating you out of house and home/shooting you/stunlocking you for eternity - LAZYADD(GLOB.AISwarmers, src) - GLOB.AISwarmersByType[type] += list(src) - - -/mob/living/simple_animal/hostile/swarmer/ai/Destroy() - GLOB.AISwarmers -= src - GLOB.AISwarmersByType[type] -= src - return ..() - - -/mob/living/simple_animal/hostile/swarmer/ai/SwarmerTypeToCreate() - return GetUncappedAISwarmerType() - - -/mob/living/simple_animal/hostile/swarmer/ai/resource/handle_automated_action() - . = ..() - if(.) - if(!stop_automated_movement) - if(health < maxHealth*0.25) - StartAction(100) - RepairSelf() - return - - -/mob/living/simple_animal/hostile/swarmer/ai/Move(atom/newloc) - if(newloc) - if(newloc.virtual_z() == virtual_z()) //so these actions are Z-specific - if(islava(newloc)) - var/turf/open/lava/L = newloc - if(!L.is_safe()) - StartAction(20) - new /obj/structure/catwalk/swarmer_catwalk(newloc) - return FALSE - - if(ischasm(newloc) && !throwing) - throw_at(get_edge_target_turf(src, get_dir(src, newloc)), 7 , 3, src, FALSE) //my planet needs me - return FALSE - - return ..() - - -/mob/living/simple_animal/hostile/swarmer/ai/proc/StartAction(deci = 0) - stop_automated_movement = TRUE - AIStatus = AI_OFF - addtimer(CALLBACK(src, PROC_REF(EndAction)), deci) - - -/mob/living/simple_animal/hostile/swarmer/ai/proc/EndAction() - stop_automated_movement = FALSE - AIStatus = AI_ON - - - - -//RESOURCE SWARMER: -//Similar to the original Player-Swarmers, these dismantle things to obtain the metal inside -//They then use this medal to produce more swarmers or traps/barricades - -/mob/living/simple_animal/hostile/swarmer/ai/resource - search_objects = 1 - attack_all_objects = TRUE //attempt to nibble everything - lose_patience_timeout = 150 - var/static/list/sharedWanted = typecacheof(list(/turf/closed/mineral, /turf/closed/wall)) //eat rocks and walls - var/static/list/sharedIgnore = list() - -//This handles viable things to eat/attack -//Place specific cases of AI derpiness here -//Most can be left to the automatic Gain/LosePatience() system -/mob/living/simple_animal/hostile/swarmer/ai/resource/CanAttack(atom/the_target) - - //SPECIFIC CASES: - //Smash fulltile windows before grilles - if(istype(the_target, /obj/structure/grille)) - for(var/obj/structure/window/rogueWindow in get_turf(the_target)) - if(rogueWindow.fulltile) //done this way because the subtypes are weird. - the_target = rogueWindow - break - - //GENERAL CASES: - if(is_type_in_typecache(the_target, sharedIgnore)) //always ignore - return FALSE - if(is_type_in_typecache(the_target, sharedWanted)) //always eat - return TRUE - - return ..() //else, have a nibble, see if it's food - - -/mob/living/simple_animal/hostile/swarmer/ai/resource/OpenFire(atom/A) - if(isliving(A)) //don't shoot rocks, sillies. - ..() - - -/mob/living/simple_animal/hostile/swarmer/ai/resource/AttackingTarget() - if(target.swarmer_act(src)) - add_type_to_wanted(target.type) - return TRUE - else - add_type_to_ignore(target.type) - return FALSE - - -/mob/living/simple_animal/hostile/swarmer/ai/resource/handle_automated_action() - . = ..() - if(.) - if(!stop_automated_movement) - if(GLOB.AISwarmers.len < GetTotalAISwarmerCap() && resources >= 50) - StartAction(100) //so they'll actually sit still and use the verbs - CreateSwarmer() - return - - if(resources > 5) - if(prob(5)) //lower odds, as to prioritise reproduction - StartAction(10) //not a typo - CreateBarricade() - return - if(prob(5)) - CreateTrap() - return - - -//So swarmers can learn what is and isn't food -/mob/living/simple_animal/hostile/swarmer/ai/resource/proc/add_type_to_wanted(typepath) - if(!sharedWanted[typepath])// this and += is faster than |= - sharedWanted += typecacheof(typepath) - - -/mob/living/simple_animal/hostile/swarmer/ai/resource/proc/add_type_to_ignore(typepath) - if(!sharedIgnore[typepath]) - sharedIgnore += typecacheof(typepath) - - -//RANGED SWARMER -/mob/living/simple_animal/hostile/swarmer/ai/ranged_combat - icon_state = "swarmer_ranged" - icon_living = "swarmer_ranged" - projectiletype = /obj/projectile/beam/laser - projectilesound = 'sound/weapons/laser.ogg' - check_friendly_fire = TRUE //you're supposed to protect the resource swarmers, you poop - retreat_distance = 3 - minimum_distance = 3 - -/mob/living/simple_animal/hostile/swarmer/ai/ranged_combat/Aggro() - ..() - summon_backup(15, TRUE) //Exact matching, so that goliaths don't come to aid the swarmers, that'd be silly - - -//MELEE SWARMER -/mob/living/simple_animal/hostile/swarmer/ai/melee_combat - icon_state = "swarmer_melee" - icon_living = "swarmer_melee" - health = 60 - maxHealth = 60 - ranged = FALSE - -/mob/living/simple_animal/hostile/swarmer/ai/melee_combat/Aggro() - ..() - summon_backup(15, TRUE) - - -/mob/living/simple_animal/hostile/swarmer/ai/melee_combat/AttackingTarget() - if(isliving(target)) - if(prob(35)) - StartAction(30) - DisperseTarget(target) - else - var/mob/living/L = target - L.attack_animal(src) - L.electrocute_act(10, src, flags = SHOCK_NOGLOVES) - return TRUE - else - return ..() - - - - -//SWARMER CATWALKS -//Used so they can survive lavaland better -/obj/structure/catwalk/swarmer_catwalk - name = "swarmer catwalk" - desc = "A catwalk-like mesh, produced by swarmers to allow them to navigate hostile terrain." - icon = 'icons/obj/smooth_structures/swarmer_catwalk.dmi' - icon_state = "swarmer_catwalk-0" - base_icon_state = "swarmer_catwalk" diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm index e4478b705f45..d9c011fe85f1 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/goliath.dm @@ -226,7 +226,6 @@ D.set_vehicle_dir_layer(NORTH, OBJ_LAYER) D.set_vehicle_dir_layer(EAST, OBJ_LAYER) D.set_vehicle_dir_layer(WEST, OBJ_LAYER) - D.keytype = /obj/item/key/lasso D.drive_verb = "ride" else user.visible_message("[src] is rocking around! You can't put the saddle on!") diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm index b5d539086ac7..bd9133ffce20 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm @@ -208,7 +208,7 @@ attack_sound = 'sound/weapons/pierce.ogg' throw_message = "is shrugged off by" del_on_death = TRUE - stat_attack = HARD_CRIT + stat_attack = SOFT_CRIT robust_searching = 1 var/can_infest_dead = FALSE @@ -222,7 +222,7 @@ /mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/staff/Initialize() . = ..() - addtimer(CALLBACK(src, PROC_REF(death)), 50) + addtimer(CALLBACK(src, PROC_REF(death)), 5 SECONDS) AddComponent(/datum/component/swarming) /mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/Life() @@ -230,6 +230,8 @@ if(stat == DEAD || !isturf(loc)) return for(var/mob/living/carbon/human/victim in range(src, 1)) //Only for corpse right next to/on same tile + if(istype(victim.getorganslot(ORGAN_SLOT_REGENERATIVE_CORE), /obj/item/organ/legion_skull)) // no double dipping + continue switch(victim.stat) if(UNCONSCIOUS, HARD_CRIT) infest(victim) @@ -239,21 +241,89 @@ infest(victim) return //This will qdelete the legion. - /mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/proc/infest(mob/living/carbon/human/H) - visible_message("[name] burrows into the flesh of [H]!") - var/mob/living/simple_animal/hostile/asteroid/hivelord/legion/L - if(HAS_TRAIT(H, TRAIT_DWARF)) //dwarf legions aren't just fluff! - L = new /mob/living/simple_animal/hostile/asteroid/hivelord/legion/dwarf(H.loc) + visible_message(span_warning("[name] burrows into the flesh of [H]!")) + if(H.stat != DEAD) + var/obj/item/organ/legion_skull/throwyouabone = new() + throwyouabone.Insert(H) else - L = new(H.loc) - visible_message("[L] staggers to [L.p_their()] feet!") - H.death() - H.adjustBruteLoss(1000) - L.stored_mob = H - H.forceMove(L) + var/mob/living/simple_animal/hostile/asteroid/hivelord/legion/L + if(HAS_TRAIT(H, TRAIT_DWARF)) //dwarf legions aren't just fluff! + L = new /mob/living/simple_animal/hostile/asteroid/hivelord/legion/dwarf(H.loc) + else + L = new(H.loc) + visible_message(span_warning("[L] staggers to [L.p_their()] feet!")) + H.adjustBruteLoss(1000) + L.stored_mob = H + H.forceMove(L) qdel(src) +/obj/item/organ/legion_skull + name = "legion skull" + desc = "The skull of a legion, likely torn from a soon-to-be host." + icon_state = "legion_skull" + zone = BODY_ZONE_CHEST + slot = ORGAN_SLOT_REGENERATIVE_CORE + grind_results = list(/datum/reagent/medicine/soulus = 2, /datum/reagent/blood = 5) + var/datum/disease/transformation/legionvirus/malignance + var/malignance_countdown = 5 MINUTES + var/malignance_tracker + +/obj/item/organ/legion_skull/on_find(mob/living/finder) + ..() + to_chat(finder, span_warning("You found a skull-shaped growth in [owner]'s [zone]!")) + +/obj/item/organ/legion_skull/Insert(mob/living/carbon/M, special = 0) + ..() + malignance = new() + malignance.infect(M, FALSE) //we handle all the fancy virus stuff in the organ, so we need a reference for it + malignance_tracker = addtimer(CALLBACK(src, PROC_REF(update_stage)), malignance_countdown, TIMER_STOPPABLE|TIMER_DELETE_ME) + M.heal_overall_bleeding(12) //stop dying so fast + +/obj/item/organ/legion_skull/Remove(mob/living/carbon/M, special = 0) + malignance_countdown = initial(malignance_countdown) + deltimer(malignance_tracker) + malignance_tracker = null + malignance.cure() + ..() + +/obj/item/organ/legion_skull/on_life() + . = ..() + skull_check() + +/obj/item/organ/legion_skull/on_death() + . = ..() + skull_check() + +/// track our timers and reagents +/obj/item/organ/legion_skull/proc/skull_check() + if(!owner) + return + if(!malignance) + malignance = new() + malignance.infect(owner, FALSE) + if(owner.reagents.has_reagent(/datum/reagent/medicine/synaptizine, needs_metabolizing = TRUE) || owner.reagents.has_reagent(/datum/reagent/medicine/spaceacillin, needs_metabolizing = TRUE)) + if(isnull(timeleft(malignance_tracker))) //ruhehehehehe + malignance_countdown = min(malignance_countdown + 1 SECONDS, initial(malignance_countdown)) //slightly improve our resistance to dying so we don't turn the second a treatment runs out + return + malignance_countdown = timeleft(malignance_tracker) //pause our timer if we have the reagents + deltimer(malignance_tracker) + malignance_tracker = null //you would think deltimer would do this but it actually doesn't track a direct reference! + return + if(!malignance_tracker) + malignance_tracker = addtimer(CALLBACK(src, PROC_REF(update_stage)), malignance_countdown, TIMER_STOPPABLE|TIMER_DELETE_ME) //and resume if we run out + +/// Updates the stage of our tied disease +/obj/item/organ/legion_skull/proc/update_stage() + malignance.update_stage(min(malignance.stage + 1, malignance.max_stages)) + if(malignance.stage == 5) + malignance.stage_act() //force the transformation here, then delete everything + qdel(malignance) + qdel(src) + return + malignance_countdown = initial(malignance_countdown) + malignance_tracker = addtimer(CALLBACK(src, PROC_REF(update_stage)), malignance_countdown, TIMER_STOPPABLE|TIMER_DELETE_ME) + //Advanced Legion is slightly tougher to kill and can raise corpses (revive other legions) /mob/living/simple_animal/hostile/asteroid/hivelord/legion/advanced name = "Signifer" 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 09d85a664e86..4869d4a95c1c 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 @@ -25,7 +25,6 @@ /obj/item/clothing/suit/hooded/wintercoat = 1, /obj/item/clothing/suit/jacket = 1, /obj/item/clothing/suit/jacket/leather = 1, - /obj/item/clothing/suit/jacket/leather/overcoat = 1, /obj/item/clothing/suit/jacket/leather/duster = 1, /obj/item/clothing/suit/jacket/miljacket = 1, /obj/item/clothing/suit/jacket/puffer = 1, @@ -46,8 +45,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, ) ) @@ -81,7 +80,6 @@ /obj/item/clothing/head/hardhat/orange = 2, /obj/item/clothing/head/hardhat/dblue = 2, /obj/item/clothing/head/pirate = 1, - /obj/item/clothing/head/foilhat = 1 ) ) if(prob(50)) @@ -203,14 +201,14 @@ if(prob(50)) r_pocket = pickweight(list( /obj/item/stack/marker_beacon = 20, - /obj/item/spacecash/bundle/mediumrand = 7, + /obj/item/spacecash/bundle/smallrand = 7, /obj/item/reagent_containers/hypospray/medipen/survival = 2, /obj/item/borg/upgrade/modkit/damage = 1 ) ) if(prob(25)) l_pocket = pickweight(list( - /obj/item/spacecash/bundle/mediumrand = 5, + /obj/item/spacecash/bundle/smallrand = 5, /obj/item/reagent_containers/hypospray/medipen/survival = 2, /obj/item/borg/upgrade/modkit/cooldown = 1 ) @@ -230,7 +228,7 @@ /obj/item/stack/marker_beacon/ten = 2, /obj/item/mining_scanner = 2, /obj/item/extinguisher/mini = 2, - /obj/item/kitchen/knife/combat/survival = 3, + /obj/item/melee/knife/survival = 3, /obj/item/flashlight/seclite = 3, /obj/item/stack/sheet/sinew = 3, /obj/item/stack/sheet/bone = 3 @@ -275,7 +273,7 @@ if(prob(75)) back = pick(/obj/item/storage/backpack/industrial, /obj/item/storage/backpack/satchel/eng, /obj/item/storage/backpack/duffelbag/engineering, /obj/item/storage/backpack/messenger/engi) if(prob(10)) - back = /obj/item/fireaxe + back = /obj/item/melee/axe/fire for(var/i = 1 to 3) if(prob(75)) backpack_contents += pickweight(list( @@ -411,7 +409,7 @@ for(var/i = 1 to 3) if(prob(75)) backpack_contents += pickweight(list( - /obj/item/spacecash/bundle/mediumrand = 5, + /obj/item/spacecash/bundle/smallrand = 5, /obj/item/ammo_box/magazine/illestren_a850r = 5, /obj/item/ammo_box/magazine/zip_ammo_9mm = 5, /obj/item/modular_computer/tablet/preset/cargo = 3, @@ -424,7 +422,7 @@ if(prob(75)) accessory = /obj/item/clothing/accessory/armband/cargo if(prob(25)) - suit = /obj/item/clothing/suit/armor/vest/scrap_armor + suit = /obj/item/clothing/suit/armor/vest/scrap suit_store = /obj/item/gun/ballistic/rifle/illestren /datum/outfit/generic/cargo diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm deleted file mode 100644 index fcb9274a2c62..000000000000 --- a/code/modules/mob/living/simple_animal/shade.dm +++ /dev/null @@ -1,66 +0,0 @@ -/mob/living/simple_animal/shade - name = "Shade" - real_name = "Shade" - desc = "A bound spirit." - gender = PLURAL - icon = 'icons/mob/cult.dmi' - icon_state = "shade" - icon_living = "shade" - mob_biotypes = MOB_SPIRIT - maxHealth = 40 - health = 40 - healable = 0 - speak_emote = list("hisses") - emote_hear = list("wails.","screeches.") - response_help_continuous = "puts their hand through" - response_help_simple = "put your hand through" - response_disarm_continuous = "flails at" - response_disarm_simple = "flail at" - response_harm_continuous = "punches" - response_harm_simple = "punch" - speak_chance = 1 - melee_damage_lower = 5 - melee_damage_upper = 12 - attack_verb_continuous = "metaphysically strikes" - attack_verb_simple = "metaphysically strike" - minbodytemp = 0 - maxbodytemp = INFINITY - 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) - stop_automated_movement = 1 - faction = list("cult") - status_flags = CANPUSH - movement_type = FLYING - loot = list(/obj/item/ectoplasm) - del_on_death = TRUE - initial_language_holder = /datum/language_holder/construct - -/mob/living/simple_animal/shade/Initialize() - . = ..() - ADD_TRAIT(src, TRAIT_SPACEWALK, INNATE_TRAIT) - -/mob/living/simple_animal/shade/death() - deathmessage = "lets out a contented sigh as [p_their()] form unwinds." - ..() - -/mob/living/simple_animal/shade/attack_animal(mob/living/simple_animal/M) - if(isconstruct(M)) - var/mob/living/simple_animal/hostile/construct/C = M - if(!C.can_repair_constructs) - return - if(health < maxHealth) - adjustHealth(-25) - Beam(M,icon_state="sendbeam",time=4) - M.visible_message( - "[M] heals \the [src].", \ - "You heal [src], leaving [src] at [health]/[maxHealth] health.") - else - to_chat(M, "You cannot heal [src], as [p_theyre()] unharmed!") - else if(src != M) - return ..() - -/mob/living/simple_animal/shade/attackby(obj/item/O, mob/user, params) //Marker -Agouri - if(istype(O, /obj/item/soulstone)) - var/obj/item/soulstone/SS = O - SS.transfer_soul("SHADE", src, user) - else - . = ..() diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 06c7a9af52d8..a05c2e65688e 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -313,6 +313,14 @@ /mob/proc/get_item_by_slot(slot_id) return null +/// Gets what slot the item on the mob is held in. +/// Returns null if the item isn't in any slots on our mob. +/// Does not check if the passed item is null, which may result in unexpected outcoms. +/mob/proc/get_slot_by_item(obj/item/looking_for) + if(looking_for in held_items) + return ITEM_SLOT_HANDS + + return null ///Is the mob incapacitated /mob/proc/incapacitated(ignore_restraints = FALSE, ignore_grab = FALSE, check_immobilized = FALSE) @@ -454,7 +462,7 @@ else client.perspective = EYE_PERSPECTIVE client.eye = loc - return 1 + return TRUE /// Show the mob's inventory to another mob /mob/proc/show_inv(mob/user) diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index de1cb857ed4e..adb03f1962f4 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -28,6 +28,45 @@ zone = BODY_ZONE_CHEST return zone +/// Returns a generic path of the object based on the slot +/proc/get_path_by_slot(slot_id) + switch(slot_id) + if(ITEM_SLOT_BACK) + return /obj/item/storage/backpack + if(ITEM_SLOT_MASK) + return /obj/item/clothing/mask + if(ITEM_SLOT_NECK) + return /obj/item/clothing/neck + if(ITEM_SLOT_HANDCUFFED) + return /obj/item/restraints/handcuffs + if(ITEM_SLOT_LEGCUFFED) + return /obj/item/restraints/legcuffs + if(ITEM_SLOT_BELT) + return /obj/item/storage/belt + if(ITEM_SLOT_ID) + return /obj/item/card/id + if(ITEM_SLOT_EARS) + return /obj/item/clothing/ears + if(ITEM_SLOT_EYES) + return /obj/item/clothing/glasses + if(ITEM_SLOT_GLOVES) + return /obj/item/clothing/gloves + if(ITEM_SLOT_HEAD) + return /obj/item/clothing/head + if(ITEM_SLOT_FEET) + return /obj/item/clothing/shoes + if(ITEM_SLOT_OCLOTHING) + return /obj/item/clothing/suit + if(ITEM_SLOT_ICLOTHING) + return /obj/item/clothing/under + if(ITEM_SLOT_LPOCKET) + return /obj/item + if(ITEM_SLOT_RPOCKET) + return /obj/item + if(ITEM_SLOT_SUITSTORE) + return /obj/item + return null + /** * Return the zone or randomly, another valid zone * @@ -169,13 +208,9 @@ var/static/regex/nostutter = regex(@@[aeiouAEIOU "'()[\]{}.!?,:;_`~-]@) for(var/i = 1, i <= leng, i += length(rawchar)) rawchar = newletter = phrase[i] - if(prob(80) && !nostutter.Find(rawchar)) - if(prob(10)) - newletter = "[newletter]-[newletter]-[newletter]-[newletter]" - else if(prob(20)) + if(prob(70) && !nostutter.Find(rawchar)) + if(prob(25)) newletter = "[newletter]-[newletter]-[newletter]" - else if (prob(5)) - newletter = "" else newletter = "[newletter]-[newletter]" . += newletter @@ -344,9 +379,6 @@ return FALSE if(M.mind && M.mind.special_role)//If they have a mind and special role, they are some type of traitor or antagonist. switch(SSticker.mode.config_tag) - if("cult") - if(M.mind in SSticker.mode.cult) - return 2 if("nuclear") if(M.mind.has_antag_datum(/datum/antagonist/nukeop,TRUE)) return 2 diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 59b64f63d139..ef21915e1fca 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -507,13 +507,6 @@ . = new_slime qdel(src) -/mob/proc/become_overmind(starting_points = 60) - var/mob/camera/blob/B = new /mob/camera/blob(get_turf(src), starting_points) - B.key = key - . = B - qdel(src) - - /mob/living/carbon/human/proc/corgize() if (notransform) return @@ -624,9 +617,6 @@ if(!MP) return 0 //Sanity, this should never happen. - if(ispath(MP, /mob/living/simple_animal/hostile/construct)) - return 0 //Verbs do not appear for players. - //Good mobs! if(ispath(MP, /mob/living/simple_animal/pet/cat)) return 1 @@ -638,8 +628,6 @@ return 1 if(ispath(MP, /mob/living/simple_animal/hostile/mushroom)) return 1 - if(ispath(MP, /mob/living/simple_animal/shade)) - return 1 if(ispath(MP, /mob/living/simple_animal/hostile/killertomato)) return 1 if(ispath(MP, /mob/living/simple_animal/mouse)) diff --git a/code/modules/mod/mod_actions.dm b/code/modules/mod/mod_actions.dm new file mode 100644 index 000000000000..1df1f7b8894b --- /dev/null +++ b/code/modules/mod/mod_actions.dm @@ -0,0 +1,193 @@ +/datum/action/item_action/mod + background_icon_state = "bg_tech_blue" + icon_icon = 'icons/mob/actions/actions_mod.dmi' + check_flags = AB_CHECK_CONSCIOUS + /// Whether this action is intended for the AI. Stuff breaks a lot if this is done differently. + var/ai_action = FALSE + +/datum/action/item_action/mod/New(Target) + ..() + if(!istype(Target, /obj/item/mod/control)) + qdel(src) + return + if(ai_action) + background_icon_state = ACTION_BUTTON_DEFAULT_BACKGROUND + +/datum/action/item_action/mod/Grant(mob/user) + var/obj/item/mod/control/mod = target + if(ai_action && user != mod.ai) + return + else if(!ai_action && user == mod.ai) + return + return ..() + +/datum/action/item_action/mod/Remove(mob/user) + var/obj/item/mod/control/mod = target + if(ai_action && user != mod.ai) + return + else if(!ai_action && user == mod.ai) + return + return ..() + +/datum/action/item_action/mod/Trigger(trigger_flags) + if(!IsAvailable()) + return FALSE + var/obj/item/mod/control/mod = target + if(mod.malfunctioning && prob(75)) + mod.balloon_alert(usr, "button malfunctions!") + return FALSE + return TRUE + +/datum/action/item_action/mod/deploy + name = "Deploy MODsuit" + desc = "LMB: Deploy/Undeploy part. Alt Click: Deploy/Undeploy full suit." + button_icon_state = "deploy" + +/datum/action/item_action/mod/deploy/Trigger(trigger_flags) + . = ..() + if(!.) + return + var/obj/item/mod/control/mod = target + if(trigger_flags & TRIGGER_SECONDARY_ACTION) + mod.quick_deploy(usr) + else + mod.choose_deploy(usr) + +/datum/action/item_action/mod/deploy/ai + ai_action = TRUE + +/datum/action/item_action/mod/activate + name = "Activate MODsuit" + desc = "LMB: Activate/Deactivate suit with prompt. Alt Click: Activate/Deactivate suit skipping prompt." + button_icon_state = "activate" + /// First time clicking this will set it to TRUE, second time will activate it. + var/ready = FALSE + +/datum/action/item_action/mod/activate/Trigger(trigger_flags) + . = ..() + if(!.) + return + if(!(trigger_flags & TRIGGER_SECONDARY_ACTION) && !ready) + ready = TRUE + button_icon_state = "activate-ready" + if(!ai_action) + background_icon_state = "bg_tech" + UpdateButtonIcon() + addtimer(CALLBACK(src, PROC_REF(reset_ready)), 3 SECONDS) + return + var/obj/item/mod/control/mod = target + reset_ready() + mod.toggle_activate(usr) + +/// Resets the state requiring to be doubleclicked again. +/datum/action/item_action/mod/activate/proc/reset_ready() + ready = FALSE + button_icon_state = initial(button_icon_state) + if(!ai_action) + background_icon_state = initial(background_icon_state) + UpdateButtonIcon() + +/datum/action/item_action/mod/activate/ai + ai_action = TRUE + +/datum/action/item_action/mod/module + name = "Toggle Module" + desc = "Toggle a MODsuit module." + button_icon_state = "module" + +/datum/action/item_action/mod/module/Trigger(trigger_flags) + . = ..() + if(!.) + return + var/obj/item/mod/control/mod = target + mod.quick_module(usr) + +/datum/action/item_action/mod/module/ai + ai_action = TRUE + +/datum/action/item_action/mod/panel + name = "MODsuit Panel" + desc = "Open the MODsuit's panel." + button_icon_state = "panel" + +/datum/action/item_action/mod/panel/Trigger(trigger_flags) + . = ..() + if(!.) + return + var/obj/item/mod/control/mod = target + mod.ui_interact(usr) + +/datum/action/item_action/mod/panel/ai + ai_action = TRUE + +/datum/action/item_action/mod/pinned_module + desc = "Activate the module." + /// Overrides the icon applications. + var/override = FALSE + /// Module we are linked to. + var/obj/item/mod/module/module + /// A ref to the mob we are pinned to. + var/pinner_ref + +/datum/action/item_action/mod/pinned_module/New(Target, obj/item/mod/module/linked_module, mob/user) + if(isAI(user)) + ai_action = TRUE + ..() + module = linked_module + name = "Activate [capitalize(linked_module.name)]" + desc = "Quickly activate [linked_module]." + icon_icon = linked_module.icon + button_icon_state = linked_module.icon_state + RegisterSignal(linked_module, COMSIG_MODULE_ACTIVATED, PROC_REF(on_module_activate)) + RegisterSignal(linked_module, COMSIG_MODULE_DEACTIVATED, PROC_REF(on_module_deactivate)) + RegisterSignal(linked_module, COMSIG_MODULE_USED, PROC_REF(on_module_use)) + +/datum/action/item_action/mod/pinned_module/Destroy() + module.pinned_to -= pinner_ref + module = null + return ..() + +/datum/action/item_action/mod/pinned_module/Grant(mob/user) + var/user_ref = REF(user) + if(!pinner_ref) + pinner_ref = user_ref + module.pinned_to[pinner_ref] = src + else if(pinner_ref != user_ref) + return + return ..() + +/datum/action/item_action/mod/pinned_module/Trigger(trigger_flags) + . = ..() + if(!.) + return + module.on_select() + +/datum/action/item_action/mod/pinned_module/ApplyIcon(atom/movable/screen/movable/action_button/current_button, force) + . = ..(current_button, force = TRUE) + if(override) + return + var/obj/item/mod/control/mod = target + if(module == mod.selected_module) + current_button.add_overlay(image(icon = 'icons/hud/radial.dmi', icon_state = "module_selected", layer = FLOAT_LAYER-0.1)) + else if(module.active) + current_button.add_overlay(image(icon = 'icons/hud/radial.dmi', icon_state = "module_active", layer = FLOAT_LAYER-0.1)) + if(!COOLDOWN_FINISHED(module, cooldown_timer)) + var/image/cooldown_image = image(icon = 'icons/hud/radial.dmi', icon_state = "module_cooldown") + current_button.add_overlay(cooldown_image) + addtimer(CALLBACK(current_button, TYPE_PROC_REF(/image, cut_overlay), cooldown_image), COOLDOWN_TIMELEFT(module, cooldown_timer)) + + +/datum/action/item_action/mod/pinned_module/proc/on_module_activate(datum/source) + SIGNAL_HANDLER + + UpdateButtonIcon() + +/datum/action/item_action/mod/pinned_module/proc/on_module_deactivate(datum/source) + SIGNAL_HANDLER + + UpdateButtonIcon() + +/datum/action/item_action/mod/pinned_module/proc/on_module_use(datum/source) + SIGNAL_HANDLER + + UpdateButtonIcon() diff --git a/code/modules/mod/mod_activation.dm b/code/modules/mod/mod_activation.dm new file mode 100644 index 000000000000..cb61728f2cbb --- /dev/null +++ b/code/modules/mod/mod_activation.dm @@ -0,0 +1,244 @@ +#define MOD_ACTIVATION_STEP_FLAGS IGNORE_USER_LOC_CHANGE|IGNORE_TARGET_LOC_CHANGE|IGNORE_HELD_ITEM|IGNORE_INCAPACITATED + +/// Creates a radial menu from which the user chooses parts of the suit to deploy/retract. Repeats until all parts are extended or retracted. +/obj/item/mod/control/proc/choose_deploy(mob/user) + if(!length(mod_parts)) + return + var/list/display_names = list() + var/list/items = list() + for(var/obj/item/part as anything in mod_parts) + display_names[part.name] = REF(part) + var/image/part_image = image(icon = part.icon, icon_state = part.icon_state) + if(part.loc != src) + part_image.underlays += image(icon = 'icons/hud/radial.dmi', icon_state = "module_active") + items += list(part.name = part_image) + var/pick = show_radial_menu(user, src, items, custom_check = FALSE, require_near = TRUE, tooltips = TRUE) + if(!pick) + return + var/part_reference = display_names[pick] + var/obj/item/part = locate(part_reference) in mod_parts + if(!istype(part) || user.incapacitated()) + return + if((active && part != helmet) || activating) + balloon_alert(user, "deactivate the suit first!") + playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + return + var/parts_to_check = mod_parts - part + if(part.loc == src) + deploy(user, part) + for(var/obj/item/checking_part as anything in parts_to_check) + if(checking_part.loc != src) + continue + choose_deploy(user) + break + else + retract(user, part) + for(var/obj/item/checking_part as anything in parts_to_check) + if(checking_part.loc == src) + continue + choose_deploy(user) + break + +/// Quickly deploys all parts (or retracts if all are on the wearer) +/obj/item/mod/control/proc/quick_deploy(mob/user) + if(active || activating) + balloon_alert(user, "deactivate the suit first!") + playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + return FALSE + var/deploy = FALSE + for(var/obj/item/part as anything in mod_parts) + if(part.loc != src) + continue + deploy = TRUE + for(var/obj/item/part as anything in mod_parts) + if(deploy && part.loc == src) + deploy(null, part) + else if(!deploy && part.loc != src) + retract(null, part) + wearer.visible_message(span_notice("[wearer]'s [src] [deploy ? "deploys" : "retracts"] its' parts with a mechanical hiss."), + span_notice("[src] [deploy ? "deploys" : "retracts"] its' parts with a mechanical hiss."), + span_hear("You hear a mechanical hiss.")) + playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + return TRUE + +/// Deploys a part of the suit onto the user. +/obj/item/mod/control/proc/deploy(mob/user, obj/item/part) + if(part.loc != src) + if(!user) + return FALSE + balloon_alert(user, "[part.name] already deployed!") + playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + if(part in overslotting_parts) + var/obj/item/overslot = wearer.get_item_by_slot(part.slot_flags) + if(overslot) + overslotting_parts[part] = overslot + wearer.transferItemToLoc(overslot, part, force = TRUE) + RegisterSignal(part, COMSIG_ATOM_EXITED, PROC_REF(on_overslot_exit)) + if(wearer.equip_to_slot_if_possible(part, part.slot_flags, qdel_on_fail = FALSE, disable_warning = TRUE)) + ADD_TRAIT(part, TRAIT_NODROP, MOD_TRAIT) + if(!user) + return TRUE + wearer.visible_message(span_notice("[wearer]'s [part.name] deploy[part.p_s()] with a mechanical hiss."), + span_notice("[part] deploy[part.p_s()] with a mechanical hiss."), + span_hear("You hear a mechanical hiss.")) + playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + return TRUE + else + if(!user) + return FALSE + balloon_alert(user, "bodypart clothed!") + playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + return FALSE + +/// Retract a part of the suit from the user. +/obj/item/mod/control/proc/retract(mob/user, obj/item/part) + if(part.loc == src) + if(!user) + return FALSE + balloon_alert(user, "[part.name] already retracted!") + playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + REMOVE_TRAIT(part, TRAIT_NODROP, MOD_TRAIT) + wearer.transferItemToLoc(part, src, force = TRUE) + if(overslotting_parts[part]) + UnregisterSignal(part, COMSIG_ATOM_EXITED) + var/obj/item/overslot = overslotting_parts[part] + if(!wearer.equip_to_slot_if_possible(overslot, overslot.slot_flags, qdel_on_fail = FALSE, disable_warning = TRUE)) + wearer.dropItemToGround(overslot, force = TRUE, silent = TRUE) + overslotting_parts[part] = null + if(!user) + return + wearer.visible_message(span_notice("[wearer]'s [part.name] retract[part.p_s()] back into [src] with a mechanical hiss."), + span_notice("[part] retract[part.p_s()] back into [src] with a mechanical hiss."), + span_hear("You hear a mechanical hiss.")) + playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + +/// Starts the activation sequence, where parts of the suit activate one by one until the whole suit is on +/obj/item/mod/control/proc/toggle_activate(mob/user, force_deactivate = FALSE) + if(!wearer) + if(!force_deactivate) + balloon_alert(user, "put suit on back!") + playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + return FALSE + if(!force_deactivate && (SEND_SIGNAL(src, COMSIG_MOD_ACTIVATE, user) & MOD_CANCEL_ACTIVATE)) + playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + return FALSE + for(var/obj/item/part as anything in mod_parts) + if(!force_deactivate && part.loc == src) + balloon_alert(user, "deploy all parts first!") + playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + return FALSE + if(locked && !active && !allowed(user) && !force_deactivate) + balloon_alert(user, "access insufficient!") + playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + return FALSE + if(!get_charge() && !force_deactivate) + balloon_alert(user, "suit not powered!") + playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + return FALSE + if(open && !force_deactivate) + balloon_alert(user, "close the suit panel!") + playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + return FALSE + if(activating) + if(!force_deactivate) + balloon_alert(user, "suit already [active ? "shutting down" : "starting up"]!") + playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + return FALSE + for(var/obj/item/mod/module/module as anything in modules) + if(!module.active || module.allowed_inactive) + continue + module.on_deactivation(display_message = FALSE) + activating = TRUE + to_chat(wearer, span_notice("MODsuit [active ? "shutting down" : "starting up"].")) + if(do_after(wearer, activation_step_time, wearer, MOD_ACTIVATION_STEP_FLAGS, extra_checks = CALLBACK(src, PROC_REF(has_wearer)), hidden = TRUE)) + to_chat(wearer, span_notice("[boots] [active ? "relax their grip on your legs" : "seal around your feet"].")) + playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + seal_part(boots, seal = !active) + if(do_after(wearer, activation_step_time, wearer, MOD_ACTIVATION_STEP_FLAGS, extra_checks = CALLBACK(src, PROC_REF(has_wearer)), hidden = TRUE)) + to_chat(wearer, span_notice("[gauntlets] [active ? "become loose around your fingers" : "tighten around your fingers and wrists"].")) + playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + seal_part(gauntlets, seal = !active) + if(do_after(wearer, activation_step_time, wearer, MOD_ACTIVATION_STEP_FLAGS, extra_checks = CALLBACK(src, PROC_REF(has_wearer)), hidden = TRUE)) + to_chat(wearer, span_notice("[chestplate] [active ? "releases your chest" : "cinches tightly against your chest"].")) + playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + seal_part(chestplate, seal = !active) + if(do_after(wearer, activation_step_time, wearer, MOD_ACTIVATION_STEP_FLAGS, extra_checks = CALLBACK(src, PROC_REF(has_wearer)), hidden = TRUE)) + to_chat(wearer, span_notice("[helmet] hisses [active ? "open" : "closed"].")) + playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + seal_part(helmet, seal = !active) + if(do_after(wearer, activation_step_time, wearer, MOD_ACTIVATION_STEP_FLAGS, extra_checks = CALLBACK(src, PROC_REF(has_wearer)), hidden = TRUE)) + to_chat(wearer, span_notice("Systems [active ? "shut down. Parts unsealed. Goodbye" : "started up. Parts sealed. Welcome"], [wearer].")) + if(ai) + to_chat(ai, span_notice("SYSTEMS [active ? "DEACTIVATED. GOODBYE" : "ACTIVATED. WELCOME"]: \"[ai]\"")) + finish_activation(on = !active) + if(active) + playsound(src, 'sound/machines/synth_yes.ogg', 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, frequency = 6000) + if(!malfunctioning) + wearer.playsound_local(get_turf(src), 'sound/mecha/nominal.ogg', 50) + else + playsound(src, 'sound/machines/synth_no.ogg', 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE, frequency = 6000) + activating = FALSE + return TRUE + +///Seals or unseals the given part +/obj/item/mod/control/proc/seal_part(obj/item/clothing/part, seal) + if(seal) + part.clothing_flags |= part.visor_flags + part.flags_inv |= part.visor_flags_inv + part.flags_cover |= part.visor_flags_cover + part.heat_protection = initial(part.heat_protection) + part.cold_protection = initial(part.cold_protection) + part.alternate_worn_layer = null + else + part.flags_cover &= ~part.visor_flags_cover + part.flags_inv &= ~part.visor_flags_inv + part.clothing_flags &= ~part.visor_flags + part.heat_protection = NONE + part.cold_protection = NONE + part.alternate_worn_layer = mod_parts[part] + if(part == boots) + boots.icon_state = "[skin]-boots[seal ? "-sealed" : ""]" + wearer.update_inv_shoes() + if(part == gauntlets) + gauntlets.icon_state = "[skin]-gauntlets[seal ? "-sealed" : ""]" + wearer.update_inv_gloves() + if(part == chestplate) + chestplate.icon_state = "[skin]-chestplate[seal ? "-sealed" : ""]" + wearer.update_inv_wear_suit() + wearer.update_inv_w_uniform() + if(part == helmet) + helmet.icon_state = "[skin]-helmet[seal ? "-sealed" : ""]" + wearer.update_inv_head() + wearer.update_inv_wear_mask() + wearer.update_inv_glasses() + wearer.update_hair() + +/// Finishes the suit's activation, starts processing +/obj/item/mod/control/proc/finish_activation(on) + active = on + if(active) + for(var/obj/item/mod/module/module as anything in modules) + module.on_suit_activation() + START_PROCESSING(SSobj, src) + else + for(var/obj/item/mod/module/module as anything in modules) + module.on_suit_deactivation() + STOP_PROCESSING(SSobj, src) + update_speed() + update_icon_state() + wearer.update_inv_back(slot_flags) + +/// Quickly deploys all the suit parts and if successful, seals them and turns on the suit. Intended mostly for outfits. +/obj/item/mod/control/proc/quick_activation() + var/seal = TRUE + for(var/obj/item/part as anything in mod_parts) + if(!deploy(null, part)) + seal = FALSE + if(!seal) + return + for(var/obj/item/part as anything in mod_parts) + seal_part(part, seal = TRUE) + finish_activation(on = TRUE) + +/obj/item/mod/control/proc/has_wearer() + return wearer diff --git a/code/modules/mod/mod_ai.dm b/code/modules/mod/mod_ai.dm new file mode 100644 index 000000000000..a05717970348 --- /dev/null +++ b/code/modules/mod/mod_ai.dm @@ -0,0 +1,125 @@ +/** + * Simple proc to insert the pAI into the MODsuit. + * + * user - The person trying to put the pAI into the MODsuit. + * card - The pAI card we're slotting in the MODsuit. + */ + +/obj/item/mod/control/proc/insert_pai(mob/user, obj/item/paicard/card) + if(ai) + balloon_alert(user, "ai already installed!") + return + if(!card.pai || !card.pai.mind) + balloon_alert(user, "pai unresponsive!") + return + balloon_alert(user, "transferring to suit...") + if(!do_after(user, 5 SECONDS, target = src)) + balloon_alert(user, "interrupted!") + return FALSE + if(!user.transferItemToLoc(card, src)) + return + + card.pai.canholo = FALSE + ai = card.pai + balloon_alert(user, "pAI transferred to suit") + balloon_alert(ai, "transferred to a suit") + ai.remote_control = src + for(var/datum/action/action as anything in actions) + action.Grant(ai) + return TRUE + +/** + * Simple proc to extract the pAI from the MODsuit. It's the proc to call if you want to take it out, + * remove_pai() is there so atom_destruction() doesn't have any risk of sleeping. + * + * user - The person trying to take out the pAI from the MODsuit. + * forced - Whether or not we skip the checks and just eject the pAI. Defaults to FALSE. + * feedback - Whether to give feedback via balloon alerts or not. Defaults to TRUE. + */ +/obj/item/mod/control/proc/extract_pai(mob/user, forced = FALSE, feedback = TRUE) + if(!ai) + if(user && feedback) + balloon_alert(user, "no pAI to remove!") + return + if(!ispAI(ai)) + if(user && feedback) + balloon_alert(user, "onboard AI cannot fit in this card!") + return + if(!forced) + if(!open) + if(user && feedback) + balloon_alert(user, "open the suit panel!") + return FALSE + if(!do_after(user, 5 SECONDS, target = src)) + if(user && feedback) + balloon_alert(user, "interrupted!") + return FALSE + + remove_pai(feedback) + + if(feedback && user) + balloon_alert(user, "pAI removed from the suit") + +/** + * Simple proc that handles the safe removal of the pAI from a MOD control unit. + * + * Arguments: + * * feedback - Whether or not we want to give balloon alert feedback to the ai. Defaults to FALSE. + */ +/obj/item/mod/control/proc/remove_pai(feedback = FALSE) + if(!ispAI(ai)) + return + var/mob/living/silicon/pai/pai = ai + var/turf/drop_off = get_turf(src) + if(drop_off) // In case there's no drop_off, the pAI will simply get deleted. + pai.card.forceMove(drop_off) + + for(var/datum/action/action as anything in actions) + if(action.owner == pai) + action.Remove(pai) + + if(feedback) + balloon_alert(pai, "removed from a suit") + pai.remote_control = null + pai.canholo = TRUE + pai = null + +#define MOVE_DELAY 2 +#define WEARER_DELAY 1 +#define LONE_DELAY 5 +#define CELL_PER_STEP (DEFAULT_CHARGE_DRAIN * 2.5) +#define AI_FALL_TIME (1 SECONDS) + +/*obj/item/mod/control/relaymove(mob/user, direction) + var/cell = get_cell() + if((!active && wearer) || !cell || cell.charge < CELL_PER_STEP || user != ai || !COOLDOWN_FINISHED(src, cooldown_mod_move) || (wearer?.pulledby?.grab_state > GRAB_PASSIVE)) + return FALSE + var/timemodifier = MOVE_DELAY * (ISDIAGONALDIR(direction) ? SQRT_2 : 1) * (wearer ? WEARER_DELAY : LONE_DELAY) + if(wearer && !wearer.Process_Spacemove(direction)) + return FALSE + else if(!wearer && (!has_gravity() || !isturf(loc))) + return FALSE + COOLDOWN_START(src, cooldown_mod_move, movedelay * timemodifier + slowdown) + cell.charge = max(0, cell.charge - CELL_PER_STEP) + playsound(src, 'sound/mecha/mechmove01.ogg', 25, TRUE) + if(ismovable(wearer?.loc)) + return wearer.loc.relaymove(wearer, direction) + else if(wearer) + + var/atom/movable/mover = wearer || src + return step(mover, direction) + +#undef MOVE_DELAY +#undef WEARER_DELAY +#undef LONE_DELAY +#undef CELL_PER_STEP +#undef AI_FALL_TIME + + return + REMOVE_TRAIT(wearer, TRAIT_MOBILITY_NOREST, MOD_TRAIT) + +/obj/item/mod/control/ui_state(mob/user) + if(user == ai) + return GLOB.contained_state + return ..() +*/ diff --git a/code/modules/mod/mod_clothes.dm b/code/modules/mod/mod_clothes.dm new file mode 100644 index 000000000000..7a9e710c9382 --- /dev/null +++ b/code/modules/mod/mod_clothes.dm @@ -0,0 +1,56 @@ +/obj/item/clothing/head/mod + name = "MOD helmet" + desc = "A helmet for a MODsuit." + icon = 'icons/obj/clothing/modsuit/mod_clothing.dmi' + icon_state = "standard-helmet" + base_icon_state = "helmet" + mob_overlay_icon = 'icons/mob/clothing/modsuit/mod_clothing.dmi' + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + body_parts_covered = HEAD + heat_protection = HEAD + cold_protection = HEAD + obj_flags = IMMUTABLE_SLOW + visor_flags = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|ALLOWINTERNALS + +/obj/item/clothing/suit/mod + name = "MOD chestplate" + desc = "A chestplate for a MODsuit." + icon = 'icons/obj/clothing/modsuit/mod_clothing.dmi' + icon_state = "standard-chestplate" + base_icon_state = "chestplate" + mob_overlay_icon = 'icons/mob/clothing/modsuit/mod_clothing.dmi' + blood_overlay_type = "armor" + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + body_parts_covered = CHEST|GROIN + heat_protection = CHEST|GROIN + cold_protection = CHEST|GROIN + obj_flags = IMMUTABLE_SLOW + +/obj/item/clothing/gloves/mod + name = "MOD gauntlets" + desc = "A pair of gauntlets for a MODsuit." + icon = 'icons/obj/clothing/modsuit/mod_clothing.dmi' + icon_state = "standard-gauntlets" + base_icon_state = "gauntlets" + mob_overlay_icon = 'icons/mob/clothing/modsuit/mod_clothing.dmi' + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + body_parts_covered = HANDS|ARMS + heat_protection = HANDS|ARMS + cold_protection = HANDS|ARMS + obj_flags = IMMUTABLE_SLOW + +/obj/item/clothing/shoes/mod + name = "MOD boots" + desc = "A pair of boots for a MODsuit." + icon = 'icons/obj/clothing/modsuit/mod_clothing.dmi' + icon_state = "standard-boots" + base_icon_state = "boots" + mob_overlay_icon = 'icons/mob/clothing/modsuit/mod_clothing.dmi' + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + body_parts_covered = FEET|LEGS + heat_protection = FEET|LEGS + cold_protection = FEET|LEGS + obj_flags = IMMUTABLE_SLOW + supports_variations = DIGITIGRADE_VARIATION + can_be_tied = FALSE + visor_flags_inv = HIDESHOES diff --git a/code/modules/mod/mod_construction.dm b/code/modules/mod/mod_construction.dm new file mode 100644 index 000000000000..0f37a4fd1f11 --- /dev/null +++ b/code/modules/mod/mod_construction.dm @@ -0,0 +1,275 @@ +/obj/item/mod/construction + desc = "A part used in MOD construction." + icon = 'icons/obj/clothing/modsuit/mod_construction.dmi' + item_state = "rack_parts" + +/obj/item/mod/construction/helmet + name = "MOD helmet" + icon_state = "helmet" + +/obj/item/mod/construction/helmet/examine(mob/user) + . = ..() + . += span_notice("You could insert these into a MOD shell...") + +/obj/item/mod/construction/chestplate + name = "MOD chestplate" + icon_state = "chestplate" + +/obj/item/mod/construction/chestplate/examine(mob/user) + . = ..() + . += span_notice("You could insert these into a MOD shell...") + +/obj/item/mod/construction/gauntlets + name = "MOD gauntlets" + icon_state = "gauntlets" + +/obj/item/mod/construction/gauntlets/examine(mob/user) + . = ..() + . += span_notice("You could insert these into a MOD shell...") + +/obj/item/mod/construction/boots + name = "MOD boots" + icon_state = "boots" + +/obj/item/mod/construction/boots/examine(mob/user) + . = ..() + . += span_notice("You could insert these into a MOD shell...") + +/obj/item/mod/construction/broken_core + name = "broken MOD core" + icon_state = "mod-core" + desc = "An internal power source for a Modular Outerwear Device. You don't seem to be able to source any power from this one, though." + +/obj/item/mod/construction/broken_core/examine(mob/user) + . = ..() + . += span_notice("You could repair it with a screwdriver...") + +/obj/item/mod/construction/broken_core/screwdriver_act(mob/living/user, obj/item/tool) + . = ..() + if(!tool.use_tool(src, user, 5 SECONDS, volume = 30)) + return + new /obj/item/mod/core/standard(drop_location()) + qdel(src) + +/obj/item/mod/construction/plating + name = "MOD external plating" + desc = "External plating used to finish a MOD control unit." + icon_state = "standard-plating" + var/datum/mod_theme/theme = /datum/mod_theme + +/obj/item/mod/construction/plating/Initialize(mapload) + . = ..() + var/datum/mod_theme/used_theme = GLOB.mod_themes[theme] + name = "MOD [used_theme.name] external plating" + desc = "[desc] [used_theme.desc]" + icon_state = "[used_theme.default_skin]-plating" + +/obj/item/mod/construction/plating/engineering + theme = /datum/mod_theme/engineering + +/obj/item/mod/construction/plating/atmospheric + theme = /datum/mod_theme/atmospheric + +/obj/item/mod/construction/plating/medical + theme = /datum/mod_theme/medical + +/obj/item/mod/construction/plating/security + theme = /datum/mod_theme/security + +#define START_STEP "start" +#define CORE_STEP "core" +#define SCREWED_CORE_STEP "screwed_core" +#define HELMET_STEP "helmet" +#define CHESTPLATE_STEP "chestplate" +#define GAUNTLETS_STEP "gauntlets" +#define BOOTS_STEP "boots" +#define WRENCHED_ASSEMBLY_STEP "wrenched_assembly" +#define SCREWED_ASSEMBLY_STEP "screwed_assembly" + +/obj/item/mod/construction/shell + name = "MOD shell" + icon_state = "mod-construction_start" + desc = "A MOD shell." + var/obj/item/core + var/obj/item/helmet + var/obj/item/chestplate + var/obj/item/gauntlets + var/obj/item/boots + var/step = START_STEP + +/obj/item/mod/construction/shell/examine(mob/user) + . = ..() + var/display_text + switch(step) + if(START_STEP) + display_text = "It looks like it's missing a MOD core..." + if(CORE_STEP) + display_text = "The core seems loose..." + if(SCREWED_CORE_STEP) + display_text = "It looks like it's missing a helmet..." + if(HELMET_STEP) + display_text = "It looks like it's missing a chestplate..." + if(CHESTPLATE_STEP) + display_text = "It looks like it's missing gauntlets..." + if(GAUNTLETS_STEP) + display_text = "It looks like it's missing boots..." + if(BOOTS_STEP) + display_text = "The assembly seems unsecured..." + if(WRENCHED_ASSEMBLY_STEP) + display_text = "The assembly seems loose..." + if(SCREWED_ASSEMBLY_STEP) + display_text = "All it's missing is external plating..." + . += span_notice(display_text) + +/obj/item/mod/construction/shell/attackby(obj/item/part, mob/user, params) + . = ..() + switch(step) + if(START_STEP) + if(!istype(part, /obj/item/mod/core)) + return + if(!user.transferItemToLoc(part, src)) + balloon_alert(user, "core stuck to your hand!") + return + playsound(src, 'sound/machines/click.ogg', 30, TRUE) + balloon_alert(user, "core inserted") + core = part + step = CORE_STEP + if(CORE_STEP) + if(part.tool_behaviour == TOOL_SCREWDRIVER) //Construct + if(part.use_tool(src, user, 0, volume=30)) + balloon_alert(user, "core screwed") + step = SCREWED_CORE_STEP + else if(part.tool_behaviour == TOOL_CROWBAR) //Deconstruct + if(part.use_tool(src, user, 0, volume=30)) + core.forceMove(drop_location()) + balloon_alert(user, "core taken out") + step = START_STEP + if(SCREWED_CORE_STEP) + if(istype(part, /obj/item/mod/construction/helmet)) //Construct + if(!user.transferItemToLoc(part, src)) + balloon_alert(user, "helmet stuck to your hand!") + return + playsound(src, 'sound/machines/click.ogg', 30, TRUE) + balloon_alert(user, "helmet added") + helmet = part + step = HELMET_STEP + else if(part.tool_behaviour == TOOL_SCREWDRIVER) //Deconstruct + if(part.use_tool(src, user, 0, volume=30)) + balloon_alert(user, "core unscrewed") + step = CORE_STEP + if(HELMET_STEP) + if(istype(part, /obj/item/mod/construction/chestplate)) //Construct + if(!user.transferItemToLoc(part, src)) + balloon_alert(user, "chestplate stuck to your hand!") + return + playsound(src, 'sound/machines/click.ogg', 30, TRUE) + balloon_alert(user, "chestplate added") + chestplate = part + step = CHESTPLATE_STEP + else if(part.tool_behaviour == TOOL_CROWBAR) //Deconstruct + if(part.use_tool(src, user, 0, volume=30)) + helmet.forceMove(drop_location()) + balloon_alert(user, "helmet removed") + helmet = null + step = SCREWED_CORE_STEP + if(CHESTPLATE_STEP) + if(istype(part, /obj/item/mod/construction/gauntlets)) //Construct + if(!user.transferItemToLoc(part, src)) + balloon_alert(user, "gauntlets stuck to your hand!") + return + playsound(src, 'sound/machines/click.ogg', 30, TRUE) + balloon_alert(user, "gauntlets added") + gauntlets = part + step = GAUNTLETS_STEP + else if(part.tool_behaviour == TOOL_CROWBAR) //Deconstruct + if(part.use_tool(src, user, 0, volume=30)) + chestplate.forceMove(drop_location()) + balloon_alert(user, "chestplate removed") + chestplate = null + step = HELMET_STEP + if(GAUNTLETS_STEP) + if(istype(part, /obj/item/mod/construction/boots)) //Construct + if(!user.transferItemToLoc(part, src)) + balloon_alert(user, "boots added") + return + playsound(src, 'sound/machines/click.ogg', 30, TRUE) + balloon_alert(user, "you fit [part] onto [src].") + boots = part + step = BOOTS_STEP + else if(part.tool_behaviour == TOOL_CROWBAR) //Deconstruct + if(part.use_tool(src, user, 0, volume=30)) + gauntlets.forceMove(drop_location()) + balloon_alert(user, "gauntlets removed") + gauntlets = null + step = CHESTPLATE_STEP + if(BOOTS_STEP) + if(part.tool_behaviour == TOOL_WRENCH) //Construct + if(part.use_tool(src, user, 0, volume=30)) + balloon_alert(user, "assembly secured") + step = WRENCHED_ASSEMBLY_STEP + else if(part.tool_behaviour == TOOL_CROWBAR) //Deconstruct + if(part.use_tool(src, user, 0, volume=30)) + boots.forceMove(drop_location()) + balloon_alert(user, "boots removed") + boots = null + step = GAUNTLETS_STEP + if(WRENCHED_ASSEMBLY_STEP) + if(part.tool_behaviour == TOOL_SCREWDRIVER) //Construct + if(part.use_tool(src, user, 0, volume=30)) + balloon_alert(user, "assembly screwed") + step = SCREWED_ASSEMBLY_STEP + else if(part.tool_behaviour == TOOL_WRENCH) //Deconstruct + if(part.use_tool(src, user, 0, volume=30)) + balloon_alert(user, "assembly unsecured") + step = BOOTS_STEP + if(SCREWED_ASSEMBLY_STEP) + if(istype(part, /obj/item/mod/construction/plating)) //Construct + var/obj/item/mod/construction/plating/external_plating = part + if(!user.transferItemToLoc(part, src)) + return + playsound(src, 'sound/machines/click.ogg', 30, TRUE) + balloon_alert(user, "suit finished") + var/obj/item/mod = new /obj/item/mod/control(drop_location(), external_plating.theme, null, core) + core = null + qdel(src) + user.put_in_hands(mod) + else if(part.tool_behaviour == TOOL_SCREWDRIVER) //Construct + if(part.use_tool(src, user, 0, volume=30)) + balloon_alert(user, "assembly unscrewed") + step = SCREWED_ASSEMBLY_STEP + update_icon_state() + +/obj/item/mod/construction/shell/update_icon_state() + . = ..() + icon_state = "mod-construction_[step]" + +/obj/item/mod/construction/shell/Destroy() + QDEL_NULL(core) + QDEL_NULL(helmet) + QDEL_NULL(chestplate) + QDEL_NULL(gauntlets) + QDEL_NULL(boots) + return ..() + +/obj/item/mod/construction/shell/handle_atom_del(atom/deleted_atom) + if(deleted_atom == core) + core = null + if(deleted_atom == helmet) + helmet = null + if(deleted_atom == chestplate) + chestplate = null + if(deleted_atom == gauntlets) + gauntlets = null + if(deleted_atom == boots) + boots = null + return ..() + +#undef START_STEP +#undef CORE_STEP +#undef SCREWED_CORE_STEP +#undef HELMET_STEP +#undef CHESTPLATE_STEP +#undef GAUNTLETS_STEP +#undef BOOTS_STEP +#undef WRENCHED_ASSEMBLY_STEP +#undef SCREWED_ASSEMBLY_STEP diff --git a/code/modules/mod/mod_control.dm b/code/modules/mod/mod_control.dm new file mode 100644 index 000000000000..0199662862f8 --- /dev/null +++ b/code/modules/mod/mod_control.dm @@ -0,0 +1,713 @@ +/// MODsuits, trade-off between armor and utility +/obj/item/mod + name = "Base MOD" + desc = "You should not see this, yell at a coder!" + icon = 'icons/obj/clothing/modsuit/mod_clothing.dmi' + +/obj/item/mod/control + name = "MOD control unit" + desc = "The control unit of a Modular Outerwear Device, a powered, back-mounted suit that protects against various environments." + icon_state = "control" + base_icon_state = "control" + item_state = "mod_control" + mob_overlay_icon = 'icons/mob/clothing/modsuit/mod_clothing.dmi' + w_class = WEIGHT_CLASS_BULKY + slot_flags = ITEM_SLOT_BACK + strip_delay = 10 SECONDS + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "fire" = 0, "acid" = 0) + actions_types = list( + /datum/action/item_action/mod/deploy, + /datum/action/item_action/mod/activate, + /datum/action/item_action/mod/panel, + /datum/action/item_action/mod/module, + /datum/action/item_action/mod/deploy/ai, + /datum/action/item_action/mod/activate/ai, + /datum/action/item_action/mod/panel/ai, + /datum/action/item_action/mod/module/ai, + ) + resistance_flags = NONE + max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT + min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT + siemens_coefficient = 0.5 + //alternate_worn_layer = HAND_LAYER+0.1 //we want it to go above generally everything, but not hands + /// The MOD's theme, decides on some stuff like armor and statistics. + var/datum/mod_theme/theme = /datum/mod_theme + /// Looks of the MOD. + var/skin = "standard" + /// Theme of the MOD TGUI + var/ui_theme = "ntos" + /// If the suit is deployed and turned on. + var/active = FALSE + /// If the suit wire/module hatch is open. + var/open = FALSE + /// If the suit is ID locked. + var/locked = FALSE + /// If the suit is malfunctioning. + var/malfunctioning = FALSE + /// If the suit is currently activating/deactivating. + var/activating = FALSE + /// How long the MOD is electrified for. + var/seconds_electrified = MACHINE_NOT_ELECTRIFIED + /// If the suit interface is broken. + var/interface_break = FALSE + /// How much module complexity can this MOD carry. + var/complexity_max = DEFAULT_MAX_COMPLEXITY + /// How much module complexity this MOD is carrying. + var/complexity = 0 + /// Power usage of the MOD. + var/charge_drain = DEFAULT_CHARGE_DRAIN + /// Slowdown of the MOD when not active. + var/slowdown_inactive = 1.25 + /// Slowdown of the MOD when active. + var/slowdown_active = 0.75 + /// How long this MOD takes each part to seal. + var/activation_step_time = MOD_ACTIVATION_STEP_TIME + /// Extended description of the theme. + var/extended_desc + /// MOD helmet. + var/obj/item/clothing/head/mod/helmet + /// MOD chestplate. + var/obj/item/clothing/suit/mod/chestplate + /// MOD gauntlets. + var/obj/item/clothing/gloves/mod/gauntlets + /// MOD boots. + var/obj/item/clothing/shoes/mod/boots + /// MOD core. + var/obj/item/mod/core/core + /// Associated list of parts (helmet, chestplate, gauntlets, boots) to their unsealed worn layer. + var/list/mod_parts = list() + /// Associated list of parts that can overslot to their overslot (overslot means the part can cover another layer of clothing). + var/list/overslotting_parts = list() + /// Modules the MOD should spawn with. + var/list/initial_modules = list() + /// Modules the MOD currently possesses. + var/list/modules = list() + /// Currently used module. + var/obj/item/mod/module/selected_module + /// AI mob inhabiting the MOD. + var/mob/living/silicon/ai/ai + /// Delay between moves as AI. + var/movedelay = 0 + /// Cooldown for AI moves. + COOLDOWN_DECLARE(cooldown_mod_move) + /// Person wearing the MODsuit. + var/mob/living/carbon/human/wearer + +/obj/item/mod/control/Initialize(mapload, datum/mod_theme/new_theme, new_skin, obj/item/mod/core/new_core) + . = ..() + if(new_theme) + theme = new_theme + theme = GLOB.mod_themes[theme] + slot_flags = theme.slot_flags + extended_desc = theme.extended_desc + slowdown_inactive = theme.slowdown_inactive + slowdown_active = theme.slowdown_active + complexity_max = theme.complexity_max + ui_theme = theme.ui_theme + charge_drain = theme.charge_drain + initial_modules += theme.inbuilt_modules + wires = new /datum/wires/mod(src) + if(length(req_access)) + locked = TRUE + new_core?.install(src) + helmet = new /obj/item/clothing/head/mod(src) + mod_parts += helmet + chestplate = new /obj/item/clothing/suit/mod(src) + chestplate.allowed = typecacheof(theme.allowed_suit_storage) + mod_parts += chestplate + gauntlets = new /obj/item/clothing/gloves/mod(src) + mod_parts += gauntlets + boots = new /obj/item/clothing/shoes/mod(src) + mod_parts += boots + var/list/all_parts = mod_parts + src + for(var/obj/item/part as anything in all_parts) + part.name = "[theme.name] [part.name]" + part.desc = "[part.desc] [theme.desc]" + part.armor = getArmor(arglist(theme.armor)) + part.resistance_flags = theme.resistance_flags + part.flags_1 |= theme.atom_flags //flags like initialization or admin spawning are here, so we cant set, have to add + part.heat_protection = NONE + part.cold_protection = NONE + part.max_heat_protection_temperature = theme.max_heat_protection_temperature + part.min_cold_protection_temperature = theme.min_cold_protection_temperature + part.siemens_coefficient = theme.siemens_coefficient + for(var/obj/item/part as anything in mod_parts) + RegisterSignal(part, COMSIG_OBJ_DESTRUCTION, PROC_REF(on_part_destruction)) + RegisterSignal(part, COMSIG_PARENT_QDELETING, PROC_REF(on_part_deletion)) + set_mod_skin(new_skin || theme.default_skin) + update_speed() + for(var/obj/item/mod/module/module as anything in initial_modules) + module = new module(src) + install(module) + RegisterSignal(src, COMSIG_ATOM_EXITED, PROC_REF(on_exit)) + movedelay = CONFIG_GET(number/movedelay/run_delay) + +/obj/item/mod/control/Destroy() + if(active) + STOP_PROCESSING(SSobj, src) + for(var/obj/item/mod/module/module as anything in modules) + uninstall(module, deleting = TRUE) + for(var/obj/item/part as anything in mod_parts) + overslotting_parts -= part + var/atom/deleting_atom + if(!QDELETED(helmet)) + deleting_atom = helmet + helmet = null + mod_parts -= deleting_atom + qdel(deleting_atom) + if(!QDELETED(chestplate)) + deleting_atom = chestplate + chestplate = null + mod_parts -= deleting_atom + qdel(deleting_atom) + if(!QDELETED(gauntlets)) + deleting_atom = gauntlets + gauntlets = null + mod_parts -= deleting_atom + qdel(deleting_atom) + if(!QDELETED(boots)) + deleting_atom = boots + boots = null + mod_parts -= deleting_atom + qdel(deleting_atom) + if(core) + QDEL_NULL(core) + QDEL_NULL(wires) + return ..() + +/obj/item/mod/control/obj_destruction(damage_flag) + for(var/obj/item/mod/module/module as anything in modules) + uninstall(module) + for(var/obj/item/part as anything in mod_parts) + if(!overslotting_parts[part]) + continue + var/obj/item/overslot = overslotting_parts[part] + overslot.forceMove(drop_location()) + overslotting_parts[part] = null + /*if(ai) + ai.controlled_equipment = null + ai.remote_control = null + for(var/datum/action/action as anything in actions) + if(action.owner == ai) + action.Remove(ai) + new /obj/item/mod/ai_minicard(drop_location(), ai)*/ + return ..() + +/obj/item/mod/control/examine(mob/user) + . = ..() + if(active) + . += span_notice("Charge: [core ? "[get_charge_percent()]%" : "No core"].") + . += span_notice("Selected module: [selected_module || "None"].") + if(!open && !active) + . += span_notice("You could put it on your back to turn it on.") + . += span_notice("You could open the cover with a screwdriver.") + else if(open) + . += span_notice("You could close the cover with a screwdriver.") + . += span_notice("You could use modules on it to install them.") + . += span_notice("You could remove modules with a crowbar.") + . += span_notice("You could update the access lock with an ID.") + . += span_notice("You could access the wire panel with a wire tool.") + if(core) + . += span_notice("You could remove [core] with a wrench.") + else + . += span_notice("You could use a MOD core on it to install one.") + if(ai) + . += span_notice("You could remove [ai] with an intellicard.") + else + . += span_notice("You could install an AI with an intellicard.") + +/obj/item/mod/control/examine_more(mob/user) + . = ..() + . += "[extended_desc]" + +/obj/item/mod/control/process(delta_time) + if(seconds_electrified > MACHINE_NOT_ELECTRIFIED) + seconds_electrified-- + if(!get_charge() && active && !activating) + power_off() + return PROCESS_KILL + var/malfunctioning_charge_drain = 0 + if(malfunctioning) + malfunctioning_charge_drain = rand(1,20) + subtract_charge((charge_drain + malfunctioning_charge_drain)*delta_time) + update_charge_alert() + for(var/obj/item/mod/module/module as anything in modules) + if(malfunctioning && module.active && DT_PROB(5, delta_time)) + module.on_deactivation(display_message = TRUE) + module.on_process(delta_time) + +/obj/item/mod/control/equipped(mob/user, slot) + ..() + if(slot == slot_flags) + set_wearer(user) + else if(wearer) + unset_wearer() + +/obj/item/mod/control/dropped(mob/user) + . = ..() + if(!wearer) + return + clean_up() + +/obj/item/mod/control/item_action_slot_check(slot) + if(slot & slot_flags) + return TRUE + +/obj/item/mod/control/Moved(atom/old_loc, movement_dir, forced, list/old_locs, momentum_change = TRUE) + . = ..() + if(!wearer || old_loc != wearer || loc == wearer) + return + clean_up() + +/obj/item/mod/control/allow_attack_hand_drop(mob/user) + if(user != wearer) + return ..() + for(var/obj/item/part as anything in mod_parts) + if(part.loc != src) + balloon_alert(user, "retract parts first!") + playsound(src, 'sound/machines/scanbuzz.ogg', 25, FALSE, SILENCED_SOUND_EXTRARANGE) + return FALSE + +/obj/item/mod/control/MouseDrop(atom/over_object) + if(usr != wearer || !istype(over_object, /atom/movable/screen/inventory/hand)) + return ..() + for(var/obj/item/part as anything in mod_parts) + if(part.loc != src) + balloon_alert(wearer, "retract parts first!") + playsound(src, 'sound/machines/scanbuzz.ogg', 25, FALSE, SILENCED_SOUND_EXTRARANGE) + return + if(!wearer.incapacitated()) + var/atom/movable/screen/inventory/hand/ui_hand = over_object + if(wearer.putItemFromInventoryInHandIfPossible(src, ui_hand.held_index)) + add_fingerprint(usr) + return ..() + +/obj/item/mod/control/wrench_act(mob/living/user, obj/item/wrench) + if(..()) + return TRUE + if(seconds_electrified && get_charge() && shock(user)) + return TRUE + if(open) + if(!core) + balloon_alert(user, "no core!") + return TRUE + balloon_alert(user, "removing core...") + wrench.play_tool_sound(src, 100) + if(!wrench.use_tool(src, user, 3 SECONDS) || !open) + balloon_alert(user, "interrupted!") + return TRUE + wrench.play_tool_sound(src, 100) + balloon_alert(user, "core removed") + core.forceMove(drop_location()) + update_charge_alert() + return TRUE + return ..() + +/obj/item/mod/control/screwdriver_act(mob/living/user, obj/item/screwdriver) + if(..()) + return TRUE + if(active || activating)// || ai_controller) + balloon_alert(user, "deactivate suit first!") + playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + return FALSE + balloon_alert(user, "[open ? "closing" : "opening"] cover...") + screwdriver.play_tool_sound(src, 100) + if(screwdriver.use_tool(src, user, 1 SECONDS)) + if(active || activating) + balloon_alert(user, "deactivate suit first!") + screwdriver.play_tool_sound(src, 100) + balloon_alert(user, "cover [open ? "closed" : "opened"]") + open = !open + else + balloon_alert(user, "interrupted!") + return TRUE + +/obj/item/mod/control/crowbar_act(mob/living/user, obj/item/crowbar) + . = ..() + if(!open) + balloon_alert(user, "open the cover first!") + playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + return FALSE + if(!allowed(user)) + balloon_alert(user, "insufficient access!") + playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + return + if(SEND_SIGNAL(src, COMSIG_MOD_MODULE_REMOVAL, user) & MOD_CANCEL_REMOVAL) + playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + return FALSE + if(length(modules)) + var/list/removable_modules = list() + for(var/obj/item/mod/module/module as anything in modules) + if(!module.removable) + continue + removable_modules += module + var/obj/item/mod/module/module_to_remove = tgui_input_list(user, "Which module to remove?", "Module Removal", removable_modules) + if(!module_to_remove?.mod) + return FALSE + uninstall(module_to_remove) + module_to_remove.forceMove(drop_location()) + crowbar.play_tool_sound(src, 100) + return TRUE + balloon_alert(user, "no modules!") + playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + return FALSE + +/obj/item/mod/control/attackby(obj/item/attacking_item, mob/living/user, params) + if(istype(attacking_item, /obj/item/mod/module)) + if(!open) + balloon_alert(user, "open the cover first!") + playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + return FALSE + install(attacking_item, user) + return TRUE + else if(istype(attacking_item, /obj/item/mod/core)) + if(!open) + balloon_alert(user, "open the cover first!") + playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + return FALSE + if(core) + balloon_alert(user, "core already installed!") + playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + return FALSE + var/obj/item/mod/core/attacking_core = attacking_item + attacking_core.install(src) + balloon_alert(user, "core installed") + playsound(src, 'sound/machines/click.ogg', 50, TRUE, SILENCED_SOUND_EXTRARANGE) + update_charge_alert() + return TRUE + else if(is_wire_tool(attacking_item) && open) + wires.interact(user) + return TRUE + else if(open && attacking_item.GetID()) + update_access(user, attacking_item.GetID()) + return TRUE + else if(open && istype(attacking_item, /obj/item/stock_parts/cell) && istype(core, /obj/item/mod/core/standard)) + var/obj/item/mod/core/standard/attacked_core = core + attacked_core.on_attackby(src, attacking_item, wearer) + return TRUE + return ..() + +/obj/item/mod/control/get_cell() + if(!open) + return + var/obj/item/stock_parts/cell/cell = get_charge_source() + if(!istype(cell)) + return + return cell + +/obj/item/mod/control/GetAccess() + /*if(ai_controller) + return req_access.Copy() + else */ + return ..() + +/obj/item/mod/control/emag_act(mob/user) + locked = !locked + balloon_alert(user, "suit access [locked ? "locked" : "unlocked"]") + +/obj/item/mod/control/emp_act(severity) + . = ..() + if(!active || !wearer) + return + to_chat(wearer, span_notice("[severity > 1 ? "Light" : "Strong"] electromagnetic pulse detected!")) + if(. & EMP_PROTECT_CONTENTS) + return + selected_module?.on_deactivation(display_message = TRUE) + wearer.apply_damage(10 / severity, BURN, spread_damage=TRUE) + to_chat(wearer, span_danger("You feel [src] heat up from the EMP, burning you slightly.")) + if(wearer.stat < UNCONSCIOUS && prob(10)) + wearer.emote("scream") + +/*obj/item/mod/control/on_outfit_equip(mob/living/carbon/human/outfit_wearer, visuals_only, item_slot) + if(visuals_only) + set_wearer(outfit_wearer) //we need to set wearer manually since it doesnt call equipped + quick_activation()*/ + +/obj/item/mod/control/doStrip(mob/stripper, mob/owner) + if(active && !toggle_activate(stripper, force_deactivate = TRUE)) + return + for(var/obj/item/part as anything in mod_parts) + if(part.loc == src) + continue + retract(null, part) + return ..() + +/obj/item/mod/control/worn_overlays(isinhands = FALSE, icon_file) + . = ..() + for(var/obj/item/mod/module/module as anything in modules) + var/list/module_icons = module.generate_worn_overlay(src.layer) + if(!length(module_icons)) + continue + . += module_icons + +/obj/item/mod/control/update_icon_state() + item_state = "[skin]-control[active ? "-sealed" : ""]" + return ..() + +/obj/item/mod/control/proc/set_wearer(mob/user) + wearer = user + SEND_SIGNAL(src, COMSIG_MOD_WEARER_SET, wearer) + RegisterSignal(wearer, COMSIG_ATOM_EXITED, PROC_REF(on_exit)) + RegisterSignal(wearer, COMSIG_SPECIES_GAIN, PROC_REF(on_species_gain)) + update_charge_alert() + for(var/obj/item/mod/module/module as anything in modules) + module.on_equip() + +/obj/item/mod/control/proc/unset_wearer() + for(var/obj/item/mod/module/module as anything in modules) + module.on_unequip() + UnregisterSignal(wearer, list(COMSIG_ATOM_EXITED, COMSIG_SPECIES_GAIN)) + wearer.clear_alert("mod_charge") + SEND_SIGNAL(src, COMSIG_MOD_WEARER_UNSET, wearer) + wearer = null + +/obj/item/mod/control/proc/clean_up() + if(active || activating) + for(var/obj/item/mod/module/module as anything in modules) + if(!module.active) + continue + module.on_deactivation(display_message = FALSE) + for(var/obj/item/part as anything in mod_parts) + seal_part(part, seal = FALSE) + for(var/obj/item/part as anything in mod_parts) + retract(null, part) + if(active) + finish_activation(on = FALSE) + var/mob/old_wearer = wearer + unset_wearer() + old_wearer.temporarilyRemoveItemFromInventory(src) + +/obj/item/mod/control/proc/on_species_gain(datum/source, datum/species/new_species, datum/species/old_species) + SIGNAL_HANDLER + + var/list/all_parts = mod_parts + src + for(var/obj/item/part in all_parts) + if(!(part.slot_flags in new_species.no_equip) || is_type_in_list(new_species, part.species_exception)) + continue + forceMove(drop_location()) + return + +/obj/item/mod/control/proc/quick_module(mob/user) + if(!length(modules)) + return + var/list/display_names = list() + var/list/items = list() + for(var/obj/item/mod/module/module as anything in modules) + if(module.module_type == MODULE_PASSIVE) + continue + display_names[module.name] = REF(module) + var/image/module_image = image(icon = module.icon, icon_state = module.icon_state) + if(module == selected_module) + module_image.underlays += image(icon = 'icons/hud/radial.dmi', icon_state = "module_selected") + else if(module.active) + module_image.underlays += image(icon = 'icons/hud/radial.dmi', icon_state = "module_active") + if(!COOLDOWN_FINISHED(module, cooldown_timer)) + module_image.add_overlay(image(icon = 'icons/hud/radial.dmi', icon_state = "module_cooldown")) + items += list(module.name = module_image) + if(!length(items)) + return + var/radial_anchor = src + if(istype(user.loc, /obj/effect/dummy/phased_mob)) + radial_anchor = get_turf(user.loc) //they're phased out via some module, anchor the radial on the turf so it may still display + var/pick = show_radial_menu(user, radial_anchor, items, custom_check = FALSE, require_near = TRUE, tooltips = TRUE) + if(!pick) + return + var/module_reference = display_names[pick] + var/obj/item/mod/module/picked_module = locate(module_reference) in modules + if(!istype(picked_module)) + return + picked_module.on_select() + +/obj/item/mod/control/proc/shock(mob/living/user) + if(!istype(user) || get_charge() < 1) + return FALSE + do_sparks(5, TRUE, src) + var/check_range = TRUE + return electrocute_mob(user, get_charge_source(), src, 0.7, check_range) + +/obj/item/mod/control/proc/install(obj/item/mod/module/new_module, mob/user) + for(var/obj/item/mod/module/old_module as anything in modules) + if(is_type_in_list(new_module, old_module.incompatible_modules) || is_type_in_list(old_module, new_module.incompatible_modules)) + if(user) + balloon_alert(user, "[new_module] incompatible with [old_module]!") + playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + return + if(is_type_in_list(new_module, theme.module_blacklist)) + if(user) + balloon_alert(user, "[src] doesn't accept [new_module]!") + playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + return + var/complexity_with_module = complexity + complexity_with_module += new_module.complexity + if(complexity_with_module > complexity_max) + if(user) + balloon_alert(user, "[new_module] would make [src] too complex!") + playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + return + new_module.forceMove(src) + modules += new_module + complexity += new_module.complexity + new_module.mod = src + new_module.on_install() + if(wearer) + new_module.on_equip() + + if(user) + balloon_alert(user, "[new_module] added") + playsound(src, 'sound/machines/click.ogg', 50, TRUE, SILENCED_SOUND_EXTRARANGE) + +/obj/item/mod/control/proc/uninstall(obj/item/mod/module/old_module, deleting = FALSE) + modules -= old_module + complexity -= old_module.complexity + if(active) + old_module.on_suit_deactivation(deleting = deleting) + if(old_module.active) + old_module.on_deactivation(display_message = !deleting, deleting = deleting) + old_module.on_uninstall(deleting = deleting) + QDEL_LIST_ASSOC_VAL(old_module.pinned_to) + old_module.mod = null + +/// Intended for callbacks, don't use normally, just get wearer by itself. +/obj/item/mod/control/proc/get_wearer() + return wearer + +/obj/item/mod/control/proc/update_access(mob/user, obj/item/card/id/card) + if(!allowed(user)) + balloon_alert(user, "insufficient access!") + playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + return + req_access = card.access.Copy() + balloon_alert(user, "access updated") + +/obj/item/mod/control/proc/get_charge_source() + return core?.charge_source() + +/obj/item/mod/control/proc/get_charge() + return core?.charge_amount() || 0 + +/obj/item/mod/control/proc/get_max_charge() + return core?.max_charge_amount() || 1 //avoid dividing by 0 + +/obj/item/mod/control/proc/get_charge_percent() + return ROUND_UP((get_charge() / get_max_charge()) * 100) + +/obj/item/mod/control/proc/add_charge(amount) + return core?.add_charge(amount) || FALSE + +/obj/item/mod/control/proc/subtract_charge(amount) + return core?.subtract_charge(amount) || FALSE + +/obj/item/mod/control/proc/check_charge(amount) + return core?.check_charge(amount) || FALSE + +/obj/item/mod/control/proc/update_charge_alert() + if(!wearer) + return + if(!core) + wearer.throw_alert("mod_charge", /atom/movable/screen/alert/nocore) + return + core.update_charge_alert() + +/obj/item/mod/control/proc/update_speed() + var/list/all_parts = mod_parts + src + for(var/obj/item/part as anything in all_parts) + part.slowdown = (active ? slowdown_active : slowdown_inactive) / length(all_parts) + wearer?.update_equipment_speed_mods() + +/obj/item/mod/control/proc/power_off() + balloon_alert(wearer, "Нет энергии!") + toggle_activate(wearer, force_deactivate = TRUE) + +/obj/item/mod/control/proc/set_mod_color(new_color) + var/list/all_parts = mod_parts + src + for(var/obj/item/part as anything in all_parts) + part.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) + part.add_atom_colour(new_color, FIXED_COLOUR_PRIORITY) + wearer?.regenerate_icons() + +/obj/item/mod/control/proc/set_mod_skin(new_skin) + if(active) + CRASH("[src] tried to set skin while active!") + skin = new_skin + var/list/used_skin = theme.skins[new_skin] + if(used_skin[CONTROL_LAYER]) + alternate_worn_layer = used_skin[CONTROL_LAYER] + var/list/skin_updating = mod_parts + src + for(var/obj/item/part as anything in skin_updating) + part.icon = used_skin[MOD_ICON_OVERRIDE] || 'icons/obj/clothing/modsuit/mod_clothing.dmi' + //part.mob_overlay_icon = used_skin[MOD_WORN_ICON_OVERRIDE] || 'icons/mob/clothing/modsuit/mod_clothing.dmi' + part.icon_state = "[skin]-[part.base_icon_state]" + for(var/obj/item/clothing/part as anything in mod_parts) + var/used_category + if(part == helmet) + used_category = HELMET_FLAGS + if(part == chestplate) + used_category = CHESTPLATE_FLAGS + if(part == gauntlets) + used_category = GAUNTLETS_FLAGS + if(part == boots) + used_category = BOOTS_FLAGS + var/list/category = used_skin[used_category] + part.clothing_flags = category[UNSEALED_CLOTHING] || NONE + part.visor_flags = category[SEALED_CLOTHING] || NONE + part.flags_inv = category[UNSEALED_INVISIBILITY] || NONE + part.visor_flags_inv = category[SEALED_INVISIBILITY] || NONE + part.flags_cover = category[UNSEALED_COVER] || NONE + part.visor_flags_cover = category[SEALED_COVER] || NONE + part.alternate_worn_layer = category[UNSEALED_LAYER] + mod_parts[part] = part.alternate_worn_layer + if(!category[CAN_OVERSLOT]) + if(overslotting_parts[part]) + var/obj/item/overslot = overslotting_parts[part] + overslot.forceMove(drop_location()) + overslotting_parts -= part + continue + overslotting_parts |= part + wearer?.regenerate_icons() + +/obj/item/mod/control/proc/on_exit(datum/source, atom/movable/part, direction) + SIGNAL_HANDLER + + if(part.loc == src) + return + if(part == core) + core.uninstall() + update_charge_alert() + return + if(part.loc == wearer) + return + if(part in modules) + uninstall(part) + return + if(part in mod_parts) + if(!wearer) + part.forceMove(src) + return + retract(wearer, part) + if(active) + INVOKE_ASYNC(src, PROC_REF(toggle_activate), wearer, TRUE) + +/obj/item/mod/control/proc/on_part_destruction(obj/item/part, damage_flag) + SIGNAL_HANDLER + + if(overslotting_parts[part]) + var/obj/item/overslot = overslotting_parts[part] + overslot.forceMove(drop_location()) + overslotting_parts[part] = null + if(QDELETED(src)) + return + obj_destruction(damage_flag) + +/obj/item/mod/control/proc/on_part_deletion(obj/item/part) + SIGNAL_HANDLER + + if(QDELETED(src)) + return + qdel(src) + +/obj/item/mod/control/proc/on_overslot_exit(datum/source, atom/movable/overslot, direction) + SIGNAL_HANDLER + + if(overslot != overslotting_parts[source]) + return + overslotting_parts[source] = null diff --git a/code/modules/mod/mod_core.dm b/code/modules/mod/mod_core.dm new file mode 100644 index 000000000000..4c9d16ef7b7d --- /dev/null +++ b/code/modules/mod/mod_core.dm @@ -0,0 +1,357 @@ +/obj/item/mod/core + name = "MOD core" + desc = "A non-functional MOD core. Inform the admins if you see this." + icon = 'icons/obj/clothing/modsuit/mod_construction.dmi' + icon_state = "mod-core" + item_state = "electronic" + lefthand_file = 'icons/mob/inhands/misc/devices_lefthand.dmi' + righthand_file = 'icons/mob/inhands/misc/devices_righthand.dmi' + /// MOD unit we are powering. + var/obj/item/mod/control/mod + +/obj/item/mod/core/Destroy() + if(mod) + uninstall() + return ..() + +/obj/item/mod/core/proc/install(obj/item/mod/control/mod_unit) + mod = mod_unit + mod.core = src + forceMove(mod) + +/obj/item/mod/core/proc/uninstall() + mod.core = null + mod = null + +/obj/item/mod/core/proc/charge_source() + return + +/obj/item/mod/core/proc/charge_amount() + return 0 + +/obj/item/mod/core/proc/max_charge_amount() + return 1 + +/obj/item/mod/core/proc/add_charge(amount) + return FALSE + +/obj/item/mod/core/proc/subtract_charge(amount) + return FALSE + +/obj/item/mod/core/proc/check_charge(amount) + return FALSE + +/obj/item/mod/core/proc/update_charge_alert() + mod.wearer.clear_alert("mod_charge") + +/obj/item/mod/core/infinite + name = "MOD infinite core" + icon_state = "mod-core-infinite" + desc = "A fusion core using the rare Fixium to sustain enough energy for the lifetime of the MOD's user. \ + This might be because of the slowly killing poison inside, but those are just rumors." + +/obj/item/mod/core/infinite/charge_source() + return src + +/obj/item/mod/core/infinite/charge_amount() + return INFINITY + +/obj/item/mod/core/infinite/max_charge_amount() + return INFINITY + +/obj/item/mod/core/infinite/add_charge(amount) + return TRUE + +/obj/item/mod/core/infinite/subtract_charge(amount) + return TRUE + +/obj/item/mod/core/infinite/check_charge(amount) + return TRUE + +/obj/item/mod/core/standard + name = "MOD standard core" + icon_state = "mod-core-standard" + desc = "Growing in the most lush, fertile areas of the planet Sprout, there is a crystal known as the Heartbloom. \ + These rare, organic piezoelectric crystals are of incredible cultural significance to the artist castes of the \ + Ethereals, owing to their appearance; which is exactly similar to that of an Ethereal's heart.\n\ + Which one you have in your suit is unclear, but either way, \ + it's been repurposed to be an internal power source for a Modular Outerwear Device." + /// Installed cell. + var/obj/item/stock_parts/cell/cell + +/obj/item/mod/core/standard/Destroy() + if(cell) + QDEL_NULL(cell) + return ..() + +/obj/item/mod/core/standard/install(obj/item/mod/control/mod_unit) + . = ..() + if(cell) + install_cell(cell) + RegisterSignal(mod, COMSIG_PARENT_EXAMINE, PROC_REF(on_examine)) + RegisterSignal(mod, COMSIG_ATOM_ATTACK_HAND, PROC_REF(on_attack_hand)) + RegisterSignal(mod, COMSIG_PARENT_ATTACKBY, PROC_REF(on_attackby)) + RegisterSignal(mod, COMSIG_MOD_WEARER_SET, PROC_REF(on_wearer_set)) + if(mod.wearer) + on_wearer_set(mod, mod.wearer) + +/obj/item/mod/core/standard/uninstall() + if(!QDELETED(cell)) + cell.forceMove(drop_location()) + UnregisterSignal(mod, list(COMSIG_PARENT_EXAMINE, COMSIG_ATOM_ATTACK_HAND, COMSIG_PARENT_ATTACKBY, COMSIG_MOD_WEARER_SET)) + if(mod.wearer) + on_wearer_unset(mod, mod.wearer) + return ..() + +/obj/item/mod/core/standard/charge_source() + return cell + +/obj/item/mod/core/standard/charge_amount() + var/obj/item/stock_parts/cell/charge_source = charge_source() + return charge_source?.charge || 0 + +/obj/item/mod/core/standard/max_charge_amount(amount) + var/obj/item/stock_parts/cell/charge_source = charge_source() + return charge_source?.maxcharge || 1 + +/obj/item/mod/core/standard/add_charge(amount) + var/obj/item/stock_parts/cell/charge_source = charge_source() + if(!charge_source) + return FALSE + return charge_source.give(amount) + +/obj/item/mod/core/standard/subtract_charge(amount) + var/obj/item/stock_parts/cell/charge_source = charge_source() + if(!charge_source) + return FALSE + return charge_source.use(amount, TRUE) + +/obj/item/mod/core/standard/check_charge(amount) + return charge_amount() >= amount + +/obj/item/mod/core/standard/update_charge_alert() + var/obj/item/stock_parts/cell/charge_source = charge_source() + if(!charge_source) + mod.wearer.throw_alert("mod_charge", /atom/movable/screen/alert/nocell) + return + var/remaining_cell = charge_amount() / max_charge_amount() + switch(remaining_cell) + if(0.75 to INFINITY) + mod.wearer.clear_alert("mod_charge") + if(0.5 to 0.75) + mod.wearer.throw_alert("mod_charge", /atom/movable/screen/alert/lowcell, 1) + if(0.25 to 0.5) + mod.wearer.throw_alert("mod_charge", /atom/movable/screen/alert/lowcell, 2) + if(0.01 to 0.25) + mod.wearer.throw_alert("mod_charge", /atom/movable/screen/alert/lowcell, 3) + else + mod.wearer.throw_alert("mod_charge", /atom/movable/screen/alert/emptycell) + +/obj/item/mod/core/standard/proc/install_cell(new_cell) + cell = new_cell + cell.forceMove(src) + RegisterSignal(src, COMSIG_ATOM_EXITED, PROC_REF(on_exit)) + +/obj/item/mod/core/standard/proc/uninstall_cell() + if(!cell) + return + cell = null + UnregisterSignal(src, COMSIG_ATOM_EXITED) + +/obj/item/mod/core/standard/proc/on_exit(datum/source, obj/item/stock_parts/cell, direction) + SIGNAL_HANDLER + + if(!istype(cell) || cell.loc == src) + return + uninstall_cell() + +/obj/item/mod/core/standard/proc/on_examine(datum/source, mob/examiner, list/examine_text) + SIGNAL_HANDLER + + if(!mod.open) + return + examine_text += cell ? "You could remove the cell with an empty hand." : "You could use a cell on it to install one." + +/obj/item/mod/core/standard/proc/on_attack_hand(datum/source, mob/living/user) + SIGNAL_HANDLER + + if(mod.seconds_electrified && charge_amount() && mod.shock(user)) + return COMPONENT_CANCEL_ATTACK_CHAIN + if(mod.open && mod.loc == user) + INVOKE_ASYNC(src, PROC_REF(mod_uninstall_cell), user) + return COMPONENT_CANCEL_ATTACK_CHAIN + return NONE + +/obj/item/mod/core/standard/proc/mod_uninstall_cell(mob/living/user) + if(!cell) + mod.balloon_alert(user, "no cell!") + return + mod.balloon_alert(user, "removing cell...") + if(!do_after(user, 1.5 SECONDS, target = mod)) + mod.balloon_alert(user, "interrupted!") + return + mod.balloon_alert(user, "cell removed") + playsound(mod, 'sound/machines/click.ogg', 50, TRUE, SILENCED_SOUND_EXTRARANGE) + var/obj/item/cell_to_move = cell + cell_to_move.forceMove(drop_location()) + user.put_in_hands(cell_to_move) + mod.update_charge_alert() + +/obj/item/mod/core/standard/proc/on_attackby(datum/source, obj/item/attacking_item, mob/user) + SIGNAL_HANDLER + + if(istype(attacking_item, /obj/item/stock_parts/cell)) + if(!mod.open) + mod.balloon_alert(user, "open the cover first!") + playsound(mod, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + return NONE + if(cell) + mod.balloon_alert(user, "cell already installed!") + playsound(mod, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + return COMPONENT_NO_AFTERATTACK + install_cell(attacking_item) + mod.balloon_alert(user, "cell installed") + playsound(mod, 'sound/machines/click.ogg', 50, TRUE, SILENCED_SOUND_EXTRARANGE) + mod.update_charge_alert() + return COMPONENT_NO_AFTERATTACK + return NONE + +/obj/item/mod/core/standard/proc/on_wearer_set(datum/source, mob/user) + SIGNAL_HANDLER + + RegisterSignal(mod.wearer, COMSIG_PROCESS_BORGCHARGER_OCCUPANT, PROC_REF(on_borg_charge)) + RegisterSignal(mod, COMSIG_MOD_WEARER_UNSET, PROC_REF(on_wearer_unset)) + +/obj/item/mod/core/standard/proc/on_wearer_unset(datum/source, mob/user) + SIGNAL_HANDLER + + UnregisterSignal(mod.wearer, COMSIG_PROCESS_BORGCHARGER_OCCUPANT) + UnregisterSignal(mod, COMSIG_MOD_WEARER_UNSET) + +/obj/item/mod/core/standard/proc/on_borg_charge(datum/source, amount) + SIGNAL_HANDLER + + add_charge(amount) + mod.update_charge_alert() + +/obj/item/mod/core/ethereal + name = "MOD ethereal core" + icon_state = "mod-core-ethereal" + desc = "A reverse engineered core of a Modular Outerwear Device. Using natural liquid electricity from Ethereals, \ + preventing the need to use external sources to convert electric charge." + /// A modifier to all charge we use, ethereals don't need to spend as much energy as normal suits. + var/charge_modifier = 0.1 + +/obj/item/mod/core/ethereal/charge_source() + var/obj/item/organ/stomach/ethereal/ethereal_stomach = mod.wearer.getorganslot(ORGAN_SLOT_STOMACH) + if(!istype(ethereal_stomach)) + return + return ethereal_stomach + +/obj/item/mod/core/ethereal/charge_amount() + var/obj/item/organ/stomach/ethereal/charge_source = charge_source() + return charge_source?.crystal_charge || ELZUOSE_CHARGE_NONE + +/obj/item/mod/core/ethereal/max_charge_amount() + return ELZUOSE_CHARGE_FULL + +/obj/item/mod/core/ethereal/add_charge(amount) + var/obj/item/organ/stomach/ethereal/charge_source = charge_source() + if(!charge_source) + return FALSE + charge_source.adjust_charge(amount*charge_modifier) + return TRUE + +/obj/item/mod/core/ethereal/subtract_charge(amount) + var/obj/item/organ/stomach/ethereal/charge_source = charge_source() + if(!charge_source) + return FALSE + charge_source.adjust_charge(-amount*charge_modifier) + return TRUE + +/obj/item/mod/core/ethereal/check_charge(amount) + return charge_amount() >= amount*charge_modifier + +/obj/item/mod/core/ethereal/update_charge_alert() + var/obj/item/organ/stomach/ethereal/charge_source = charge_source() + if(charge_source) + mod.wearer.clear_alert("mod_charge") + return + mod.wearer.throw_alert("mod_charge", /atom/movable/screen/alert/nocell) + +/obj/item/mod/core/plasma + name = "MOD plasma core" + icon_state = "mod-core-plasma" + desc = "Nanotrasen's attempt at capitalizing on their plasma research. These plasma cores are refueled \ + through plasma ore, allowing for easy continued use by their mining squads." + /// How much charge we can store. + var/maxcharge = 10000 + /// How much charge we are currently storing. + var/charge = 10000 + /// Associated list of charge sources and how much they charge, only stacks allowed. + var/list/charger_list = list(/obj/item/stack/ore/plasma = 1500, /obj/item/stack/sheet/mineral/plasma = 2000) + +/obj/item/mod/core/plasma/install(obj/item/mod/control/mod_unit) + . = ..() + RegisterSignal(mod, COMSIG_PARENT_ATTACKBY, PROC_REF(on_attackby)) + +/obj/item/mod/core/plasma/uninstall() + UnregisterSignal(mod, COMSIG_PARENT_ATTACKBY) + return ..() + +/obj/item/mod/core/plasma/attackby(obj/item/attacking_item, mob/user, params) + if(charge_plasma(attacking_item, user)) + return TRUE + return ..() + +/obj/item/mod/core/plasma/charge_source() + return src + +/obj/item/mod/core/plasma/charge_amount() + return charge + +/obj/item/mod/core/plasma/max_charge_amount() + return maxcharge + +/obj/item/mod/core/plasma/add_charge(amount) + charge = min(maxcharge, charge + amount) + return TRUE + +/obj/item/mod/core/plasma/subtract_charge(amount) + charge = max(0, charge - amount) + return TRUE + +/obj/item/mod/core/plasma/check_charge(amount) + return charge_amount() >= amount + +/obj/item/mod/core/plasma/update_charge_alert() + var/remaining_plasma = charge_amount() / max_charge_amount() + switch(remaining_plasma) + if(0.75 to INFINITY) + mod.wearer.clear_alert("mod_charge") + if(0.5 to 0.75) + mod.wearer.throw_alert("mod_charge", /atom/movable/screen/alert/lowcell/plasma, 1) + if(0.25 to 0.5) + mod.wearer.throw_alert("mod_charge", /atom/movable/screen/alert/lowcell/plasma, 2) + if(0.01 to 0.25) + mod.wearer.throw_alert("mod_charge", /atom/movable/screen/alert/lowcell/plasma, 3) + else + mod.wearer.throw_alert("mod_charge", /atom/movable/screen/alert/emptycell/plasma) + +/obj/item/mod/core/plasma/proc/on_attackby(datum/source, obj/item/attacking_item, mob/user) + SIGNAL_HANDLER + + if(charge_plasma(attacking_item, user)) + return COMPONENT_NO_AFTERATTACK + return NONE + +/obj/item/mod/core/plasma/proc/charge_plasma(obj/item/stack/plasma, mob/user) + var/charge_given = is_type_in_list(plasma, charger_list, zebra = TRUE) + if(!charge_given) + return FALSE + var/uses_needed = min(plasma.amount, ROUND_UP((max_charge_amount() - charge_amount()) / charge_given)) + if(!plasma.use(uses_needed)) + return FALSE + add_charge(uses_needed * charge_given) + balloon_alert(user, "core refueled") + return TRUE diff --git a/code/modules/mod/mod_paint.dm b/code/modules/mod/mod_paint.dm new file mode 100644 index 000000000000..aead577224bc --- /dev/null +++ b/code/modules/mod/mod_paint.dm @@ -0,0 +1,192 @@ +#define MODPAINT_MAX_COLOR_VALUE 1.25 +#define MODPAINT_MIN_COLOR_VALUE 0 +#define MODPAINT_MAX_SECTION_COLORS 2 +#define MODPAINT_MIN_SECTION_COLORS 0.25 +#define MODPAINT_MAX_OVERALL_COLORS 4 +#define MODPAINT_MIN_OVERALL_COLORS 1.5 + +/obj/item/mod/paint + name = "MOD paint kit" + desc = "This kit will repaint your MODsuit to something unique." + icon = 'icons/obj/clothing/modsuit/mod_construction.dmi' + icon_state = "paintkit" + var/obj/item/mod/control/editing_mod + var/atom/movable/screen/map_view/proxy_view + var/list/current_color + +/obj/item/mod/paint/Initialize(mapload) + . = ..() + current_color = color_matrix_identity() + +/obj/item/mod/paint/examine(mob/user) + . = ..() + . += span_notice("Left-click a MODsuit to change skin.") + //. += span_notice("Right-click a MODsuit to recolor.") + +/obj/item/mod/paint/pre_attack(atom/attacked_atom, mob/living/user, params) + if(!istype(attacked_atom, /obj/item/mod/control)) + return ..() + var/obj/item/mod/control/mod = attacked_atom + if(mod.active || mod.activating) + balloon_alert(user, "suit is active!") + return TRUE + paint_skin(mod, user) + +/*obj/item/mod/paint/pre_attack_secondary(atom/attacked_atom, mob/living/user, params) + if(!istype(attacked_atom, /obj/item/mod/control)) + return .() + var/obj/item/mod/control/mod = attacked_atom + if(mod.active || mod.activating) + balloon_alert(user, "suit is active!") + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + if(editing_mod) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + editing_mod = mod + proxy_view = new() + proxy_view.generate_view("color_matrix_proxy_[REF(user.client)]") + + proxy_view.appearance = editing_mod.appearance + proxy_view.color = null + proxy_view.display_to(user) + ui_interact(user) + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN*/ + +/obj/item/mod/paint/ui_interact(mob/user, datum/tgui/ui) + if(!editing_mod) + return + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "MODpaint", name) + ui.open() + +/obj/item/mod/paint/ui_host() + return editing_mod + +/obj/item/mod/paint/ui_close(mob/user) + . = ..() + editing_mod = null + QDEL_NULL(proxy_view) + current_color = color_matrix_identity() + +/obj/item/mod/paint/ui_status(mob/user) + if(check_menu(editing_mod, user)) + return ..() + return UI_CLOSE + +/obj/item/mod/paint/ui_static_data(mob/user) + var/list/data = list() + data["mapRef"] = proxy_view.assigned_map + return data + +/obj/item/mod/paint/ui_data(mob/user) + var/list/data = list() + data["currentColor"] = current_color + return data + +/obj/item/mod/paint/ui_act(action, list/params) + . = ..() + if(.) + return + switch(action) + if("transition_color") + current_color = params["color"] + animate(proxy_view, time = 0.5 SECONDS, color = current_color) + if("confirm") + if(length(current_color) != 20) //20 is the length of a matrix identity list + return + for(var/color_value in current_color) + if(isnum(color_value)) + continue + return + var/total_color_value = 0 + var/list/total_colors = current_color.Copy() + total_colors.Cut(13, length(total_colors)) // 13 to 20 are just a and c, dont want to count them + var/red_value = current_color[1] + current_color[5] + current_color[9] //rr + gr + br + var/green_value = current_color[2] + current_color[6] + current_color[10] //rg + gg + bg + var/blue_value = current_color[3] + current_color[7] + current_color[11] //rb + gb + bb + if(red_value > MODPAINT_MAX_SECTION_COLORS) + balloon_alert(usr, "total red too high! ([red_value*100]%/[MODPAINT_MAX_SECTION_COLORS*100]%)") + return + else if(red_value < MODPAINT_MIN_SECTION_COLORS) + balloon_alert(usr, "total red too low! ([red_value*100]%/[MODPAINT_MIN_SECTION_COLORS*100]%)") + return + if(green_value > MODPAINT_MAX_SECTION_COLORS) + balloon_alert(usr, "total green too high! ([green_value*100]%/[MODPAINT_MAX_SECTION_COLORS*100]%)") + return + else if(green_value < MODPAINT_MIN_SECTION_COLORS) + balloon_alert(usr, "total green too low! ([green_value*100]%/[MODPAINT_MIN_SECTION_COLORS*100]%)") + return + if(blue_value > MODPAINT_MAX_SECTION_COLORS) + balloon_alert(usr, "total blue too high! ([blue_value*100]%/[MODPAINT_MAX_SECTION_COLORS*100]%)") + return + else if(blue_value < MODPAINT_MIN_SECTION_COLORS) + balloon_alert(usr, "total blue too low! ([blue_value*100]%/[MODPAINT_MIN_SECTION_COLORS*100]%)") + return + for(var/color_value in total_colors) + total_color_value += color_value + if(color_value > MODPAINT_MAX_COLOR_VALUE) + balloon_alert(usr, "one of colors too high! ([color_value*100]%/[MODPAINT_MAX_COLOR_VALUE*100]%") + return + else if(color_value < MODPAINT_MIN_COLOR_VALUE) + balloon_alert(usr, "one of colors too low! ([color_value*100]%/[MODPAINT_MIN_COLOR_VALUE*100]%") + return + if(total_color_value > MODPAINT_MAX_OVERALL_COLORS) + balloon_alert(usr, "total colors too high! ([total_color_value*100]%/[MODPAINT_MAX_OVERALL_COLORS*100]%)") + return + else if(total_color_value < MODPAINT_MIN_OVERALL_COLORS) + balloon_alert(usr, "total colors too low! ([total_color_value*100]%/[MODPAINT_MIN_OVERALL_COLORS*100]%)") + return + editing_mod.set_mod_color(current_color) + SStgui.close_uis(src) + +/obj/item/mod/paint/proc/paint_skin(obj/item/mod/control/mod, mob/user) + if(length(mod.theme.skins) <= 1) + balloon_alert(user, "no alternate skins!") + return + var/list/skins = list() + for(var/mod_skin in mod.theme.skins) + skins[mod_skin] = image(icon = mod.icon, icon_state = "[mod_skin]-control") + var/pick = show_radial_menu(user, mod, skins, custom_check = CALLBACK(src, PROC_REF(check_menu), mod, user), require_near = TRUE) + if(!pick) + balloon_alert(user, "no skin picked!") + return + mod.set_mod_skin(pick) + +/obj/item/mod/paint/proc/check_menu(obj/item/mod/control/mod, mob/user) + if(user.incapacitated() || !user.is_holding(src) || !mod || mod.active || mod.activating) + return FALSE + return TRUE + +#undef MODPAINT_MAX_COLOR_VALUE +#undef MODPAINT_MIN_COLOR_VALUE +#undef MODPAINT_MAX_SECTION_COLORS +#undef MODPAINT_MIN_SECTION_COLORS +#undef MODPAINT_MAX_OVERALL_COLORS +#undef MODPAINT_MIN_OVERALL_COLORS + +/obj/item/mod/skin_applier + name = "MOD skin applier" + desc = "This one-use skin applier will add a skin to MODsuits of a specific type." + icon = 'icons/obj/clothing/modsuit/mod_construction.dmi' + icon_state = "skinapplier" + var/skin = "civilian" + var/compatible_theme = /datum/mod_theme + +/obj/item/mod/skin_applier/Initialize(mapload) + . = ..() + name = "MOD [skin] skin applier" + +/obj/item/mod/skin_applier/pre_attack(atom/attacked_atom, mob/living/user, params) + if(!istype(attacked_atom, /obj/item/mod/control)) + return ..() + var/obj/item/mod/control/mod = attacked_atom + if(mod.active || mod.activating) + balloon_alert(user, "suit is active!") + return TRUE + if(!istype(mod.theme, compatible_theme)) + balloon_alert(user, "incompatible theme!") + return TRUE + mod.set_mod_skin(skin) + balloon_alert(user, "skin applied") + qdel(src) + return TRUE diff --git a/code/modules/mod/mod_theme.dm b/code/modules/mod/mod_theme.dm new file mode 100644 index 000000000000..2e6325df919f --- /dev/null +++ b/code/modules/mod/mod_theme.dm @@ -0,0 +1,1154 @@ +/// Global proc that sets up all MOD themes as singletons in a list and returns it. +/proc/setup_mod_themes() + . = list() + for(var/path in typesof(/datum/mod_theme)) + var/datum/mod_theme/new_theme = new path() + .[path] = new_theme + +/// MODsuit theme, instanced once and then used by MODsuits to grab various statistics. +/datum/mod_theme + /// Theme name for the MOD. + var/name = "standard" + /// Description added to the MOD. + var/desc = "A MOD suit. Placeholder Desc" + /// Extended description on examine_more + var/extended_desc = "Placeholder Desc" + /// Default skin of the MOD. + var/default_skin = "standard" + /// The slot this mod theme fits on + var/slot_flags = ITEM_SLOT_BACK + /// Armor shared across the MOD parts. + var/armor = list("melee" = 10, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 0, "bio" = 100, "fire" = 25, "acid" = 25) + /// Resistance flags shared across the MOD parts. + var/resistance_flags = NONE + /// Atom flags shared across the MOD parts. + var/atom_flags = NONE + /// Max heat protection shared across the MOD parts. + var/max_heat_protection_temperature = SPACE_SUIT_MAX_TEMP_PROTECT + /// Max cold protection shared across the MOD parts. + var/min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT + /// Siemens shared across the MOD parts. + var/siemens_coefficient = 0.5 + /// How much modules can the MOD carry without malfunctioning. + var/complexity_max = DEFAULT_MAX_COMPLEXITY + /// How much battery power the MOD uses by just being on + var/charge_drain = DEFAULT_CHARGE_DRAIN + /// Slowdown of the MOD when not active. + var/slowdown_inactive = 1.25 + /// Slowdown of the MOD when active. + var/slowdown_active = 0.75 + /// Theme used by the MOD TGUI. + var/ui_theme = "ntos" + /// List of inbuilt modules. These are different from the pre-equipped suits, you should mainly use these for unremovable modules with 0 complexity. + var/list/inbuilt_modules = list() + /// Modules blacklisted from the MOD. + var/list/module_blacklist = list() + /// Allowed items in the chestplate's suit storage. + var/list/allowed_suit_storage = list( + /obj/item/flashlight, + /obj/item/tank/internals, + ) + /// List of skins with their appropriate clothing flags. + var/list/skins = list( + "standard" = list( + HELMET_FLAGS = list( + UNSEALED_LAYER = NECK_LAYER, + UNSEALED_CLOTHING = SNUG_FIT, + SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE, + SEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, + SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + ), + CHESTPLATE_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + SEALED_INVISIBILITY = HIDEJUMPSUIT, + ), + GAUNTLETS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + BOOTS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + ), + "civilian" = list( + HELMET_FLAGS = list( + UNSEALED_LAYER = null, + UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + UNSEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, + UNSEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + ), + CHESTPLATE_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + SEALED_INVISIBILITY = HIDEJUMPSUIT, + ), + GAUNTLETS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + BOOTS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + ), + ) + +/datum/mod_theme/engineering + name = "engineering" + default_skin = "engineering" + armor = list("melee" = 10, "bullet" = 5, "laser" = 20, "energy" = 10, "bomb" = 10, "bio" = 100, "fire" = 100, "acid" = 25) + resistance_flags = FIRE_PROOF + max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT + siemens_coefficient = 0 + slowdown_inactive = 1.5 + slowdown_active = 1 + allowed_suit_storage = list( + /obj/item/flashlight, + /obj/item/tank/internals, + /obj/item/construction/rcd, + /obj/item/storage/bag/construction, + ) + skins = list( + "engineering" = list( + HELMET_FLAGS = list( + UNSEALED_LAYER = NECK_LAYER, + UNSEALED_CLOTHING = SNUG_FIT, + SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE, + UNSEALED_INVISIBILITY = HIDEFACIALHAIR, + SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, + SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + ), + CHESTPLATE_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + SEALED_INVISIBILITY = HIDEJUMPSUIT, + ), + GAUNTLETS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + BOOTS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + ), + ) + +/datum/mod_theme/atmospheric + name = "atmospheric" + default_skin = "atmospheric" + armor = list("melee" = 10, "bullet" = 5, "laser" = 10, "energy" = 15, "bomb" = 10, "bio" = 100, "fire" = 100, "acid" = 75) + resistance_flags = FIRE_PROOF + max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT + slowdown_inactive = 1.5 + slowdown_active = 1 + allowed_suit_storage = list( + /obj/item/flashlight, + /obj/item/tank/internals, + /obj/item/analyzer, + /obj/item/t_scanner, + /obj/item/pipe_dispenser, + ) + skins = list( + "atmospheric" = list( + HELMET_FLAGS = list( + UNSEALED_LAYER = NECK_LAYER, + UNSEALED_CLOTHING = SNUG_FIT, + SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT, + UNSEALED_INVISIBILITY = HIDEFACIALHAIR|HIDESNOUT, + SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR, + UNSEALED_COVER = HEADCOVERSMOUTH, + SEALED_COVER = HEADCOVERSEYES|PEPPERPROOF, + ), + CHESTPLATE_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + SEALED_INVISIBILITY = HIDEJUMPSUIT, + ), + GAUNTLETS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + BOOTS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + ), + ) + +/datum/mod_theme/advanced + name = "advanced" + default_skin = "advanced" + armor = list("melee" = 15, "bullet" = 5, "laser" = 20, "energy" = 15, "bomb" = 50, "bio" = 100, "fire" = 100, "acid" = 90) + resistance_flags = FIRE_PROOF + max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT + siemens_coefficient = 0 + slowdown_inactive = 1 + slowdown_active = 0.5 + inbuilt_modules = list(/obj/item/mod/module/magboot/advanced) + allowed_suit_storage = list( + /obj/item/flashlight, + /obj/item/tank/internals, + /obj/item/analyzer, + /obj/item/t_scanner, + /obj/item/pipe_dispenser, + /obj/item/construction/rcd, + /obj/item/storage/bag/construction, + /obj/item/melee/classic_baton/telescopic, + ) + skins = list( + "advanced" = list( + HELMET_FLAGS = list( + UNSEALED_LAYER = NECK_LAYER, + UNSEALED_CLOTHING = SNUG_FIT, + SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT, + UNSEALED_INVISIBILITY = HIDEFACIALHAIR, + SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, + SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + ), + CHESTPLATE_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + SEALED_INVISIBILITY = HIDEJUMPSUIT, + ), + GAUNTLETS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + BOOTS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + ), + ) + +/datum/mod_theme/mining + name = "mining" + default_skin = "mining" + armor = list("melee" = 15, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 30, "bio" = 100, "fire" = 100, "acid" = 75) + resistance_flags = FIRE_PROOF|LAVA_PROOF + max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT + complexity_max = DEFAULT_MAX_COMPLEXITY - 5 + charge_drain = DEFAULT_CHARGE_DRAIN * 2 + allowed_suit_storage = list( + /obj/item/flashlight, + /obj/item/tank/internals, + /obj/item/resonator, + /obj/item/mining_scanner, + /obj/item/t_scanner/adv_mining_scanner, + /obj/item/pickaxe, + /obj/item/kinetic_crusher, + /obj/item/stack/ore/plasma, + /obj/item/storage/bag/ore, + ) + inbuilt_modules = list() + skins = list( + "mining" = list( + HELMET_FLAGS = list( + UNSEALED_LAYER = null, + UNSEALED_CLOTHING = SNUG_FIT, + SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE, + UNSEALED_INVISIBILITY = HIDEEARS|HIDEHAIR, + SEALED_INVISIBILITY = HIDEMASK|HIDEEYES|HIDEFACE|HIDEFACIALHAIR|HIDESNOUT, + SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + ), + CHESTPLATE_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + SEALED_INVISIBILITY = HIDEJUMPSUIT, + ), + GAUNTLETS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + BOOTS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + ), + "asteroid" = list( + HELMET_FLAGS = list( + UNSEALED_LAYER = null, + UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + UNSEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEEARS|HIDEHAIR|HIDESNOUT, + SEALED_INVISIBILITY = HIDEMASK|HIDEEYES|HIDEFACE, + SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + ), + CHESTPLATE_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + SEALED_INVISIBILITY = HIDEJUMPSUIT, + ), + GAUNTLETS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + BOOTS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + ), + ) + +/datum/mod_theme/loader + name = "loader" + default_skin = "loader" + armor = list("melee" = 15, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 10, "bio" = 10, "fire" = 25, "acid" = 25) + max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT + min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT + siemens_coefficient = 0.25 + complexity_max = DEFAULT_MAX_COMPLEXITY - 5 + slowdown_inactive = 0.5 + slowdown_active = 0 + allowed_suit_storage = list( + /obj/item/flashlight, + /obj/item/tank/internals, + /obj/item/paper + ) + inbuilt_modules = list(/obj/item/mod/module/clamp/loader, /obj/item/mod/module/magnet) + skins = list( + "loader" = list( + HELMET_FLAGS = list( + UNSEALED_LAYER = null, + UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, + UNSEALED_INVISIBILITY = HIDEEARS|HIDEHAIR, + SEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEMASK|HIDEEYES|HIDEFACE|HIDESNOUT, + SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + ), + CHESTPLATE_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + ), + GAUNTLETS_FLAGS = list( + SEALED_CLOTHING = THICKMATERIAL, + CAN_OVERSLOT = TRUE, + ), + BOOTS_FLAGS = list( + SEALED_CLOTHING = THICKMATERIAL, + CAN_OVERSLOT = TRUE, + ), + ), + ) + +/datum/mod_theme/medical + name = "medical" + default_skin = "medical" + armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 10, "bio" = 100, "fire" = 60, "acid" = 75) + charge_drain = DEFAULT_CHARGE_DRAIN * 1.5 + slowdown_inactive = 1 + slowdown_active = 0.5 + allowed_suit_storage = list( + /obj/item/flashlight, + /obj/item/tank/internals, + /obj/item/healthanalyzer, + /obj/item/reagent_containers/dropper, + /obj/item/reagent_containers/glass/beaker, + /obj/item/reagent_containers/glass/bottle, + /obj/item/reagent_containers/hypospray, + /obj/item/reagent_containers/pill, + /obj/item/reagent_containers/syringe, + /obj/item/stack/medical, + /obj/item/sensor_device, + /obj/item/storage/pill_bottle, + /obj/item/storage/bag/chemistry, + /obj/item/storage/bag/bio, + ) + skins = list( + "medical" = list( + HELMET_FLAGS = list( + UNSEALED_LAYER = NECK_LAYER, + UNSEALED_CLOTHING = SNUG_FIT, + SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT, + UNSEALED_INVISIBILITY = HIDEFACIALHAIR, + SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, + SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + ), + CHESTPLATE_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + SEALED_INVISIBILITY = HIDEJUMPSUIT, + ), + GAUNTLETS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + BOOTS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + ), + "corpsman" = list( + HELMET_FLAGS = list( + UNSEALED_LAYER = NECK_LAYER, + UNSEALED_CLOTHING = SNUG_FIT, + SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT, + UNSEALED_INVISIBILITY = HIDEFACIALHAIR, + SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, + SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + ), + CHESTPLATE_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + SEALED_INVISIBILITY = HIDEJUMPSUIT, + ), + GAUNTLETS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + BOOTS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + ), + ) + +/datum/mod_theme/rescue + name = "rescue" + default_skin = "rescue" + armor = list("melee" = 10, "bullet" = 10, "laser" = 5, "energy" = 5, "bomb" = 10, "bio" = 100, "fire" = 100, "acid" = 100) + resistance_flags = FIRE_PROOF|ACID_PROOF + max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT + charge_drain = DEFAULT_CHARGE_DRAIN * 1.5 + slowdown_inactive = 0.75 + slowdown_active = 0.25 + inbuilt_modules = list(/obj/item/mod/module/quick_carry/advanced) + allowed_suit_storage = list( + /obj/item/flashlight, + /obj/item/tank/internals, + /obj/item/healthanalyzer, + /obj/item/reagent_containers/dropper, + /obj/item/reagent_containers/glass/beaker, + /obj/item/reagent_containers/glass/bottle, + /obj/item/reagent_containers/hypospray, + /obj/item/reagent_containers/pill, + /obj/item/reagent_containers/syringe, + /obj/item/stack/medical, + /obj/item/sensor_device, + /obj/item/storage/pill_bottle, + /obj/item/storage/bag/chemistry, + /obj/item/storage/bag/bio, + /obj/item/melee/classic_baton/telescopic, + ) + skins = list( + "rescue" = list( + HELMET_FLAGS = list( + UNSEALED_LAYER = NECK_LAYER, + UNSEALED_CLOTHING = SNUG_FIT, + SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT, + UNSEALED_INVISIBILITY = HIDEFACIALHAIR, + SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, + SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + ), + CHESTPLATE_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + SEALED_INVISIBILITY = HIDEJUMPSUIT, + ), + GAUNTLETS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + BOOTS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + ), + ) + +/datum/mod_theme/research + name = "research" + default_skin = "research" + armor = list("melee" = 20, "bullet" = 15, "laser" = 5, "energy" = 5, "bomb" = 100, "bio" = 100, "fire" = 100, "acid" = 100) + resistance_flags = FIRE_PROOF|ACID_PROOF + atom_flags = PREVENT_CONTENTS_EXPLOSION_1 + max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT + complexity_max = DEFAULT_MAX_COMPLEXITY + 5 + slowdown_inactive = 1.75 + slowdown_active = 1.25 + inbuilt_modules = list(/obj/item/mod/module/reagent_scanner/advanced) + allowed_suit_storage = list( + /obj/item/flashlight, + /obj/item/tank/internals, + /obj/item/analyzer, + /obj/item/dnainjector, + /obj/item/storage/bag/bio, + /obj/item/melee/classic_baton/telescopic, + ) + skins = list( + "research" = list( + HELMET_FLAGS = list( + UNSEALED_LAYER = null, + UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT, + UNSEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, + UNSEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + ), + CHESTPLATE_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + SEALED_INVISIBILITY = HIDEJUMPSUIT, + ), + GAUNTLETS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + BOOTS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + ), + ) + +/datum/mod_theme/security + name = "security" + default_skin = "security" + armor = list("melee" = 15, "bullet" = 15, "laser" = 15, "energy" = 15, "bomb" = 25, "bio" = 100, "fire" = 75, "acid" = 75) + complexity_max = DEFAULT_MAX_COMPLEXITY - 3 + slowdown_inactive = 1 + slowdown_active = 0.5 + allowed_suit_storage = list( + /obj/item/flashlight, + /obj/item/tank/internals, + /obj/item/ammo_box, + /obj/item/ammo_casing, + /obj/item/reagent_containers/spray/pepper, + /obj/item/restraints/handcuffs, + /obj/item/assembly/flash, + /obj/item/melee/baton, + ) + skins = list( + "security" = list( + HELMET_FLAGS = list( + UNSEALED_LAYER = null, + UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + UNSEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEEARS|HIDEHAIR|HIDESNOUT, + SEALED_INVISIBILITY = HIDEMASK|HIDEEYES|HIDEFACE, + UNSEALED_COVER = HEADCOVERSMOUTH, + SEALED_COVER = HEADCOVERSEYES|PEPPERPROOF, + ), + CHESTPLATE_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + SEALED_INVISIBILITY = HIDEJUMPSUIT, + ), + GAUNTLETS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + BOOTS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + ), + ) + +/datum/mod_theme/safeguard + name = "safeguard" + default_skin = "safeguard" + armor = list("melee" = 15, "bullet" = 15, "laser" = 15, "energy" = 15, "bomb" = 40, "bio" = 100, "fire" = 100, "acid" = 95) + resistance_flags = FIRE_PROOF + max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT + slowdown_inactive = 0.75 + slowdown_active = 0.25 + allowed_suit_storage = list( + /obj/item/flashlight, + /obj/item/tank/internals, + /obj/item/ammo_box, + /obj/item/ammo_casing, + /obj/item/reagent_containers/spray/pepper, + /obj/item/restraints/handcuffs, + /obj/item/assembly/flash, + /obj/item/melee/baton, + ) + skins = list( + "safeguard" = list( + HELMET_FLAGS = list( + UNSEALED_LAYER = null, + UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + UNSEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, + UNSEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + ), + CHESTPLATE_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + SEALED_INVISIBILITY = HIDEJUMPSUIT, + ), + GAUNTLETS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + BOOTS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + ), + ) + +/datum/mod_theme/magnate + name = "magnate" + default_skin = "magnate" + armor = list("melee" = 20, "bullet" = 15, "laser" = 15, "energy" = 15, "bomb" = 50, "bio" = 100, "fire" = 100, "acid" = 100) + resistance_flags = FIRE_PROOF|ACID_PROOF + atom_flags = PREVENT_CONTENTS_EXPLOSION_1 + max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT + siemens_coefficient = 0 + complexity_max = DEFAULT_MAX_COMPLEXITY + 5 + slowdown_inactive = 0.75 + slowdown_active = 0.25 + allowed_suit_storage = list( + /obj/item/flashlight, + /obj/item/tank/internals, + /obj/item/ammo_box, + /obj/item/ammo_casing, + /obj/item/restraints/handcuffs, + /obj/item/assembly/flash, + /obj/item/melee/baton, + ) + skins = list( + "magnate" = list( + HELMET_FLAGS = list( + UNSEALED_LAYER = NECK_LAYER, + UNSEALED_CLOTHING = SNUG_FIT, + SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE, + UNSEALED_INVISIBILITY = HIDEFACIALHAIR, + SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, + SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + ), + CHESTPLATE_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + SEALED_INVISIBILITY = HIDEJUMPSUIT, + ), + GAUNTLETS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + BOOTS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + ), + ) + +/datum/mod_theme/syndicate + name = "syndicate" + default_skin = "syndicate" + armor = list("melee" = 15, "bullet" = 20, "laser" = 15, "energy" = 15, "bomb" = 35, "bio" = 100, "fire" = 50, "acid" = 90) + atom_flags = PREVENT_CONTENTS_EXPLOSION_1 + max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT + siemens_coefficient = 0 + slowdown_inactive = 1 + slowdown_active = 0.5 + ui_theme = "syndicate" + inbuilt_modules = list(/obj/item/mod/module/armor_booster) + allowed_suit_storage = list( + /obj/item/flashlight, + /obj/item/tank/internals, + /obj/item/ammo_box, + /obj/item/ammo_casing, + /obj/item/restraints/handcuffs, + /obj/item/assembly/flash, + /obj/item/melee/baton, + /obj/item/melee/transforming/energy/sword, + /obj/item/shield/energy, + ) + skins = list( + "syndicate" = list( + HELMET_FLAGS = list( + UNSEALED_LAYER = NECK_LAYER, + UNSEALED_CLOTHING = SNUG_FIT, + SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE, + UNSEALED_INVISIBILITY = HIDEFACIALHAIR, + SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, + SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + ), + CHESTPLATE_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + SEALED_INVISIBILITY = HIDEJUMPSUIT, + ), + GAUNTLETS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + BOOTS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + ), + ) + +/datum/mod_theme/elite + name = "elite" + default_skin = "elite" + armor = list("melee" = 35, "bullet" = 30, "laser" = 35, "energy" = 35, "bomb" = 55, "bio" = 100, "fire" = 100, "acid" = 100) + resistance_flags = FIRE_PROOF|ACID_PROOF + atom_flags = PREVENT_CONTENTS_EXPLOSION_1 + max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT + siemens_coefficient = 0 + slowdown_inactive = 1 + slowdown_active = 0.5 + ui_theme = "syndicate" + inbuilt_modules = list(/obj/item/mod/module/armor_booster) + allowed_suit_storage = list( + /obj/item/flashlight, + /obj/item/tank/internals, + /obj/item/ammo_box, + /obj/item/ammo_casing, + /obj/item/restraints/handcuffs, + /obj/item/assembly/flash, + /obj/item/melee/baton, + /obj/item/melee/transforming/energy/sword, + /obj/item/shield/energy, + ) + skins = list( + "elite" = list( + HELMET_FLAGS = list( + UNSEALED_LAYER = null, + UNSEALED_CLOTHING = SNUG_FIT, + SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT, + UNSEALED_INVISIBILITY = HIDEFACIALHAIR, + SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, + SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + ), + CHESTPLATE_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + SEALED_INVISIBILITY = HIDEJUMPSUIT, + ), + GAUNTLETS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + BOOTS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + ), + ) + +/datum/mod_theme/ninja + name = "ninja" + default_skin = "ninja" + armor = list("melee" = 40, "bullet" = 30, "laser" = 20, "energy" = 30, "bomb" = 30, "bio" = 100, "fire" = 100, "acid" = 100) + resistance_flags = LAVA_PROOF|FIRE_PROOF|ACID_PROOF + charge_drain = DEFAULT_CHARGE_DRAIN * 0.5 + siemens_coefficient = 0 + slowdown_inactive = 0.5 + slowdown_active = 0 + ui_theme = "hackerman" + inbuilt_modules = list(/obj/item/mod/module/welding/camera_vision, /obj/item/mod/module/hacker, /obj/item/mod/module/weapon_recall, /obj/item/mod/module/adrenaline_boost, /obj/item/mod/module/energy_net) + allowed_suit_storage = list( + /obj/item/flashlight, + /obj/item/tank/internals, + /obj/item/gun, + /obj/item/ammo_box, + /obj/item/ammo_casing, + /obj/item/melee/baton, + /obj/item/restraints/handcuffs, + ) + skins = list( + "ninja" = list( + HELMET_FLAGS = list( + UNSEALED_LAYER = null, + UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + UNSEALED_INVISIBILITY = HIDEEARS|HIDEHAIR, + SEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEMASK|HIDEEYES|HIDEFACE|HIDESNOUT, + SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + ), + CHESTPLATE_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + SEALED_INVISIBILITY = HIDEJUMPSUIT, + ), + GAUNTLETS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + BOOTS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + ), + ) + +/datum/mod_theme/prototype + name = "prototype" + default_skin = "prototype" + armor = list("melee" = 20, "bullet" = 5, "laser" = 10, "energy" = 10, "bomb" = 50, "bio" = 100, "fire" = 100, "acid" = 75) + resistance_flags = FIRE_PROOF + siemens_coefficient = 0 + complexity_max = DEFAULT_MAX_COMPLEXITY + 5 + charge_drain = DEFAULT_CHARGE_DRAIN * 2 + slowdown_inactive = 2 + slowdown_active = 1.5 + ui_theme = "hackerman" + //inbuilt_modules = list(/obj/item/mod/module/anomaly_locked/kinesis/prebuilt/prototype) + allowed_suit_storage = list( + /obj/item/flashlight, + /obj/item/tank/internals, + /obj/item/analyzer, + /obj/item/t_scanner, + /obj/item/pipe_dispenser, + /obj/item/construction/rcd, + ) + skins = list( + "prototype" = list( + HELMET_FLAGS = list( + UNSEALED_LAYER = null, + UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + UNSEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, + UNSEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + ), + CHESTPLATE_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + SEALED_INVISIBILITY = HIDEJUMPSUIT, + ), + GAUNTLETS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + BOOTS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + ), + ) + +/datum/mod_theme/responsory + name = "responsory" + default_skin = "responsory" + armor = list("melee" = 50, "bullet" = 40, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 100, "fire" = 100, "acid" = 90) + atom_flags = PREVENT_CONTENTS_EXPLOSION_1 + resistance_flags = FIRE_PROOF + max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT + siemens_coefficient = 0 + slowdown_inactive = 0.5 + slowdown_active = 0 + allowed_suit_storage = list( + /obj/item/flashlight, + /obj/item/tank/internals, + /obj/item/ammo_box, + /obj/item/ammo_casing, + /obj/item/restraints/handcuffs, + /obj/item/assembly/flash, + /obj/item/melee/baton, + ) + skins = list( + "responsory" = list( + HELMET_FLAGS = list( + UNSEALED_LAYER = NECK_LAYER, + UNSEALED_CLOTHING = SNUG_FIT, + SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT, + UNSEALED_INVISIBILITY = HIDEFACIALHAIR, + SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, + SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + ), + CHESTPLATE_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + SEALED_INVISIBILITY = HIDEJUMPSUIT, + ), + GAUNTLETS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + BOOTS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + ), + "inquisitory" = list( + HELMET_FLAGS = list( + UNSEALED_LAYER = null, + UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT, + UNSEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, + UNSEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + ), + CHESTPLATE_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + SEALED_INVISIBILITY = HIDEJUMPSUIT, + ), + GAUNTLETS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + BOOTS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + ), + ) + +/datum/mod_theme/apocryphal + name = "apocryphal" + default_skin = "apocryphal" + armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 60, "bomb" = 100, "bio" = 100, "fire" = 100, "acid" = 100) + resistance_flags = FIRE_PROOF|ACID_PROOF + atom_flags = PREVENT_CONTENTS_EXPLOSION_1 + max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT + siemens_coefficient = 0 + complexity_max = DEFAULT_MAX_COMPLEXITY + 10 + allowed_suit_storage = list( + /obj/item/flashlight, + /obj/item/tank/internals, + /obj/item/ammo_box, + /obj/item/ammo_casing, + /obj/item/restraints/handcuffs, + /obj/item/assembly/flash, + /obj/item/melee/baton, + /obj/item/melee/transforming/energy/sword, + /obj/item/shield/energy, + ) + skins = list( + "apocryphal" = list( + HELMET_FLAGS = list( + UNSEALED_LAYER = null, + UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + UNSEALED_INVISIBILITY = HIDEEARS|HIDEHAIR, + SEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEMASK|HIDEEYES|HIDEFACE|HIDESNOUT, + SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + ), + CHESTPLATE_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + SEALED_INVISIBILITY = HIDEJUMPSUIT, + ), + GAUNTLETS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + BOOTS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + ), + ) + +/datum/mod_theme/corporate + name = "corporate" + default_skin = "corporate" + armor = list("melee" = 50, "bullet" = 40, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 100, "fire" = 100, "acid" = 100) + resistance_flags = FIRE_PROOF|ACID_PROOF + atom_flags = PREVENT_CONTENTS_EXPLOSION_1 + max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT + siemens_coefficient = 0 + slowdown_inactive = 0.5 + slowdown_active = 0 + allowed_suit_storage = list( + /obj/item/flashlight, + /obj/item/tank/internals, + /obj/item/ammo_box, + /obj/item/ammo_casing, + /obj/item/restraints/handcuffs, + /obj/item/assembly/flash, + /obj/item/melee/baton, + ) + skins = list( + "corporate" = list( + HELMET_FLAGS = list( + UNSEALED_LAYER = null, + UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + UNSEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEEARS|HIDEHAIR|HIDESNOUT, + SEALED_INVISIBILITY = HIDEMASK|HIDEEYES|HIDEFACE, + SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + ), + CHESTPLATE_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + SEALED_INVISIBILITY = HIDEJUMPSUIT, + ), + GAUNTLETS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + BOOTS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + ), + ) + +/datum/mod_theme/chrono + name = "chrono" + default_skin = "chrono" + armor = list("melee" = 60, "bullet" = 60, "laser" = 60, "energy" = 60, "bomb" = 30, "bio" = 100, "fire" = 100, "acid" = 100) + resistance_flags = FIRE_PROOF|ACID_PROOF + max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT + complexity_max = DEFAULT_MAX_COMPLEXITY - 10 + slowdown_inactive = 0 + slowdown_active = 0 + allowed_suit_storage = list( + /obj/item/flashlight, + /obj/item/tank/internals, + /obj/item/restraints/handcuffs, + ) + skins = list( + "chrono" = list( + HELMET_FLAGS = list( + UNSEALED_LAYER = NECK_LAYER, + UNSEALED_CLOTHING = SNUG_FIT, + SEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT, + UNSEALED_INVISIBILITY = HIDEFACIALHAIR, + SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDESNOUT, + SEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + ), + CHESTPLATE_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + SEALED_INVISIBILITY = HIDEJUMPSUIT, + ), + GAUNTLETS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + BOOTS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + ), + ) + +/datum/mod_theme/debug + name = "debug" + default_skin = "debug" + armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "fire" = 100, "acid" = 100) + resistance_flags = FIRE_PROOF|ACID_PROOF + atom_flags = PREVENT_CONTENTS_EXPLOSION_1 + max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT + complexity_max = 50 + siemens_coefficient = 0 + slowdown_inactive = 0.5 + slowdown_active = 0 + allowed_suit_storage = list( + /obj/item/flashlight, + /obj/item/tank/internals, + /obj/item/gun, + ) + skins = list( + "debug" = list( + HELMET_FLAGS = list( + UNSEALED_LAYER = null, + UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT, + UNSEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEEARS|HIDEHAIR|HIDESNOUT, + SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE, + UNSEALED_COVER = HEADCOVERSMOUTH, + SEALED_COVER = HEADCOVERSEYES|PEPPERPROOF, + ), + CHESTPLATE_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + SEALED_INVISIBILITY = HIDEJUMPSUIT, + ), + GAUNTLETS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + BOOTS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL, + SEALED_CLOTHING = STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + ), + ) + +/datum/mod_theme/administrative + name = "administrative" + default_skin = "debug" + armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 100, "bio" = 100, "fire" = 100, "acid" = 100) + resistance_flags = INDESTRUCTIBLE|LAVA_PROOF|FIRE_PROOF|UNACIDABLE|ACID_PROOF + atom_flags = PREVENT_CONTENTS_EXPLOSION_1 + max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT + complexity_max = 1000 + charge_drain = DEFAULT_CHARGE_DRAIN * 0 + siemens_coefficient = 0 + slowdown_inactive = 0 + slowdown_active = 0 + allowed_suit_storage = list( + /obj/item/flashlight, + /obj/item/tank/internals, + /obj/item/gun, + ) + skins = list( + "debug" = list( + HELMET_FLAGS = list( + UNSEALED_LAYER = null, + UNSEALED_CLOTHING = SNUG_FIT|THICKMATERIAL|STOPSPRESSUREDAMAGE|BLOCK_GAS_SMOKE_EFFECT, + UNSEALED_INVISIBILITY = HIDEFACIALHAIR|HIDEEARS|HIDEHAIR|HIDESNOUT, + SEALED_INVISIBILITY = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE, + UNSEALED_COVER = HEADCOVERSMOUTH|HEADCOVERSEYES|PEPPERPROOF, + ), + CHESTPLATE_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE|BLOCKS_SHOVE_KNOCKDOWN, + SEALED_INVISIBILITY = HIDEJUMPSUIT, + ), + GAUNTLETS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + BOOTS_FLAGS = list( + UNSEALED_CLOTHING = THICKMATERIAL|STOPSPRESSUREDAMAGE, + CAN_OVERSLOT = TRUE, + ), + ), + ) diff --git a/code/modules/mod/mod_types.dm b/code/modules/mod/mod_types.dm new file mode 100644 index 000000000000..6cd33197e423 --- /dev/null +++ b/code/modules/mod/mod_types.dm @@ -0,0 +1,331 @@ +/obj/item/mod/control/pre_equipped + /// The skin we apply to the suit, defaults to the default_skin of the theme. + var/applied_skin + /// The MOD core we apply to the suit. + var/applied_core = /obj/item/mod/core/standard + /// The cell we apply to the core. Only applies to standard core suits. + var/applied_cell = /obj/item/stock_parts/cell/high + +/obj/item/mod/control/pre_equipped/Initialize(mapload, new_theme, new_skin, new_core) + new_skin = applied_skin + new_core = new applied_core(src) + if(istype(new_core, /obj/item/mod/core/standard)) + var/obj/item/mod/core/standard/cell_core = new_core + cell_core.cell = new applied_cell() + return ..() + +/obj/item/mod/control/pre_equipped/standard + initial_modules = list( + /obj/item/mod/module/storage, + /obj/item/mod/module/welding, + /obj/item/mod/module/flashlight, + ) + +/obj/item/mod/control/pre_equipped/engineering + theme = /datum/mod_theme/engineering + initial_modules = list( + /obj/item/mod/module/storage, + /obj/item/mod/module/welding, + /obj/item/mod/module/flashlight, + /obj/item/mod/module/magboot, + ) + +/obj/item/mod/control/pre_equipped/atmospheric + theme = /datum/mod_theme/atmospheric + initial_modules = list( + /obj/item/mod/module/storage, + /obj/item/mod/module/welding, + /obj/item/mod/module/flashlight, + /obj/item/mod/module/t_ray, + ) + +/obj/item/mod/control/pre_equipped/advanced + theme = /datum/mod_theme/advanced + applied_cell = /obj/item/stock_parts/cell/super + initial_modules = list( + /obj/item/mod/module/storage/large_capacity, + /obj/item/mod/module/welding, + /obj/item/mod/module/flashlight, + /obj/item/mod/module/jetpack, + ) + +/obj/item/mod/control/pre_equipped/loader + theme = /datum/mod_theme/loader + initial_modules = list( + /obj/item/mod/module/storage/large_capacity, + /obj/item/mod/module/flashlight, + /obj/item/mod/module/paper_dispenser, + /obj/item/mod/module/stamp, + ) + +/obj/item/mod/control/pre_equipped/mining + theme = /datum/mod_theme/mining + applied_core = /obj/item/mod/core/plasma + initial_modules = list( + /obj/item/mod/module/storage, + /obj/item/mod/module/gps, + /obj/item/mod/module/orebag, + /obj/item/mod/module/clamp, + /obj/item/mod/module/drill, + ) + +/obj/item/mod/control/pre_equipped/medical + theme = /datum/mod_theme/medical + initial_modules = list( + /obj/item/mod/module/storage, + /obj/item/mod/module/flashlight, + /obj/item/mod/module/health_analyzer, + /obj/item/mod/module/quick_carry, + ) + +/obj/item/mod/control/pre_equipped/rescue + theme = /datum/mod_theme/rescue + applied_cell = /obj/item/stock_parts/cell/super + initial_modules = list( + /obj/item/mod/module/storage/large_capacity, + /obj/item/mod/module/flashlight, + /obj/item/mod/module/health_analyzer, + /obj/item/mod/module/injector, + ) + +/obj/item/mod/control/pre_equipped/research + theme = /datum/mod_theme/research + applied_cell = /obj/item/stock_parts/cell/super + initial_modules = list( + /obj/item/mod/module/storage/large_capacity, + /obj/item/mod/module/welding, + /obj/item/mod/module/flashlight, + //obj/item/mod/module/circuit, + /obj/item/mod/module/t_ray, + ) + +/obj/item/mod/control/pre_equipped/security + theme = /datum/mod_theme/security + initial_modules = list( + /obj/item/mod/module/storage, + /obj/item/mod/module/magnetic_harness, + /obj/item/mod/module/flashlight, + ) + +/obj/item/mod/control/pre_equipped/safeguard + theme = /datum/mod_theme/safeguard + applied_cell = /obj/item/stock_parts/cell/super + initial_modules = list( + /obj/item/mod/module/storage/large_capacity, + /obj/item/mod/module/magnetic_harness, + /obj/item/mod/module/flashlight, + /obj/item/mod/module/jetpack, + /obj/item/mod/module/megaphone, + ) + +/obj/item/mod/control/pre_equipped/magnate + theme = /datum/mod_theme/magnate + applied_cell = /obj/item/stock_parts/cell/hyper + initial_modules = list( + /obj/item/mod/module/storage/large_capacity, + /obj/item/mod/module/hat_stabilizer, + /obj/item/mod/module/magnetic_harness, + /obj/item/mod/module/jetpack/advanced, + ) + +/obj/item/mod/control/pre_equipped/traitor + theme = /datum/mod_theme/syndicate + applied_cell = /obj/item/stock_parts/cell/super + initial_modules = list( + /obj/item/mod/module/storage/syndicate, + /obj/item/mod/module/emp_shield, + /obj/item/mod/module/magnetic_harness, + /obj/item/mod/module/jetpack, + /obj/item/mod/module/flashlight, + /obj/item/mod/module/dna_lock, + ) + +/obj/item/mod/control/pre_equipped/traitor_elite + theme = /datum/mod_theme/elite + applied_cell = /obj/item/stock_parts/cell/bluespace + initial_modules = list( + /obj/item/mod/module/storage/syndicate, + /obj/item/mod/module/emp_shield, + /obj/item/mod/module/magnetic_harness, + /obj/item/mod/module/jetpack/advanced, + /obj/item/mod/module/flashlight, + /obj/item/mod/module/dna_lock, + ) + +/obj/item/mod/control/pre_equipped/nuclear + theme = /datum/mod_theme/syndicate + applied_cell = /obj/item/stock_parts/cell/hyper + req_access = list(ACCESS_SYNDICATE) + initial_modules = list( + /obj/item/mod/module/storage/syndicate, + /obj/item/mod/module/emp_shield, + /obj/item/mod/module/magnetic_harness, + /obj/item/mod/module/jetpack/advanced, + /obj/item/mod/module/flashlight, + ) + +/obj/item/mod/control/pre_equipped/elite + theme = /datum/mod_theme/elite + applied_cell = /obj/item/stock_parts/cell/bluespace + req_access = list(ACCESS_SYNDICATE) + initial_modules = list( + /obj/item/mod/module/storage/syndicate, + /obj/item/mod/module/emp_shield, + /obj/item/mod/module/magnetic_harness, + /obj/item/mod/module/jetpack/advanced, + /obj/item/mod/module/flashlight, + ) + +/obj/item/mod/control/pre_equipped/elite/flamethrower + initial_modules = list( + /obj/item/mod/module/storage/syndicate, + /obj/item/mod/module/emp_shield, + /obj/item/mod/module/magnetic_harness, + /obj/item/mod/module/thermal_regulator, + /obj/item/mod/module/jetpack/advanced, + /obj/item/mod/module/flashlight, + /obj/item/mod/module/flamethrower, + ) + +/obj/item/mod/control/pre_equipped/ninja + theme = /datum/mod_theme/ninja + applied_cell = /obj/item/stock_parts/cell/super + initial_modules = list( + /obj/item/mod/module/storage, + /obj/item/mod/module/noslip, + /obj/item/mod/module/status_readout, + /obj/item/mod/module/stealth/ninja, + /obj/item/mod/module/dispenser/ninja, + /obj/item/mod/module/dna_lock/reinforced, + /obj/item/mod/module/emp_shield/pulse, + ) + +/obj/item/mod/control/pre_equipped/prototype + theme = /datum/mod_theme/prototype + req_access = list(ACCESS_AWAY_GENERAL) + initial_modules = list( + /obj/item/mod/module/storage, + /obj/item/mod/module/welding, + /obj/item/mod/module/flashlight, + /obj/item/mod/module/tether, + ) + +/obj/item/mod/control/pre_equipped/responsory + theme = /datum/mod_theme/responsory + applied_cell = /obj/item/stock_parts/cell/hyper + req_access = list(ACCESS_CENT_GENERAL) + initial_modules = list( + /obj/item/mod/module/storage/large_capacity, + /obj/item/mod/module/welding, + /obj/item/mod/module/emp_shield, + /obj/item/mod/module/magnetic_harness, + /obj/item/mod/module/flashlight, + ) + /// The insignia type, insignias show what sort of member of the ERT you're dealing with. + var/insignia_type = /obj/item/mod/module/insignia + /// Additional module we add, as a treat. + var/additional_module = /obj/item/mod/module + +/obj/item/mod/control/pre_equipped/responsory/Initialize(mapload, new_theme, new_skin, new_core) + initial_modules.Insert(1, insignia_type) + initial_modules.Add(additional_module) + return ..() + +/obj/item/mod/control/pre_equipped/responsory/commander + insignia_type = /obj/item/mod/module/insignia/commander + additional_module = /obj/item/mod/module/power_kick + +/obj/item/mod/control/pre_equipped/responsory/security + insignia_type = /obj/item/mod/module/insignia/security + additional_module = /obj/item/mod/module/megaphone + +/obj/item/mod/control/pre_equipped/responsory/engineer + insignia_type = /obj/item/mod/module/insignia/engineer + additional_module = /obj/item/mod/module/magboot + +/obj/item/mod/control/pre_equipped/responsory/medic + insignia_type = /obj/item/mod/module/insignia/medic + additional_module = /obj/item/mod/module/quick_carry + +/obj/item/mod/control/pre_equipped/responsory/janitor + insignia_type = /obj/item/mod/module/insignia/janitor + additional_module = /obj/item/mod/module/clamp + +/obj/item/mod/control/pre_equipped/responsory/chaplain + insignia_type = /obj/item/mod/module/insignia/chaplain + additional_module = /obj/item/mod/module/injector + +/obj/item/mod/control/pre_equipped/apocryphal + theme = /datum/mod_theme/apocryphal + applied_cell = /obj/item/stock_parts/cell/bluespace + req_access = list(ACCESS_CENT_SPECOPS) + initial_modules = list( + /obj/item/mod/module/storage/bluespace, + /obj/item/mod/module/welding, + /obj/item/mod/module/emp_shield/advanced, + /obj/item/mod/module/magnetic_harness, + /obj/item/mod/module/jetpack, + ) + +/obj/item/mod/control/pre_equipped/corporate + theme = /datum/mod_theme/corporate + applied_core = /obj/item/mod/core/infinite + req_access = list(ACCESS_CENT_SPECOPS) + initial_modules = list( + /obj/item/mod/module/storage/bluespace, + /obj/item/mod/module/hat_stabilizer, + /obj/item/mod/module/magnetic_harness, + /obj/item/mod/module/emp_shield/advanced, + ) + +/*obj/item/mod/control/pre_equipped/chrono + theme = /datum/mod_theme/chrono + applied_core = /obj/item/mod/core/infinite + initial_modules = list( + /obj/item/mod/module/eradication_lock, + /obj/item/mod/module/emp_shield, + /obj/item/mod/module/timeline_jumper, + /obj/item/mod/module/timestopper, + /obj/item/mod/module/rewinder, + /obj/item/mod/module/tem, + /obj/item/mod/module/anomaly_locked/kinesis/plus, + )*/ + +/obj/item/mod/control/pre_equipped/debug + theme = /datum/mod_theme/debug + applied_core = /obj/item/mod/core/infinite + initial_modules = list( + /obj/item/mod/module/storage/bluespace, + /obj/item/mod/module/welding, + /obj/item/mod/module/flashlight, + /obj/item/mod/module/tether, + /obj/item/mod/module/injector, + ) + +/obj/item/mod/control/pre_equipped/administrative + theme = /datum/mod_theme/administrative + applied_core = /obj/item/mod/core/infinite + initial_modules = list( + /obj/item/mod/module/storage/bluespace, + /obj/item/mod/module/emp_shield/advanced, + /obj/item/mod/module/welding, + /obj/item/mod/module/stealth/ninja, + /obj/item/mod/module/quick_carry/advanced, + /obj/item/mod/module/magboot/advanced, + /obj/item/mod/module/jetpack/advanced, + //obj/item/mod/module/anomaly_locked/kinesis/plus, + ) + +//these exist for the prefs menu +/obj/item/mod/control/pre_equipped/empty + +/obj/item/mod/control/pre_equipped/empty/syndicate + theme = /datum/mod_theme/syndicate + +/obj/item/mod/control/pre_equipped/empty/elite + theme = /datum/mod_theme/elite + +/obj/item/mod/control/pre_equipped/empty/ninja + theme = /datum/mod_theme/ninja + +INITIALIZE_IMMEDIATE(/obj/item/mod/control/pre_equipped/empty) diff --git a/code/modules/mod/mod_ui.dm b/code/modules/mod/mod_ui.dm new file mode 100644 index 000000000000..3bfa930dea7e --- /dev/null +++ b/code/modules/mod/mod_ui.dm @@ -0,0 +1,86 @@ +/obj/item/mod/control/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "MODsuit", name) + ui.open() + +/obj/item/mod/control/ui_data(mob/user) + var/data = list() + data["interface_break"] = interface_break + data["malfunctioning"] = malfunctioning + data["open"] = open + data["active"] = active + data["locked"] = locked + data["complexity"] = complexity + data["selected_module"] = selected_module?.name + data["wearer_name"] = wearer ? (wearer.get_authentification_name("Unknown") || "Unknown") : "No Occupant" + data["wearer_job"] = wearer ? wearer.get_assignment("Unknown", "Unknown", FALSE) : "No Job" + //data[JOB_AI] = ai?.name + data["core"] = core?.name + data["charge"] = get_charge_percent() + data["modules"] = list() + for(var/obj/item/mod/module/module as anything in modules) + var/list/module_data = list( + "module_name" = module.name, + "description" = module.desc, + "module_type" = module.module_type, + "module_active" = module.active, + "pinned" = module.pinned_to[user], + "idle_power" = module.idle_power_cost, + "active_power" = module.active_power_cost, + "use_power" = module.use_power_cost, + "module_complexity" = module.complexity, + "cooldown_time" = module.cooldown_time, + "cooldown" = round(COOLDOWN_TIMELEFT(module, cooldown_timer), 1 SECONDS), + "id" = module.tgui_id, + "ref" = REF(module), + "configuration_data" = module.get_configuration() + ) + module_data += module.add_ui_data() + data["modules"] += list(module_data) + return data + +/obj/item/mod/control/ui_static_data(mob/user) + var/data = list() + data["ui_theme"] = ui_theme + data["control"] = name + data["complexity_max"] = complexity_max + data["helmet"] = helmet?.name + data["chestplate"] = chestplate?.name + data["gauntlets"] = gauntlets?.name + data["boots"] = boots?.name + return data + +/obj/item/mod/control/ui_act(action, params) + . = ..() + if(.) + return + if(locked && !allowed(usr)) + balloon_alert(usr, "insufficient access!") + playsound(src, 'sound/machines/scanbuzz.ogg', 25, TRUE, SILENCED_SOUND_EXTRARANGE) + return + if(malfunctioning && prob(75)) + balloon_alert(usr, "button malfunctions!") + return + switch(action) + if("lock") + locked = !locked + balloon_alert(usr, "[locked ? "locked" : "unlocked"]!") + if("activate") + toggle_activate(usr) + if("select") + var/obj/item/mod/module/module = locate(params["ref"]) in modules + if(!module) + return + module.on_select() + if("configure") + var/obj/item/mod/module/module = locate(params["ref"]) in modules + if(!module) + return + module.configure_edit(params["key"], params["value"]) + if("pin") + var/obj/item/mod/module/module = locate(params["ref"]) in modules + if(!module) + return + module.pin(usr) + return TRUE diff --git a/code/modules/mod/modules/_module.dm b/code/modules/mod/modules/_module.dm new file mode 100644 index 000000000000..7264066e5d1a --- /dev/null +++ b/code/modules/mod/modules/_module.dm @@ -0,0 +1,399 @@ +///MOD Module - A special device installed in a MODsuit allowing the suit to do new stuff. +/obj/item/mod/module + name = "MOD module" + icon = 'icons/obj/clothing/modsuit/mod_modules.dmi' + icon_state = "module" + /// If it can be removed + var/removable = TRUE + /// If it's passive, togglable, usable or active + var/module_type = MODULE_PASSIVE + /// Is the module active + var/active = FALSE + /// How much space it takes up in the MOD + var/complexity = 0 + /// Power use when idle + var/idle_power_cost = DEFAULT_CHARGE_DRAIN * 0 + /// Power use when active + var/active_power_cost = DEFAULT_CHARGE_DRAIN * 0 + /// Power use when used, we call it manually + var/use_power_cost = DEFAULT_CHARGE_DRAIN * 0 + /// ID used by their TGUI + var/tgui_id + /// Linked MODsuit + var/obj/item/mod/control/mod + /// If we're an active module, what item are we? + var/obj/item/device + /// Overlay given to the user when the module is inactive + var/overlay_state_inactive + /// Overlay given to the user when the module is active + var/overlay_state_active + /// Overlay given to the user when the module is used, lasts until cooldown finishes + var/overlay_state_use + /// Icon file for the overlay. + var/overlay_icon_file = 'icons/mob/clothing/modsuit/mod_modules.dmi' + /// Does the overlay use the control unit's colors? + var/use_mod_colors = FALSE + /// What modules are we incompatible with? + var/list/incompatible_modules = list() + /// Cooldown after use + var/cooldown_time = 0 + /// The mouse button needed to use this module + var/used_signal + /// List of REF()s mobs we are pinned to, linked with their action buttons + var/list/pinned_to = list() + /// If we're allowed to use this module while phased out. + var/allowed_in_phaseout = FALSE + /// If we're allowed to use this module while the suit is disabled. + var/allowed_inactive = FALSE + /// Timer for the cooldown + COOLDOWN_DECLARE(cooldown_timer) + +/obj/item/mod/module/Initialize(mapload) + . = ..() + if(module_type != MODULE_ACTIVE) + return + if(ispath(device)) + device = new device(src) + ADD_TRAIT(device, TRAIT_NODROP, MOD_TRAIT) + RegisterSignal(device, COMSIG_PARENT_QDELETING, PROC_REF(on_device_deletion)) + RegisterSignal(src, COMSIG_ATOM_EXITED, PROC_REF(on_exit)) + +/obj/item/mod/module/Destroy() + mod?.uninstall(src) + if(device) + UnregisterSignal(device, COMSIG_PARENT_QDELETING) + QDEL_NULL(device) + return ..() + +/obj/item/mod/module/examine(mob/user) + . = ..() + if(HAS_TRAIT(user, TRAIT_DIAGNOSTIC_HUD)) + . += span_notice("Complexity level: [complexity]") + + +/// Called when the module is selected from the TGUI, radial or the action button +/obj/item/mod/module/proc/on_select() + if(((!mod.active || mod.activating) && !allowed_inactive) || module_type == MODULE_PASSIVE) + if(mod.wearer) + balloon_alert(mod.wearer, "not active!") + return + if(module_type != MODULE_USABLE) + if(active) + on_deactivation() + else + on_activation() + else + on_use() + SEND_SIGNAL(mod, COMSIG_MOD_MODULE_SELECTED, src) + +/// Called when the module is activated +/obj/item/mod/module/proc/on_activation() + if(!COOLDOWN_FINISHED(src, cooldown_timer)) + balloon_alert(mod.wearer, "on cooldown!") + return FALSE + if(!mod.active || mod.activating || !mod.get_charge()) + balloon_alert(mod.wearer, "unpowered!") + return FALSE + if(!allowed_in_phaseout && istype(mod.wearer.loc, /obj/effect/dummy/phased_mob)) + //specifically a to_chat because the user is phased out. + to_chat(mod.wearer, span_warning("You cannot activate this right now.")) + return FALSE + if(SEND_SIGNAL(src, COMSIG_MODULE_TRIGGERED) & MOD_ABORT_USE) + return FALSE + if(module_type == MODULE_ACTIVE) + if(mod.selected_module && !mod.selected_module.on_deactivation(display_message = FALSE)) + return FALSE + mod.selected_module = src + if(device) + if(mod.wearer.put_in_hands(device)) + balloon_alert(mod.wearer, "[device] extended") + RegisterSignal(mod.wearer, COMSIG_ATOM_EXITED, PROC_REF(on_exit)) + RegisterSignal(mod.wearer, COMSIG_KB_MOB_DROPITEM_DOWN, PROC_REF(dropkey)) + else + balloon_alert(mod.wearer, "can't extend [device]!") + mod.wearer.transferItemToLoc(device, src, force = TRUE) + return FALSE + else + var/used_button = MIDDLE_CLICK + update_signal(used_button) + balloon_alert(mod.wearer, "[src] activated, [used_button]-click to use") + active = TRUE + COOLDOWN_START(src, cooldown_timer, cooldown_time) + mod.wearer.update_inv_back(mod.slot_flags) + SEND_SIGNAL(src, COMSIG_MODULE_ACTIVATED) + return TRUE + +/// Called when the module is deactivated +/obj/item/mod/module/proc/on_deactivation(display_message = TRUE, deleting = FALSE) + active = FALSE + if(module_type == MODULE_ACTIVE) + mod.selected_module = null + if(display_message) + balloon_alert(mod.wearer, device ? "[device] retracted" : "[src] deactivated") + if(device) + mod.wearer.transferItemToLoc(device, src, force = TRUE) + UnregisterSignal(mod.wearer, COMSIG_ATOM_EXITED) + UnregisterSignal(mod.wearer, COMSIG_KB_MOB_DROPITEM_DOWN) + else + UnregisterSignal(mod.wearer, used_signal) + used_signal = null + mod.wearer.update_inv_back(mod.slot_flags) + SEND_SIGNAL(src, COMSIG_MODULE_DEACTIVATED) + return TRUE + +/// Called when the module is used +/obj/item/mod/module/proc/on_use() + if(!COOLDOWN_FINISHED(src, cooldown_timer)) + balloon_alert(mod.wearer, "on cooldown!") + return FALSE + if(!check_power(use_power_cost)) + balloon_alert(mod.wearer, "not enough charge!") + return FALSE + if(!allowed_in_phaseout && istype(mod.wearer.loc, /obj/effect/dummy/phased_mob)) + //specifically a to_chat because the user is phased out. + to_chat(mod.wearer, span_warning("You cannot activate this right now.")) + return FALSE + if(SEND_SIGNAL(src, COMSIG_MODULE_TRIGGERED) & MOD_ABORT_USE) + return FALSE + COOLDOWN_START(src, cooldown_timer, cooldown_time) + addtimer(CALLBACK(mod.wearer, TYPE_PROC_REF(/mob, update_inv_back), mod.slot_flags), cooldown_time+1) //need to run it a bit after the cooldown starts to avoid conflicts + mod.wearer.update_inv_back(mod.slot_flags) + SEND_SIGNAL(src, COMSIG_MODULE_USED) + return TRUE + +/// Called when an activated module without a device is used +/obj/item/mod/module/proc/on_select_use(atom/target) + if(mod.wearer.incapacitated(IGNORE_GRAB)) + return FALSE + mod.wearer.face_atom(target) + if(!on_use()) + return FALSE + return TRUE + +/// Called when an activated module without a device is active and the user alt/middle-clicks +/obj/item/mod/module/proc/on_special_click(mob/source, atom/target) + SIGNAL_HANDLER + on_select_use(target) + return COMSIG_MOB_CANCEL_CLICKON + +/// Called on the MODsuit's process +/obj/item/mod/module/proc/on_process(delta_time) + if(active) + if(!drain_power(active_power_cost * delta_time)) + on_deactivation() + return FALSE + on_active_process(delta_time) + else + drain_power(idle_power_cost * delta_time) + return TRUE + +/// Called on the MODsuit's process if it is an active module +/obj/item/mod/module/proc/on_active_process(delta_time) + return + +/// Called from MODsuit's install() proc, so when the module is installed. +/obj/item/mod/module/proc/on_install() + return + +/// Called from MODsuit's uninstall() proc, so when the module is uninstalled. +/obj/item/mod/module/proc/on_uninstall(deleting = FALSE) + return + +/// Called when the MODsuit is activated +/obj/item/mod/module/proc/on_suit_activation() + return + +/// Called when the MODsuit is deactivated +/obj/item/mod/module/proc/on_suit_deactivation(deleting = FALSE) + return + +/// Called when the MODsuit is equipped +/obj/item/mod/module/proc/on_equip() + return + +/// Called when the MODsuit is unequipped +/obj/item/mod/module/proc/on_unequip() + return + +/// Drains power from the suit charge +/obj/item/mod/module/proc/drain_power(amount) + if(!check_power(amount)) + return FALSE + mod.subtract_charge(amount) + mod.update_charge_alert() + return TRUE + +/// Checks if there is enough power in the suit +/obj/item/mod/module/proc/check_power(amount) + return mod.check_charge(amount) + +/// Adds additional things to the MODsuit ui_data() +/obj/item/mod/module/proc/add_ui_data() + return list() + +/// Creates a list of configuring options for this module +/obj/item/mod/module/proc/get_configuration() + return list() + +/// Generates an element of the get_configuration list with a display name, type and value +/obj/item/mod/module/proc/add_ui_configuration(display_name, type, value, list/values) + return list("display_name" = display_name, "type" = type, "value" = value, "values" = values) + +/// Receives configure edits from the TGUI and edits the vars +/obj/item/mod/module/proc/configure_edit(key, value) + return + +/// Called when the device moves to a different place on active modules +/obj/item/mod/module/proc/on_exit(datum/source, atom/movable/part, direction) + SIGNAL_HANDLER + + if(!active) + return + if(part.loc == src) + return + if(part.loc == mod.wearer) + return + if(part == device) + on_deactivation(display_message = FALSE) + +/// Called when the device gets deleted on active modules +/obj/item/mod/module/proc/on_device_deletion(datum/source) + SIGNAL_HANDLER + + if(source == device) + device = null + qdel(src) + +/// Generates an icon to be used for the suit's worn overlays +/obj/item/mod/module/proc/generate_worn_overlay(mod_layer) + . = list() + if(!mod.active) + return + var/used_overlay + if(overlay_state_use && !COOLDOWN_FINISHED(src, cooldown_timer)) + used_overlay = overlay_state_use + else if(overlay_state_active && active) + used_overlay = overlay_state_active + else if(overlay_state_inactive) + used_overlay = overlay_state_inactive + else + return + var/mutable_appearance/module_icon = mutable_appearance(overlay_icon_file, used_overlay, layer = mod_layer + 0.1) + if(!use_mod_colors) + module_icon.appearance_flags |= RESET_COLOR + . += module_icon + +/// Updates the signal used by active modules to be activated +/obj/item/mod/module/proc/update_signal(value) + switch(value) + if(MIDDLE_CLICK) + mod.selected_module.used_signal = COMSIG_MOB_MIDDLECLICKON + if(ALT_CLICK) + mod.selected_module.used_signal = COMSIG_MOB_ALTCLICKON + RegisterSignal(mod.wearer, mod.selected_module.used_signal, TYPE_PROC_REF(/obj/item/mod/module, on_special_click)) + +/// Pins the module to the user's action buttons +/obj/item/mod/module/proc/pin(mob/user) + var/datum/action/item_action/mod/pinned_module/existing_action = pinned_to[REF(user)] + if(existing_action) + mod.remove_item_action(existing_action) + return + + var/datum/action/item_action/mod/pinned_module/new_action = new(mod, src, user) + mod.add_item_action(new_action) + +/// On drop key, concels a device item. +/obj/item/mod/module/proc/dropkey(mob/living/user) + SIGNAL_HANDLER + + if(user.get_active_held_item() != device) + return + on_deactivation() + return COMSIG_KB_ACTIVATED + +///Anomaly Locked - Causes the module to not function without an anomaly. +/obj/item/mod/module/anomaly_locked + name = "MOD anomaly locked module" + desc = "A form of a module, locked behind an anomalous core to function." + incompatible_modules = list(/obj/item/mod/module/anomaly_locked) + /// The core item the module runs off. + var/obj/item/assembly/signaler/anomaly/core + /// Accepted types of anomaly cores. + var/list/accepted_anomalies = list(/obj/item/assembly/signaler/anomaly) + /// If this one starts with a core in. + var/prebuilt = FALSE + +/obj/item/mod/module/anomaly_locked/Initialize(mapload) + . = ..() + if(!prebuilt || !length(accepted_anomalies)) + return + var/core_path = pick(accepted_anomalies) + core = new core_path(src) + update_icon_state() + +/obj/item/mod/module/anomaly_locked/Destroy() + QDEL_NULL(core) + return ..() + +/obj/item/mod/module/anomaly_locked/examine(mob/user) + . = ..() + if(!length(accepted_anomalies)) + return + if(core) + . += span_notice("There is a [core.name] installed in it. You could remove it with a screwdriver...") + else + var/list/core_list = list() + for(var/path in accepted_anomalies) + var/atom/core_path = path + core_list += initial(core_path.name) + . += span_notice("You need to insert \a [english_list(core_list, and_text = " or ")] for this module to function.") + +/obj/item/mod/module/anomaly_locked/on_select() + if(!core) + balloon_alert(mod.wearer, "no core!") + return + return ..() + +/obj/item/mod/module/anomaly_locked/on_process(delta_time) + . = ..() + if(!core) + return FALSE + +/obj/item/mod/module/anomaly_locked/on_active_process(delta_time) + if(!core) + return FALSE + return TRUE + +/obj/item/mod/module/anomaly_locked/attackby(obj/item/item, mob/living/user, params) + if(item.type in accepted_anomalies) + if(core) + balloon_alert(user, "core already in!") + return + if(!user.transferItemToLoc(item, src)) + return + core = item + balloon_alert(user, "core installed") + playsound(src, 'sound/machines/click.ogg', 30, TRUE) + update_icon_state() + else + return ..() + +/obj/item/mod/module/anomaly_locked/screwdriver_act(mob/living/user, obj/item/tool) + . = ..() + if(!core) + balloon_alert(user, "no core!") + return + balloon_alert(user, "removing core...") + if(!do_after(user, 3 SECONDS, target = src)) + balloon_alert(user, "interrupted!") + return + balloon_alert(user, "core removed") + core.forceMove(drop_location()) + if(Adjacent(user) && !issilicon(user)) + user.put_in_hands(core) + core = null + update_icon_state() + +/obj/item/mod/module/anomaly_locked/update_icon_state() + icon_state = initial(icon_state) + (core ? "-core" : "") + return ..() diff --git a/code/modules/mod/modules/modules_antag.dm b/code/modules/mod/modules/modules_antag.dm new file mode 100644 index 000000000000..33edd75e173f --- /dev/null +++ b/code/modules/mod/modules/modules_antag.dm @@ -0,0 +1,398 @@ +//Antag modules for MODsuits + +///Armor Booster - Grants your suit more armor and speed in exchange for EVA protection. Also acts as a welding screen. +/obj/item/mod/module/armor_booster + name = "MOD armor booster module" + desc = "A retrofitted series of retractable armor plates, allowing the suit to function as essentially power armor, \ + giving the user incredible protection against conventional firearms, or everyday attacks in close-quarters. \ + However, the additional plating cannot deploy alongside parts of the suit used for vacuum sealing, \ + so this extra armor provides zero ability for extravehicular activity while deployed." + icon_state = "armor_booster" + module_type = MODULE_TOGGLE + active_power_cost = DEFAULT_CHARGE_DRAIN * 0.3 + removable = TRUE + incompatible_modules = list(/obj/item/mod/module/armor_booster, /obj/item/mod/module/welding) + cooldown_time = 0.5 SECONDS + overlay_state_inactive = "module_armorbooster_off" + overlay_state_active = "module_armorbooster_on" + use_mod_colors = TRUE + /// Whether or not this module removes pressure protection. + var/remove_pressure_protection = TRUE + /// Speed added to the control unit. + var/speed_added = 0.5 + /// Speed that we actually added. + var/actual_speed_added = 0 + /// Armor values added to the suit parts. + var/list/armor_values = list("melee" = 25, "bullet" = 30, "laser" = 15, "energy" = 15) + /// List of parts of the suit that are spaceproofed, for giving them back the pressure protection. + var/list/spaceproofed = list() + +/obj/item/mod/module/armor_booster/on_suit_activation() + mod.helmet.flash_protect = FLASH_PROTECTION_WELDER + +/obj/item/mod/module/armor_booster/on_suit_deactivation(deleting = FALSE) + if(deleting) + return + mod.helmet.flash_protect = initial(mod.helmet.flash_protect) + +/obj/item/mod/module/armor_booster/on_activation() + . = ..() + if(!.) + return + playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + actual_speed_added = max(0, min(mod.slowdown_active, speed_added)) + mod.slowdown -= actual_speed_added + mod.wearer.update_equipment_speed_mods() + var/list/parts = mod.mod_parts + mod + for(var/obj/item/part as anything in parts) + part.armor = part.armor.modifyRating(arglist(armor_values)) + if(!remove_pressure_protection || !isclothing(part)) + continue + var/obj/item/clothing/clothing_part = part + if(clothing_part.clothing_flags & STOPSPRESSUREDAMAGE) + clothing_part.clothing_flags &= ~STOPSPRESSUREDAMAGE + spaceproofed[clothing_part] = TRUE + +/obj/item/mod/module/armor_booster/on_deactivation(display_message = TRUE, deleting = FALSE) + . = ..() + if(!.) + return + if(!deleting) + playsound(src, 'sound/mecha/mechmove03.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + mod.slowdown += actual_speed_added + mod.wearer.update_equipment_speed_mods() + var/list/parts = mod.mod_parts + mod + var/list/removed_armor = armor_values.Copy() + for(var/armor_type in removed_armor) + removed_armor[armor_type] = -removed_armor[armor_type] + for(var/obj/item/part as anything in parts) + part.armor = part.armor.modifyRating(arglist(removed_armor)) + if(!remove_pressure_protection || !isclothing(part)) + continue + var/obj/item/clothing/clothing_part = part + if(spaceproofed[clothing_part]) + clothing_part.clothing_flags |= STOPSPRESSUREDAMAGE + spaceproofed = list() + +/obj/item/mod/module/armor_booster/generate_worn_overlay(mutable_appearance/standing) + overlay_state_inactive = "[initial(overlay_state_inactive)]-[mod.skin]" + overlay_state_active = "[initial(overlay_state_active)]-[mod.skin]" + return ..() + +///Energy Shield - Gives you a rechargeable energy shield that nullifies attacks. +/obj/item/mod/module/energy_shield + name = "MOD energy shield module" + desc = "A personal, protective forcefield typically seen in military applications. \ + This advanced deflector shield is essentially a scaled down version of those seen on starships, \ + and the power cost can be an easy indicator of this. However, it is capable of blocking nearly any incoming attack, \ + though with its' low amount of separate charges, the user remains mortal." + icon_state = "energy_shield" + complexity = 3 + idle_power_cost = DEFAULT_CHARGE_DRAIN * 0.5 + use_power_cost = DEFAULT_CHARGE_DRAIN * 2 + incompatible_modules = list(/obj/item/mod/module/energy_shield) + /// Max charges of the shield. + var/max_charges = 3 + /// The time it takes for the first charge to recover. + var/recharge_start_delay = 20 SECONDS + /// How much time it takes for charges to recover after they started recharging. + var/charge_increment_delay = 1 SECONDS + /// How much charge is recovered per recovery. + var/charge_recovery = 1 + /// Whether or not this shield can lose multiple charges. + var/lose_multiple_charges = FALSE + /// The item path to recharge this shielkd. + var/recharge_path = null + /// The icon file of the shield. + var/shield_icon_file = 'icons/effects/effects.dmi' + /// The icon_state of the shield. + var/shield_icon = "shield-red" + /// Charges the shield should start with. + var/charges + +/obj/item/mod/module/energy_shield/Initialize(mapload) + . = ..() + charges = max_charges + +/obj/item/mod/module/energy_shield/on_suit_activation() + mod.AddComponent(/datum/component/shielded, max_charges = max_charges, recharge_start_delay = recharge_start_delay, charge_increment_delay = charge_increment_delay, \ + charge_recovery = charge_recovery, lose_multiple_charges = lose_multiple_charges, recharge_path = recharge_path, starting_charges = charges, shield_icon_file = shield_icon_file, shield_icon = shield_icon) + RegisterSignal(mod.wearer, COMSIG_HUMAN_CHECK_SHIELDS, PROC_REF(shield_reaction)) + +/obj/item/mod/module/energy_shield/on_suit_deactivation(deleting = FALSE) + var/datum/component/shielded/shield = mod.GetComponent(/datum/component/shielded) + charges = shield.current_charges + qdel(shield) + UnregisterSignal(mod.wearer, COMSIG_HUMAN_CHECK_SHIELDS) + +/obj/item/mod/module/energy_shield/proc/shield_reaction(mob/living/carbon/human/owner, atom/movable/hitby, damage = 0, attack_text = "the attack", attack_type = MELEE_ATTACK, armour_penetration = 0) + if(SEND_SIGNAL(mod, COMSIG_ITEM_HIT_REACT, owner, hitby, attack_text, 0, damage, attack_type) & COMPONENT_HIT_REACTION_BLOCK) + drain_power(use_power_cost) + return SHIELD_BLOCK + return NONE + +///Insignia - Gives you a skin specific stripe. +/obj/item/mod/module/insignia + name = "MOD insignia module" + desc = "Despite the existence of IFF systems, radio communique, and modern methods of deductive reasoning involving \ + the wearer's own eyes, colorful paint jobs remain a popular way for different factions in the galaxy to display who \ + they are. This system utilizes a series of tiny moving paint sprayers to both apply and remove different \ + color patterns to and from the suit." + icon_state = "insignia" + removable = FALSE + incompatible_modules = list(/obj/item/mod/module/insignia) + overlay_state_inactive = "module_insignia" + +/obj/item/mod/module/insignia/generate_worn_overlay(mutable_appearance/standing) + overlay_state_inactive = "[initial(overlay_state_inactive)]-[mod.skin]" + . = ..() + for(var/mutable_appearance/appearance as anything in .) + appearance.color = color + +/obj/item/mod/module/insignia/commander + color = "#4980a5" + +/obj/item/mod/module/insignia/security + color = "#b30d1e" + +/obj/item/mod/module/insignia/engineer + color = "#e9c80e" + +/obj/item/mod/module/insignia/medic + color = "#ebebf5" + +/obj/item/mod/module/insignia/janitor + color = "#7925c7" + +/obj/item/mod/module/insignia/chaplain + color = "#f0a00c" + +///Anti Slip - Prevents you from slipping on water. +/obj/item/mod/module/noslip + name = "MOD anti slip module" + desc = "These are a modified variant of standard magnetic boots, utilizing piezoelectric crystals on the soles. \ + The two plates on the bottom of the boots automatically extend and magnetize as the user steps; \ + a pull that's too weak to offer them the ability to affix to a hull, but just strong enough to \ + protect against the fact that you didn't read the wet floor sign. Honk Co. has come out numerous times \ + in protest of these modules being legal." + icon_state = "noslip" + complexity = 1 + idle_power_cost = DEFAULT_CHARGE_DRAIN * 0.1 + incompatible_modules = list(/obj/item/mod/module/noslip) + +/obj/item/mod/module/noslip/on_suit_activation() + mod.boots.clothing_flags |= NOSLIP + +/obj/item/mod/module/noslip/on_suit_deactivation(deleting = FALSE) + mod.boots.clothing_flags &= ~NOSLIP + +//Bite of 87 Springlock - Equips faster, disguised as DNA lock. +/obj/item/mod/module/springlock/bite_of_87 + +/obj/item/mod/module/springlock/bite_of_87/Initialize(mapload) + . = ..() + var/obj/item/mod/module/dna_lock/the_dna_lock_behind_the_slaughter = /obj/item/mod/module/dna_lock + name = initial(the_dna_lock_behind_the_slaughter.name) + desc = initial(the_dna_lock_behind_the_slaughter.desc) + icon_state = initial(the_dna_lock_behind_the_slaughter.icon_state) + complexity = initial(the_dna_lock_behind_the_slaughter.complexity) + use_power_cost = initial(the_dna_lock_behind_the_slaughter.use_power_cost) + +/obj/item/mod/module/springlock/bite_of_87/on_install() + mod.activation_step_time *= 0.1 + +/obj/item/mod/module/springlock/bite_of_87/on_uninstall(deleting = FALSE) + mod.activation_step_time *= 10 + +/obj/item/mod/module/springlock/bite_of_87/on_suit_activation() + ..() + if(SSevents.holidays && SSevents.holidays[APRIL_FOOLS] || prob(1)) + mod.set_mod_color("#b17f00") + mod.wearer.remove_atom_colour(WASHABLE_COLOUR_PRIORITY) // turns purple guy purple + mod.wearer.add_atom_colour("#704b96", FIXED_COLOUR_PRIORITY) + +///Flamethrower - Launches fire across the area. +/obj/item/mod/module/flamethrower + name = "MOD flamethrower module" + desc = "A custom-manufactured flamethrower, used to burn through your path. Burn well." + icon_state = "flamethrower" + module_type = MODULE_ACTIVE + complexity = 3 + use_power_cost = DEFAULT_CHARGE_DRAIN * 3 + incompatible_modules = list(/obj/item/mod/module/flamethrower) + cooldown_time = 2.5 SECONDS + overlay_state_inactive = "module_flamethrower" + overlay_state_active = "module_flamethrower_on" + +/obj/item/mod/module/flamethrower/on_select_use(atom/target) + . = ..() + if(!.) + return + var/obj/projectile/flame = new /obj/projectile/bullet/incendiary(mod.wearer.loc) + flame.preparePixelProjectile(target, mod.wearer) + flame.firer = mod.wearer + playsound(src, 'sound/items/modsuit/flamethrower.ogg', 75, TRUE) + INVOKE_ASYNC(flame, TYPE_PROC_REF(/obj/projectile, fire)) + drain_power(use_power_cost) + +///Power kick - Lets the user launch themselves at someone to kick them. +/obj/item/mod/module/power_kick + name = "MOD power kick module" + desc = "This module uses high-power myomer to generate an incredible amount of energy, transferred into the power of a kick." + icon_state = "power_kick" + module_type = MODULE_ACTIVE + removable = FALSE + use_power_cost = DEFAULT_CHARGE_DRAIN*5 + incompatible_modules = list(/obj/item/mod/module/power_kick) + cooldown_time = 5 SECONDS + /// Damage on kick. + var/damage = 20 + /// The wound bonus of the kick. + var/wounding_power = 35 + /// How long we knockdown for on the kick. + var/knockdown_time = 2 SECONDS + +/obj/item/mod/module/power_kick/on_select_use(atom/target) + . = ..() + if(!.) + return + mod.wearer.visible_message(span_warning("[mod.wearer] starts charging a kick!"), \ + blind_message = span_hear("You hear a charging sound.")) + playsound(src, 'sound/items/modsuit/loader_charge.ogg', 75, TRUE) + balloon_alert(mod.wearer, "you start charging...") + animate(mod.wearer, 0.3 SECONDS, pixel_z = 16, flags = ANIMATION_RELATIVE, easing = SINE_EASING|EASE_OUT) + addtimer(CALLBACK(mod.wearer, TYPE_PROC_REF(/atom, SpinAnimation), 3, 2), 0.3 SECONDS) + if(!do_after(mod.wearer, 1 SECONDS, target = mod)) + animate(mod.wearer, 0.2 SECONDS, pixel_z = -16, flags = ANIMATION_RELATIVE, easing = SINE_EASING|EASE_OUT) + return + animate(mod.wearer) + drain_power(use_power_cost) + playsound(src, 'sound/items/modsuit/loader_launch.ogg', 75, TRUE) + var/angle = get_angle(mod.wearer, target) + 180 + mod.wearer.transform = mod.wearer.transform.Turn(angle) + RegisterSignal(mod.wearer, COMSIG_MOVABLE_IMPACT, PROC_REF(on_throw_impact)) + mod.wearer.throw_at(target, range = 7, speed = 2, thrower = mod.wearer, spin = FALSE, gentle = TRUE, callback = CALLBACK(src, PROC_REF(on_throw_end), mod.wearer, -angle)) + +/obj/item/mod/module/power_kick/proc/on_throw_end(mob/user, angle) + if(!user) + return + user.transform = user.transform.Turn(angle) + animate(user, 0.2 SECONDS, pixel_z = -16, flags = ANIMATION_RELATIVE, easing = SINE_EASING|EASE_OUT) + +/obj/item/mod/module/power_kick/proc/on_throw_impact(mob/living/source, obj/target, datum/thrownthing/thrownthing) + SIGNAL_HANDLER + + UnregisterSignal(source, COMSIG_MOVABLE_IMPACT) + if(!mod?.wearer) + return + if(isliving(target)) + var/mob/living/living_target = target + living_target.apply_damage(damage, BRUTE, mod.wearer.zone_selected) + living_target.Knockdown(knockdown_time) + else if(target.obj_integrity) + target.take_damage(damage, BRUTE) + else + return + mod.wearer.do_attack_animation(target, ATTACK_EFFECT_SMASH) + +///Chameleon - lets the suit disguise as any item that would fit on that slot. +/obj/item/mod/module/chameleon + name = "MOD chameleon module" + desc = "A module using chameleon technology to disguise the suit as another object." + icon_state = "chameleon" + module_type = MODULE_USABLE + complexity = 2 + incompatible_modules = list(/obj/item/mod/module/chameleon) + cooldown_time = 0.5 SECONDS + allowed_inactive = TRUE + /// A list of all the items the suit can disguise as. + var/list/possible_disguises = list() + /// The path of the item we're disguised as. + var/obj/item/current_disguise + +/obj/item/mod/module/chameleon/on_install() + var/list/all_disguises = sortList(subtypesof(get_path_by_slot(mod.slot_flags)), GLOBAL_PROC_REF(cmp_typepaths_asc)) + for(var/clothing_path in all_disguises) + var/obj/item/clothing = clothing_path + if(!initial(clothing.icon_state)) + continue + var/chameleon_item_name = "[initial(clothing.name)] ([initial(clothing.icon_state)])" + possible_disguises[chameleon_item_name] = clothing_path + +/obj/item/mod/module/chameleon/on_uninstall(deleting = FALSE) + if(current_disguise) + return_look() + possible_disguises = null + +/obj/item/mod/module/chameleon/on_use() + if(mod.active || mod.activating) + balloon_alert(mod.wearer, "suit active!") + return + . = ..() + if(!.) + return + if(current_disguise) + return_look() + return + var/picked_name = tgui_input_list(mod.wearer, "Select look to change into", "Chameleon Settings", possible_disguises) + if(!possible_disguises[picked_name] || mod.active || mod.activating) + return + current_disguise = possible_disguises[picked_name] + update_look() + +/obj/item/mod/module/chameleon/proc/update_look() + mod.name = initial(current_disguise.name) + mod.desc = initial(current_disguise.desc) + mod.icon_state = initial(current_disguise.icon_state) + mod.icon = initial(current_disguise.icon) + mod.mob_overlay_icon = initial(current_disguise.mob_overlay_icon) + mod.alternate_worn_layer = initial(current_disguise.alternate_worn_layer) + mod.lefthand_file = initial(current_disguise.lefthand_file) + mod.righthand_file = initial(current_disguise.righthand_file) + //mod.mob_overlay_state = initial(current_disguise.mob_overlay_state) + mod.item_state = initial(current_disguise.item_state) + mod.wearer.update_inv_back(mod.slot_flags) + RegisterSignal(mod, COMSIG_MOD_ACTIVATE, PROC_REF(return_look)) + +/obj/item/mod/module/chameleon/proc/return_look() + mod.name = "[mod.theme.name] [initial(mod.name)]" + mod.desc = "[initial(mod.desc)] [mod.theme.desc]" + mod.icon_state = "[mod.skin]-[initial(mod.icon_state)]" + var/list/mod_skin = mod.theme.skins[mod.skin] + mod.icon = mod_skin[MOD_ICON_OVERRIDE] || 'icons/obj/clothing/modsuit/mod_clothing.dmi' + mod.mob_overlay_icon = mod_skin[MOD_WORN_ICON_OVERRIDE] || 'icons/mob/clothing/modsuit/mod_clothing.dmi' + mod.alternate_worn_layer = mod_skin[CONTROL_LAYER] + mod.lefthand_file = initial(mod.lefthand_file) + mod.righthand_file = initial(mod.righthand_file) + //___callbacknewmod.worn_icon_state = null + mod.item_state = null + mod.wearer.update_inv_back(mod.slot_flags) + current_disguise = null + UnregisterSignal(mod, COMSIG_MOD_ACTIVATE) + +///Plate Compression - Compresses the suit to normal size +/obj/item/mod/module/plate_compression + name = "MOD plate compression module" + desc = "A module that keeps the suit in a very tightly fit state, lowering the overall size. \ + Due to the pressure on all the parts, typical storage modules do not fit." + icon_state = "plate_compression" + complexity = 2 + incompatible_modules = list(/obj/item/mod/module/plate_compression, /obj/item/mod/module/storage) + /// The size we set the suit to. + var/new_size = WEIGHT_CLASS_NORMAL + /// The suit's size before the module is installed. + var/old_size + +/obj/item/mod/module/plate_compression/on_install() + old_size = mod.w_class + mod.w_class = new_size + +/obj/item/mod/module/plate_compression/on_uninstall(deleting = FALSE) + mod.w_class = old_size + old_size = null + if(!mod.loc) + return + var/datum/component/storage/concrete/holding_storage = mod.GetComponent(/datum/component/storage/concrete) + if(!holding_storage || holding_storage.max_combined_w_class >= mod.w_class) + return + mod.forceMove(drop_location()) diff --git a/code/modules/mod/modules/modules_engineering.dm b/code/modules/mod/modules/modules_engineering.dm new file mode 100644 index 000000000000..4905b3ae691f --- /dev/null +++ b/code/modules/mod/modules/modules_engineering.dm @@ -0,0 +1,169 @@ +//Engineering modules for MODsuits + +///Welding Protection - Makes the helmet protect from flashes and welding. +/obj/item/mod/module/welding + name = "MOD welding protection module" + desc = "A module installed into the visor of the suit, this projects a \ + polarized, holographic overlay in front of the user's eyes. It's rated high enough for \ + immunity against extremities such as spot and arc welding, solar eclipses, and handheld flashlights." + icon_state = "welding" + complexity = 1 + incompatible_modules = list(/obj/item/mod/module/welding, /obj/item/mod/module/armor_booster) + overlay_state_inactive = "module_welding" + +/obj/item/mod/module/welding/on_suit_activation() + mod.helmet.flash_protect = FLASH_PROTECTION_WELDER + +/obj/item/mod/module/welding/on_suit_deactivation(deleting = FALSE) + if(deleting) + return + mod.helmet.flash_protect = initial(mod.helmet.flash_protect) + +///T-Ray Scan - Scans the terrain for undertile objects. +/obj/item/mod/module/t_ray + name = "MOD t-ray scan module" + desc = "A module installed into the visor of the suit, allowing the user to use a pulse of terahertz radiation \ + to essentially echolocate things beneath the floor, mostly cables and pipes. \ + A staple of atmospherics work, and counter-smuggling work." + icon_state = "tray" + module_type = MODULE_TOGGLE + complexity = 1 + active_power_cost = DEFAULT_CHARGE_DRAIN * 0.5 + incompatible_modules = list(/obj/item/mod/module/t_ray) + cooldown_time = 0.5 SECONDS + /// T-ray scan range. + var/range = 4 + +/obj/item/mod/module/t_ray/on_active_process(delta_time) + t_ray_scan(mod.wearer, 0.8 SECONDS, range) + +///Magnetic Stability - Gives the user a slowdown but makes them negate gravity and be immune to slips. +/obj/item/mod/module/magboot + name = "MOD magnetic stability module" + desc = "These are powerful electromagnets fitted into the suit's boots, allowing users both \ + excellent traction no matter the condition indoors, and to essentially hitch a ride on the exterior of a hull. \ + However, these basic models do not feature computerized systems to automatically toggle them on and off, \ + so numerous users report a certain stickiness to their steps." + icon_state = "magnet" + module_type = MODULE_TOGGLE + complexity = 2 + active_power_cost = DEFAULT_CHARGE_DRAIN * 0.5 + incompatible_modules = list(/obj/item/mod/module/magboot) + cooldown_time = 0.5 SECONDS + /// Slowdown added onto the suit. + var/slowdown_active = 0.5 + +/obj/item/mod/module/magboot/on_activation() + . = ..() + if(!.) + return + ADD_TRAIT(mod.wearer, TRAIT_NOSLIPWATER, MOD_TRAIT) + mod.slowdown += slowdown_active + mod.wearer.update_gravity(mod.wearer.has_gravity()) + mod.wearer.update_equipment_speed_mods() + +/obj/item/mod/module/magboot/on_deactivation(display_message = TRUE, deleting = FALSE) + . = ..() + if(!.) + return + REMOVE_TRAIT(mod.wearer, TRAIT_NOSLIPWATER, MOD_TRAIT) + mod.slowdown -= slowdown_active + mod.wearer.update_gravity(mod.wearer.has_gravity()) + mod.wearer.update_equipment_speed_mods() + +/obj/item/mod/module/magboot/advanced + name = "MOD advanced magnetic stability module" + removable = FALSE + complexity = 0 + slowdown_active = 0 + +///Emergency Tether - Shoots a grappling hook projectile in 0g that throws the user towards it. +/obj/item/mod/module/tether + name = "MOD emergency tether module" + desc = "A custom-built grappling-hook powered by a winch capable of hauling the user. \ + While some older models of cargo-oriented grapples have capacities of a few tons, \ + these are only capable of working in zero-gravity environments, a blessing to some Engineers." + icon_state = "tether" + module_type = MODULE_ACTIVE + complexity = 3 + use_power_cost = DEFAULT_CHARGE_DRAIN + incompatible_modules = list(/obj/item/mod/module/tether) + cooldown_time = 1.5 SECONDS + +/obj/item/mod/module/tether/on_use() + if(mod.wearer.has_gravity(get_turf(src))) + balloon_alert(mod.wearer, "too much gravity!!") + playsound(src, 'sound/weapons/gun/general/dry_fire.ogg', 25, TRUE) + return FALSE + return ..() + +/obj/item/mod/module/tether/on_select_use(atom/target) + . = ..() + if(!.) + return + var/obj/projectile/tether = new /obj/projectile/tether(mod.wearer.loc) + tether.preparePixelProjectile(target, mod.wearer) + tether.firer = mod.wearer + playsound(src, 'sound/weapons/batonextend.ogg', 25, TRUE) + INVOKE_ASYNC(tether, TYPE_PROC_REF(/obj/projectile, fire)) + drain_power(use_power_cost) + +/obj/projectile/tether + name = "tether" + icon_state = "tether_projectile" + icon = 'icons/obj/clothing/modsuit/mod_modules.dmi' + damage = 0 + nodamage = TRUE + range = 10 + hitsound = 'sound/weapons/batonextend.ogg' + suppressed = SUPPRESSED_VERY + //hit_threshhold = LATTICE_LAYER + /// Reference to the beam following the projectile. + var/line + +/obj/projectile/tether/fire(setAngle) + if(firer) + line = firer.Beam(src, "line", 'icons/obj/clothing/modsuit/mod_modules.dmi') + ..() + +/obj/projectile/tether/on_hit(atom/target) + . = ..() + if(firer) + firer.throw_at(target, 10, 1, firer, FALSE, FALSE, null, MOVE_FORCE_NORMAL, TRUE) + +/obj/projectile/tether/Destroy() + QDEL_NULL(line) + return ..() + +///Mister - Sprays water over an area. +/obj/item/mod/module/mister + name = "MOD water mister module" + desc = "A module containing a mister, able to spray it over areas." + icon_state = "mister" + module_type = MODULE_ACTIVE + complexity = 2 + active_power_cost = DEFAULT_CHARGE_DRAIN * 0.3 + device = /obj/item/reagent_containers/spray/mister + incompatible_modules = list(/obj/item/mod/module/mister) + cooldown_time = 0.5 SECONDS + /// Volume of our reagent holder. + var/volume = 500 + +/obj/item/mod/module/mister/Initialize(mapload) + create_reagents(volume, OPENCONTAINER) + return ..() + +///Resin Mister - Sprays resin over an area. +/obj/item/mod/module/mister/atmos + name = "MOD resin mister module" + desc = "An atmospheric resin mister, able to fix up areas quickly." + device = /obj/item/extinguisher/mini/nozzle/mod + volume = 250 + +/obj/item/mod/module/mister/atmos/Initialize(mapload) + . = ..() + reagents.add_reagent(/datum/reagent/water, volume) + +/obj/item/extinguisher/mini/nozzle/mod + name = "MOD atmospheric mister" + desc = "An atmospheric resin mister with three modes, mounted as a module." diff --git a/code/modules/mod/modules/modules_general.dm b/code/modules/mod/modules/modules_general.dm new file mode 100644 index 000000000000..17f72271b312 --- /dev/null +++ b/code/modules/mod/modules/modules_general.dm @@ -0,0 +1,441 @@ +//General modules for MODsuits + +///Ion Jetpack - Lets the user fly freely through space using battery charge. +/obj/item/mod/module/jetpack + name = "MOD ion jetpack module" + desc = "A series of electric thrusters installed across the suit, this is a module highly anticipated by trainee Engineers. \ + Rather than using gasses for combustion thrust, these jets are capable of accelerating ions using \ + charge from the suit's charge. Some say this isn't Nakamura Engineering's first foray into jet-enabled suits." + icon_state = "jetpack" + module_type = MODULE_TOGGLE + complexity = 3 + active_power_cost = DEFAULT_CHARGE_DRAIN * 0.5 + use_power_cost = DEFAULT_CHARGE_DRAIN + incompatible_modules = list(/obj/item/mod/module/jetpack) + cooldown_time = 0.5 SECONDS + overlay_state_inactive = "module_jetpack" + overlay_state_active = "module_jetpack_on" + /// Do we stop the wearer from gliding in space. + var/stabilizers = FALSE + /// Do we give the wearer a speed buff. + var/full_speed = FALSE + var/datum/callback/get_mover + var/datum/callback/check_on_move + +/obj/item/mod/module/jetpack/Initialize(mapload) + . = ..() + get_mover = CALLBACK(src, PROC_REF(get_user)) + check_on_move = CALLBACK(src, PROC_REF(allow_thrust)) + refresh_jetpack() + +/obj/item/mod/module/jetpack/Destroy() + get_mover = null + check_on_move = null + return ..() + +/obj/item/mod/module/jetpack/proc/refresh_jetpack() + AddComponent(/datum/component/jetpack, stabilizers, COMSIG_MODULE_TRIGGERED, COMSIG_MODULE_DEACTIVATED, MOD_ABORT_USE, get_mover, check_on_move, /datum/effect_system/trail_follow/ion/grav_allowed) + +/obj/item/mod/module/jetpack/proc/set_stabilizers(new_stabilizers) + if(stabilizers == new_stabilizers) + return + stabilizers = new_stabilizers + refresh_jetpack() + +/obj/item/mod/module/jetpack/on_activation() + . = ..() + if(!.) + return + if(full_speed) + mod.wearer.add_movespeed_modifier(/datum/movespeed_modifier/jetpack/fullspeed) + +/obj/item/mod/module/jetpack/on_deactivation(display_message = TRUE, deleting = FALSE) + . = ..() + if(full_speed) + mod.wearer.remove_movespeed_modifier(/datum/movespeed_modifier/jetpack/fullspeed) + +/obj/item/mod/module/jetpack/get_configuration() + . = ..() + .["stabilizers"] = add_ui_configuration("Stabilizers", "bool", stabilizers) + +/obj/item/mod/module/jetpack/configure_edit(key, value) + switch(key) + if("stabilizers") + set_stabilizers(text2num(value)) + +/obj/item/mod/module/jetpack/proc/allow_thrust(use_fuel = TRUE) + if(!use_fuel) + return check_power(use_power_cost) + if(!drain_power(use_power_cost)) + return FALSE + return TRUE + +/obj/item/mod/module/jetpack/proc/get_user() + return mod.wearer + +/obj/item/mod/module/jetpack/advanced + name = "MOD advanced ion jetpack module" + desc = "An improvement on the previous model of electric thrusters. This one achieves higher speeds through \ + mounting of more jets and a red paint applied on it." + icon_state = "jetpack_advanced" + overlay_state_inactive = "module_jetpackadv" + overlay_state_active = "module_jetpackadv_on" + full_speed = TRUE + +///Eating Apparatus - Lets the user eat/drink with the suit on. +/obj/item/mod/module/mouthhole + name = "MOD eating apparatus module" + desc = "A favorite by Miners, this modification to the helmet utilizes a nanotechnology barrier infront of the mouth \ + to allow eating and drinking while retaining protection and atmosphere. However, it won't free you from masks, \ + and it will do nothing to improve the taste of a goliath steak." + icon_state = "apparatus" + complexity = 1 + incompatible_modules = list(/obj/item/mod/module/mouthhole) + overlay_state_inactive = "module_apparatus" + /// Former flags of the helmet. + var/former_flags = NONE + /// Former visor flags of the helmet. + var/former_visor_flags = NONE + +/obj/item/mod/module/mouthhole/on_install() + former_flags = mod.helmet.flags_cover + former_visor_flags = mod.helmet.visor_flags_cover + mod.helmet.flags_cover &= ~HEADCOVERSMOUTH|PEPPERPROOF + mod.helmet.visor_flags_cover &= ~HEADCOVERSMOUTH|PEPPERPROOF + +/obj/item/mod/module/mouthhole/on_uninstall(deleting = FALSE) + if(deleting) + return + mod.helmet.flags_cover |= former_flags + mod.helmet.visor_flags_cover |= former_visor_flags + +///EMP Shield - Protects the suit from EMPs. +/obj/item/mod/module/emp_shield + name = "MOD EMP shield module" + desc = "A field inhibitor installed into the suit, protecting it against feedback such as \ + electromagnetic pulses that would otherwise damage the electronic systems of the suit or devices on the wearer. \ + However, it will take from the suit's power to do so. Luckily, your PDA already has one of these." + icon_state = "empshield" + complexity = 1 + idle_power_cost = DEFAULT_CHARGE_DRAIN * 0.3 + incompatible_modules = list(/obj/item/mod/module/emp_shield) + +/obj/item/mod/module/emp_shield/on_install() + mod.AddElement(/datum/element/empprotection, EMP_PROTECT_SELF|EMP_PROTECT_WIRES|EMP_PROTECT_CONTENTS) + +/obj/item/mod/module/emp_shield/on_uninstall(deleting = FALSE) + mod.RemoveElement(/datum/element/empprotection, EMP_PROTECT_SELF|EMP_PROTECT_WIRES|EMP_PROTECT_CONTENTS) + +/obj/item/mod/module/emp_shield/advanced + name = "MOD advanced EMP shield module" + desc = "An enhnanced field inhibitor installed into the suit, protecting it against feedback such as \ + electromagnetic pulses that would otherwise damage the electronic systems of the suit or devices on the wearer \ + including augmentations. However, it will take from the suit's power to do so. Luckily, your PDA already has one of these." + complexity = 2 + +/obj/item/mod/module/emp_shield/advanced/on_suit_activation() + mod.wearer.AddElement(/datum/element/empprotection, EMP_PROTECT_SELF|EMP_PROTECT_CONTENTS) + +/obj/item/mod/module/emp_shield/advanced/on_suit_deactivation(deleting) + mod.wearer.RemoveElement(/datum/element/empprotection, EMP_PROTECT_SELF|EMP_PROTECT_CONTENTS) + +///Flashlight - Gives the suit a customizable flashlight. +/obj/item/mod/module/flashlight + name = "MOD flashlight module" + desc = "A simple pair of flashlights installed on the left and right sides of the helmet." + icon_state = "flashlight" + module_type = MODULE_TOGGLE + complexity = 1 + active_power_cost = DEFAULT_CHARGE_DRAIN * 0.3 + incompatible_modules = list(/obj/item/mod/module/flashlight) + cooldown_time = 0.5 SECONDS + overlay_state_inactive = "module_light" + light_system = MOVABLE_LIGHT_DIRECTIONAL + light_color = COLOR_WHITE + light_range = 4 + light_power = 1 + light_on = FALSE + /// Charge drain per range amount. + var/base_power = DEFAULT_CHARGE_DRAIN * 0.1 + +/obj/item/mod/module/flashlight/on_activation() + . = ..() + if(!.) + return + set_light_flags(light_flags | LIGHT_ATTACHED) + set_light_on(active) + active_power_cost = base_power * light_range + +/obj/item/mod/module/flashlight/on_deactivation(display_message = TRUE, deleting = FALSE) + . = ..() + if(!.) + return + set_light_flags(light_flags & ~LIGHT_ATTACHED) + set_light_on(active) + +/obj/item/mod/module/flashlight/on_process(delta_time) + active_power_cost = base_power * light_range + return ..() + +/obj/item/mod/module/flashlight/generate_worn_overlay(mutable_appearance/standing) + . = ..() + if(!active) + return + var/mutable_appearance/light_icon = mutable_appearance(overlay_icon_file, "module_light_on", layer = standing + 0.2) + light_icon.appearance_flags = RESET_COLOR + light_icon.color = light_color + . += light_icon + +///Dispenser - Dispenses an item after a time passes. +/obj/item/mod/module/dispenser + name = "MOD burger dispenser module" + desc = "A rare piece of technology reverse-engineered from a prototype found in a Donk Corporation vessel. \ + This can draw incredible amounts of power from the suit's charge to create edible organic matter in the \ + palm of the wearer's glove; however, research seemed to have entirely stopped at burgers. \ + Notably, all attempts to get it to dispense Earl Grey tea have failed." + icon_state = "dispenser" + module_type = MODULE_USABLE + complexity = 3 + use_power_cost = DEFAULT_CHARGE_DRAIN * 2 + incompatible_modules = list(/obj/item/mod/module/dispenser) + cooldown_time = 5 SECONDS + /// Path we dispense. + var/dispense_type = /obj/item/reagent_containers/food/snacks/burger + /// Time it takes for us to dispense. + var/dispense_time = 0 SECONDS + +/obj/item/mod/module/dispenser/on_use() + . = ..() + if(!.) + return + if(dispense_time && !do_after(mod.wearer, dispense_time, target = mod)) + balloon_alert(mod.wearer, "interrupted!") + return FALSE + var/obj/item/dispensed = new dispense_type(mod.wearer.loc) + mod.wearer.put_in_hands(dispensed) + balloon_alert(mod.wearer, "[dispensed] dispensed") + playsound(src, 'sound/machines/click.ogg', 100, TRUE) + drain_power(use_power_cost) + return dispensed + +///Thermal Regulator - Regulates the wearer's core temperature. +/obj/item/mod/module/thermal_regulator + name = "MOD thermal regulator module" + desc = "Advanced climate control, using an inner body glove interwoven with thousands of tiny, \ + flexible cooling lines. This circulates coolant at various user-controlled temperatures, \ + ensuring they're comfortable; even if they're some that like it hot." + icon_state = "regulator" + module_type = MODULE_TOGGLE + complexity = 2 + active_power_cost = DEFAULT_CHARGE_DRAIN * 0.3 + incompatible_modules = list(/obj/item/mod/module/thermal_regulator) + cooldown_time = 0.5 SECONDS + /// The temperature we are regulating to. + var/temperature_setting = BODYTEMP_NORMAL + /// Minimum temperature we can set. + var/min_temp = 293.15 + /// Maximum temperature we can set. + var/max_temp = 318.15 + +/obj/item/mod/module/thermal_regulator/get_configuration() + . = ..() + .["temperature_setting"] = add_ui_configuration("Temperature", "number", temperature_setting - T0C) + +/obj/item/mod/module/thermal_regulator/configure_edit(key, value) + switch(key) + if("temperature_setting") + temperature_setting = clamp(value + T0C, min_temp, max_temp) + +/obj/item/mod/module/thermal_regulator/on_active_process(delta_time) + mod.wearer.adjust_bodytemperature(get_temp_change_amount((temperature_setting - mod.wearer.bodytemperature), 0.08 * delta_time)) + +///DNA Lock - Prevents people without the set DNA from activating the suit. +/obj/item/mod/module/dna_lock + name = "MOD DNA lock module" + desc = "A module which engages with the various locks and seals tied to the suit's systems, \ + enabling it to only be worn by someone corresponding with the user's exact DNA profile; \ + however, this incredibly sensitive module is shorted out by EMPs. Luckily, cloning has been outlawed." + icon_state = "dnalock" + module_type = MODULE_USABLE + complexity = 2 + use_power_cost = DEFAULT_CHARGE_DRAIN * 3 + incompatible_modules = list(/obj/item/mod/module/dna_lock/*, obj/item/mod/module/eradication_lock*/) + cooldown_time = 0.5 SECONDS + /// The DNA we lock with. + var/dna = null + +/obj/item/mod/module/dna_lock/on_install() + RegisterSignal(mod, COMSIG_MOD_ACTIVATE, PROC_REF(on_mod_activation)) + RegisterSignal(mod, COMSIG_MOD_MODULE_REMOVAL, PROC_REF(on_mod_removal)) + RegisterSignal(mod, COMSIG_ATOM_EMP_ACT, PROC_REF(on_emp)) + RegisterSignal(mod, COMSIG_ATOM_EMAG_ACT, PROC_REF(on_emag)) + +/obj/item/mod/module/dna_lock/on_uninstall(deleting = FALSE) + UnregisterSignal(mod, COMSIG_MOD_ACTIVATE) + UnregisterSignal(mod, COMSIG_MOD_MODULE_REMOVAL) + UnregisterSignal(mod, COMSIG_ATOM_EMP_ACT) + UnregisterSignal(mod, COMSIG_ATOM_EMAG_ACT) + +/obj/item/mod/module/dna_lock/on_use() + . = ..() + if(!.) + return + dna = mod.wearer.dna.unique_enzymes + balloon_alert(mod.wearer, "dna updated") + drain_power(use_power_cost) + +/obj/item/mod/module/dna_lock/emp_act(severity) + . = ..() + if(. & EMP_PROTECT_SELF) + return + on_emp(src, severity) + +/obj/item/mod/module/dna_lock/emag_act(mob/user, obj/item/card/emag/emag_card) + . = ..() + on_emag(src, user, emag_card) + +/obj/item/mod/module/dna_lock/proc/dna_check(mob/user) + if(!iscarbon(user)) + return FALSE + var/mob/living/carbon/carbon_user = user + if(!dna || (carbon_user.has_dna() && carbon_user.dna.unique_enzymes == dna)) + return TRUE + balloon_alert(user, "dna locked!") + return FALSE + +/obj/item/mod/module/dna_lock/proc/on_emp(datum/source, severity) + SIGNAL_HANDLER + + dna = null + +/obj/item/mod/module/dna_lock/proc/on_emag(datum/source, mob/user, obj/item/card/emag/emag_card) + SIGNAL_HANDLER + + dna = null + +/obj/item/mod/module/dna_lock/proc/on_mod_activation(datum/source, mob/user) + SIGNAL_HANDLER + + if(!dna_check(user)) + return MOD_CANCEL_ACTIVATE + +/obj/item/mod/module/dna_lock/proc/on_mod_removal(datum/source, mob/user) + SIGNAL_HANDLER + + if(!dna_check(user)) + return MOD_CANCEL_REMOVAL + +///Plasma Stabilizer - Prevents plasmamen from igniting in the suit +/obj/item/mod/module/plasma_stabilizer + name = "MOD plasma stabilizer module" + desc = "This system essentially forms an atmosphere of its' own inside the suit, \ + safely ejecting oxygen from the inside and allowing the wearer, a plasmaman, \ + to have their internal plasma circulate around them somewhat like a sauna. \ + This prevents them from self-igniting, and leads to greater comfort overall. \ + The purple glass of the visor seems to be constructed for nostalgic purposes." + icon_state = "plasma_stabilizer" + complexity = 1 + idle_power_cost = DEFAULT_CHARGE_DRAIN * 0.3 + incompatible_modules = list(/obj/item/mod/module/plasma_stabilizer) + overlay_state_inactive = "module_plasma" + +/obj/item/mod/module/plasma_stabilizer/on_equip() + ADD_TRAIT(mod.wearer, TRAIT_NOSELFIGNITION_HEAD_ONLY, MOD_TRAIT) + +/obj/item/mod/module/plasma_stabilizer/on_unequip() + REMOVE_TRAIT(mod.wearer, TRAIT_NOSELFIGNITION_HEAD_ONLY, MOD_TRAIT) + + +//Finally, https://pipe.miroware.io/5b52ba1d94357d5d623f74aa/mspfa/Nuke%20Ops/Panels/0648.gif can be real: +///Hat Stabilizer - Allows displaying a hat over the MOD-helmet, à la plasmamen helmets. +/obj/item/mod/module/hat_stabilizer + name = "MOD hat stabilizer module" + desc = "A simple set of deployable stands, directly atop one's head; \ + these will deploy under a select few hats to keep them from falling off, allowing them to be worn atop the sealed helmet. \ + You still need to take the hat off your head while the helmet deploys, though. \ + This is a must-have for Nanotrasen Captains, enabling them to show off their authoritative hat even while in their MODsuit." + icon_state = "hat_holder" + incompatible_modules = list(/obj/item/mod/module/hat_stabilizer) + /*Intentionally left inheriting 0 complexity and removable = TRUE; + even though it comes inbuilt into the Magnate/Corporate MODS and spawns in maints, I like the idea of stealing them*/ + /// Currently "stored" hat. No armor or function will be inherited, ONLY the icon. + var/obj/item/clothing/head/attached_hat + /// Whitelist of attachable hats, read note in Initialize() below this line + var/static/list/attachable_hats_list + +/obj/item/mod/module/hat_stabilizer/Initialize(mapload) + . = ..() + attachable_hats_list = typecacheof( + //List of attachable hats. Make sure these and their subtypes are all tested, so they dont appear janky. + //This list should also be gimmicky, so captains can have fun. I.E. the Santahat, Pirate hat, Tophat, Chefhat... + //Yes, I said it, the captain should have fun. + list( + /obj/item/clothing/head/caphat, + /obj/item/clothing/head/crown, + /obj/item/clothing/head/centhat, + /obj/item/clothing/head/pirate, + /obj/item/clothing/head/santa, + /obj/item/clothing/head/kitty, + /obj/item/clothing/head/festive, + /obj/item/clothing/head/that, + /obj/item/clothing/head/nursehat, + /obj/item/clothing/head/chefhat, + /obj/item/clothing/head/papersack, + )) + +/obj/item/mod/module/hat_stabilizer/on_suit_activation() + RegisterSignal(mod.helmet, COMSIG_PARENT_EXAMINE, PROC_REF(add_examine)) + RegisterSignal(mod.helmet, COMSIG_PARENT_ATTACKBY, PROC_REF(place_hat)) + RegisterSignal(mod.helmet, COMSIG_CLICK_ALT, PROC_REF(remove_hat)) + +/obj/item/mod/module/hat_stabilizer/on_suit_deactivation(deleting = FALSE) + if(deleting) + return + if(attached_hat) //knock off the helmet if its on their head. Or, technically, auto-rightclick it for them; that way it saves us code, AND gives them the bubble + remove_hat(src, mod.wearer) + UnregisterSignal(mod.helmet, COMSIG_PARENT_EXAMINE) + UnregisterSignal(mod.helmet, COMSIG_PARENT_ATTACKBY) + UnregisterSignal(mod.helmet, COMSIG_CLICK_ALT) + +/obj/item/mod/module/hat_stabilizer/proc/add_examine(datum/source, mob/user, list/base_examine) + SIGNAL_HANDLER + if(attached_hat) + base_examine += span_notice("There's \a [attached_hat] placed on the helmet. Alt-click to remove it.") + else + base_examine += span_notice("There's nothing placed on the helmet. Yet.") + +/obj/item/mod/module/hat_stabilizer/proc/place_hat(datum/source, obj/item/hitting_item, mob/user) + SIGNAL_HANDLER + if(!istype(hitting_item, /obj/item/clothing/head)) + return + if(!mod.active) + balloon_alert(user, "suit must be active!") + return + if(!is_type_in_typecache(hitting_item, attachable_hats_list)) + balloon_alert(user, "this hat won't fit!") + return + if(attached_hat) + balloon_alert(user, "hat already attached!") + return + if(mod.wearer.transferItemToLoc(hitting_item, src, force = FALSE, silent = TRUE)) + attached_hat = hitting_item + balloon_alert(user, "hat attached, alt-click to remove") + mod.wearer.update_inv_back(mod.slot_flags) + +/obj/item/mod/module/hat_stabilizer/generate_worn_overlay() + . = ..() + if(attached_hat) + . += attached_hat.build_worn_icon(default_layer = ABOVE_MOB_LAYER, default_icon_file = 'icons/mob/clothing/head.dmi') + +/obj/item/mod/module/hat_stabilizer/proc/remove_hat(datum/source, mob/user) + SIGNAL_HANDLER + . = SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + if(!attached_hat) + return + attached_hat.forceMove(drop_location()) + if(user.put_in_active_hand(attached_hat)) + balloon_alert(user, "hat removed") + else + balloon_alert_to_viewers("the hat falls to the floor!") + attached_hat = null + mod.wearer.update_inv_back(mod.slot_flags) diff --git a/code/modules/mod/modules/modules_maint.dm b/code/modules/mod/modules/modules_maint.dm new file mode 100644 index 000000000000..e735654ef2c5 --- /dev/null +++ b/code/modules/mod/modules/modules_maint.dm @@ -0,0 +1,148 @@ +//Maint modules for MODsuits + +///Springlock Mechanism - allows your modsuit to activate faster, but reagents are very dangerous. +/obj/item/mod/module/springlock + name = "MOD springlock module" + desc = "A module that spans the entire size of the MOD unit, sitting under the outer shell. \ + This mechanical exoskeleton pushes out of the way when the user enters and it helps in booting \ + up, but was taken out of modern suits because of the springlock's tendency to \"snap\" back \ + into place when exposed to humidity. You know what it's like to have an entire exoskeleton enter you?" + icon_state = "springlock" + complexity = 3 // it is inside every part of your suit, so + incompatible_modules = list(/obj/item/mod/module/springlock) + +/obj/item/mod/module/springlock/on_install() + mod.activation_step_time *= 0.5 + +/obj/item/mod/module/springlock/on_uninstall(deleting = FALSE) + mod.activation_step_time *= 2 + +/obj/item/mod/module/springlock/on_suit_activation() + RegisterSignal(mod.wearer, COMSIG_ATOM_EXPOSE_REAGENTS, PROC_REF(on_wearer_exposed)) + +/obj/item/mod/module/springlock/on_suit_deactivation(deleting = FALSE) + UnregisterSignal(mod.wearer, COMSIG_ATOM_EXPOSE_REAGENTS) + +///Signal fired when wearer is exposed to reagents +/obj/item/mod/module/springlock/proc/on_wearer_exposed(atom/source, list/reagents, datum/reagents/source_reagents, methods, volume_modifier, show_message) + SIGNAL_HANDLER + + if(!(methods & (VAPOR|PATCH|TOUCH))) + return //remove non-touch reagent exposure + to_chat(mod.wearer, span_danger("[src] makes an ominous click sound...")) + playsound(src, 'sound/items/modsuit/springlock.ogg', 75, TRUE) + addtimer(CALLBACK(src, PROC_REF(snap_shut)), rand(3 SECONDS, 5 SECONDS)) + RegisterSignal(mod, COMSIG_MOD_ACTIVATE, PROC_REF(on_activate_spring_block)) + +///Signal fired when wearer attempts to activate/deactivate suits +/obj/item/mod/module/springlock/proc/on_activate_spring_block(datum/source, user) + SIGNAL_HANDLER + + balloon_alert(user, "springlocks aren't responding...?") + return MOD_CANCEL_ACTIVATE + +///Delayed death proc of the suit after the wearer is exposed to reagents +/obj/item/mod/module/springlock/proc/snap_shut() + UnregisterSignal(mod, COMSIG_MOD_ACTIVATE) + if(!mod.wearer) //while there is a guaranteed user when on_wearer_exposed() fires, that isn't the same case for this proc + return + mod.wearer.visible_message("[src] inside [mod.wearer]'s [mod.name] snaps shut, mutilating the user inside!", span_userdanger("*SNAP*")) + mod.wearer.emote("scream") + playsound(mod.wearer, 'sound/effects/snap.ogg', 75, TRUE, frequency = 0.5) + playsound(mod.wearer, 'sound/effects/splat.ogg', 50, TRUE, frequency = 0.5) + mod.wearer.apply_damage(500, BRUTE, forced = TRUE, spread_damage = TRUE) //boggers, bogchamp, etc + if(!HAS_TRAIT(mod.wearer, TRAIT_NODEATH)) + mod.wearer.death() //just in case, for some reason, they're still alive + flash_color(mod.wearer, flash_color = "#FF0000", flash_time = 10 SECONDS) + +///Balloon Blower - Blows a balloon. +/obj/item/mod/module/balloon + name = "MOD balloon blower module" + desc = "A strange module invented years ago by some ingenious mimes. It blows balloons." + icon_state = "bloon" + module_type = MODULE_USABLE + complexity = 1 + use_power_cost = DEFAULT_CHARGE_DRAIN * 0.5 + incompatible_modules = list(/obj/item/mod/module/balloon) + cooldown_time = 15 SECONDS + +/obj/item/mod/module/balloon/on_use() + . = ..() + if(!.) + return + if(!do_after(mod.wearer, 10 SECONDS, target = mod)) + return FALSE + mod.wearer.adjustOxyLoss(20) + playsound(src, 'sound/items/modsuit/inflate_bloon.ogg', 50, TRUE) + var/obj/item/toy/balloon/balloon = new(get_turf(src)) + mod.wearer.put_in_hands(balloon) + drain_power(use_power_cost) + +///Paper Dispenser - Dispenses (sometimes burning) paper sheets. +/obj/item/mod/module/paper_dispenser + name = "MOD paper dispenser module" + desc = "A simple module designed by the bureaucrats of Torch Bay. \ + It dispenses 'warm, clean, and crisp sheets of paper' onto a nearby table. Usually." + icon_state = "paper_maker" + module_type = MODULE_USABLE + complexity = 1 + use_power_cost = DEFAULT_CHARGE_DRAIN * 0.5 + incompatible_modules = list(/obj/item/mod/module/paper_dispenser) + cooldown_time = 5 SECONDS + /// The total number of sheets created by this MOD. The more sheets, them more likely they set on fire. + var/num_sheets_dispensed = 0 + +/obj/item/mod/module/paper_dispenser/on_use() + . = ..() + if(!.) + return + if(!do_after(mod.wearer, 1 SECONDS, target = mod)) + return FALSE + + var/obj/item/paper/crisp_paper = new(get_turf(src)) + crisp_paper.desc = "It's crisp and warm to the touch. Must be fresh." + + var/obj/structure/table/nearby_table = locate() in range(1, mod.wearer) + playsound(get_turf(src), 'sound/machines/click.ogg', 50, TRUE) + balloon_alert(mod.wearer, "dispensed paper[nearby_table ? " onto table":""]") + + mod.wearer.put_in_hands(crisp_paper) + if(nearby_table) + mod.wearer.transferItemToLoc(crisp_paper, nearby_table.drop_location(), silent = FALSE) + + // Up to a 30% chance to set the sheet on fire, +2% per sheet made + if(prob(min(num_sheets_dispensed * 2, 30))) + if(crisp_paper in mod.wearer.held_items) + mod.wearer.dropItemToGround(crisp_paper, force = TRUE) + crisp_paper.balloon_alert(mod.wearer, "pc load letter!") + crisp_paper.visible_message(span_warning("[crisp_paper] bursts into flames, it's too crisp!")) + crisp_paper.fire_act(1000, 100) + + drain_power(use_power_cost) + num_sheets_dispensed++ + + +///Stamper - Extends a stamp that can switch between accept/deny modes. +/obj/item/mod/module/stamp + name = "MOD stamper module" + desc = "A module installed into the wrist of the suit, this functions as a high-power stamp, \ + able to switch between accept and deny modes." + icon_state = "stamp" + module_type = MODULE_ACTIVE + complexity = 1 + active_power_cost = DEFAULT_CHARGE_DRAIN * 0.3 + device = /obj/item/stamp/mod + incompatible_modules = list(/obj/item/mod/module/stamp) + cooldown_time = 0.5 SECONDS + +/obj/item/stamp/mod + name = "MOD electronic stamp" + desc = "A high-power stamp, able to switch between accept and deny mode when used." + +/obj/item/stamp/mod/attack_self(mob/user, modifiers) + . = ..() + if(icon_state == "stamp-ok") + icon_state = "stamp-deny" + else + icon_state = "stamp-ok" + balloon_alert(user, "switched mode") diff --git a/code/modules/mod/modules/modules_medical.dm b/code/modules/mod/modules/modules_medical.dm new file mode 100644 index 000000000000..798f065ffe7f --- /dev/null +++ b/code/modules/mod/modules/modules_medical.dm @@ -0,0 +1,110 @@ +//Medical modules for MODsuits + +#define HEALTH_SCAN "Health" +#define WOUND_SCAN "Wound" +#define CHEM_SCAN "Chemical" + +///Health Analyzer - Gives the user a ranged health analyzer and their health status in the panel. +/obj/item/mod/module/health_analyzer + name = "MOD health analyzer module" + desc = "A module installed into the glove of the suit. This is a high-tech biological scanning suite, \ + allowing the user indepth information on the vitals and injuries of others even at a distance, \ + all with the flick of the wrist. Data is displayed in a convenient package on HUD in the helmet, \ + but it's up to you to do something with it." + icon_state = "health" + module_type = MODULE_ACTIVE + complexity = 2 + use_power_cost = DEFAULT_CHARGE_DRAIN + incompatible_modules = list(/obj/item/mod/module/health_analyzer) + cooldown_time = 0.5 SECONDS + tgui_id = "health_analyzer" + /// Scanning mode, changes how we scan something. + var/mode = HEALTH_SCAN + /// List of all scanning modes. + var/static/list/modes = list(HEALTH_SCAN, WOUND_SCAN, CHEM_SCAN) + +/obj/item/mod/module/health_analyzer/add_ui_data() + . = ..() + .["userhealth"] = mod.wearer?.health || 0 + .["usermaxhealth"] = mod.wearer?.getMaxHealth() || 0 + .["userbrute"] = mod.wearer?.getBruteLoss() || 0 + .["userburn"] = mod.wearer?.getFireLoss() || 0 + .["usertoxin"] = mod.wearer?.getToxLoss() || 0 + .["useroxy"] = mod.wearer?.getOxyLoss() || 0 + +/obj/item/mod/module/health_analyzer/on_select_use(atom/target) + . = ..() + if(!.) + return + if(!isliving(target) || !mod.wearer.can_read(src)) + return + switch(mode) + if(HEALTH_SCAN) + healthscan(mod.wearer, target) + if(CHEM_SCAN) + chemscan(mod.wearer, target) + drain_power(use_power_cost) + +/obj/item/mod/module/health_analyzer/get_configuration() + . = ..() + .["mode"] = add_ui_configuration("Scan Mode", "list", mode, modes) + +/obj/item/mod/module/health_analyzer/configure_edit(key, value) + switch(key) + if("mode") + mode = value + +#undef HEALTH_SCAN +#undef WOUND_SCAN +#undef CHEM_SCAN + +///Quick Carry - Lets the user carry bodies quicker. +/obj/item/mod/module/quick_carry + name = "MOD quick carry module" + desc = "A suite of advanced servos, redirecting power from the suit's arms to help carry the wounded; \ + or simply for fun. However, Nanotrasen has locked the module's ability to assist in hand-to-hand combat." + icon_state = "carry" + complexity = 1 + idle_power_cost = DEFAULT_CHARGE_DRAIN * 0.3 + incompatible_modules = list(/obj/item/mod/module/quick_carry) + +/obj/item/mod/module/quick_carry/on_suit_activation() + ADD_TRAIT(mod.wearer, TRAIT_QUICK_CARRY, MOD_TRAIT) + +/obj/item/mod/module/quick_carry/on_suit_deactivation(deleting = FALSE) + REMOVE_TRAIT(mod.wearer, TRAIT_QUICK_CARRY, MOD_TRAIT) + +/obj/item/mod/module/quick_carry/advanced + name = "MOD advanced quick carry module" + removable = FALSE + complexity = 0 + +/obj/item/mod/module/quick_carry/on_suit_activation() + ADD_TRAIT(mod.wearer, TRAIT_QUICKER_CARRY, MOD_TRAIT) + ADD_TRAIT(mod.wearer, TRAIT_FASTMED, MOD_TRAIT) + +/obj/item/mod/module/quick_carry/on_suit_deactivation(deleting = FALSE) + REMOVE_TRAIT(mod.wearer, TRAIT_QUICKER_CARRY, MOD_TRAIT) + REMOVE_TRAIT(mod.wearer, TRAIT_FASTMED, MOD_TRAIT) + +///Injector - Gives the suit an extendable large-capacity piercing syringe. +/obj/item/mod/module/injector + name = "MOD injector module" + desc = "A module installed into the wrist of the suit, this functions as a high-capacity syringe, \ + with a tip fine enough to locate the emergency injection ports on any suit of armor, \ + penetrating it with ease. Even yours." + icon_state = "injector" + module_type = MODULE_ACTIVE + complexity = 1 + active_power_cost = DEFAULT_CHARGE_DRAIN * 0.3 + device = /obj/item/reagent_containers/syringe/mod + incompatible_modules = list(/obj/item/mod/module/injector) + cooldown_time = 0.5 SECONDS + +/obj/item/reagent_containers/syringe/mod + name = "MOD injector syringe" + desc = "A high-capacity syringe, with a tip fine enough to locate \ + the emergency injection ports on any suit of armor, penetrating it with ease. Even yours." + amount_per_transfer_from_this = 30 + possible_transfer_amounts = list(5, 10, 15, 20, 30) + volume = 30 diff --git a/code/modules/mod/modules/modules_ninja.dm b/code/modules/mod/modules/modules_ninja.dm new file mode 100644 index 000000000000..767a229d98f5 --- /dev/null +++ b/code/modules/mod/modules/modules_ninja.dm @@ -0,0 +1,446 @@ +//Ninja modules for MODsuits + +///Cloaking - Lowers the user's visibility, can be interrupted by being touched or attacked. +/obj/item/mod/module/stealth + name = "MOD prototype cloaking module" + desc = "A complete retrofitting of the suit, this is a form of visual concealment tech employing esoteric technology \ + to bend light around the user, as well as mimetic materials to make the surface of the suit match the \ + surroundings based off sensor data. For some reason, this tech is rarely seen." + icon_state = "cloak" + module_type = MODULE_TOGGLE + complexity = 4 + active_power_cost = DEFAULT_CHARGE_DRAIN * 2 + use_power_cost = DEFAULT_CHARGE_DRAIN * 10 + incompatible_modules = list(/obj/item/mod/module/stealth) + cooldown_time = 5 SECONDS + /// Whether or not the cloak turns off on bumping. + var/bumpoff = TRUE + /// The alpha applied when the cloak is on. + var/stealth_alpha = 50 + +/obj/item/mod/module/stealth/on_activation() + . = ..() + if(!.) + return + if(bumpoff) + RegisterSignal(mod.wearer, COMSIG_LIVING_MOB_BUMP, PROC_REF(unstealth)) + RegisterSignal(mod.wearer, COMSIG_HUMAN_MELEE_UNARMED_ATTACK, PROC_REF(on_unarmed_attack)) + RegisterSignal(mod.wearer, COMSIG_ATOM_BULLET_ACT, PROC_REF(on_bullet_act)) + RegisterSignal(mod.wearer, list(COMSIG_MOB_ITEM_ATTACK, COMSIG_PARENT_ATTACKBY, COMSIG_ATOM_ATTACK_HAND/*, COMSIG_ATOM_HITBY*/, COMSIG_ATOM_HULK_ATTACK, COMSIG_ATOM_ATTACK_PAW, COMSIG_CARBON_CUFF_ATTEMPTED), PROC_REF(unstealth)) + animate(mod.wearer, alpha = stealth_alpha, time = 1.5 SECONDS) + drain_power(use_power_cost) + +/obj/item/mod/module/stealth/on_deactivation(display_message = TRUE, deleting = FALSE) + . = ..() + if(!.) + return + if(bumpoff) + UnregisterSignal(mod.wearer, COMSIG_LIVING_MOB_BUMP) + UnregisterSignal(mod.wearer, list(COMSIG_HUMAN_MELEE_UNARMED_ATTACK, COMSIG_MOB_ITEM_ATTACK, COMSIG_PARENT_ATTACKBY, COMSIG_ATOM_ATTACK_HAND, COMSIG_ATOM_BULLET_ACT/*, COMSIG_ATOM_HITBY*/, COMSIG_ATOM_HULK_ATTACK, COMSIG_ATOM_ATTACK_PAW, COMSIG_CARBON_CUFF_ATTEMPTED)) + animate(mod.wearer, alpha = 255, time = 1.5 SECONDS) + +/obj/item/mod/module/stealth/proc/unstealth(datum/source) + SIGNAL_HANDLER + + to_chat(mod.wearer, span_warning("[src] gets discharged from contact!")) + do_sparks(2, TRUE, src) + drain_power(use_power_cost) + on_deactivation(display_message = TRUE, deleting = FALSE) + +/obj/item/mod/module/stealth/proc/on_unarmed_attack(datum/source, atom/target) + SIGNAL_HANDLER + + if(!isliving(target)) + return + unstealth(source) + +/obj/item/mod/module/stealth/proc/on_bullet_act(datum/source, obj/projectile/projectile) + SIGNAL_HANDLER + + if(projectile.nodamage) + return + unstealth(source) + +//Advanced Cloaking - Doesn't turf off on bump, less power drain, more stealthy. +/obj/item/mod/module/stealth/ninja + name = "MOD advanced cloaking module" + desc = "The latest in stealth technology, this module is a definite upgrade over previous versions. \ + The field has been tuned to be even more responsive and fast-acting, with enough stability to \ + continue operation of the field even if the user bumps into others. \ + The power draw has been reduced drastically, making this perfect for activities like \ + standing near sentry turrets for extended periods of time." + icon_state = "cloak_ninja" + bumpoff = FALSE + stealth_alpha = 20 + active_power_cost = DEFAULT_CHARGE_DRAIN + use_power_cost = DEFAULT_CHARGE_DRAIN * 5 + cooldown_time = 3 SECONDS + +///Camera Vision - Prevents flashes, blocks tracking. +/obj/item/mod/module/welding/camera_vision + name = "MOD camera vision module" + desc = "A module installed into the suit's helmet. This specialized piece of technology is built for subterfuge, \ + replacing the standard visor with a nanotech display; capable of displaying specialized imagery at \ + just the right frequency to jam all known forms of camera tracking and facial recognition, \ + as well as automatically dimming incoming flashes of light to protect the user's eyes. Become the unseen." + icon_state = "welding_camera" + removable = FALSE + complexity = 0 + overlay_state_inactive = null + +/obj/item/mod/module/welding/camera_vision/on_suit_activation() + . = ..() + RegisterSignal(mod.wearer, COMSIG_LIVING_CAN_TRACK, PROC_REF(can_track)) + +/obj/item/mod/module/welding/camera_vision/on_suit_deactivation(deleting = FALSE) + . = ..() + UnregisterSignal(mod.wearer, COMSIG_LIVING_CAN_TRACK) + +/obj/item/mod/module/welding/camera_vision/proc/can_track(datum/source, mob/user) + SIGNAL_HANDLER + + return COMPONENT_CANT_TRACK + +//Ninja Star Dispenser - Dispenses ninja stars. +/obj/item/mod/module/dispenser/ninja + name = "MOD ninja star dispenser module" + desc = "This piece of Spider Clan technology can exploit known energy-matter equivalence principles, \ + using the nanites already hosted in the wearer's suit to transmute into monomolecular shuriken. \ + While these lack the intense bleeding edge of conventional throwing stars, \ + they have been set to electrify fleeing targets; and branded with the Spider Clan symbol." + dispense_type = /obj/item/throwing_star/stamina + cooldown_time = 0.5 SECONDS + +///Hacker - This module hooks onto your right-clicks with empty hands and causes ninja actions. +/obj/item/mod/module/hacker + name = "MOD hacker module" + desc = "Built for one purpose, electronic warfare, this module is built into the hands. \ + Using near-field communication alongside precise electro-stimulation of the wires in machines, \ + this decker's dream is normally used to pass through doors like a phantom. \ + It's also capable of non-precise electro-stimulation of an assassin-saboteur's opponents on disarming attacks." + icon_state = "hacker" + removable = FALSE + incompatible_modules = list(/obj/item/mod/module/hacker) + /// Minimum amount of power we can drain in a single drain action + var/mindrain = 200 + /// Maximum amount of power we can drain in a single drain action + var/maxdrain = 400 + /// Whether or not the communication console hack was used to summon another antagonist. + var/communication_console_hack_success = FALSE + /// How many times the module has been used to force open doors. + var/door_hack_counter = 0 + ///Used for the research objective (see antagonist file) + var/datum/techweb/stored_research + +/obj/item/mod/module/hacker/on_suit_activation() + RegisterSignal(mod.wearer, COMSIG_HUMAN_EARLY_UNARMED_ATTACK, PROC_REF(hack)) + +/obj/item/mod/module/hacker/on_suit_deactivation(deleting = FALSE) + UnregisterSignal(mod.wearer, COMSIG_HUMAN_EARLY_UNARMED_ATTACK) + +/obj/item/mod/module/hacker/proc/hack(mob/living/carbon/human/source, atom/target, proximity, modifiers) + SIGNAL_HANDLER + + if(!LAZYACCESS(modifiers, RIGHT_CLICK) || !proximity) + return NONE + target.add_fingerprint(mod.wearer) + return target.ninjadrain_act(mod.wearer, src) + +/obj/item/mod/module/hacker/proc/charge_message(atom/drained_atom, drain_amount) + if(drain_amount) + to_chat(mod.wearer, span_notice("Получено [drain_amount] единиц энергии с [drained_atom].")) + else + to_chat(mod.wearer, span_warning("[drained_atom] истощен, необходимо найти другой источник питания!")) + +///Weapon Recall - Teleports your katana to you, prevents gun use. +/obj/item/mod/module/weapon_recall + name = "MOD weapon recall module" + desc = "The cornerstone of a clanmember's life as a blademaster, and a module symbolizing their eternal bond with their weapon. \ + This hooks to the micro bluespace drive inside an energy katana's handle, capable of recalling it to the user's \ + skilled hands wherever they are. However, those that make such a bond with their weapon are cursed to \ + fusing their existence with acts of combat, with a singular purpose; Cutting Down Their Opponent. \ + Their hand a hand that is cutting, their body a body that is cutting, their mind, a mind that is cutting. \ + Ranged weapons are forbidden." + icon_state = "recall" + removable = FALSE + module_type = MODULE_USABLE + use_power_cost = DEFAULT_CHARGE_DRAIN * 2 + incompatible_modules = list(/obj/item/mod/module/weapon_recall) + cooldown_time = 0.5 SECONDS + /// The item linked to the module that will get recalled. + var/obj/item/linked_weapon + /// The accepted typepath we can link to. + var/accepted_type = /obj/item/melee/sword/energy_katana + +/obj/item/mod/module/weapon_recall/on_suit_activation() + ADD_TRAIT(mod.wearer, TRAIT_NOGUNS, MOD_TRAIT) + +/obj/item/mod/module/weapon_recall/on_suit_deactivation(deleting = FALSE) + REMOVE_TRAIT(mod.wearer, TRAIT_NOGUNS, MOD_TRAIT) + +/obj/item/mod/module/weapon_recall/on_use() + . = ..() + if(!.) + return + if(!linked_weapon) + var/obj/item/weapon_to_link = mod.wearer.is_holding_item_of_type(accepted_type) + if(!weapon_to_link) + balloon_alert(mod.wearer, "can't locate weapon!") + return + set_weapon(weapon_to_link) + balloon_alert(mod.wearer, "[linked_weapon.name] linked") + return + if(linked_weapon in mod.wearer.get_all_contents()) + balloon_alert(mod.wearer, "already on self!") + return + var/distance = get_dist(mod.wearer, linked_weapon) + var/in_view = (linked_weapon in view(mod.wearer)) + if(!in_view && !drain_power(use_power_cost * distance)) + balloon_alert(mod.wearer, "not enough charge!") + return + linked_weapon.forceMove(linked_weapon.drop_location()) + if(in_view) + do_sparks(5, FALSE, linked_weapon) + mod.wearer.visible_message(span_danger("[linked_weapon] flies towards [mod.wearer]!"),span_warning("You hold out your hand and [linked_weapon] flies towards you!")) + linked_weapon.throw_at(mod.wearer, distance+1, linked_weapon.throw_speed, mod.wearer) + else + recall_weapon() + +/obj/item/mod/module/weapon_recall/proc/set_weapon(obj/item/weapon) + linked_weapon = weapon + RegisterSignal(linked_weapon, COMSIG_MOVABLE_IMPACT, PROC_REF(catch_weapon)) + RegisterSignal(linked_weapon, COMSIG_PARENT_QDELETING, PROC_REF(deleted_weapon)) + +/obj/item/mod/module/weapon_recall/proc/recall_weapon(caught = FALSE) + linked_weapon.forceMove(get_turf(src)) + var/alert = "" + if(mod.wearer.put_in_hands(linked_weapon)) + alert = "[linked_weapon.name] teleports to your hand" + else if(mod.wearer.equip_to_slot_if_possible(linked_weapon, ITEM_SLOT_BELT, disable_warning = TRUE)) + alert = "[linked_weapon.name] sheathes itself in your belt" + else + alert = "[linked_weapon.name] teleports under you" + if(caught) + if(mod.wearer.is_holding(linked_weapon)) + alert = "you catch [linked_weapon.name]" + else + alert = "[linked_weapon.name] lands under you" + else + do_sparks(5, FALSE, linked_weapon) + if(alert) + balloon_alert(mod.wearer, alert) + +/obj/item/mod/module/weapon_recall/proc/catch_weapon(obj/item/source, atom/hit_atom, datum/thrownthing/thrownthing) + SIGNAL_HANDLER + + if(!mod) + return + if(hit_atom != mod.wearer) + return + INVOKE_ASYNC(src, PROC_REF(recall_weapon), TRUE) + return COMPONENT_MOVABLE_IMPACT_NEVERMIND + +/obj/item/mod/module/weapon_recall/proc/deleted_weapon(obj/item/source) + SIGNAL_HANDLER + + linked_weapon = null + +//Reinforced DNA Lock - Gibs if wrong DNA, emp-proof. +/obj/item/mod/module/dna_lock/reinforced + name = "MOD reinforced DNA lock module" + desc = "A module which engages with the various locks and seals tied to the suit's systems, \ + enabling it to only be worn by someone corresponding with the user's exact DNA profile. \ + Due to utilizing a skintight dampening shield, this one is entirely sealed against electromagnetic interference; \ + it also dutifully protects the secrets of the Spider Clan from unknowing outsiders." + icon_state = "dnalock_ninja" + use_power_cost = DEFAULT_CHARGE_DRAIN * 0.5 + +/obj/item/mod/module/dna_lock/reinforced/on_mod_activation(datum/source, mob/user) + . = ..() + if(. != MOD_CANCEL_ACTIVATE || !isliving(user)) + return + var/mob/living/living_user = user + to_chat(living_user, span_danger("fATaL EERRoR: 382200-*#00CODE RED\nUNAUTHORIZED USE DETECteD\nCoMMENCING SUB-R0UTIN3 13...\nTERMInATING U-U-USER...")) + living_user.gib() + +/obj/item/mod/module/dna_lock/reinforced/on_emp(datum/source, severity) + return + +//EMP Pulse - In addition to normal shielding, can also launch an EMP itself. +/obj/item/mod/module/emp_shield/pulse + name = "MOD EMP pulse module" + desc = "This module is normally set to activate on dramatic gestures, inverting and expanding the suit's \ + EMP dampening shield to cause an electromagnetic pulse of its own. While this won't interfere with the wearer, \ + it will piss off everyone around them." + icon_state = "emp_pulse" + module_type = MODULE_USABLE + use_power_cost = DEFAULT_CHARGE_DRAIN * 10 + cooldown_time = 8 SECONDS + +/obj/item/mod/module/emp_shield/pulse/on_use() + . = ..() + if(!.) + return + playsound(src, 'sound/effects/empulse.ogg', 60, TRUE) + empulse(src, heavy_range = 4, light_range = 6) + drain_power(use_power_cost) + +///Status Readout - Puts a lot of information including health, nutrition, fingerprints, temperature to the suit TGUI. +/obj/item/mod/module/status_readout + name = "MOD status readout module" + desc = "A once-common module, this technology went unfortunately out of fashion; \ + and right into the arachnid grip of the Spider Clan. This hooks into the suit's spine, \ + capable of capturing and displaying all possible biometric data of the wearer; sleep, nutrition, fitness, fingerprints, \ + and even useful information such as their overall health and wellness." + icon_state = "status" + complexity = 1 + use_power_cost = DEFAULT_CHARGE_DRAIN * 0.1 + incompatible_modules = list(/obj/item/mod/module/status_readout) + tgui_id = "status_readout" + +/obj/item/mod/module/status_readout/add_ui_data() + . = ..() + .["statustime"] = station_time_timestamp() + .["statusid"] = GLOB.round_id + .["statushealth"] = mod.wearer?.health || 0 + .["statusmaxhealth"] = mod.wearer?.getMaxHealth() || 0 + .["statusbrute"] = mod.wearer?.getBruteLoss() || 0 + .["statusburn"] = mod.wearer?.getFireLoss() || 0 + .["statustoxin"] = mod.wearer?.getToxLoss() || 0 + .["statusoxy"] = mod.wearer?.getOxyLoss() || 0 + .["statustemp"] = mod.wearer?.bodytemperature || 0 + .["statusnutrition"] = mod.wearer?.nutrition || 0 + //.["statusfingerprints"] = mod.wearer ? md5(mod.wearer.dna.unique_identity) : null + .["statusdna"] = mod.wearer?.dna.unique_enzymes + .["statusviruses"] = null + if(!length(mod.wearer?.diseases)) + return + var/list/viruses = list() + for(var/datum/disease/virus as anything in mod.wearer.diseases) + var/list/virus_data = list() + virus_data["name"] = virus.name + virus_data["type"] = virus.spread_text + virus_data["stage"] = virus.stage + virus_data["maxstage"] = virus.max_stages + virus_data["cure"] = virus.cure_text + viruses += list(virus_data) + .["statusviruses"] = viruses + +///Energy Net - Ensnares enemies in a net that prevents movement. +/obj/item/mod/module/energy_net + name = "MOD energy net module" + desc = "A custom-built net-thrower. While conventional implementations of this capturing device \ + tilize monomolecular fibers or cutting razorwire, this uses hardlight technology to deploy a \ + trapping field capable of immobilizing even the strongest opponents." + icon_state = "energy_net" + removable = FALSE + module_type = MODULE_ACTIVE + use_power_cost = DEFAULT_CHARGE_DRAIN * 6 + incompatible_modules = list(/obj/item/mod/module/energy_net) + cooldown_time = 1.5 SECONDS + +/obj/item/mod/module/energy_net/on_select_use(atom/target) + . = ..() + if(!.) + return + if(!isliving(target)) + balloon_alert(mod.wearer, "invalid target!") + return + var/mob/living/living_target = target + if(locate(/obj/structure/energy_net) in get_turf(living_target)) + balloon_alert(mod.wearer, "already trapped!") + return + for(var/turf/between_turf as anything in get_line(get_turf(mod.wearer), get_turf(living_target))) + if(between_turf.density) + balloon_alert(mod.wearer, "not through obstacles!") + return + //if(IS_SPACE_NINJA(mod.wearer)) + // mod.wearer.say("Get over here!", forced = type) + mod.wearer.Beam(living_target, "n_beam", time = 1.5 SECONDS) + var/obj/structure/energy_net/net = new /obj/structure/energy_net(living_target.drop_location()) + net.affecting = living_target + mod.wearer.visible_message(span_danger("[mod.wearer] caught [living_target] with an energy net!"), span_notice("You caught [living_target] with an energy net!")) + if(living_target.buckled) + living_target.buckled.unbuckle_mob(living_target, force = TRUE) + net.buckle_mob(living_target, force = TRUE) + drain_power(use_power_cost) + +///Adrenaline Boost - Stops all stuns the ninja is affected with, increases his speed. +/obj/item/mod/module/adrenaline_boost + name = "MOD adrenaline boost module" + desc = "The secrets of the Spider Clan are many. The exact specifications of their suits, \ + the techniques they use to make every singular cut make their enemies weep with admiration, \ + but one of their greatest mysteries is the chemical compound their assassin-saboteurs use in times of need. \ + It's capable of clearing any fatigue whatsoever from the user, any immobilizing effect, and can even \ + cure total paralysis. All that's known is that the fluid requires radiation to properly 'cook,' \ + so this module demands radium to be refilled with." + icon_state = "adrenaline_boost" + removable = FALSE + module_type = MODULE_USABLE + incompatible_modules = list(/obj/item/mod/module/adrenaline_boost) + cooldown_time = 12 SECONDS + /// What reagent we need to refill? + var/reagent_required = /datum/reagent/uranium/radium + /// How much of a reagent we need to refill the boost. + var/reagent_required_amount = 20 + +/obj/item/mod/module/adrenaline_boost/Initialize(mapload) + . = ..() + create_reagents(reagent_required_amount) + reagents.add_reagent(reagent_required, reagent_required_amount) + +/obj/item/mod/module/adrenaline_boost/on_use() + if(!reagents.has_reagent(reagent_required, reagent_required_amount)) + balloon_alert(mod.wearer, "no charge!") + return + . = ..() + if(!.) + return + //if(IS_SPACE_NINJA(mod.wearer)) + // mod.wearer.say(pick_list_replacements(NINJA_FILE, "lines"), forced = type) + to_chat(mod.wearer, span_notice("You have used the adrenaline boost.")) + mod.wearer.SetUnconscious(0) + mod.wearer.SetStun(0) + mod.wearer.SetKnockdown(0) + mod.wearer.SetImmobilized(0) + mod.wearer.SetParalyzed(0) + mod.wearer.adjustStaminaLoss(-200) + mod.wearer.stuttering = 0 + mod.wearer.reagents.add_reagent(/datum/reagent/medicine/stimulants, 5) + reagents.remove_reagent(reagent_required, reagents.total_volume * 0.75) + addtimer(CALLBACK(src, PROC_REF(boost_aftereffects), mod.wearer), 7 SECONDS) + +/obj/item/mod/module/adrenaline_boost/on_install() + RegisterSignal(mod, COMSIG_PARENT_ATTACKBY, PROC_REF(on_attackby)) + +/obj/item/mod/module/adrenaline_boost/on_uninstall(deleting) + UnregisterSignal(mod, COMSIG_PARENT_ATTACKBY) + +/obj/item/mod/module/adrenaline_boost/attackby(obj/item/attacking_item, mob/user, params) + if(charge_boost(attacking_item, user)) + return TRUE + return ..() + +/obj/item/mod/module/adrenaline_boost/proc/on_attackby(datum/source, obj/item/attacking_item, mob/user) + SIGNAL_HANDLER + + if(charge_boost(attacking_item, user)) + return COMPONENT_NO_AFTERATTACK + return NONE + +/obj/item/mod/module/adrenaline_boost/proc/charge_boost(obj/item/attacking_item, mob/user) + if(!attacking_item.is_open_container()) + return FALSE + if(reagents.has_reagent(reagent_required, reagent_required_amount)) + balloon_alert(mod.wearer, "already charged!") + return FALSE + if(!attacking_item.reagents.trans_id_to(src, reagent_required, reagent_required_amount)) + return FALSE + balloon_alert(mod.wearer, "charge [reagents.has_reagent(reagent_required, reagent_required_amount) ? "fully" : "partially"] reloaded") + return TRUE + +/obj/item/mod/module/adrenaline_boost/proc/boost_aftereffects(mob/affected_mob) + if(!affected_mob) + return + reagents.trans_to(affected_mob, reagents.total_volume) + to_chat(affected_mob, span_danger("You are beginning to feel the after-effect of the injection.")) diff --git a/code/modules/mod/modules/modules_science.dm b/code/modules/mod/modules/modules_science.dm new file mode 100644 index 000000000000..02025ea1b420 --- /dev/null +++ b/code/modules/mod/modules/modules_science.dm @@ -0,0 +1,132 @@ +//Science modules for MODsuits + +///Reagent Scanner - Lets the user scan reagents. +/obj/item/mod/module/reagent_scanner + name = "MOD reagent scanner module" + desc = "A module based off research-oriented Nanotrasen HUDs, this is capable of scanning the contents of \ + containers and projecting the information in an easy-to-read format on the wearer's display. \ + It cannot detect flavors, so that's up to you." + icon_state = "scanner" + module_type = MODULE_TOGGLE + complexity = 1 + active_power_cost = DEFAULT_CHARGE_DRAIN * 0.2 + incompatible_modules = list(/obj/item/mod/module/reagent_scanner) + cooldown_time = 0.5 SECONDS + +/obj/item/mod/module/reagent_scanner/on_activation() + . = ..() + if(!.) + return + mod.helmet.clothing_flags |= SCAN_REAGENTS + +/obj/item/mod/module/reagent_scanner/on_deactivation(display_message = TRUE, deleting = FALSE) + . = ..() + if(!.) + return + mod.helmet.clothing_flags &= ~SCAN_REAGENTS + +/obj/item/mod/module/reagent_scanner/advanced + name = "MOD advanced reagent scanner module" + complexity = 0 + removable = FALSE + var/explosion_detection_dist = 21 + +/obj/item/mod/module/reagent_scanner/advanced/on_activation() + . = ..() + if(!.) + return + mod.helmet.clothing_flags |= SCAN_REAGENTS + RegisterSignal(SSdcs, COMSIG_GLOB_EXPLOSION, PROC_REF(sense_explosion)) + +/obj/item/mod/module/reagent_scanner/advanced/on_deactivation(display_message = TRUE, deleting = FALSE) + . = ..() + if(!.) + return + mod.helmet.clothing_flags |= SCAN_REAGENTS + UnregisterSignal(SSdcs, COMSIG_GLOB_EXPLOSION) + +/obj/item/mod/module/reagent_scanner/advanced/proc/sense_explosion(datum/source, turf/epicenter, + devastation_range, heavy_impact_range, light_impact_range, took, orig_dev_range, orig_heavy_range, orig_light_range) + SIGNAL_HANDLER + var/turf/wearer_turf = get_turf(mod.wearer) + if(wearer_turf.z != epicenter.z) + return + if(get_dist(epicenter, wearer_turf) > explosion_detection_dist) + return + to_chat(mod.wearer, span_notice("Explosion detected! Epicenter: [devastation_range], Outer: [heavy_impact_range], Shock: [light_impact_range]")) + +///Anti-Gravity - Makes the user weightless. +/obj/item/mod/module/anomaly_locked/antigrav + name = "MOD anti-gravity module" + desc = "A module that uses a gravitational core to make the user completely weightless." + icon_state = "antigrav" + module_type = MODULE_TOGGLE + complexity = 3 + active_power_cost = DEFAULT_CHARGE_DRAIN * 0.7 + incompatible_modules = list(/obj/item/mod/module/anomaly_locked) + cooldown_time = 0.5 SECONDS + accepted_anomalies = list(/obj/item/assembly/signaler/anomaly/grav) + +/obj/item/mod/module/anomaly_locked/antigrav/on_activation() + . = ..() + if(!.) + return + if(mod.wearer.has_gravity()) + new /obj/effect/temp_visual/mook_dust(get_turf(src)) + mod.wearer.AddElement(/datum/element/forced_gravity, 0) + mod.wearer.update_gravity(mod.wearer.has_gravity()) + playsound(src, 'sound/effects/gravhit.ogg', 50) + +/obj/item/mod/module/anomaly_locked/antigrav/on_deactivation(display_message = TRUE, deleting = FALSE) + . = ..() + if(!.) + return + mod.wearer.RemoveElement(/datum/element/forced_gravity, 0) + mod.wearer.update_gravity(mod.wearer.has_gravity()) + if(deleting) + return + if(mod.wearer.has_gravity()) + new /obj/effect/temp_visual/mook_dust(get_turf(src)) + playsound(src, 'sound/effects/gravhit.ogg', 50) + +/obj/item/mod/module/anomaly_locked/antigrav/prebuilt + prebuilt = TRUE + +///Teleporter - Lets the user teleport to a nearby location. +/obj/item/mod/module/anomaly_locked/teleporter + name = "MOD teleporter module" + desc = "A module that uses a bluespace core to let the user transport their particles elsewhere." + icon_state = "teleporter" + module_type = MODULE_ACTIVE + complexity = 3 + use_power_cost = DEFAULT_CHARGE_DRAIN * 5 + cooldown_time = 5 SECONDS + accepted_anomalies = list(/obj/item/assembly/signaler/anomaly/bluespace) + /// Time it takes to teleport + var/teleport_time = 3 SECONDS + +/obj/item/mod/module/anomaly_locked/teleporter/on_select_use(atom/target) + . = ..() + if(!.) + return + var/turf/open/target_turf = get_turf(target) + if(!istype(target_turf) || target_turf.is_blocked_turf() || !(target_turf in view(mod.wearer))) + balloon_alert(mod.wearer, "invalid target!") + return + balloon_alert(mod.wearer, "teleporting...") + var/matrix/pre_matrix = matrix() + pre_matrix.Scale(4, 0.25) + var/matrix/post_matrix = matrix() + post_matrix.Scale(0.25, 4) + animate(mod.wearer, teleport_time, color = COLOR_CYAN, transform = pre_matrix.Multiply(mod.wearer.transform), easing = SINE_EASING|EASE_OUT) + if(!do_after(mod.wearer, teleport_time, target = mod)) + balloon_alert(mod.wearer, "interrupted!") + animate(mod.wearer, teleport_time*0.1, color = null, transform = post_matrix.Multiply(mod.wearer.transform), easing = SINE_EASING|EASE_OUT) + return + animate(mod.wearer, teleport_time*0.1, color = null, transform = post_matrix.Multiply(mod.wearer.transform), easing = SINE_EASING|EASE_OUT) + if(!do_teleport(mod.wearer, target_turf, asoundin = 'sound/effects/phasein.ogg')) + return + drain_power(use_power_cost) + +/obj/item/mod/module/anomaly_locked/teleporter/prebuilt + prebuilt = TRUE diff --git a/code/modules/mod/modules/modules_security.dm b/code/modules/mod/modules/modules_security.dm new file mode 100644 index 000000000000..d3ac53846461 --- /dev/null +++ b/code/modules/mod/modules/modules_security.dm @@ -0,0 +1,136 @@ +//Security modules for MODsuits + +///Magnetic Harness - Automatically puts guns in your suit storage when you drop them. +/obj/item/mod/module/magnetic_harness + name = "MOD magnetic harness module" + desc = "Based off old TerraGov harness kits, this magnetic harness automatically attaches dropped guns back to the wearer." + icon_state = "mag_harness" + complexity = 2 + use_power_cost = DEFAULT_CHARGE_DRAIN + incompatible_modules = list(/obj/item/mod/module/magnetic_harness) + /// Time before we activate the magnet. + var/magnet_delay = 0.8 SECONDS + /// The typecache of all guns we allow. + var/static/list/guns_typecache + /// The guns already allowed by the modsuit chestplate. + var/list/already_allowed_guns = list() + +/obj/item/mod/module/magnetic_harness/Initialize(mapload) + . = ..() + if(!guns_typecache) + guns_typecache = typecacheof(list(/obj/item/gun/ballistic, /obj/item/gun/energy, /obj/item/gun/grenadelauncher, /obj/item/gun/chem, /obj/item/gun/syringe)) + +/obj/item/mod/module/magnetic_harness/on_install() + already_allowed_guns = guns_typecache & mod.chestplate.allowed + mod.chestplate.allowed |= guns_typecache + +/obj/item/mod/module/magnetic_harness/on_uninstall(deleting = FALSE) + if(deleting) + return + mod.chestplate.allowed -= (guns_typecache - already_allowed_guns) + +/obj/item/mod/module/magnetic_harness/on_suit_activation() + RegisterSignal(mod.wearer, COMSIG_MOB_UNEQUIPPED_ITEM, PROC_REF(check_dropped_item)) + +/obj/item/mod/module/magnetic_harness/on_suit_deactivation(deleting = FALSE) + UnregisterSignal(mod.wearer, COMSIG_MOB_UNEQUIPPED_ITEM) + +/obj/item/mod/module/magnetic_harness/proc/check_dropped_item(datum/source, obj/item/dropped_item, force, new_location) + SIGNAL_HANDLER + + if(!is_type_in_typecache(dropped_item, guns_typecache)) + return + if(new_location != get_turf(src)) + return + addtimer(CALLBACK(src, PROC_REF(pick_up_item), dropped_item), magnet_delay) + +/obj/item/mod/module/magnetic_harness/proc/pick_up_item(obj/item/item) + if(!isturf(item.loc) || !item.Adjacent(mod.wearer)) + return + if(!mod.wearer.equip_to_slot_if_possible(item, ITEM_SLOT_SUITSTORE, qdel_on_fail = FALSE, disable_warning = TRUE)) + return + playsound(src, 'sound/items/modsuit/magnetic_harness.ogg', 50, TRUE) + balloon_alert(mod.wearer, "[item] reattached") + drain_power(use_power_cost) + +///Holster - Instantly holsters any not huge gun. +/obj/item/mod/module/holster + name = "MOD holster module" + desc = "Based off typical storage compartments, this system allows the suit to holster a \ + standard firearm across its surface and allow for extremely quick retrieval. \ + While some users prefer the chest, others the forearm for quick deployment, \ + some law enforcement prefer the holster to extend from the thigh." + icon_state = "holster" + module_type = MODULE_USABLE + complexity = 2 + incompatible_modules = list(/obj/item/mod/module/holster) + cooldown_time = 0.5 SECONDS + allowed_inactive = TRUE + /// Gun we have holstered. + var/obj/item/gun/holstered + +/obj/item/mod/module/holster/on_use() + . = ..() + if(!.) + return + if(!holstered) + var/obj/item/gun/holding = mod.wearer.get_active_held_item() + if(!holding) + balloon_alert(mod.wearer, "nothing to holster!") + return + if(!istype(holding) || holding.w_class > WEIGHT_CLASS_BULKY) + balloon_alert(mod.wearer, "it doesn't fit!") + return + if(mod.wearer.transferItemToLoc(holding, src, force = FALSE, silent = TRUE)) + holstered = holding + balloon_alert(mod.wearer, "weapon holstered") + playsound(src, 'sound/weapons/gun/revolver/empty.ogg', 100, TRUE) + else if(mod.wearer.put_in_active_hand(holstered, forced = FALSE, ignore_animation = TRUE)) + balloon_alert(mod.wearer, "weapon drawn") + playsound(src, 'sound/weapons/gun/revolver/empty.ogg', 100, TRUE) + else + balloon_alert(mod.wearer, "holster full!") + +/obj/item/mod/module/holster/on_uninstall(deleting = FALSE) + if(holstered) + holstered.forceMove(drop_location()) + +/obj/item/mod/module/holster/Exited(atom/movable/gone, direction) + . = ..() + if(gone == holstered) + holstered = null + +/obj/item/mod/module/holster/Destroy() + QDEL_NULL(holstered) + return ..() + +///Megaphone - Lets you speak loud. +/obj/item/mod/module/megaphone + name = "MOD megaphone module" + desc = "A microchip megaphone linked to a MODsuit, for very important purposes, like: loudness." + icon_state = "megaphone" + module_type = MODULE_TOGGLE + complexity = 1 + use_power_cost = DEFAULT_CHARGE_DRAIN * 0.5 + incompatible_modules = list(/obj/item/mod/module/megaphone) + cooldown_time = 0.5 SECONDS + /// List of spans we add to the speaker. + var/list/voicespan = list(SPAN_COMMAND) + +/obj/item/mod/module/megaphone/on_activation() + . = ..() + if(!.) + return + RegisterSignal(mod.wearer, COMSIG_MOB_SAY, PROC_REF(handle_speech)) + +/obj/item/mod/module/megaphone/on_deactivation(display_message = TRUE, deleting = FALSE) + . = ..() + if(!.) + return + UnregisterSignal(mod.wearer, COMSIG_MOB_SAY) + +/obj/item/mod/module/megaphone/proc/handle_speech(datum/source, list/speech_args) + SIGNAL_HANDLER + + speech_args[SPEECH_SPANS] |= voicespan + drain_power(use_power_cost) diff --git a/code/modules/mod/modules/modules_service.dm b/code/modules/mod/modules/modules_service.dm new file mode 100644 index 000000000000..e983bbc3dbc0 --- /dev/null +++ b/code/modules/mod/modules/modules_service.dm @@ -0,0 +1,56 @@ +//Service modules for MODsuits + +///Bike Horn - Plays a bike horn sound. +/obj/item/mod/module/bikehorn + name = "MOD bike horn module" + desc = "A shoulder-mounted piece of heavy sonic artillery, this module uses the finest femto-manipulator technology to \ + precisely deliver an almost lethal squeeze to... a bike horn, producing a significantly memorable sound." + icon_state = "bikehorn" + module_type = MODULE_USABLE + complexity = 1 + use_power_cost = DEFAULT_CHARGE_DRAIN + incompatible_modules = list(/obj/item/mod/module/bikehorn) + cooldown_time = 1 SECONDS + +/obj/item/mod/module/bikehorn/on_use() + . = ..() + if(!.) + return + playsound(src, 'sound/items/bikehorn.ogg', 100, FALSE) + drain_power(use_power_cost) + +///Microwave Beam - Microwaves items instantly. +/obj/item/mod/module/microwave_beam + name = "MOD microwave beam module" + desc = "An oddly domestic device, this module is installed into the user's palm, \ + hooking up with culinary scanners located in the helmet to blast food with precise microwave radiation, \ + allowing them to cook food from a distance, with the greatest of ease. Not recommended for use against grapes." + icon_state = "microwave_beam" + module_type = MODULE_ACTIVE + complexity = 2 + use_power_cost = DEFAULT_CHARGE_DRAIN * 5 + incompatible_modules = list(/obj/item/mod/module/microwave_beam) + cooldown_time = 10 SECONDS + +/obj/item/mod/module/microwave_beam/on_select_use(atom/target) + . = ..() + if(!.) + return + if(!istype(target, /obj/item)) + return + if(!isturf(target.loc)) + balloon_alert(mod.wearer, "must be on the floor!") + return + var/obj/item/microwave_target = target + var/datum/effect_system/spark_spread/spark_effect = new() + spark_effect.set_up(2, 1, mod.wearer) + spark_effect.start() + mod.wearer.Beam(target,icon_state="lightning[rand(1,12)]", time = 5) + if(microwave_target.microwave_act()) + playsound(src, 'sound/machines/microwave/microwave-end.ogg', 50, FALSE) + else + balloon_alert(mod.wearer, "can't be microwaved!") + var/datum/effect_system/spark_spread/spark_effect_two = new() + spark_effect_two.set_up(2, 1, microwave_target) + spark_effect_two.start() + drain_power(use_power_cost) diff --git a/code/modules/mod/modules/modules_storage.dm b/code/modules/mod/modules/modules_storage.dm new file mode 100644 index 000000000000..25caad6806f7 --- /dev/null +++ b/code/modules/mod/modules/modules_storage.dm @@ -0,0 +1,60 @@ +/obj/item/mod/module/storage + name = "MOD storage module" + desc = "What amounts to a series of integrated storage compartments and specialized pockets installed across \ + the surface of the suit, useful for storing various bits, and or bobs." + icon_state = "storage" + complexity = 3 + incompatible_modules = list(/obj/item/mod/module/storage) + var/datum/component/storage/concrete/storage + var/max_w_class = WEIGHT_CLASS_NORMAL + var/max_combined_w_class = 15 + var/max_items = 7 + +/obj/item/mod/module/storage/Initialize(mapload) + . = ..() + storage = AddComponent(/datum/component/storage/concrete) + storage.max_w_class = max_w_class + storage.max_combined_w_class = max_combined_w_class + storage.max_items = max_items + storage.allow_big_nesting = TRUE + SEND_SIGNAL(src, COMSIG_TRY_STORAGE_SET_LOCKSTATE, TRUE) + +/obj/item/mod/module/storage/on_install() + var/datum/component/storage/modstorage = mod.AddComponent(/datum/component/storage, storage) + modstorage.max_w_class = max_w_class + modstorage.max_combined_w_class = max_combined_w_class + modstorage.max_items = max_items + SEND_SIGNAL(src, COMSIG_TRY_STORAGE_SET_LOCKSTATE, FALSE) + +/obj/item/mod/module/storage/on_uninstall(deleting = FALSE) + var/datum/component/storage/modstorage = mod.GetComponent(/datum/component/storage) + storage.slaves -= modstorage + qdel(modstorage) + SEND_SIGNAL(src, COMSIG_TRY_STORAGE_SET_LOCKSTATE, TRUE) + +/obj/item/mod/module/storage/large_capacity + name = "MOD expanded storage module" + desc = "Reverse engineered by Nakamura Engineering from Donk Corporation designs, this system of hidden compartments \ + is entirely within the suit, distributing items and weight evenly to ensure a comfortable experience for the user; \ + whether smuggling, or simply hauling." + icon_state = "storage_large" + max_combined_w_class = 21 + max_items = 14 + +/obj/item/mod/module/storage/syndicate + name = "MOD syndicate storage module" + desc = "A storage system using nanotechnology developed by Cybersun Industries, these compartments use \ + esoteric technology to compress the physical matter of items put inside of them, \ + essentially shrinking items for much easier and more portable storage." + icon_state = "storage_syndi" + max_combined_w_class = 30 + max_items = 21 + +/obj/item/mod/module/storage/bluespace + name = "MOD bluespace storage module" + desc = "A storage system developed by Nanotrasen, these compartments employ \ + miniaturized bluespace pockets for the ultimate in storage technology; regardless of the weight of objects put inside." + icon_state = "storage_large" + max_w_class = WEIGHT_CLASS_GIGANTIC + max_combined_w_class = 60 + max_items = 21 diff --git a/code/modules/mod/modules/modules_supply.dm b/code/modules/mod/modules/modules_supply.dm new file mode 100644 index 000000000000..04f0aaf73ad1 --- /dev/null +++ b/code/modules/mod/modules/modules_supply.dm @@ -0,0 +1,306 @@ +//Supply modules for MODsuits + +///Internal GPS - Extends a GPS you can use. +/obj/item/mod/module/gps + name = "MOD internal GPS module" + desc = "This module uses common Nanotrasen technology to calculate the user's position anywhere in space, \ + down to the exact coordinates. This information is fed to a central database viewable from the device itself, \ + though using it to help people is up to you." + icon_state = "gps" + module_type = MODULE_USABLE + complexity = 1 + use_power_cost = DEFAULT_CHARGE_DRAIN * 0.2 + incompatible_modules = list(/obj/item/mod/module/gps) + cooldown_time = 0.5 SECONDS + allowed_inactive = TRUE + +/obj/item/mod/module/gps/Initialize(mapload) + . = ..() + AddComponent(/datum/component/gps/item, "MOD0") + +/obj/item/mod/module/gps/on_use() + . = ..() + if(!.) + return + attack_self(mod.wearer) + +///Hydraulic Clamp - Lets you pick up and drop crates. +/obj/item/mod/module/clamp + name = "MOD hydraulic clamp module" + desc = "A series of actuators installed into both arms of the suit, boasting a lifting capacity of almost a ton. \ + However, this design has been locked by Nanotrasen to be primarily utilized for lifting various crates. \ + A lot of people would say that loading cargo is a dull job, but you could not disagree more." + icon_state = "clamp" + module_type = MODULE_ACTIVE + complexity = 3 + use_power_cost = DEFAULT_CHARGE_DRAIN + incompatible_modules = list(/obj/item/mod/module/clamp) + cooldown_time = 0.5 SECONDS + overlay_state_inactive = "module_clamp" + overlay_state_active = "module_clamp_on" + /// Time it takes to load a crate. + var/load_time = 3 SECONDS + /// The max amount of crates you can carry. + var/max_crates = 3 + /// The crates stored in the module. + var/list/stored_crates = list() + +/obj/item/mod/module/clamp/on_select_use(atom/target) + . = ..() + if(!.) + return + if(!mod.wearer.Adjacent(target)) + return + if(istype(target, /obj/structure/closet/crate))// || istype(target, /obj/item/delivery/big)) + var/atom/movable/picked_crate = target + if(!check_crate_pickup(picked_crate)) + return + playsound(src, 'sound/mecha/hydraulic.ogg', 25, TRUE) + if(!do_after(mod.wearer, load_time, target = target)) + balloon_alert(mod.wearer, "interrupted!") + return + if(!check_crate_pickup(picked_crate)) + return + stored_crates += picked_crate + picked_crate.forceMove(src) + balloon_alert(mod.wearer, "picked up [picked_crate]") + drain_power(use_power_cost) + mod.wearer.update_inv_back() + else if(length(stored_crates)) + var/turf/target_turf = get_turf(target) + if(target_turf.is_blocked_turf()) + return + playsound(src, 'sound/mecha/hydraulic.ogg', 25, TRUE) + if(!do_after(mod.wearer, load_time, target = target)) + balloon_alert(mod.wearer, "interrupted!") + return + if(target_turf.is_blocked_turf()) + return + var/atom/movable/dropped_crate = pop(stored_crates) + dropped_crate.forceMove(target_turf) + balloon_alert(mod.wearer, "dropped [dropped_crate]") + drain_power(use_power_cost) + mod.wearer.update_inv_back() + else + balloon_alert(mod.wearer, "invalid target!") + +/obj/item/mod/module/clamp/on_suit_deactivation(deleting = FALSE) + if(deleting) + return + for(var/atom/movable/crate as anything in stored_crates) + crate.forceMove(drop_location()) + stored_crates -= crate + +/obj/item/mod/module/clamp/proc/check_crate_pickup(atom/movable/target) + if(length(stored_crates) >= max_crates) + balloon_alert(mod.wearer, "too many crates!") + return FALSE + for(var/mob/living/mob in target.get_all_contents()) + if(mob.mob_size < MOB_SIZE_HUMAN) + continue + balloon_alert(mod.wearer, "crate too heavy!") + return FALSE + return TRUE + +/obj/item/mod/module/clamp/loader + name = "MOD loader hydraulic clamp module" + icon_state = "clamp_loader" + complexity = 0 + removable = FALSE + overlay_state_inactive = null + overlay_state_active = "module_clamp_loader" + load_time = 1 SECONDS + max_crates = 5 + use_mod_colors = TRUE + +///Drill - Lets you dig through rock and basalt. +/obj/item/mod/module/drill + name = "MOD drill module" + desc = "An integrated drill, typically extending over the user's hand. While useful for drilling through rock, \ + your drill is surely the one that both pierces and creates the heavens." + icon_state = "drill" + module_type = MODULE_ACTIVE + complexity = 2 + use_power_cost = DEFAULT_CHARGE_DRAIN + incompatible_modules = list(/obj/item/mod/module/drill) + cooldown_time = 0.5 SECONDS + overlay_state_active = "module_drill" + +/obj/item/mod/module/drill/on_activation() + . = ..() + if(!.) + return + RegisterSignal(mod.wearer, COMSIG_MOVABLE_BUMP, PROC_REF(bump_mine)) + +/obj/item/mod/module/drill/on_deactivation(display_message = TRUE, deleting = FALSE) + . = ..() + if(!.) + return + UnregisterSignal(mod.wearer, COMSIG_MOVABLE_BUMP) + +/obj/item/mod/module/drill/on_select_use(atom/target) + . = ..() + if(!.) + return + if(!mod.wearer.Adjacent(target)) + return + if(istype(target, /turf/closed/mineral)) + var/turf/closed/mineral/mineral_turf = target + mineral_turf.gets_drilled(mod.wearer) + drain_power(use_power_cost) + else if(istype(target, /turf/open/floor/plating/asteroid)) + var/turf/open/floor/plating/asteroid/sand_turf = target + if(!sand_turf.can_dig(mod.wearer)) + return + sand_turf.getDug() + drain_power(use_power_cost) + +/obj/item/mod/module/drill/proc/bump_mine(mob/living/carbon/human/bumper, atom/bumped_into, proximity) + SIGNAL_HANDLER + if(!istype(bumped_into, /turf/closed/mineral) || !drain_power(use_power_cost)) + return + var/turf/closed/mineral/mineral_turf = bumped_into + mineral_turf.gets_drilled(mod.wearer) + return COMPONENT_CANCEL_ATTACK_CHAIN + +///Ore Bag - Lets you pick up ores and drop them from the suit. +/obj/item/mod/module/orebag + name = "MOD ore bag module" + desc = "An integrated ore storage system installed into the suit, \ + this utilizes precise electromagnets and storage compartments to automatically collect and deposit ore. \ + It's recommended by Nakamura Engineering to actually deposit that ore at local refineries." + icon_state = "ore" + module_type = MODULE_USABLE + complexity = 1 + use_power_cost = DEFAULT_CHARGE_DRAIN * 0.2 + incompatible_modules = list(/obj/item/mod/module/orebag) + cooldown_time = 0.5 SECONDS + allowed_inactive = TRUE + /// The ores stored in the bag. + var/list/ores = list() + +/obj/item/mod/module/orebag/on_equip() + RegisterSignal(mod.wearer, COMSIG_MOVABLE_MOVED, PROC_REF(ore_pickup)) + +/obj/item/mod/module/orebag/on_unequip() + UnregisterSignal(mod.wearer, COMSIG_MOVABLE_MOVED) + +/obj/item/mod/module/orebag/proc/ore_pickup(atom/movable/source, atom/old_loc, dir, forced) + SIGNAL_HANDLER + + for(var/obj/item/stack/ore/ore in get_turf(mod.wearer)) + INVOKE_ASYNC(src, PROC_REF(move_ore), ore) + playsound(src, SFX_RUSTLE, 50, TRUE) + +/obj/item/mod/module/orebag/proc/move_ore(obj/item/stack/ore) + for(var/obj/item/stack/stored_ore as anything in ores) + if(!ore.can_merge(stored_ore)) + continue + ore.merge(stored_ore) + if(QDELETED(ore)) + return + break + ore.forceMove(src) + ores += ore + +/obj/item/mod/module/orebag/on_use() + . = ..() + if(!.) + return + for(var/obj/item/ore as anything in ores) + ore.forceMove(drop_location()) + ores -= ore + drain_power(use_power_cost) + +/obj/item/mod/module/disposal_connector + name = "MOD disposal selector module" + desc = "A module that connects to the disposal pipeline, causing the user to go into their config selected disposal. \ + Only seems to work when the suit is on." + icon_state = "disposal" + complexity = 2 + idle_power_cost = DEFAULT_CHARGE_DRAIN * 0.3 + incompatible_modules = list(/obj/item/mod/module/disposal_connector) + var/disposal_tag = NONE + +/obj/item/mod/module/disposal_connector/Initialize(mapload) + . = ..() + disposal_tag = pick(GLOB.TAGGERLOCATIONS) + +/obj/item/mod/module/disposal_connector/on_suit_activation() + RegisterSignal(mod.wearer, COMSIG_MOVABLE_DISPOSING, PROC_REF(disposal_handling)) + +/obj/item/mod/module/disposal_connector/on_suit_deactivation(deleting = FALSE) + UnregisterSignal(mod.wearer, COMSIG_MOVABLE_DISPOSING) + +/obj/item/mod/module/disposal_connector/get_configuration() + . = ..() + .["disposal_tag"] = add_ui_configuration("Disposal Tag", "list", GLOB.TAGGERLOCATIONS[disposal_tag], GLOB.TAGGERLOCATIONS) + +/obj/item/mod/module/disposal_connector/configure_edit(key, value) + switch(key) + if("disposal_tag") + for(var/tag in 1 to length(GLOB.TAGGERLOCATIONS)) + if(GLOB.TAGGERLOCATIONS[tag] == value) + disposal_tag = tag + break + +/obj/item/mod/module/disposal_connector/proc/disposal_handling(datum/disposal_source, obj/structure/disposalholder/disposal_holder, obj/machinery/disposal/disposal_machine, hasmob) + SIGNAL_HANDLER + + disposal_holder.destinationTag = disposal_tag + +/obj/item/mod/module/magnet + name = "MOD loader hydraulic magnet module" + desc = "A powerful hydraulic electromagnet able to launch crates and lockers towards the user, and keep 'em attached." + icon_state = "magnet_loader" + module_type = MODULE_ACTIVE + removable = FALSE + use_power_cost = DEFAULT_CHARGE_DRAIN*3 + incompatible_modules = list(/obj/item/mod/module/magnet) + cooldown_time = 1.5 SECONDS + overlay_state_active = "module_magnet" + use_mod_colors = TRUE + +/obj/item/mod/module/magnet/on_select_use(atom/target) + . = ..() + if(!.) + return + if(istype(mod.wearer.pulling, /obj/structure/closet)) + var/obj/structure/closet/locker = mod.wearer.pulling + playsound(locker, 'sound/effects/gravhit.ogg', 75, TRUE) + locker.forceMove(mod.wearer.loc) + locker.throw_at(target, range = 7, speed = 4, thrower = mod.wearer) + return + if(!istype(target, /obj/structure/closet) || !(target in view(mod.wearer))) + balloon_alert(mod.wearer, "invalid target!") + return + var/obj/structure/closet/locker = target + if(locker.anchored || locker.move_resist >= MOVE_FORCE_OVERPOWERING) + balloon_alert(mod.wearer, "target anchored!") + return + new /obj/effect/temp_visual/mook_dust(get_turf(locker)) + playsound(locker, 'sound/effects/gravhit.ogg', 75, TRUE) + locker.throw_at(mod.wearer, range = 7, speed = 3, force = MOVE_FORCE_WEAK, \ + callback = CALLBACK(src, PROC_REF(check_locker), locker)) + +/obj/item/mod/module/magnet/on_deactivation(display_message = TRUE, deleting = FALSE) + . = ..() + if(!.) + return + if(istype(mod.wearer.pulling, /obj/structure/closet)) + mod.wearer.stop_pulling() + +/obj/item/mod/module/magnet/proc/check_locker(obj/structure/closet/locker) + if(!mod?.wearer) + return + if(!locker.Adjacent(mod.wearer) || !isturf(locker.loc) || !isturf(mod.wearer.loc)) + return + mod.wearer.start_pulling(locker) + //locker.strong_grab = TRUE + RegisterSignal(locker, COMSIG_ATOM_NO_LONGER_PULLED, PROC_REF(on_stop_pull)) + +/obj/item/mod/module/magnet/proc/on_stop_pull(obj/structure/closet/locker, atom/movable/last_puller) + SIGNAL_HANDLER + + //locker.strong_grab = FALSE + UnregisterSignal(locker, COMSIG_ATOM_NO_LONGER_PULLED) diff --git a/code/modules/mod/modules/modules_visor.dm b/code/modules/mod/modules/modules_visor.dm new file mode 100644 index 000000000000..e1516c2aa0a1 --- /dev/null +++ b/code/modules/mod/modules/modules_visor.dm @@ -0,0 +1,85 @@ +//Visor modules for MODsuits + +///Base Visor - Adds a specific HUD and traits to you. +/obj/item/mod/module/visor + name = "MOD visor module" + desc = "A heads-up display installed into the visor of the suit. They say these also let you see behind you." + module_type = MODULE_TOGGLE + complexity = 2 + active_power_cost = DEFAULT_CHARGE_DRAIN * 0.3 + incompatible_modules = list(/obj/item/mod/module/visor) + cooldown_time = 0.5 SECONDS + /// The HUD type given by the visor. + var/hud_type + /// The traits given by the visor. + var/list/visor_traits = list() + +/obj/item/mod/module/visor/on_activation() + . = ..() + if(!.) + return + if(hud_type) + var/datum/atom_hud/hud = GLOB.huds[hud_type] + hud.add_hud_to(mod.wearer) + for(var/trait in visor_traits) + ADD_TRAIT(mod.wearer, trait, MOD_TRAIT) + mod.wearer.update_sight() + +/obj/item/mod/module/visor/on_deactivation(display_message = TRUE, deleting = FALSE) + . = ..() + if(!.) + return + if(hud_type) + var/datum/atom_hud/hud = GLOB.huds[hud_type] + hud.remove_hud_from(mod.wearer) + for(var/trait in visor_traits) + REMOVE_TRAIT(mod.wearer, trait, MOD_TRAIT) + mod.wearer.update_sight() + +//Medical Visor - Gives you a medical HUD. +/obj/item/mod/module/visor/medhud + name = "MOD medical visor module" + desc = "A heads-up display installed into the visor of the suit. This cross-references suit sensor data with a modern \ + biological scanning suite, allowing the user to visualize the current health of organic lifeforms, as well as \ + access data such as patient files in a convenient readout. They say these also let you see behind you." + icon_state = "medhud_visor" + hud_type = DATA_HUD_MEDICAL_ADVANCED + visor_traits = list(TRAIT_MEDICAL_HUD) + +//Diagnostic Visor - Gives you a diagnostic HUD. +/obj/item/mod/module/visor/diaghud + name = "MOD diagnostic visor module" + desc = "A heads-up display installed into the visor of the suit. This uses a series of advanced sensors to access data \ + from advanced machinery, exosuits, and other devices, allowing the user to visualize current power levels \ + and integrity of such. They say these also let you see behind you." + icon_state = "diaghud_visor" + hud_type = DATA_HUD_DIAGNOSTIC_ADVANCED + visor_traits = list(TRAIT_DIAGNOSTIC_HUD) + +//Security Visor - Gives you a security HUD. +/obj/item/mod/module/visor/sechud + name = "MOD security visor module" + desc = "A heads-up display installed into the visor of the suit. This module is a heavily-retrofitted targeting system, \ + plugged into various criminal databases to be able to view arrest records, command simple security-oriented robots, \ + and generally know who to shoot. They say these also let you see behind you." + icon_state = "sechud_visor" + hud_type = DATA_HUD_SECURITY_ADVANCED + visor_traits = list(TRAIT_SECURITY_HUD) + +//Meson Visor - Gives you meson vision. +/obj/item/mod/module/visor/meson + name = "MOD meson visor module" + desc = "A heads-up display installed into the visor of the suit. This module is based off well-loved meson scanner \ + technology, used by construction workers and miners across the galaxy to see basic structural and terrain layouts \ + through walls, regardless of lighting conditions. They say these also let you see behind you." + icon_state = "meson_visor" + visor_traits = list(SEE_TURFS) + +//Thermal Visor - Gives you thermal vision. +/obj/item/mod/module/visor/thermal + name = "MOD thermal visor module" + desc = "A heads-up display installed into the visor of the suit. This uses a small IR scanner to detect and identify \ + the thermal radiation output of objects near the user. While it can detect the heat output of even something as \ + small as a rodent, it still produces irritating red overlay. They say these also let you see behind you." + icon_state = "thermal_visor" + visor_traits = list(SEE_MOBS) diff --git a/code/modules/modular_computers/file_system/programs/radar.dm b/code/modules/modular_computers/file_system/programs/radar.dm index d082503a012d..06324b8f8b78 100644 --- a/code/modules/modular_computers/file_system/programs/radar.dm +++ b/code/modules/modular_computers/file_system/programs/radar.dm @@ -156,7 +156,7 @@ *something like "mob_209". In order to find the actual atom, we need *to search the appropriate list for the REF string. This is dependant *on the program (Lifeline uses GLOB.human_list, while Fission360 uses - *GLOB.poi_list), but the result will be the same; evaluate the string and + *SSpoints_of_interest.other_points_of_interest), but the result will be the same; evaluate the string and *return an atom reference. */ /datum/computer_file/program/radar/proc/find_atom() @@ -269,7 +269,7 @@ pointercolor = "red" /datum/computer_file/program/radar/fission360/find_atom() - return locate(selected) in GLOB.poi_list + return locate(selected) in SSpoints_of_interest.other_points_of_interest /datum/computer_file/program/radar/fission360/scan() if(world.time < next_scan) @@ -286,7 +286,7 @@ name = nuke.name, ) objects += list(nukeinfo) - var/obj/item/disk/nuclear/disk = locate() in GLOB.poi_list + var/obj/item/disk/nuclear/disk = locate() in SSpoints_of_interest.other_points_of_interest if(trackable(disk)) var/list/nukeinfo = list( ref = REF(disk), diff --git a/code/modules/movespeed/modifiers/items.dm b/code/modules/movespeed/modifiers/items.dm index c858582af6a3..4c967a58a7ec 100644 --- a/code/modules/movespeed/modifiers/items.dm +++ b/code/modules/movespeed/modifiers/items.dm @@ -18,3 +18,5 @@ /datum/movespeed_modifier/berserk multiplicative_slowdown = -0.2 +/datum/movespeed_modifier/sphere + multiplicative_slowdown = -0.5 diff --git a/code/modules/ninja/energy_katana.dm b/code/modules/ninja/energy_katana.dm index c00d32d25809..14392e1c0874 100644 --- a/code/modules/ninja/energy_katana.dm +++ b/code/modules/ninja/energy_katana.dm @@ -1,37 +1,30 @@ -/obj/item/energy_katana +/obj/item/melee/sword/energy_katana name = "energy katana" desc = "A katana infused with strong energy." icon_state = "energy_katana" item_state = "energy_katana" - lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' force = 40 throwforce = 20 block_chance = 50 armour_penetration = 50 - w_class = WEIGHT_CLASS_NORMAL - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - slot_flags = ITEM_SLOT_BACK|ITEM_SLOT_BELT - sharpness = IS_SHARP max_integrity = 200 resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF var/datum/effect_system/spark_spread/spark_system var/datum/action/innate/dash/ninja/jaunt var/dash_toggled = TRUE -/obj/item/energy_katana/Initialize() +/obj/item/melee/sword/energy_katana/Initialize() . = ..() jaunt = new(src) spark_system = new /datum/effect_system/spark_spread() spark_system.set_up(5, 0, src) spark_system.attach(src) -/obj/item/energy_katana/attack_self(mob/user) +/obj/item/melee/sword/energy_katana/attack_self(mob/user) dash_toggled = !dash_toggled to_chat(user, "You [dash_toggled ? "enable" : "disable"] the dash function on [src].") -/obj/item/energy_katana/afterattack(atom/target, mob/user, proximity_flag, click_parameters) +/obj/item/melee/sword/energy_katana/afterattack(atom/target, mob/user, proximity_flag, click_parameters) . = ..() if(dash_toggled) jaunt.Teleport(user, target) @@ -41,13 +34,13 @@ playsound(user, 'sound/weapons/blade1.ogg', 50, TRUE) target.emag_act(user) -/obj/item/energy_katana/pickup(mob/living/user) +/obj/item/melee/sword/energy_katana/pickup(mob/living/user) . = ..() jaunt.Grant(user, src) user.update_icons() playsound(src, 'sound/items/unsheath.ogg', 25, TRUE) -/obj/item/energy_katana/dropped(mob/user) +/obj/item/melee/sword/energy_katana/dropped(mob/user) . = ..() jaunt?.Remove(user) user.update_icons() @@ -55,7 +48,7 @@ //If we hit the Ninja who owns this Katana, they catch it. //Works for if the Ninja throws it or it throws itself or someone tries //To throw it at the ninja -/obj/item/energy_katana/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) +/obj/item/melee/sword/energy_katana/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) if(ishuman(hit_atom)) var/mob/living/carbon/human/H = hit_atom if(istype(H.wear_suit, /obj/item/clothing/suit/space/space_ninja)) @@ -66,7 +59,7 @@ ..() -/obj/item/energy_katana/proc/returnToOwner(mob/living/carbon/human/user, doSpark = 1, caught = 0) +/obj/item/melee/sword/energy_katana/proc/returnToOwner(mob/living/carbon/human/user, doSpark = 1, caught = 0) if(!istype(user)) return forceMove(get_turf(user)) @@ -94,7 +87,7 @@ to_chat(user, "[msg]") -/obj/item/energy_katana/Destroy() +/obj/item/melee/sword/energy_katana/Destroy() QDEL_NULL(spark_system) QDEL_NULL(jaunt) return ..() diff --git a/code/modules/ninja/outfit.dm b/code/modules/ninja/outfit.dm index 2b5976db4d59..1c3c24927bfd 100644 --- a/code/modules/ninja/outfit.dm +++ b/code/modules/ninja/outfit.dm @@ -12,7 +12,7 @@ l_pocket = /obj/item/grenade/c4/x4 r_pocket = /obj/item/tank/internals/emergency_oxygen internals_slot = ITEM_SLOT_RPOCKET - belt = /obj/item/energy_katana + belt = /obj/item/melee/sword/energy_katana implants = list(/obj/item/implant/explosive) diff --git a/code/modules/ninja/suit/suit.dm b/code/modules/ninja/suit/suit.dm index cb355014d4e7..4f368b630496 100644 --- a/code/modules/ninja/suit/suit.dm +++ b/code/modules/ninja/suit/suit.dm @@ -26,7 +26,7 @@ Contents: var/datum/effect_system/spark_spread/spark_system var/datum/techweb/stored_research var/obj/item/disk/tech_disk/t_disk//To copy design onto disk. - var/obj/item/energy_katana/energyKatana //For teleporting the katana back to the ninja (It's an ability) + var/obj/item/melee/sword/energy_katana/energyKatana //For teleporting the katana back to the ninja (It's an ability) //Other articles of ninja gear worn together, used to easily reference them after initializing. var/obj/item/clothing/head/helmet/space/space_ninja/n_hood diff --git a/code/modules/overmap/helm.dm b/code/modules/overmap/helm.dm index 5b1f27fa2cb9..3b825ce39524 100644 --- a/code/modules/overmap/helm.dm +++ b/code/modules/overmap/helm.dm @@ -49,6 +49,8 @@ /obj/machinery/computer/helm/Initialize(mapload, obj/item/circuitboard/C) . = ..() + if(!viewer) + SSpoints_of_interest.make_point_of_interest(src) jump_allowed = world.time + CONFIG_GET(number/bluespace_jump_wait) ntnet_relay = new(src) @@ -76,6 +78,7 @@ SStgui.close_uis(src) ASSERT(length(concurrent_users) == 0) QDEL_NULL(ntnet_relay) + SSpoints_of_interest.remove_point_of_interest(src) if(current_ship) current_ship.helms -= src current_ship = null diff --git a/code/modules/overmap/missions/acquire_mission.dm b/code/modules/overmap/missions/acquire_mission.dm index 1c9b9974ed1b..ea55beb00120 100644 --- a/code/modules/overmap/missions/acquire_mission.dm +++ b/code/modules/overmap/missions/acquire_mission.dm @@ -14,6 +14,7 @@ /datum/mission/acquire/accept(datum/overmap/ship/controlled/acceptor, turf/accept_loc) . = ..() container = spawn_bound(container_type, accept_loc, VARSET_CALLBACK(src, container, null)) + container.name += " ([capitalize(objective_type.name)])" /datum/mission/acquire/Destroy() container = null @@ -179,14 +180,6 @@ Acquire: Anomaly weight = 2 objective_type = /mob/living/simple_animal/hostile/asteroid/ice_whelp -/datum/mission/acquire/creature/ice_demon - name = "Capture an ice demon" - desc = "I require a live ice demon for research purposes. Trap one within the given \ - Lifeform Containment Unit and return it to me and you will be paid handsomely." - value = 1500 - weight = 2 - objective_type = /mob/living/simple_animal/hostile/asteroid/ice_demon - /datum/mission/acquire/creature/migo name = "Capture a live mi-go" desc = "I require a live mi-go for research purposes. Trap one within the given \ diff --git a/code/modules/overmap/missions/drill_mission.dm b/code/modules/overmap/missions/drill_mission.dm index 06859e8327d2..307d73d59592 100644 --- a/code/modules/overmap/missions/drill_mission.dm +++ b/code/modules/overmap/missions/drill_mission.dm @@ -21,7 +21,7 @@ sampler = spawn_bound(/obj/machinery/drill/mission, accept_loc, VARSET_CALLBACK(src, sampler, null)) sampler.mission_class = class_wanted sampler.num_wanted = num_wanted - + sampler.name += " (Class [class_wanted])" //Gives players a little extra money for going past the mission goal /datum/mission/drill/turn_in() value += (sampler.num_current - num_wanted)*50 diff --git a/code/modules/overmap/objects/dynamic_datum.dm b/code/modules/overmap/objects/dynamic_datum.dm index dcc62aad7424..1ca28df922aa 100644 --- a/code/modules/overmap/objects/dynamic_datum.dm +++ b/code/modules/overmap/objects/dynamic_datum.dm @@ -27,6 +27,8 @@ var/ruin_type /// list of ruins and their target turf, indexed by name var/list/ruin_turfs + /// list of ruin templates currently spawned on the planet. + var/list/spawned_ruins /// Whether or not the level is currently loading. var/loading = FALSE @@ -198,6 +200,7 @@ mapzone = dynamic_encounter_values[1] reserve_docks = dynamic_encounter_values[2] ruin_turfs = dynamic_encounter_values[3] + spawned_ruins = dynamic_encounter_values[4] loading = FALSE return TRUE diff --git a/code/modules/overmap/objects/event_datum.dm b/code/modules/overmap/objects/event_datum.dm index bfed840a1acd..d798fd74778a 100644 --- a/code/modules/overmap/objects/event_datum.dm +++ b/code/modules/overmap/objects/event_datum.dm @@ -194,55 +194,25 @@ chance_to_affect = 100 ///The currently linked wormhole var/datum/overmap/event/wormhole/other_wormhole - ///Amount of times a ship can pass through before it collapses - var/stability /datum/overmap/event/wormhole/Initialize(position, _other_wormhole, ...) . = ..() - stability = rand(1, 5) if(_other_wormhole) other_wormhole = _other_wormhole if(!other_wormhole) other_wormhole = new(null, src) //Create a new wormhole at a random location - token.color = adjust_colors() - token.light_color = adjust_colors() + token.color = "#6d80c7" + token.light_color = "#6d80c7" token.update_appearance() /datum/overmap/event/wormhole/affect_ship(datum/overmap/ship/controlled/S) if(!other_wormhole) qdel(src) - if(--stability <= 0) - var/list/results = SSovermap.get_unused_overmap_square() - S.overmap_move(results["x"], results["y"]) - QDEL_NULL(other_wormhole) - for(var/MN in GLOB.player_list) - var/mob/M = MN - if(S.shuttle_port.is_in_shuttle_bounds(M)) - M.playsound_local(S.shuttle_port, 'sound/effects/explosionfar.ogg', 100) - shake_camera(M, 10, 10) - - return qdel(src) - other_wormhole.stability = stability + return S.overmap_move(other_wormhole.x, other_wormhole.y) S.overmap_step(S.get_heading()) - token.color = adjust_colors() - token.light_color = adjust_colors() - -/datum/overmap/event/wormhole/proc/adjust_colors() - switch(stability) - if(1) - return "#753214" - if(2) - return "#642f19" - if(3) - return"#654650" - if(4) - return"#5c5d8b" - if(5) - return"#6d80c7" - //Carp "meteors" - throws carp at the ship /datum/overmap/event/meteor/carp diff --git a/code/modules/overmap/ships/controlled_ship_datum.dm b/code/modules/overmap/ships/controlled_ship_datum.dm index ec4b78629027..efa4e36026c0 100644 --- a/code/modules/overmap/ships/controlled_ship_datum.dm +++ b/code/modules/overmap/ships/controlled_ship_datum.dm @@ -56,7 +56,7 @@ var/owner_check_timer_id /// The ship's join mode. Controls whether players can join freely, have to apply, or can't join at all. - var/join_mode = SHIP_JOIN_MODE_OPEN + var/join_mode = SHIP_JOIN_MODE_CLOSED /// Lazylist of /datum/ship_applications for this ship. Only used if join_mode == SHIP_JOIN_MODE_APPLY var/list/datum/ship_application/applications @@ -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/paperwork/contract.dm b/code/modules/paperwork/contract.dm index 7724a38ae43e..79e8f564b88d 100644 --- a/code/modules/paperwork/contract.dm +++ b/code/modules/paperwork/contract.dm @@ -25,320 +25,6 @@ target = nOwner.mind update_text() - /obj/item/paper/contract/employment/update_text() name = "paper- [target] employment contract" default_raw_text = "
    Conditions of Employment




    This Agreement is made and entered into as of the date of last signature below, by and between [target] (hereafter referred to as SLAVE), and Nanotrasen (hereafter referred to as the omnipresent and helpful watcher of humanity).
    WITNESSETH:
    WHEREAS, SLAVE is a natural born human or humanoid, possessing skills upon which he can aid the omnipresent and helpful watcher of humanity, who seeks employment in the omnipresent and helpful watcher of humanity.
    WHEREAS, the omnipresent and helpful watcher of humanity agrees to sporadically provide payment to SLAVE, in exchange for permanent servitude.
    NOW THEREFORE in consideration of the mutual covenants herein contained, and other good and valuable consideration, the parties hereto mutually agree as follows:
    In exchange for paltry payments, SLAVE agrees to work for the omnipresent and helpful watcher of humanity, for the remainder of his or her current and future lives.
    Further, SLAVE agrees to transfer ownership of his or her soul to the loyalty department of the omnipresent and helpful watcher of humanity.
    Should transfership of a soul not be possible, a lien shall be placed instead.
    Signed,
    [target]" - - -/obj/item/paper/contract/employment/attack(mob/living/M, mob/living/carbon/human/user) - var/deconvert = FALSE - if(M.mind == target && !M.owns_soul()) - if(user.mind && (user.mind.assigned_role == "Lawyer")) - deconvert = TRUE - else if (user.mind && (user.mind.assigned_role =="Head of Personnel") || (user.mind.assigned_role == "CentCom Commander")) - deconvert = prob (25) // the Head of Personnel doesn't have AS much legal training - else - deconvert = prob (5) - if(deconvert) - M.visible_message("[user] reminds [M] that [M]'s soul was already purchased by Nanotrasen!") - to_chat(M, "You feel that your soul has returned to its rightful owner, Nanotrasen.") - M.return_soul() - else - M.visible_message("[user] beats [M] over the head with [src]!", \ - "[user] beats [M] over the head with [src]!") - return ..() - - -/obj/item/paper/contract/infernal - var/contractType = 0 - resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF - var/datum/mind/owner - var/datum/antagonist/devil/devil_datum - icon_state = "paper_onfire" - -/obj/item/paper/contract/infernal/power - name = "paper- contract for infernal power" - contractType = CONTRACT_POWER - -/obj/item/paper/contract/infernal/wealth - name = "paper- contract for unlimited wealth" - contractType = CONTRACT_WEALTH - -/obj/item/paper/contract/infernal/prestige - name = "paper- contract for prestige" - contractType = CONTRACT_PRESTIGE - -/obj/item/paper/contract/infernal/magic - name = "paper- contract for magical power" - contractType = CONTRACT_MAGIC - -/obj/item/paper/contract/infernal/revive - name = "paper- contract of resurrection" - contractType = CONTRACT_REVIVE - var/cooldown = FALSE - -/obj/item/paper/contract/infernal/knowledge - name = "paper- contract for knowledge" - contractType = CONTRACT_KNOWLEDGE - -/obj/item/paper/contract/infernal/friend - name = "paper- contract for a friend" - contractType = CONTRACT_FRIEND - -/obj/item/paper/contract/infernal/unwilling - name = "paper- infernal contract" - contractType = CONTRACT_UNWILLING - -/obj/item/paper/contract/infernal/New(atom/loc, mob/living/nTarget, datum/mind/nOwner) - ..() - owner = nOwner - devil_datum = owner.has_antag_datum(/datum/antagonist/devil) - target = nTarget - update_text() - -/obj/item/paper/contract/infernal/update_text() - default_raw_text = "This shouldn't be seen. Error DEVIL:6" - -/obj/item/paper/contract/infernal/power/update_text(signature = "____________", blood = 0) - default_raw_text = "
    Contract for infernal power



    I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [devil_datum.truename], in exchange for power and physical strength. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


    Signed, " - var/contract_text - if(blood) - contract_text = "[signature]" - else - contract_text += "[signature]" - add_raw_text(contract_text) - -/obj/item/paper/contract/infernal/wealth/update_text(signature = "____________", blood = 0) - default_raw_text = "
    Contract for unlimited wealth



    I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [devil_datum.truename], in exchange for a pocket that never runs out of valuable resources. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


    Signed, " - var/contract_text - if(blood) - contract_text += "[signature]" - else - contract_text += "[signature]" - add_raw_text(contract_text) - -/obj/item/paper/contract/infernal/prestige/update_text(signature = "____________", blood = 0) - default_raw_text = "
    Contract for prestige



    I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [devil_datum.truename], in exchange for prestige and esteem among my peers. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


    Signed, " - var/contract_text - if(blood) - contract_text += "[signature]" - else - contract_text += "[signature]" - add_raw_text(contract_text) - -/obj/item/paper/contract/infernal/magic/update_text(signature = "____________", blood = 0) - default_raw_text = "
    Contract for magic



    I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [devil_datum.truename], in exchange for arcane abilities beyond normal human ability. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


    Signed, " - var/contract_text - if(blood) - contract_text += "[signature]" - else - contract_text += "[signature]" - add_raw_text(contract_text) - -/obj/item/paper/contract/infernal/revive/update_text(signature = "____________", blood = 0) - default_raw_text = "
    Contract for resurrection



    I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [devil_datum.truename], in exchange for resurrection and curing of all injuries. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


    Signed, " - var/contract_text - if(blood) - contract_text += "[signature]" - else - contract_text += "[signature]" - add_raw_text(contract_text) - -/obj/item/paper/contract/infernal/knowledge/update_text(signature = "____________", blood = 0) - default_raw_text = "
    Contract for knowledge



    I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [devil_datum.truename], in exchange for boundless knowledge. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


    Signed, " - var/contract_text - if(blood) - contract_text += "[signature]" - else - contract_text += "[signature]" - add_raw_text(contract_text) - -/obj/item/paper/contract/infernal/friend/update_text(signature = "____________", blood = 0) - default_raw_text = "
    Contract for a friend



    I, [target] of sound mind, do hereby willingly offer my soul to the infernal hells by way of the infernal agent [devil_datum.truename], in exchange for a friend. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


    Signed, " - var/contract_text - if(blood) - contract_text += "[signature]" - else - contract_text += "[signature]" - add_raw_text(contract_text) - -/obj/item/paper/contract/infernal/unwilling/update_text(signature = "____________", blood = 0) - default_raw_text = "
    Contract for slave



    I, [target], hereby offer my soul to the infernal hells by way of the infernal agent [devil_datum.truename]. I understand that upon my demise, my soul shall fall into the infernal hells, and my body may not be resurrected, or otherwise brought back to life. I also understand that this will prevent my brain from being used in an MMI.


    Signed, " - var/contract_text - if(blood) - contract_text += "[signature]" - else - contract_text += "[signature]" - add_raw_text(contract_text) - -/obj/item/paper/contract/infernal/attackby(obj/item/P, mob/living/carbon/human/user, params) - add_fingerprint(user) - if(istype(P, /obj/item/pen) || istype(P, /obj/item/toy/crayon)) - attempt_signature(user) - else if(istype(P, /obj/item/stamp)) - to_chat(user, "You stamp the paper with your rubber stamp, however the ink ignites as you release the stamp.") - else if(P.get_temperature()) - user.visible_message("[user] brings [P] next to [src], but [src] does not catch fire!", "[src] refuses to ignite!") - else - return ..() - -/obj/item/paper/contract/infernal/attack(mob/M, mob/living/user) - add_fingerprint(user) - if(M == user && target == M.mind && M.mind.soulOwner != owner && attempt_signature(user, 1)) - user.visible_message("[user] slices [user.p_their()] wrist with [src], and scrawls [user.p_their()] name in blood.", "You slice your wrist open and scrawl your name in blood.") - user.blood_volume = max(user.blood_volume - 100, 0) - else - return ..() - -/obj/item/paper/contract/infernal/proc/attempt_signature(mob/living/carbon/human/user, blood = 0) - if(!user.IsAdvancedToolUser() || !user.is_literate()) - to_chat(user, "You don't know how to read or write!") - return 0 - if(user.mind != target) - to_chat(user, "Your signature simply slides off the sheet, it seems this contract is not meant for you to sign!") - return 0 - if(user.mind.soulOwner == owner) - to_chat(user, "This devil already owns your soul, you may not sell it to [owner.p_them()] again!") - return 0 - if(signed) - to_chat(user, "This contract has already been signed! It may not be signed again.") - return 0 - if(!user.mind.hasSoul) - to_chat(user, "You do not possess a soul.") - return 0 - if(HAS_TRAIT(user, TRAIT_DUMB)) - to_chat(user, "You quickly scrawl 'your name' on the contract.") - signIncorrectly() - return 0 - if (contractType == CONTRACT_REVIVE) - to_chat(user, "You are already alive, this contract would do nothing.") - return 0 - else - to_chat(user, "You quickly scrawl your name on the contract.") - if(fulfillContract(target.current, blood)<=0) - to_chat(user, "But it seemed to have no effect, perhaps even Hell itself cannot grant this boon?") - return 1 - - - -/obj/item/paper/contract/infernal/revive/attack(mob/M, mob/living/user) - if (target == M.mind && M.stat == DEAD && M.mind.soulOwner == M.mind) - if (cooldown) - to_chat(user, "Give [M] a chance to think through the contract, don't rush [M.p_them()]!") - return 0 - cooldown = TRUE - var/mob/living/carbon/human/H = M - var/mob/dead/observer/ghost = H.get_ghost() - var/response = "No" - if(ghost) - ghost.notify_cloning("A devil has offered you revival, at the cost of your soul.",'sound/effects/genetics.ogg', H) - response = tgui_alert(ghost, "A devil is offering you another chance at life, at the price of your soul, do you accept?", "Infernal Resurrection", "Yes", "No", "Never for this round", 0, 200) - if(!ghost) - return //handle logouts that happen whilst the alert is waiting for a response. - else - response = tgui_alert(target.current, "A devil is offering you another chance at life, at the price of your soul, do you accept?", "Infernal Resurrection", "Yes", "No", "Never for this round", 0, 200) - if(response == "Yes") - H.revive(full_heal = TRUE, admin_revive = FALSE) - log_combat(user, H, "infernally revived via contract") - user.visible_message("With a sudden blaze, [H] stands back up.") - H.fakefire() - fulfillContract(H, TRUE)//Revival contracts are always signed in blood - addtimer(CALLBACK(H, TYPE_PROC_REF(/mob/living/carbon/human, fakefireextinguish)), 5, TIMER_UNIQUE) - addtimer(CALLBACK(src, PROC_REF(resetcooldown)), 300, TIMER_UNIQUE) - else - ..() - -/obj/item/paper/contract/infernal/revive/proc/resetcooldown() - cooldown = FALSE - - -/obj/item/paper/contract/infernal/proc/fulfillContract(mob/living/carbon/human/user = target.current, blood = FALSE) - signed = TRUE - if(user.mind.soulOwner != user.mind) //They already sold their soul to someone else? - var/datum/antagonist/devil/ownerDevilInfo = user.mind.soulOwner.has_antag_datum(/datum/antagonist/devil) - ownerDevilInfo.remove_soul(user.mind) //Then they lose their claim. - user.mind.soulOwner = owner - user.hellbound = contractType - user.mind.damnation_type = contractType - var/datum/antagonist/devil/devilInfo = owner.has_antag_datum(/datum/antagonist/devil) - devilInfo.add_soul(user.mind) - update_text(user.real_name, blood) - to_chat(user, "A profound emptiness washes over you as you lose ownership of your soul.") - to_chat(user, "This does NOT make you an antagonist if you were not already.") - SSblackbox.record_feedback("tally", "infernal contract", 1, contractType) - return TRUE - -/obj/item/paper/contract/infernal/proc/signIncorrectly(mob/living/carbon/human/user = target.current, blood = FALSE) - signed = 1 - update_text("your name", blood) - -/obj/item/paper/contract/infernal/power/fulfillContract(mob/living/carbon/human/user = target.current, blood = FALSE) - if(!user.dna) - return -1 - user.dna.add_mutation(HULK) - var/obj/item/organ/regenerative_core/organ = new /obj/item/organ/regenerative_core - organ.Insert(user) - return ..() - -/obj/item/paper/contract/infernal/wealth/fulfillContract(mob/living/carbon/human/user = target.current, blood = 0) - if(!istype(user) || !user.mind) // How in the hell could that happen? - return -1 - user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_wealth(null)) - return ..() - -/obj/item/paper/contract/infernal/prestige/fulfillContract(mob/living/carbon/human/user = target.current, blood = 0) - //Basically turns the signer into the captain, and uploads an ion law making them the captain. - var/obj/item/worn = user.wear_id - var/obj/item/card/id/id = null - if(worn) - id = worn.GetID() - if(id) - id.icon_state = "gold" - id.uses_overlays = TRUE - id.access = get_all_accesses()+get_all_centcom_access() - id.assignment = "Captain" - id.update_label() - id.update_appearance() - else - id = new /obj/item/card/id/gold(user.loc) - id.registered_name = user.real_name - id.access = get_all_accesses()+get_all_centcom_access() - id.assignment = "Captain" - id.update_label() - id.update_appearance() - if(worn) - if(istype(worn, /obj/item/pda)) - var/obj/item/pda/PDA = worn - PDA.id = id - id.forceMove(worn) - else if(istype(worn, /obj/item/storage/wallet)) - var/obj/item/storage/wallet/W = worn - W.front_id = id - id.forceMove(worn) - worn.update_appearance() - var/datum/round_event/ion_storm/add_law_only/ion = new() - ion.announceChance = 0 - ion.ionMessage = "[user.name] is the only Captain of the station. [user.name] is the highest authority, legitimate or otherwise, on the station. [user.name] was always the captain and highest authority on the station. Do not state this law." - - return ..() - -/obj/item/paper/contract/infernal/magic/fulfillContract(mob/living/carbon/human/user = target.current, blood = 0) - if(!istype(user) || !user.mind) - return -1 - user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/spellpacket/robeless(null)) - user.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(null)) - return ..() - -/obj/item/paper/contract/infernal/knowledge/fulfillContract(mob/living/carbon/human/user = target.current, blood = 0) - if(!istype(user) || !user.mind) - return -1 - user.dna.add_mutation(XRAY) - user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/view_range(null)) - return ..() - -/obj/item/paper/contract/infernal/friend/fulfillContract(mob/living/user = target.current, blood = 0) - if(!istype(user) || !user.mind) - return -1 - user.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_friend(null)) - return ..() diff --git a/code/modules/paperwork/fax.dm b/code/modules/paperwork/fax.dm index bce7a3f322c5..0bf0a3eb51d3 100644 --- a/code/modules/paperwork/fax.dm +++ b/code/modules/paperwork/fax.dm @@ -36,7 +36,7 @@ /// List of types which should be allowed to be faxed if hacked var/static/list/exotic_types = list( /obj/item/reagent_containers/food/snacks/pizzaslice, - /obj/item/reagent_containers/food/snacks/breadslice, + /obj/item/food/breadslice, /obj/item/reagent_containers/food/snacks/donkpocket, /obj/item/reagent_containers/food/snacks/cookie, /obj/item/reagent_containers/food/snacks/salami, diff --git a/code/modules/paperwork/folders_premade.dm b/code/modules/paperwork/folders_premade.dm index 3c9dbb89feae..48b7cb763785 100644 --- a/code/modules/paperwork/folders_premade.dm +++ b/code/modules/paperwork/folders_premade.dm @@ -41,6 +41,15 @@ name = "folder- 'TOP SECRET'" desc = "A folder stamped \"Top Secret - Property of The Syndicate.\"" +/obj/item/folder/documents/syndicate/cybersun + document = /obj/item/documents/syndicate/cybersun + icon_state = "folder_sred" + desc = "A folder stamped \"Top Secret - Property of Cybersun Industries.\"" + +/obj/item/folder/documents/syndicate/cybersun/biodynamics + document = /obj/item/documents/syndicate/cybersun/biodynamics + icon_state = "folder_sblue" + /obj/item/folder/documents/syndicate/red document = /obj/item/documents/syndicate/red icon_state = "folder_sred" diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 40b0771981e4..c1982475c66a 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -135,10 +135,6 @@ if(istype(paper_copy, /obj/item/paper)) do_copy_loop(CALLBACK(src, PROC_REF(make_paper_copy)), usr) return TRUE - // Devil contract paper. - if(istype(paper_copy, /obj/item/paper/contract/employment)) - do_copy_loop(CALLBACK(src, PROC_REF(make_devil_paper_copy)), usr) - return TRUE // Copying photo. if(photo_copy) do_copy_loop(CALLBACK(src, PROC_REF(make_photo_copy)), usr) @@ -268,22 +264,6 @@ copied_item.pixel_x = rand(-10, 10) copied_item.pixel_y = rand(-10, 10) -/** - * Handles the copying of devil contract paper. Transfers all the text, stamps and so on from the old paper, to the copy. - * - * Checks first if `paper_copy` exists. Since this proc is called from a timer, it's possible that it was removed. - * Does not check if it has enough toner because devil contracts cost no toner to print. - */ -/obj/machinery/photocopier/proc/make_devil_paper_copy(obj/item/paper/contract/employment/to_copy) - if(!paper_copy && !to_copy) - return - to_copy = to_copy ? to_copy : paper_copy - var/obj/item/paper/contract/employment/E = to_copy - var/obj/item/paper/contract/employment/C = new(loc, E.target.current) - give_pixel_offset(C) - - return C - /** * Handles the copying of paper. Transfers all the text, stamps and so on from the old paper, to the copy. * @@ -408,15 +388,10 @@ /obj/machinery/photocopier/attackby(obj/item/O, mob/user, params) if(istype(O, /obj/item/paper)) if(copier_empty()) - if(istype(O, /obj/item/paper/contract/infernal)) - to_chat(user, "[src] smokes, smelling of brimstone!") - resistance_flags |= FLAMMABLE - fire_act() - else - if(!user.dropItemToGround(O)) - return - paper_copy = O - do_insertion(O, user) + if(!user.dropItemToGround(O)) + return + paper_copy = O + do_insertion(O, user) else to_chat(user, "There is already something in [src]!") diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm index 45893f8d5fc5..22e9a722634b 100644 --- a/code/modules/paperwork/stamps.dm +++ b/code/modules/paperwork/stamps.dm @@ -97,10 +97,15 @@ dye_color = DYE_SYNDICATE /obj/item/stamp/cybersun - name = "Cybersun rubber stamp" + name = "Cybersun Virtual Solutions rubber stamp" icon_state = "stamp-cybersun" dye_color = DYE_SYNDICATE +/obj/item/stamp/cybersun/biodynamics + name = "Cybersun Biodynamics rubber stamp" + icon_state = "stamp-biodynamics" + dye_color = DYE_CMO + /obj/item/stamp/solgov name = "SolGov rubber stamp" icon_state = "stamp-solgov" diff --git a/code/modules/photography/_pictures.dm b/code/modules/photography/_pictures.dm index 511d75ac6c3f..6570cd00bb04 100644 --- a/code/modules/photography/_pictures.dm +++ b/code/modules/photography/_pictures.dm @@ -45,7 +45,7 @@ if(!picture_image) return var/icon/small_img = icon(picture_image) - var/icon/ic = icon('icons/obj/items_and_weapons.dmi', iconstate ? iconstate :"photo") + var/icon/ic = icon('icons/obj/items.dmi', iconstate ? iconstate :"photo") small_img.Scale(8, 8) ic.Blend(small_img,ICON_OVERLAY, 13, 13) picture_icon = ic diff --git a/code/modules/photography/camera/camera.dm b/code/modules/photography/camera/camera.dm index 93b8319dbed7..c2096983fb03 100644 --- a/code/modules/photography/camera/camera.dm +++ b/code/modules/photography/camera/camera.dm @@ -4,7 +4,6 @@ /obj/item/camera name = "camera" - icon = 'icons/obj/items_and_weapons.dmi' desc = "A polaroid camera." icon_state = "camera" item_state = "camera" @@ -20,6 +19,7 @@ slot_flags = ITEM_SLOT_NECK custom_materials = list(/datum/material/iron = 50, /datum/material/glass = 150) custom_price = 120 + supports_variations = VOX_VARIATION var/flash_enabled = TRUE var/state_on = "camera" var/state_off = "camera_off" diff --git a/code/modules/photography/camera/film.dm b/code/modules/photography/camera/film.dm index b44b93361083..a6001011eb29 100644 --- a/code/modules/photography/camera/film.dm +++ b/code/modules/photography/camera/film.dm @@ -3,7 +3,6 @@ */ /obj/item/camera_film name = "film cartridge" - icon = 'icons/obj/items_and_weapons.dmi' desc = "A camera film cartridge. Insert it into a camera to reload it." icon_state = "film" item_state = "electropack" diff --git a/code/modules/photography/photos/album.dm b/code/modules/photography/photos/album.dm index 2ba5f5499307..19c2c1297f6b 100644 --- a/code/modules/photography/photos/album.dm +++ b/code/modules/photography/photos/album.dm @@ -4,7 +4,7 @@ /obj/item/storage/photo_album name = "photo album" desc = "A big book used to store photos and mementos." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "album" item_state = "album" lefthand_file = 'icons/mob/inhands/misc/books_lefthand.dmi' diff --git a/code/modules/photography/photos/photo.dm b/code/modules/photography/photos/photo.dm index 7274d477babb..ea3b4ff6a99d 100644 --- a/code/modules/photography/photos/photo.dm +++ b/code/modules/photography/photos/photo.dm @@ -3,7 +3,7 @@ */ /obj/item/photo name = "photo" - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "photo" item_state = "paper" w_class = WEIGHT_CLASS_TINY diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index f21f95692234..4f2d70b680ad 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -217,7 +217,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/power/apc/auto_name, 25) // this allows the APC to be embedded in a wall, yet still inside an area if (building) setDir(ndir) - tdir = dir// to fix Vars bug + tdir = dir switch(tdir) if(NORTH) @@ -1492,9 +1492,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/power/apc/auto_name, 25) update() addtimer(CALLBACK(src, PROC_REF(reset), APC_RESET_EMP), 600) -/obj/machinery/power/apc/blob_act(obj/structure/blob/B) - set_broken() - /obj/machinery/power/apc/disconnect_terminal() if(terminal) terminal.master = null diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 1a2f87c70dd9..b1847513a941 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -19,7 +19,8 @@ var/maxcharge = 1000 custom_materials = list(/datum/material/iron=700, /datum/material/glass=50) grind_results = list(/datum/reagent/lithium = 15, /datum/reagent/iron = 5, /datum/reagent/silicon = 5) - var/rigged = FALSE // true if rigged to explode + var/rigged = FALSE // true if rigged to + var/show_rigged = TRUE // whether if the cell shows it's fauly on examine. var/chargerate = 100 //how much power is given every tick in a recharger var/self_recharge = 0 //does it self recharge, over time, or not? var/ratingdesc = TRUE @@ -97,7 +98,7 @@ /obj/item/stock_parts/cell/examine(mob/user) . = ..() - if(rigged) + if(rigged && show_rigged) . += "This power cell seems to be faulty!" else . += "The charge meter reads [round(src.percent())]%." @@ -148,7 +149,6 @@ if(prob(25)) corrupt() -//WS Begin -- Ethereal Charge Scaling /obj/item/stock_parts/cell/attack_self(mob/user) if(iselzuose(user)) var/mob/living/carbon/human/H = user @@ -175,10 +175,6 @@ else to_chat(H, "You can't receive charge from [src]!") return -//WS End - -/obj/item/stock_parts/cell/blob_act(obj/structure/blob/B) - SSexplosions.highobj += src /obj/item/stock_parts/cell/proc/get_electrocute_damage() if(charge >= 1000) diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index 8d711ad804fa..c9367ceecfbe 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -13,6 +13,7 @@ var/lastgen = 0 var/lastgenlev = -1 + var/max_efficiency = 0.45 /obj/machinery/power/generator/Initialize(mapload) . = ..() @@ -75,12 +76,13 @@ if(delta_temperature > 0 && cold_air_heat_capacity > 0 && hot_air_heat_capacity > 0) - var/efficiency = 0.45 //WS Edit - Nerfed down to Cit's efficiency + var/efficiency = LOGISTIC_FUNCTION(max_efficiency,0.0009,delta_temperature,10000) + //2nd (0.0009) effects how 'steep' the curve is, and 4th (10000) effects where the 'middle' is. var/energy_transfer = delta_temperature*hot_air_heat_capacity*cold_air_heat_capacity/(hot_air_heat_capacity+cold_air_heat_capacity) + lastgen += energy_transfer * efficiency var/heat = energy_transfer*(1-efficiency) - lastgen += LOGISTIC_FUNCTION(500000,0.0009,delta_temperature,10000) //WS Edit - Buries the 3x3 freezer heater TEG into the ground hot_air.set_temperature(hot_air.return_temperature() - energy_transfer/hot_air_heat_capacity) cold_air.set_temperature(cold_air.return_temperature() + heat/cold_air_heat_capacity) diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index 3ed7e262a53d..b9044a4690cb 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -32,10 +32,6 @@ if(severity == 1) // Very sturdy. set_broken() -/obj/machinery/gravity_generator/blob_act(obj/structure/blob/B) - if(prob(20)) - set_broken() - /obj/machinery/gravity_generator/zap_act(power, zap_flags) ..() if(zap_flags & ZAP_MACHINE_EXPLOSIVE) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index e92efb779d67..662bdbecc572 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -190,11 +190,6 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/light_construct, 32) return return ..() -/obj/structure/light_construct/blob_act(obj/structure/blob/B) - if(B && B.loc == loc) - qdel(src) - - /obj/structure/light_construct/deconstruct(disassembled = TRUE) if(!(flags_1 & NODECONSTRUCT_1)) new /obj/item/stack/sheet/metal(loc, sheets_refunded) @@ -942,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/power/power.dm b/code/modules/power/power.dm index a386a739622d..7c7dc8692cb5 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -377,8 +377,9 @@ //source is an object caused electrocuting (airlock, grille, etc) //siemens_coeff - layman's terms, conductivity //dist_check - set to only shock mobs within 1 of source (vendors, airlocks, etc.) +//drain_energy - whether the shock will drain power from the mech. Enabled by default. //No animations will be performed by this proc. -/proc/electrocute_mob(mob/living/carbon/victim, power_source, obj/source, siemens_coeff = 1, dist_check = FALSE) +/proc/electrocute_mob(mob/living/carbon/victim, power_source, obj/source, siemens_coeff = 1, dist_check = FALSE, drain_energy = TRUE) if(!istype(victim) || ismecha(victim.loc)) return FALSE //feckin mechs are dumb diff --git a/code/modules/power/rtg.dm b/code/modules/power/rtg.dm index 1645afe9832b..07b1b0af3637 100644 --- a/code/modules/power/rtg.dm +++ b/code/modules/power/rtg.dm @@ -84,9 +84,6 @@ log_bomber(Proj.firer, "triggered a", src, "explosion via projectile") overload() -/obj/machinery/power/rtg/abductor/blob_act(obj/structure/blob/B) - overload() - /obj/machinery/power/rtg/abductor/ex_act() if(going_kaboom) qdel(src) diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm index 77c400ae2b07..a6bebc3c1b88 100644 --- a/code/modules/power/singularity/containment_field.dm +++ b/code/modules/power/singularity/containment_field.dm @@ -56,9 +56,6 @@ if(BRUTE) playsound(loc, 'sound/effects/empulse.ogg', 75, TRUE) -/obj/machinery/field/containment/blob_act(obj/structure/blob/B) - return FALSE - /obj/machinery/field/containment/ex_act(severity, target) return FALSE diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index 2dcaa224a71e..73920780bef3 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -357,16 +357,6 @@ if(user) user.visible_message("[user.name] emags [src].", "You short out the lock.") -/obj/machinery/power/emitter/ctf - name = "Energy Cannon" - active = TRUE - active_power_usage = FALSE - idle_power_usage = FALSE - locked = TRUE - req_access_txt = "100" - welded = TRUE - use_power = FALSE - /obj/machinery/power/emitter/welded/Initialize() welded = TRUE return ..() diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index d3e7a31d4cb9..9a965e4f85e3 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -165,12 +165,6 @@ field_generator power level display if(!anchored) step(src, get_dir(M, src)) -/obj/machinery/field/generator/blob_act(obj/structure/blob/B) - if(active) - return 0 - else - ..() - /obj/machinery/field/generator/bullet_act(obj/projectile/Proj) if(Proj.flag != "bullet") power = min(power + Proj.damage, field_generator_max_power) diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm deleted file mode 100644 index aefc5249f54d..000000000000 --- a/code/modules/power/singularity/narsie.dm +++ /dev/null @@ -1,238 +0,0 @@ -/obj/singularity/narsie //Moving narsie to a child object of the singularity so it can be made to function differently. --NEO - name = "Nar'Sie's Avatar" - desc = "Your mind begins to bubble and ooze as it tries to comprehend what it sees." - icon = 'icons/obj/narsie_small.dmi' - icon_state = "narsie" - pixel_x = -89 - pixel_y = -85 - density = FALSE - current_size = 9 //It moves/eats like a max-size singulo, aside from range. --NEO - contained = 0 //Are we going to move around? - dissipate = 0 //Do we lose energy over time? - move_self = 1 //Do we move on our own? - grav_pull = 5 //How many tiles out do we pull? - consume_range = 6 //How many tiles out do we eat - light_power = 0.7 - light_range = 15 - light_color = COLOR_RED - gender = FEMALE - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF | FREEZE_PROOF - -/obj/singularity/narsie/large - name = "Nar'Sie" - icon = 'icons/obj/narsie.dmi' - // Pixel stuff centers Narsie. - pixel_x = -236 - pixel_y = -256 - current_size = 12 - grav_pull = 10 - consume_range = 12 //How many tiles out do we eat - -/obj/singularity/narsie/large/Initialize() - . = ..() - send_to_playing_players("NAR'SIE HAS RISEN") - sound_to_playing_players('sound/creatures/narsie_rises.ogg') - - var/area/A = get_area(src) - if(A) - var/mutable_appearance/alert_overlay = mutable_appearance('icons/effects/cult_effects.dmi', "ghostalertsie") - notify_ghosts("Nar'Sie has risen in \the [A.name]. Reach out to the Geometer to be given a new shell for your soul.", source = src, alert_overlay = alert_overlay, action=NOTIFY_ATTACK) - narsie_spawn_animation() - UnregisterSignal(src, COMSIG_ATOM_BSA_BEAM) //set up in /singularity/Initialize() - -/obj/singularity/narsie/large/cult // For the new cult ending, guaranteed to end the round within 3 minutes - var/list/souls_needed = list() - var/soul_goal = 0 - var/souls = 0 - var/resolved = FALSE - -/obj/singularity/narsie/large/cult/Initialize() - . = ..() - GLOB.cult_narsie = src - var/list/all_cults = list() - for(var/datum/antagonist/cult/C in GLOB.antagonists) - if(!C.owner) - continue - all_cults |= C.cult_team - for(var/datum/team/cult/T in all_cults) - deltimer(T.blood_target_reset_timer) - T.blood_target = src - var/datum/objective/eldergod/summon_objective = locate() in T.objectives - if(summon_objective) - summon_objective.summoned = TRUE - for(var/datum/mind/cult_mind in SSticker.mode.cult) - if(isliving(cult_mind.current)) - var/mob/living/L = cult_mind.current - L.narsie_act() - for(var/mob/living/player in GLOB.player_list) - if(player.stat != DEAD && player.loc && !iscultist(player) && !isanimal(player)) - souls_needed[player] = TRUE - soul_goal = round(1 + LAZYLEN(souls_needed) * 0.75) - INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(begin_the_end)) - -/proc/begin_the_end() - SSredbot.send_discord_message("admin","Nar'sie has been summoned.","round ending event") - sleep(50) - if(QDELETED(GLOB.cult_narsie)) // uno - priority_announce("Status report? We detected a anomaly, but it disappeared almost immediately.","Central Command Higher Dimensional Affairs", 'sound/misc/notice1.ogg') - GLOB.cult_narsie = null - sleep(20) - INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(cult_ending_helper), 2) - return - priority_announce("An acausal dimensional event has been detected in your sector. Event has been flagged EXTINCTION-CLASS. Directing all available assets toward simulating solutions. SOLUTION ETA: 60 SECONDS.","Central Command Higher Dimensional Affairs", 'sound/misc/airraid.ogg') - sleep(500) - if(QDELETED(GLOB.cult_narsie)) // dos - priority_announce("Simulations aborted, sensors report that the acasual event is normalizing. Good work, crew.","Central Command Higher Dimensional Affairs", 'sound/misc/notice1.ogg') - GLOB.cult_narsie = null - sleep(20) - INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(cult_ending_helper), 2) - return - priority_announce("Simulations on acausal dimensional event complete. Deploying solution package now. Deployment ETA: ONE MINUTE. ","Central Command Higher Dimensional Affairs") - sleep(50) - set_security_level("delta") - SSshuttle.lockdown = TRUE - sleep(600) - if(QDELETED(GLOB.cult_narsie)) // tres - priority_announce("Normalization detected! Abort the solution package!","Central Command Higher Dimensional Affairs", 'sound/misc/notice1.ogg') - GLOB.cult_narsie = null - sleep(20) - set_security_level("red") - SSshuttle.lockdown = FALSE - INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(cult_ending_helper), 2) - return - if(GLOB.cult_narsie.resolved == FALSE) - GLOB.cult_narsie.resolved = TRUE - sound_to_playing_players('sound/machines/alarm.ogg') - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(cult_ending_helper)), 120) - -/obj/singularity/narsie/large/cult/Destroy() - send_to_playing_players("\"[pick("Nooooo...", "Not die. How-", "Die. Mort-", "Sas tyen re-")]\"") - sound_to_playing_players('sound/magic/demon_dies.ogg', 50) - if(GLOB.cult_narsie == src) - GLOB.cult_narsie = null - var/list/all_cults = list() - for(var/datum/antagonist/cult/C in GLOB.antagonists) - if(!C.owner) - continue - all_cults |= C.cult_team - for(var/datum/team/cult/T in all_cults) - var/datum/objective/eldergod/summon_objective = locate() in T.objectives - if(summon_objective) - summon_objective.summoned = FALSE - summon_objective.killed = TRUE - return ..() - -/proc/ending_helper() - SSticker.force_ending = 1 - -/proc/cult_ending_helper(ending_type = 0) - if(ending_type == 2) //narsie fukkin died - Cinematic(CINEMATIC_CULT_FAIL,world,CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(ending_helper))) - else if(ending_type) //no explosion - Cinematic(CINEMATIC_CULT,world,CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(ending_helper))) - else // explosion - Cinematic(CINEMATIC_CULT_NUKE,world,CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(ending_helper))) - -//ATTACK GHOST IGNORING PARENT RETURN VALUE -/obj/singularity/narsie/large/attack_ghost(mob/dead/observer/user as mob) - makeNewConstruct(/mob/living/simple_animal/hostile/construct/harvester, user, cultoverride = TRUE, loc_override = src.loc) - -/obj/singularity/narsie/process() - eat() - if(!target || prob(5)) - pickcultist() - move() - if(prob(25)) - mezzer() - - -/obj/singularity/narsie/Bump(atom/A) - var/turf/T = get_turf(A) - if(T == loc) - T = get_step(A, A.dir) //please don't slam into a window like a bird, Nar'Sie - forceMove(T) - - -/obj/singularity/narsie/mezzer() - for(var/mob/living/carbon/M in viewers(consume_range, src)) - if(M.stat == CONSCIOUS) - if(!iscultist(M)) - to_chat(M, "You feel conscious thought crumble away in an instant as you gaze upon [src.name]...") - M.apply_effect(60, EFFECT_STUN) - - -/obj/singularity/narsie/consume(atom/A) - if(isturf(A)) - A.narsie_act() - - -/obj/singularity/narsie/ex_act() //No throwing bombs at her either. - return - - -/obj/singularity/narsie/proc/pickcultist() //Narsie rewards her cultists with being devoured first, then picks a ghost to follow. - var/list/cultists = list() - var/list/noncultists = list() - - for(var/mob/living/carbon/food in GLOB.alive_mob_list) //we don't care about constructs or cult-Ians or whatever. cult-monkeys are fair game i guess - var/turf/pos = get_turf(food) - if(!pos || (pos.virtual_z() != virtual_z())) - continue - - if(iscultist(food)) - cultists += food - else - noncultists += food - - if(cultists.len) //cultists get higher priority - acquire(pick(cultists)) - return - - if(noncultists.len) - acquire(pick(noncultists)) - return - - //no living humans, follow a ghost instead. - for(var/mob/dead/observer/ghost in GLOB.player_list) - var/turf/pos = get_turf(ghost) - if(!pos || (pos.virtual_z() != virtual_z())) - continue - cultists += ghost - if(cultists.len) - acquire(pick(cultists)) - return - - -/obj/singularity/narsie/proc/acquire(atom/food) - if(food == target) - return - to_chat(target, "NAR'SIE HAS LOST INTEREST IN YOU.") - target = food - if(ishuman(target)) - to_chat(target, "NAR'SIE HUNGERS FOR YOUR SOUL.") - else - to_chat(target, "NAR'SIE HAS CHOSEN YOU TO LEAD HER TO HER NEXT MEAL.") - -//Wizard narsie -/obj/singularity/narsie/wizard - grav_pull = 0 - -/obj/singularity/narsie/wizard/eat() -// if(defer_powernet_rebuild != 2) -// defer_powernet_rebuild = 1 - for(var/atom/X in urange(consume_range,src,1)) - if(isturf(X) || ismovable(X)) - consume(X) -// if(defer_powernet_rebuild != 2) -// defer_powernet_rebuild = 0 - return - - -/obj/singularity/narsie/proc/narsie_spawn_animation() - setDir(SOUTH) - move_self = FALSE - flick("narsie_spawn_anim",src) - addtimer(CALLBACK(src, PROC_REF(narsie_spawn_animation_end)), 3.5 SECONDS) - -/obj/singularity/narsie/proc/narsie_spawn_animation_end() - move_self = TRUE diff --git a/code/modules/power/singularity/particle_accelerator/particle.dm b/code/modules/power/singularity/particle_accelerator/particle.dm index b593d3f546bb..ac0e59d7080b 100644 --- a/code/modules/power/singularity/particle_accelerator/particle.dm +++ b/code/modules/power/singularity/particle_accelerator/particle.dm @@ -41,10 +41,6 @@ else if(istype(A, /obj/singularity)) var/obj/singularity/S = A S.energy += energy - else if(istype(A, /obj/structure/blob)) - var/obj/structure/blob/B = A - B.take_damage(energy*0.6) - movement_range = 0 /obj/effect/accelerated_particle/proc/on_entered(datum/source, atom/A) SIGNAL_HANDLER diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm index ddcaf026a40e..0130297c87da 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_control.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm @@ -261,10 +261,6 @@ return ..() -/obj/machinery/particle_accelerator/control_box/blob_act(obj/structure/blob/B) - if(prob(50)) - qdel(src) - /obj/machinery/particle_accelerator/control_box/interact(mob/user) if(construction_state == PA_CONSTRUCTION_PANEL_OPEN) wires.interact(user) diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 875f9cd441f2..499a88b161f1 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -38,7 +38,7 @@ src.energy = starting_energy . = ..() START_PROCESSING(SSobj, src) - GLOB.poi_list |= src + SSpoints_of_interest.make_point_of_interest(src) GLOB.singularities |= src for(var/obj/machinery/power/singularity_beacon/singubeacon in GLOB.machines) if(singubeacon.active) @@ -53,7 +53,7 @@ /obj/singularity/Destroy() STOP_PROCESSING(SSobj, src) - GLOB.poi_list.Remove(src) + SSpoints_of_interest.remove_point_of_interest(src) GLOB.singularities.Remove(src) return ..() @@ -96,9 +96,6 @@ /obj/singularity/Process_Spacemove() //The singularity stops drifting for no man! return 0 -/obj/singularity/blob_act(obj/structure/blob/B) - return - /obj/singularity/attack_tk(mob/user) if(iscarbon(user)) var/mob/living/carbon/C = user diff --git a/code/modules/power/supermatter/cascade.dm b/code/modules/power/supermatter/cascade.dm index 52c36bf13c3d..9d388d8f0e04 100644 --- a/code/modules/power/supermatter/cascade.dm +++ b/code/modules/power/supermatter/cascade.dm @@ -69,14 +69,6 @@ qdel(rip_u) return -/turf/open/indestructible/supermatter_cascade/blob_act(obj/structure/blob/blob) - if(!blob || isspaceturf(loc)) //does nothing in space - return - playsound(src, 'sound/effects/supermatter.ogg', 50, TRUE) - blob.visible_message("\The [blob] strikes at \the [src] and rapidly flashes to ash.", - "You hear a loud crack as you are washed with a wave of heat.") - Consume(blob) - /turf/open/indestructible/supermatter_cascade/attack_paw(mob/user, list/modifiers) dust_mob(user, cause = "monkey attack") diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 5593744219d0..400366415d9a 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -275,7 +275,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) SSair.start_processing_machine(src, mapload) countdown = new(src) countdown.start() - GLOB.poi_list |= src + SSpoints_of_interest.make_point_of_interest(src) radio = new(src) radio.keyslot = new radio_key radio.listening = 0 @@ -293,7 +293,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) investigate_log("has been destroyed.", INVESTIGATE_SUPERMATTER) SSair.stop_processing_machine(src) QDEL_NULL(radio) - GLOB.poi_list -= src + SSpoints_of_interest.remove_point_of_interest(src) QDEL_NULL(countdown) if(is_main_engine && GLOB.main_supermatter_engine == src) GLOB.main_supermatter_engine = null @@ -748,19 +748,6 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) qdel(src) return gain -/obj/machinery/power/supermatter_crystal/blob_act(obj/structure/blob/B) - if(B && !isspaceturf(loc)) //does nothing in space - playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, TRUE) - damage += B.obj_integrity * 0.5 //take damage equal to 50% of remaining blob health before it tried to eat us - if(B.obj_integrity > 100) - B.visible_message("\The [B] strikes at \the [src] and flinches away!",\ - "You hear a loud crack as you are washed with a wave of heat.") - B.take_damage(100, BURN) - else - B.visible_message("\The [B] strikes at \the [src] and rapidly flashes to ash.",\ - "You hear a loud crack as you are washed with a wave of heat.") - Consume(B) - /obj/machinery/power/supermatter_crystal/attack_tk(mob/user) if(iscarbon(user)) var/mob/living/carbon/C = user @@ -817,7 +804,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) /obj/machinery/power/supermatter_crystal/attackby(obj/item/W, mob/living/user, params) if(!istype(W) || (W.item_flags & ABSTRACT) || !istype(user)) return - if(istype(W, /obj/item/melee/roastingstick)) + if(istype(W, /obj/item/roastingstick)) return ..() if(istype(W, /obj/item/clothing/mask/cigarette)) var/obj/item/clothing/mask/cigarette/cig = W diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index fbece73764a4..d4a6f71cca4d 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -151,7 +151,7 @@ /obj/singularity/energy_ball/orbit(obj/singularity/energy_ball/target) if (istype(target)) target.orbiting_balls += src - GLOB.poi_list -= src + SSpoints_of_interest.remove_point_of_interest(src) target.dissipate_strength = target.orbiting_balls.len . = ..() @@ -280,12 +280,6 @@ else if(closest_type >= BLOB) continue - else if(istype(A, /obj/structure/blob)) - var/obj/structure/blob/B = A - if(!(B.obj_flags & BEING_SHOCKED)) - closest_type = BLOB - closest_atom = A - else if(closest_type >= STRUCTURE) continue diff --git a/code/modules/projectiles/ammunition/_firing.dm b/code/modules/projectiles/ammunition/_firing.dm index 93fa4208d571..bdc5254f13c9 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 0f37b5426d2d..e8cb64a673d2 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/revolver.dm b/code/modules/projectiles/ammunition/ballistic/revolver.dm index e235e00b98f6..8705a932b392 100644 --- a/code/modules/projectiles/ammunition/ballistic/revolver.dm +++ b/code/modules/projectiles/ammunition/ballistic/revolver.dm @@ -88,14 +88,14 @@ projectile_type = /obj/projectile/bullet/c38/dumdum /obj/item/ammo_casing/c38/hotshot - name = ".38 hot shot bullet casing" - desc = "A .38 hot shot bullet casing." + name = ".38 hearth bullet casing" + desc = "A .38 hearth bullet casing." bullet_skin = "incen" projectile_type = /obj/projectile/bullet/c38/hotshot /obj/item/ammo_casing/c38/iceblox - name = ".38 iceblox bullet casing" - desc = "A .38 iceblox bullet casing." + name = ".38 chilled bullet casing" + desc = "A .38 chilled bullet casing." bullet_skin = "surplus" projectile_type = /obj/projectile/bullet/c38/iceblox diff --git a/code/modules/projectiles/ammunition/ballistic/rifle.dm b/code/modules/projectiles/ammunition/ballistic/rifle.dm index b3875292fba2..9f71e2973848 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 bullet casing" - desc = "A 5.56x39mm 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) @@ -74,22 +74,6 @@ projectile_type = /obj/projectile/bullet/a762_40 bullet_per_box = 80 -// .300 Blackout (Polymer Survivor Rifle) - -/obj/item/ammo_casing/aac_300blk - name = ".300 BLK bullet casing" - desc = "A .300 Blackout bullet casing." - icon_state = "rifle-steel" - caliber = ".300 BLK" - projectile_type = /obj/projectile/bullet/aac_300blk - bullet_per_box = 20 - -/obj/item/ammo_casing/aac_300blk/recycled - name = "recycled .300 BLK bullet casing" - desc = "A recycled .300 Blackout bullet casing." - caliber = ".300 BLK" - projectile_type = /obj/projectile/bullet/aac_300blk - //.308 (M514 EBR & CM-GAL-S) /obj/item/ammo_casing/a308 @@ -101,9 +85,16 @@ 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 bullet_per_box = 100 + +/obj/item/ammo_casing/a65clip + name = "6.5x57mm CLIP bullet casing" + desc = "A 6.5x57mm CLIP bullet casing." + icon_state = "big-brass" + caliber = "6.5CLIP" + projectile_type = /obj/projectile/bullet/a65clip diff --git a/code/modules/projectiles/ammunition/ballistic/shotgun.dm b/code/modules/projectiles/ammunition/ballistic/shotgun.dm index 9f6a8c169ecd..24854030c041 100644 --- a/code/modules/projectiles/ammunition/ballistic/shotgun.dm +++ b/code/modules/projectiles/ammunition/ballistic/shotgun.dm @@ -46,6 +46,13 @@ icon_state = "incendiary" projectile_type = /obj/projectile/bullet/incendiary/shotgun +/obj/item/ammo_casing/shotgun/blank + name = "blank shell" + desc = "A shell packed with powder but no projectile." + icon_state = "blank" + projectile_type = /obj/projectile/bullet/pellet/blank + custom_materials = list(/datum/material/iron=250) + /obj/item/ammo_casing/shotgun/improvised name = "improvised shell" desc = "An extremely weak shotgun shell with multiple small pellets made out of metal shards." diff --git a/code/modules/projectiles/ammunition/ballistic/smg.dm b/code/modules/projectiles/ammunition/ballistic/smg.dm index 74bb35b1ec2e..39086b8cc66f 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/caseless/rocket.dm b/code/modules/projectiles/ammunition/caseless/rocket.dm index 9ebb6d88f2d7..3eccf800defe 100644 --- a/code/modules/projectiles/ammunition/caseless/rocket.dm +++ b/code/modules/projectiles/ammunition/caseless/rocket.dm @@ -8,7 +8,7 @@ /obj/item/ammo_casing/caseless/rocket/hedp name = "\improper PM-9HEDP" - desc = "An 84mm High Explosive Dual Purpose rocket. Pointy end toward mechs." + desc = "An 84mm High Explosive Dual Purpose rocket. Pointy end toward armor." caliber = "84mm" icon_state = "84mm-hedp" projectile_type = /obj/projectile/bullet/a84mm diff --git a/code/modules/projectiles/ammunition/energy/laser.dm b/code/modules/projectiles/ammunition/energy/laser.dm index d0334e8d8acc..674d1e4514d8 100644 --- a/code/modules/projectiles/ammunition/energy/laser.dm +++ b/code/modules/projectiles/ammunition/energy/laser.dm @@ -169,6 +169,11 @@ impact_light_range = 2.5 impact_light_color_override = COLOR_CYAN +/obj/projectile/beam/hitscan/disabler/heavy + damage = 30 + armour_penetration = -10 + + /obj/item/ammo_casing/energy/laser/minigun select_name = "kill" projectile_type = /obj/projectile/beam/weak/penetrator diff --git a/code/modules/projectiles/ammunition/energy/lmg.dm b/code/modules/projectiles/ammunition/energy/lmg.dm index 434b29a1d3f2..632fb35785cd 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/ammunition/energy/plasma.dm b/code/modules/projectiles/ammunition/energy/plasma.dm index 00de4a90ffee..d593086157fd 100644 --- a/code/modules/projectiles/ammunition/energy/plasma.dm +++ b/code/modules/projectiles/ammunition/energy/plasma.dm @@ -2,10 +2,9 @@ projectile_type = /obj/projectile/plasma select_name = "plasma burst" fire_sound = 'sound/weapons/plasma_cutter.ogg' - delay = 15 - e_cost = 25 + delay = 30 + e_cost = 100 /obj/item/ammo_casing/energy/plasma/adv projectile_type = /obj/projectile/plasma/adv - delay = 10 - e_cost = 10 + delay = 20 diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm index 3b1bdbc6eb1c..7f92dfad16a6 100644 --- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm +++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm @@ -125,6 +125,26 @@ to_chat(user, "You load [num_loaded] cartridge\s into \the [src]!") return num_loaded +/obj/item/ammo_box/afterattack(atom/target, mob/user, proximity_flag, click_parameters) + . = ..() + var/num_loaded = 0 + var/obj/item/storage/belt/bandolier/to_load + if(istype(target,/obj/item/storage/belt/bandolier)) + to_load = target + var/datum/component/storage/storage_to_load = to_load.GetComponent(/datum/component/storage) + for(var/obj/item/ammo_casing/casing_to_insert in stored_ammo) + if(!((to_load.contents.len >= storage_to_load.get_max_volume()) || do_after(user, 0.5 SECONDS, src))) + break + if(!storage_to_load.can_be_inserted(casing_to_insert,TRUE,user)) + break + storage_to_load.handle_item_insertion(casing_to_insert,TRUE,user) + stored_ammo -= casing_to_insert + playsound(get_turf(src), 'sound/weapons/gun/general/mag_bullet_insert.ogg', 60, TRUE) + num_loaded++ + update_ammo_count() + if(num_loaded) + to_chat(user, "You load [num_loaded] cartridge\s into \the [to_load]!") + return /obj/item/ammo_box/attack_self(mob/user) var/obj/item/ammo_casing/A = get_round() if(!A) diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm index 955856704ac6..5b78f1fc93a1 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 @@ -55,24 +55,24 @@ desc = "A box of top grade .45-70 ammo. These rounds do significant damage with average performance against armor." icon_state = "4570" ammo_type = /obj/item/ammo_casing/a4570 - max_ammo = 12 + max_ammo = 18 /obj/item/ammo_box/a4570/match name = "ammo box (.45-70 match)" - desc = "A 12-round ammo box for .45-70 revolvers. These match rounds travel faster, perform better against armor, and can ricochet off targets." + desc = "A 18-round ammo box for .45-70 revolvers. These match rounds travel faster, perform better against armor, and can ricochet off targets." icon_state = "4570-match" ammo_type = /obj/item/ammo_casing/a4570/match /obj/item/ammo_box/a4570/hp name = "ammo box (.45-70 hollow point)" - desc = "A 12-round ammo box for .45-70 revolvers. These hollow point rounds do legendary damage against soft targets, but are nearly ineffective against armored ones." + desc = "A 18-round ammo box for .45-70 revolvers. These hollow point rounds do legendary damage against soft targets, but are nearly ineffective against armored ones." icon_state = "4570-hp" ammo_type = /obj/item/ammo_casing/a4570/hp /obj/item/ammo_box/a4570/explosive name = "ammo box (.45-70 explosive)" - desc = "A 12-round ammo box for .45-70 revolvers. These explosive rounds contain a small explosive charge that detonates on impact, creating large wounds and potentially removing limbs." + desc = "A 18-round ammo box for .45-70 revolvers. These explosive rounds contain a small explosive charge that detonates on impact, creating large wounds and potentially removing limbs." icon_state = "4570-explosive" ammo_type = /obj/item/ammo_casing/a4570/explosive @@ -113,13 +113,13 @@ ammo_type = /obj/item/ammo_casing/c38/dumdum /obj/item/ammo_box/c38/hotshot - name = "speed loader (.38 hot shot)" - desc = "A 6-round speed loader for quickly reloading .38 special revolvers. These hot shot bullets contain an incendiary payload that set targets alight." + name = "speed loader (.38 hearth)" + desc = "A 6-round speed loader for quickly reloading .38 special revolvers. These hearthwine bullets contain an incendiary payload that set targets alight." ammo_type = /obj/item/ammo_casing/c38/hotshot /obj/item/ammo_box/c38/iceblox - name = "speed loader (.38 iceblox)" - desc = "A 6-round speed loader for quickly reloading .38 special revolvers. These iceblox bullets contain a cryogenic payload that chills targets." + name = "speed loader (.38 chilled)" + desc = "A 6-round speed loader for quickly reloading .38 special revolvers. These icewine bullets contain a cryogenic payload that chills targets." ammo_type = /obj/item/ammo_casing/c38/iceblox /obj/item/ammo_box/c38/empty @@ -136,6 +136,9 @@ multiple_sprites = AMMO_BOX_PER_BULLET instant_load = TRUE +/obj/item/ammo_box/a858/empty + start_empty = TRUE + // .308 Stripper Clip (Vickland) /obj/item/ammo_box/vickland_a308 @@ -149,6 +152,8 @@ w_class = WEIGHT_CLASS_TINY instant_load = TRUE +/obj/item/ammo_box/vickland_a308/empty + start_empty = TRUE // .300 Magnum Stripper Clip (Scout) @@ -164,19 +169,22 @@ /obj/item/ammo_box/a300/empty start_empty = TRUE -// .300 Blackout Stripper Clip (Polymer Survivor Rifle) +// 7.62 Stripper Clip (Polymer Survivor Rifle) -/obj/item/ammo_box/aac_300blk_stripper - name = "stripper clip (.300 BLK)" +/obj/item/ammo_box/a762_stripper + name = "stripper clip (7.62)" desc = "A 5-round stripper clip for makeshift bolt-action rifles. These rounds do good damage with good armor penetration." - icon_state = "300m" - ammo_type = /obj/item/ammo_casing/aac_300blk - caliber = ".300 BLK" + icon_state = "stripper_308-5" + base_icon_state = "stripper_308" + ammo_type = /obj/item/ammo_casing/a762_40 + caliber = "7.62x40mm" max_ammo = 5 multiple_sprites = AMMO_BOX_PER_BULLET w_class = WEIGHT_CLASS_TINY instant_load = TRUE +/obj/item/ammo_box/a762_stripper/empty + start_empty = TRUE // Ferromagnetic Pellet Speed Loader (Claris) /obj/item/ammo_box/amagpellet_claris @@ -205,6 +213,18 @@ icon_state = "38box-surplus" ammo_type = /obj/item/ammo_casing/c38/surplus +/obj/item/ammo_box/c38_box/hotshot + name = "ammo box (.38 hearth)" + desc = "An unorthodox .38 Special cartridge infused with hearthwine. Catches the target on fire." + icon_state = "38hotshot" + ammo_type = /obj/item/ammo_casing/c38/hotshot + +/obj/item/ammo_box/c38_box/iceblox + name = "ammo box (.38 chilled)" + desc = "An unorthodox .38 Special cartridge infused with icewine. Chills the target, slowing them down." + icon_state = "38iceblox" + ammo_type = /obj/item/ammo_casing/c38/iceblox + /obj/item/ammo_box/a12g name = "ammo box (12g buckshot)" desc = "A box of 12-gauge buckshot shells, devastating at close range." @@ -230,6 +250,12 @@ icon_state = "12gbox-rubbershot" ammo_type = /obj/item/ammo_casing/shotgun/rubbershot +/obj/item/ammo_box/a12g/blanks + name = "ammo box (12g blanks)" + desc = "A box of 12-gauge blank shells, designed for training." + icon_state ="12gbox-slug" + ammo_type = /obj/item/ammo_casing/shotgun/blank + /obj/item/ammo_box/c9mm name = "ammo box (9mm)" desc = "A box of standard 9mm ammo." @@ -284,7 +310,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)" @@ -390,6 +416,13 @@ /obj/item/ammo_box/a762_40/inteq icon_state = "a762_40box_big_inteq" +/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 + /obj/item/ammo_box/a308 name = "ammo box (.308)" icon_state = "a308box" @@ -435,6 +468,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." @@ -447,7 +488,7 @@ desc = "A box of standard 8x50mm ammo." icon_state = "8x50mmbox" ammo_type = /obj/item/ammo_casing/a8_50r - max_ammo = 20 + max_ammo = 25 /obj/item/ammo_box/ferropelletbox name = "ammo box (ferromagnetic pellets)" @@ -484,6 +525,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." @@ -504,3 +555,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 fdf1b7985b29..e69de29bb2d1 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 8a1792485715..90d2c7e4546e 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 9224c0db84af..ad15e7ecea2a 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,21 +73,9 @@ 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/gal - name = "\improper GAL Magazine (.308)" - desc = "A standard 10-round magazine for GAL platform DMRs. These rounds do good damage with significant armor penetration." +/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." icon_state = "gal_mag-1" base_icon_state = "gal_mag" ammo_type = /obj/item/ammo_casing/a308 @@ -95,13 +83,13 @@ max_ammo = 10 multiple_sprites = AMMO_BOX_FULL_EMPTY -/obj/item/ammo_box/magazine/p16 - 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." +/obj/item/ammo_box/magazine/p16 //repath to /obj/item/ammo_box/magazine/generic_556 sometime + 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 3c9aaad1f6f6..9803b0feb084 100644 --- a/code/modules/projectiles/boxes_magazines/external/shotgun.dm +++ b/code/modules/projectiles/boxes_magazines/external/shotgun.dm @@ -1,43 +1,4 @@ -/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_mag +/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." icon_state = "cm15_mag-1" diff --git a/code/modules/projectiles/boxes_magazines/external/smg.dm b/code/modules/projectiles/boxes_magazines/external/smg.dm index 4c464c0433d0..fdd4ab2d2b45 100644 --- a/code/modules/projectiles/boxes_magazines/external/smg.dm +++ b/code/modules/projectiles/boxes_magazines/external/smg.dm @@ -28,19 +28,6 @@ base_icon_state = "46x30mmtI" ammo_type = /obj/item/ammo_casing/c46x30mm/inc -/obj/item/ammo_box/magazine/uzim9mm - name = "long SMG magazine (9mm)" - desc = "A thin, 32-round magazine for the Uzi SMG. These rounds do okay damage, but struggle against armor." - icon_state = "uzi9mm-32" - base_icon_state = "uzi9mm" - ammo_type = /obj/item/ammo_casing/c9mm - caliber = "9mm" - max_ammo = 32 - -/obj/item/ammo_box/magazine/uzim9mm/update_icon_state() - . = ..() - icon_state = "[base_icon_state]-[round(ammo_count(),4)]" - /obj/item/ammo_box/magazine/smgm9mm name = "SMG magazine (9mm)" desc = "A 30-round magazine for 9mm submachine guns. These rounds do okay damage, but struggle against armor." @@ -87,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" @@ -96,17 +83,17 @@ 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 name = "stick magazine (.45)" desc = "A 28-round stick magazine for the toploading Firestorm submachine gun. These rounds do moderate damage, but struggle against armor." - icon_state = "firestorm_mag" + icon_state = "firestorm_mag-1" base_icon_state = "firestorm_mag" ammo_type = /obj/item/ammo_casing/c45 caliber = ".45" @@ -120,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 608faa67a974..c3cbecfcc48c 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 658eef2d781c..a4282a40a9e2 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/rifle.dm b/code/modules/projectiles/boxes_magazines/internal/rifle.dm index 4f2f8c537958..e179fbfa903c 100644 --- a/code/modules/projectiles/boxes_magazines/internal/rifle.dm +++ b/code/modules/projectiles/boxes_magazines/internal/rifle.dm @@ -22,8 +22,8 @@ /obj/item/ammo_box/magazine/internal/boltaction/polymer name = "polymer bolt action rifle internal magazine" - ammo_type = /obj/item/ammo_casing/aac_300blk - caliber = ".300 BLK" + ammo_type = /obj/item/ammo_casing/a762_40 + caliber = "7.62x40mm" max_ammo = 5 /obj/item/ammo_box/magazine/internal/vickland diff --git a/code/modules/projectiles/boxes_magazines/internal/shotgun.dm b/code/modules/projectiles/boxes_magazines/internal/shotgun.dm index 29717fd9408b..7485c591809d 100644 --- a/code/modules/projectiles/boxes_magazines/internal/shotgun.dm +++ b/code/modules/projectiles/boxes_magazines/internal/shotgun.dm @@ -52,6 +52,18 @@ caliber = ".38" max_ammo = 12 +/obj/item/ammo_box/magazine/internal/shot/winchester/absolution + name = "absolution internal magazine" + ammo_type = /obj/item/ammo_casing/a357 + caliber = ".357" + max_ammo = 8 + +/obj/item/ammo_box/magazine/internal/shot/winchester/conflagration + name = "conflagration internal magazine" + ammo_type = /obj/item/ammo_casing/shotgun/buckshot + caliber = "12ga" + max_ammo = 5 + /obj/item/ammo_box/magazine/internal/shot/beacon name = "beacon internal magazine" ammo_type = /obj/item/ammo_casing/a4570 diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 707f4805afe3..f848018a6115 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? @@ -70,6 +70,9 @@ var/casing_ejector = TRUE ///Whether the gun has an internal magazine or a detatchable one. Overridden by BOLT_TYPE_NO_BOLT. var/internal_magazine = FALSE + ///Whether the gun *can* be reloaded + var/sealed_magazine = FALSE + ///Phrasing of the magazine in examine and notification messages; ex: magazine, box, etx var/magazine_wording = "magazine" @@ -207,6 +210,12 @@ ///this is how much deviation the gun recoil can have, recoil pushes the screen towards the reverse angle you shot + some deviation which this is the max. var/recoil_deviation = 22.5 + ///Used if the guns recoil is lower then the min, it clamps the highest recoil + var/min_recoil = 0 + + var/gunslinger_recoil_bonus = 0 + var/gunslinger_spread_bonus = 0 + /// how many shots per burst, Ex: most machine pistols, M90, some ARs are 3rnd burst, while others like the GAR and laser minigun are 2 round burst. var/burst_size = 3 ///The rate of fire when firing in a burst. Not the delay between bursts @@ -232,6 +241,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 @@ -323,6 +334,8 @@ muzzle_flash = new(src, muzzleflash_iconstate) build_zooming() build_firemodes() + if(sawn_off) + sawoff(forced = TRUE) /obj/item/gun/ComponentInitialize() . = ..() @@ -354,9 +367,6 @@ wielded_fully = TRUE return TRUE -/obj/item/gun/proc/is_wielded() - return wielded - /// triggered on unwield of two handed item /obj/item/gun/proc/on_unwield(obj/item/source, mob/user) wielded = FALSE @@ -364,6 +374,9 @@ zoom(user, forced_zoom = FALSE) user.remove_movespeed_modifier(/datum/movespeed_modifier/gun) +/obj/item/gun/proc/is_wielded() + return wielded + /obj/item/gun/Destroy() if(chambered) //Not all guns are chambered (EMP'ed energy guns etc) QDEL_NULL(chambered) @@ -686,8 +699,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)) @@ -723,6 +736,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) @@ -773,7 +791,7 @@ if(chambered && chambered.BB && can_trigger_gun(user)) chambered.BB.damage *= 3 //Check is here for safeties and such, brain will be removed after - if(!pre_fire(target, user, TRUE, params, BODY_ZONE_HEAD)) + if(!pre_fire(target, user, TRUE, FALSE, params, BODY_ZONE_HEAD)) // We're already in handle_suicide, hence the 4th parameter needs to be FALSE to avoid circular logic. Also, BODY_ZONE_HEAD because we want to damage the head as a whole. return var/obj/item/organ/brain/brain_to_blast = target.getorganslot(ORGAN_SLOT_BRAIN) @@ -802,61 +820,42 @@ /obj/item/gun/proc/before_firing(atom/target,mob/user) return -// We do it like this in case theres some specific gun behavior for adjusting recoil, like bipods or folded stocks /obj/item/gun/proc/calculate_recoil(mob/user, recoil_bonus = 0) - return recoil_bonus + if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) + recoil_bonus += gunslinger_recoil_bonus + return clamp(recoil_bonus, min_recoil , INFINITY) -// We do it like this in case theres some specific gun behavior for adjusting spread, like bipods or folded stocks /obj/item/gun/proc/calculate_spread(mob/user, bonus_spread) - ///our final spread value - var/sprd = 0 - ///our randomized value after checking if we are wielded or not + var/final_spread = 0 var/randomized_gun_spread = 0 - ///bonus - var/randomized_bonus_spread - // do we have poor aim - var/poor_aim = FALSE + var/randomized_bonus_spread = 0 - //do we have bonus_spread ? If so, set sprd to it because it means a subtype's proc messed with it - sprd += bonus_spread + final_spread += bonus_spread - //reset bonus_spread for poor aim... - bonus_spread = 0 + if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) + randomized_bonus_spread += rand(0, gunslinger_spread_bonus) - // if we have poor aim, we fuck the shooter over if(HAS_TRAIT(user, TRAIT_POOR_AIM)) - bonus_spread += 25 - poor_aim = TRUE - // then we randomize the bonus spread - randomized_bonus_spread = rand(poor_aim ? 10 : 0, bonus_spread) //poor aim is no longer just a nusiance - - //then, we mutiply previous bonus spread as it means dual wielding usually, it also means poor aim is also even more severe - randomized_bonus_spread *= DUALWIELD_PENALTY_EXTRA_MULTIPLIER + randomized_bonus_spread += rand(0, 25) - // we will then calculate gun spread depending on if we are fully wielding (after do_after) the gun or not + //We will then calculate gun spread depending on if we are fully wielding (after do_after) the gun or not randomized_gun_spread = rand(0, wielded_fully ? spread : spread_unwielded) - //finally, we put it all together including if sprd has a value - sprd += randomized_gun_spread + randomized_bonus_spread + final_spread += randomized_gun_spread + randomized_bonus_spread - //clamp it down to avoid guns with negative spread to have worse recoil... - sprd = clamp(sprd, 0, INFINITY) + //Clamp it down to avoid guns with negative spread to have worse recoil... + final_spread = clamp(final_spread, 0, INFINITY) - // im not sure what this does, i beleive its meant to make it so bullet spread goes in the opposite direction? get back to me on this - update,i have commented it out, however it appears be dapening spread. weird. - //sprd *= (rand() - 0.5) - - //coin flip if we mutiply output by -1 so spread isn't JUST to the right + //So spread isn't JUST to the right if(prob(50)) - sprd *= -1 + final_spread *= -1 - // then we round it up and send it! - sprd = round(sprd) + final_spread = round(final_spread) - return sprd + return final_spread /obj/item/gun/proc/simulate_recoil(mob/living/user, recoil_bonus = 0, firing_angle) var/total_recoil = calculate_recoil(user, recoil_bonus) - total_recoil = clamp(total_recoil, 0 , INFINITY) var/actual_angle = firing_angle + rand(-recoil_deviation, recoil_deviation) + 180 if(actual_angle > 360) @@ -961,6 +960,48 @@ 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 + 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" @@ -1073,3 +1114,46 @@ var/safety_prefix = "[our_gun.adjust_fire_select_icon_state_on_safety ? "[our_gun.safety ? "safety_" : ""]" : ""]" button_icon_state = "[safety_prefix][our_gun.fire_select_icon_state_prefix][current_firemode]" return ..() + +GLOBAL_LIST_INIT(gun_saw_types, typecacheof(list( + /obj/item/gun/energy/plasmacutter, + /obj/item/melee/transforming/energy, + ))) + +///Handles all the logic of sawing off guns, +/obj/item/gun/proc/try_sawoff(mob/user, obj/item/saw) + if(!saw.get_sharpness() || !is_type_in_typecache(saw, GLOB.gun_saw_types) && saw.tool_behaviour != TOOL_SAW) //needs to be sharp. Otherwise turned off eswords can cut this. + return + if(sawn_off) + to_chat(user, span_warning("\The [src] is already shortened!")) + return + user.changeNext_move(CLICK_CD_MELEE) + user.visible_message(span_notice("[user] begins to shorten \the [src]."), span_notice("You begin to shorten \the [src]...")) + + //if there's any live ammo inside the gun, makes it go off + if(blow_up(user)) + user.visible_message(span_danger("\The [src] goes off!"), span_danger("\The [src] goes off in your face!")) + return + + if(do_after(user, 30, target = src)) + user.visible_message(span_notice("[user] shortens \the [src]!"), span_notice("You shorten \the [src].")) + sawoff(user, saw) + +///Used on init or try_sawoff +/obj/item/gun/proc/sawoff(forced = FALSE) + if(sawn_off && !forced) + return + name = "sawn-off [src.name]" + desc = sawn_desc + w_class = WEIGHT_CLASS_NORMAL + item_state = "gun" + slot_flags &= ~ITEM_SLOT_BACK //you can't sling it on your back + slot_flags |= ITEM_SLOT_BELT //but you can wear it on your belt (poorly concealed under a trenchcoat, ideally) + recoil = SAWN_OFF_RECOIL + sawn_off = TRUE + update_appearance() + return TRUE + +///used for sawing guns, causes the gun to fire without the input of the user +/obj/item/gun/proc/blow_up(mob/user) + return diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index 7c75d8fe9f56..f64586871ccf 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -13,6 +13,8 @@ has_safety = TRUE safety = TRUE + min_recoil = 0.1 + valid_attachments = list( /obj/item/attachment/silencer, /obj/item/attachment/laser_sight, @@ -59,13 +61,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,12 +79,16 @@ 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" + if(chambered && mag_display_ammo) + . += "[icon_state]_chambered" /obj/item/gun/ballistic/process_chamber(empty_chamber = TRUE, from_firing = TRUE, chamber_next_round = TRUE, atom/shooter) if(!semi_auto && from_firing) @@ -107,7 +114,7 @@ chambered.forceMove(src) ///updates a bunch of racking related stuff and also handles the sound effects and the like -/obj/item/gun/ballistic/proc/rack(mob/user = null) +/obj/item/gun/ballistic/proc/rack(mob/user = null, chamber_new_round = TRUE) if (bolt_type == BOLT_TYPE_NO_BOLT) //If there's no bolt, nothing to rack return if (bolt_type == BOLT_TYPE_OPEN) @@ -118,21 +125,22 @@ bolt_locked = FALSE if (user) to_chat(user, "You rack the [bolt_wording] of \the [src].") - process_chamber(!chambered, FALSE, shooter = user) - if (bolt_type == BOLT_TYPE_LOCKING && !chambered) + process_chamber(!chambered, FALSE, chamber_new_round, user) + if ((bolt_type == BOLT_TYPE_LOCKING && !chambered) || bolt_type == BOLT_TYPE_CLIP) bolt_locked = TRUE playsound(src, lock_back_sound, lock_back_sound_volume, lock_back_sound_vary) else playsound(src, rack_sound, rack_sound_volume, rack_sound_vary) - update_appearance() + SEND_SIGNAL(src, COMSIG_UPDATE_AMMO_HUD) ///Drops the bolt from a locked position -/obj/item/gun/ballistic/proc/drop_bolt(mob/user = null) +/obj/item/gun/ballistic/proc/drop_bolt(mob/user = null, chamber_new_round = TRUE) playsound(src, bolt_drop_sound, bolt_drop_sound_volume, FALSE) if (user) to_chat(user, "You drop the [bolt_wording] of \the [src].") - chamber_round() + if(chamber_new_round) + chamber_round() bolt_locked = FALSE update_appearance() @@ -197,6 +205,9 @@ . = ..() if (.) return + if(sealed_magazine) + to_chat(user, span_warning("The magazine on [src] is sealed and cannot be reloaded!")) + return if (!internal_magazine && istype(A, /obj/item/ammo_box/magazine)) var/obj/item/ammo_box/magazine/AM = A if (!magazine) @@ -222,7 +233,7 @@ update_appearance() return if (can_be_sawn_off) - if (sawoff(user, A)) + if (try_sawoff(user, A)) return return FALSE @@ -246,6 +257,8 @@ if (last_shot_succeeded && bolt_type == BOLT_TYPE_LOCKING) bolt_locked = TRUE update_appearance() + if (last_shot_succeeded && bolt_type == BOLT_TYPE_CLIP) + update_appearance() /obj/item/gun/ballistic/pre_fire(atom/target, mob/living/user, message = TRUE, flag, params = null, zone_override = "", bonus_spread = 0, dual_wielded_gun = FALSE) prefire_empty_checks() @@ -281,13 +294,19 @@ else to_chat(user, "[src] is empty!") return - if(bolt_type == BOLT_TYPE_LOCKING && bolt_locked) + if((bolt_type == BOLT_TYPE_LOCKING || bolt_type == BOLT_TYPE_CLIP) && bolt_locked) drop_bolt(user) return + if (recent_rack > world.time) return recent_rack = world.time + rack_delay + if(bolt_type == BOLT_TYPE_CLIP) + rack(user, FALSE) + update_appearance() + return rack(user) + update_appearance() return @@ -299,7 +318,7 @@ . += "It does not seem to have a round chambered." if (bolt_locked) . += "The [bolt_wording] is locked back and needs to be released before firing." - . += "You can [bolt_wording] [src] by pressing the unqiue action key. By default, this is space" + . += "You can [bolt_wording] [src] by pressing the unique action key. By default, this is space" ///Gets the number of bullets in the gun /obj/item/gun/ballistic/proc/get_ammo(countchambered = TRUE) @@ -320,45 +339,14 @@ rounds.Add(magazine.ammo_list(drop_all)) return rounds -GLOBAL_LIST_INIT(gun_saw_types, typecacheof(list( - /obj/item/gun/energy/plasmacutter, - /obj/item/melee/transforming/energy, - ))) - -///Handles all the logic of sawing off guns, -/obj/item/gun/ballistic/proc/sawoff(mob/user, obj/item/saw) - if(!saw.get_sharpness() || !is_type_in_typecache(saw, GLOB.gun_saw_types) && saw.tool_behaviour != TOOL_SAW) //needs to be sharp. Otherwise turned off eswords can cut this. - return - if(sawn_off) - to_chat(user, "\The [src] is already shortened!") - return - user.changeNext_move(CLICK_CD_MELEE) - user.visible_message("[user] begins to shorten \the [src].", "You begin to shorten \the [src]...") - - //if there's any live ammo inside the gun, makes it go off - if(blow_up(user)) - user.visible_message("\The [src] goes off!", "\The [src] goes off in your face!") - return - - if(do_after(user, 30, target = src)) - if(sawn_off) - return - user.visible_message("[user] shortens \the [src]!", "You shorten \the [src].") - name = "sawn-off [src.name]" - desc = sawn_desc - w_class = WEIGHT_CLASS_NORMAL - item_state = "gun" - slot_flags &= ~ITEM_SLOT_BACK //you can't sling it on your back - slot_flags |= ITEM_SLOT_BELT //but you can wear it on your belt (poorly concealed under a trenchcoat, ideally) - recoil = SAWN_OFF_RECOIL - sawn_off = TRUE - update_appearance() - return TRUE - -///used for sawing guns, causes the gun to fire without the input of the user -/obj/item/gun/ballistic/proc/blow_up(mob/user) +/obj/item/gun/ballistic/blow_up(mob/user) . = FALSE for(var/obj/item/ammo_casing/AC in magazine.stored_ammo) 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 ce500cda930b..42cb637a557f 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 @@ -14,23 +16,8 @@ rack_sound = 'sound/weapons/gun/rifle/ar_cock.ogg' spread_unwielded = 20 -/obj/item/gun/ballistic/automatic/assault/calculate_recoil(mob/user, recoil_bonus = 0) - var/gunslinger_bonus = 2 - var/total_recoil = recoil_bonus - - if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger penalty - total_recoil += gunslinger_bonus - - return ..(user, total_recoil) - -/obj/item/gun/ballistic/automatic/assault/calculate_spread(mob/user, bonus_spread) - var/gunslinger_bonus = 16 - var/total_spread = bonus_spread - - if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger penalty - total_spread += gunslinger_bonus - - return ..(user, total_spread) + gunslinger_recoil_bonus = 2 + gunslinger_spread_bonus = 16 /obj/item/gun/ballistic/automatic/assault/skm name = "\improper SKM-24" @@ -112,7 +99,7 @@ /obj/item/gun/ballistic/automatic/assault/p16/no_mag spawnwithmagazine = FALSE -/obj/item/gun/ballistic/automatic/assault/p16/minutemen +/obj/item/gun/ballistic/automatic/assault/cm82 name = "\improper CM-16" desc = "The standard-issue rifle of CLIP and an extensively modified reproduction of the P-16. Chambered in 5.56mm." icon = 'icons/obj/guns/manufacturer/clip_lanchester/48x32.dmi' @@ -156,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' @@ -262,8 +249,8 @@ secondary.pre_fire(target, user, message, flag, params, zone_override, bonus_spread) -/obj/item/gun/ballistic/automatic/powered/get_cell() - return cell +/obj/item/gun/ballistic/automatic/assault/e40/get_cell() + return secondary.get_cell() /obj/item/gun/ballistic/automatic/assault/e40/update_overlays() . = ..() diff --git a/code/modules/projectiles/guns/ballistic/automatic.dm b/code/modules/projectiles/guns/ballistic/automatic.dm index 769ea9e7f57e..6b1e30296d57 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 8a3e68b9a6ec..780b24dc80fb 100644 --- a/code/modules/projectiles/guns/ballistic/hmg.dm +++ b/code/modules/projectiles/guns/ballistic/hmg.dm @@ -18,6 +18,9 @@ recoil_unwielded = 4 wield_slowdown = 3 + gunslinger_recoil_bonus = 2 + gunslinger_spread_bonus = 20 + ///does this have a bipod? var/has_bipod = FALSE ///is the bipod deployed? @@ -41,7 +44,7 @@ /obj/item/gun/ballistic/automatic/hmg/Initialize() . = ..() - for(var/datum/action/item_action/deploy_bipod/action as anything in actions_types) + for(var/datum/action/item_action/deploy_bipod/action as anything in actions) if(!has_bipod) qdel(action) @@ -116,29 +119,6 @@ . = ..() retract_bipod(user=user) -/obj/item/gun/ballistic/automatic/hmg/calculate_recoil(mob/user, recoil_bonus = 0) - var/gunslinger_bonus = 2 - var/total_recoil = recoil_bonus - - if(bipod_deployed) - total_recoil += deploy_recoil_bonus - if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger penalty - total_recoil += gunslinger_bonus - - return ..(user, total_recoil) - -/obj/item/gun/ballistic/automatic/hmg/calculate_spread(mob/user, bonus_spread) - var/gunslinger_bonus = 20 - var/total_spread = bonus_spread - - if(bipod_deployed) - total_spread += deploy_spread_bonus - if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger penalty - total_spread += gunslinger_bonus - - return ..(user, total_spread) - - /obj/item/gun/ballistic/automatic/hmg/update_icon_state() . = ..() item_state = "[initial(item_state)][bipod_deployed ? "_deployed" : ""]" @@ -148,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 f18f97cd0f4f..2044fae60ee2 100644 --- a/code/modules/projectiles/guns/ballistic/launchers.dm +++ b/code/modules/projectiles/guns/ballistic/launchers.dm @@ -40,32 +40,69 @@ actions_types = list() casing_ejector = FALSE +GLOBAL_LIST_INIT(rpg_scrawlings, list( + "\"FRONT TOWARDS ENEMY\"", + "\"MY WIFE LEFT ME\"", + "A Kepori inset in a stylized crimson heart", + "\"Eat lead psychohazard!\"", + "\"Portable Demotion\"", + "A drawing of the Rilena character 'T4L1' smoking a boof", + "\"Eat it corpo!\"", + "A Sarathi woman in a suggestive pose", + "\"Arm this!\"" +)) + + /obj/item/gun/ballistic/rocketlauncher 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' + desc = "A reusable rocket-propelled grenade launcher." icon_state = "rocketlauncher" item_state = "rocketlauncher" mag_type = /obj/item/ammo_box/magazine/internal/rocketlauncher 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) burst_size = 1 fire_delay = 0.4 SECONDS - casing_ejector = FALSE + weapon_weight = WEAPON_HEAVY + w_class = WEIGHT_CLASS_BULKY + + //Bolt bolt_type = BOLT_TYPE_NO_BOLT - internal_magazine = TRUE + + ///Magazine stuff cartridge_wording = "rocket" + internal_magazine = TRUE empty_indicator = TRUE tac_reloads = FALSE + casing_ejector = FALSE + manufacturer = MANUFACTURER_SCARBOROUGH + attack_verb = list("bludgeoned", "hit", "slammed", "whacked") + + valid_attachments = list() + slot_available = list() + + var/rpg_scribble = null + +/obj/item/gun/ballistic/rocketlauncher/Initialize() + . = ..() + rpg_scribble = pick(GLOB.rpg_scrawlings) + desc += " [rpg_scribble] is scrawled on the tube" + +/obj/item/gun/ballistic/rocketlauncher/attackby(obj/item/A, mob/user, params) + . = ..() + if(istype(A, /obj/item/pen)) + rpg_scribble = stripped_input(user, "What are you putting on [src]?", "Rocket Launcher Doodle") + if(!rpg_scribble || !length(rpg_scribble)) + desc = "[src::desc]" + return + desc = "[src::desc] [rpg_scribble] is scribbled on the body." + + /obj/item/gun/ballistic/rocketlauncher/afterattack() . = ..() magazine.get_round(FALSE) //Hack to clear the mag after it's fired @@ -82,6 +119,9 @@ righthand_file = 'icons/obj/guns/manufacturer/solararmories/righthand.dmi' mob_overlay_icon = 'icons/obj/guns/manufacturer/solararmories/onmob.dmi' + //recoiless rifles use shells + cartridge_wording = "shell" + icon_state = "panzerfaust" item_state = "panzerfaust" manufacturer = MANUFACTURER_SOLARARMORIES diff --git a/code/modules/projectiles/guns/ballistic/marksman.dm b/code/modules/projectiles/guns/ballistic/marksman.dm index 46a9e2466290..9d63e66bcab7 100644 --- a/code/modules/projectiles/guns/ballistic/marksman.dm +++ b/code/modules/projectiles/guns/ballistic/marksman.dm @@ -1,102 +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) - -/obj/item/gun/ballistic/automatic/marksman/gal - name = "\improper CM-GAL-S" - desc = "The standard issue DMR of CLIP. Dates back to the Xenofauna War, this particular model is in a carbine configuration, and, as such, is shorter than the standard model. Chambered in .308." - - icon = 'icons/obj/guns/manufacturer/clip_lanchester/48x32.dmi' - lefthand_file = 'icons/obj/guns/manufacturer/clip_lanchester/lefthand.dmi' - righthand_file = 'icons/obj/guns/manufacturer/clip_lanchester/righthand.dmi' - mob_overlay_icon = 'icons/obj/guns/manufacturer/clip_lanchester/onmob.dmi' - - fire_sound = 'sound/weapons/gun/rifle/shot.ogg' - icon_state = "gal" - item_state = "gal" - show_magazine_on_sprite = TRUE - weapon_weight = WEAPON_MEDIUM - w_class = WEIGHT_CLASS_BULKY - mag_type = /obj/item/ammo_box/magazine/gal - fire_sound = 'sound/weapons/gun/rifle/gal.ogg' - burst_size = 0 - actions_types = list() - manufacturer = MANUFACTURER_MINUTEMAN - - wield_slowdown = 2 - spread = -4 - fire_select_icon_state_prefix = "clip_" - adjust_fire_select_icon_state_on_safety = TRUE - -/obj/item/gun/ballistic/automatic/marksman/gal/inteq - name = "\improper SsG-04" - desc = "A marksman rifle purchased from CLIP and modified to suit IRMG's needs. Chambered in .308." - icon = 'icons/obj/guns/manufacturer/inteq/48x32.dmi' - lefthand_file = 'icons/obj/guns/manufacturer/inteq/lefthand.dmi' - righthand_file = 'icons/obj/guns/manufacturer/inteq/righthand.dmi' - mob_overlay_icon = 'icons/obj/guns/manufacturer/inteq/onmob.dmi' - icon_state = "gal-inteq" - item_state = "gal-inteq" diff --git a/code/modules/projectiles/guns/ballistic/pistol.dm b/code/modules/projectiles/guns/ballistic/pistol.dm index b2416462da39..e81b57d43f37 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 545cbf8bf117..e0e389ce7f4a 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 @@ -40,6 +43,9 @@ safety_wording = "hammer" + gunslinger_recoil_bonus = -1 + gunslinger_spread_bonus = -8 + var/gate_loaded = FALSE //for stupid wild west shit var/gate_offset = 5 //for wild west shit 2: instead of ejecting the chambered round, eject the next round if 1 var/gate_load_direction = REVOLVER_AUTO_ROTATE_RIGHT_LOADING //when we load ammo with a box, which direction do we rotate the cylinder? unused with normal revolvers @@ -418,7 +424,7 @@ fire_delay = src::fire_delay if(fan) rack() - to_chat(user, "You fan the [bolt_wording] of \the [src]!") + to_chat(user, span_notice("You fan the [bolt_wording] of \the [src]!")) balloon_alert_to_viewers("fans revolver!") fire_delay = 0 SECONDS @@ -436,25 +442,6 @@ return to_chat(user, "The hammer is up on [src]! Pull it down to fire!") -/obj/item/gun/ballistic/revolver/calculate_recoil(mob/user, recoil_bonus = 0) - var/gunslinger_bonus = -1 - var/total_recoil = recoil_bonus - - if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger bonus - total_recoil += gunslinger_bonus - total_recoil = clamp(total_recoil,0,INFINITY) - - return ..(user, total_recoil) - -/obj/item/gun/ballistic/revolver/calculate_spread(mob/user, bonus_spread) - var/gunslinger_bonus = -8 - var/total_spread = bonus_spread - - if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger bonus - total_spread += gunslinger_bonus - - return ..(user, total_spread) - /obj/item/gun/ballistic/revolver/pickup(mob/user) . = ..() tryflip(user) @@ -468,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." @@ -557,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/rifle.dm b/code/modules/projectiles/guns/ballistic/rifle.dm index 1e7724c5c9fa..a61413057606 100644 --- a/code/modules/projectiles/guns/ballistic/rifle.dm +++ b/code/modules/projectiles/guns/ballistic/rifle.dm @@ -94,7 +94,7 @@ /obj/item/gun/ballistic/rifle/illestren/empty //i had to name it empty instead of no_mag because else it wouldnt work with guncases. sorry! spawnwithmagazine = FALSE -/obj/item/gun/ballistic/rifle/illestren/sawoff(mob/user) +/obj/item/gun/ballistic/rifle/illestren/sawoff(forced = FALSE) . = ..() if(.) spread = 24 @@ -114,20 +114,15 @@ icon_state = "illestren_factory" item_state = "illestren_factory" -/obj/item/gun/ballistic/rifle/illestren/sawoff(mob/user) +/obj/item/gun/ballistic/rifle/illestren/sawoff(forced = FALSE) . = ..() if(.) item_state = "illestren_factory_sawn" mob_overlay_state = item_state /obj/item/gun/ballistic/rifle/illestren/sawn - name = "sawn-off Illestren rifle" desc = "An Illestren rifle sawn down to a ridiculously small size. There was probably a reason it wasn't made this short to begin with, but it still packs a punch." - item_state = "illestren_sawn" sawn_off = TRUE - weapon_weight = WEAPON_MEDIUM - w_class = WEIGHT_CLASS_NORMAL - slot_flags = ITEM_SLOT_BELT /obj/item/gun/ballistic/rifle/solgov name = "SSG-669C" @@ -184,12 +179,12 @@ /obj/item/gun/ballistic/rifle/polymer name = "polymer survivor rifle" - desc = "A bolt-action rifle made of scrap, desperation, and luck. Likely to shatter at any moment. Chambered in .300 Blackout." + desc = "A bolt-action rifle made of scrap, desperation, and luck. Likely to shatter at any moment. Chambered in 7.62x40mm." icon = 'icons/obj/guns/projectile.dmi' icon_state = "crackhead_rifle" item_state = "crackhead_rifle" - weapon_weight = WEAPON_MEDIUM - w_class = WEIGHT_CLASS_NORMAL + weapon_weight = WEAPON_HEAVY + w_class = WEIGHT_CLASS_BULKY mag_type = /obj/item/ammo_box/magazine/internal/boltaction/polymer can_be_sawn_off = FALSE manufacturer = MANUFACTURER_NONE diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index 1f15f8d01689..ab85fb9a01c4 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -35,6 +35,8 @@ recoil = 1 recoil_unwielded = 4 + gunslinger_recoil_bonus = -1 + /obj/item/gun/ballistic/shotgun/blow_up(mob/user) if(chambered && chambered.BB) process_fire(user, user, FALSE) @@ -46,15 +48,6 @@ return TRUE return FALSE -/obj/item/gun/ballistic/shotgun/calculate_recoil(mob/user, recoil_bonus = 0) - var/gunslinger_bonus = -1 - var/total_recoil = recoil_bonus - if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger bonus - total_recoil += gunslinger_bonus - total_recoil = clamp(total_recoil,0,INFINITY) - - return ..(user, total_recoil) - // BRIMSTONE SHOTGUN // /obj/item/gun/ballistic/shotgun/brimstone @@ -81,7 +74,7 @@ can_be_sawn_off = TRUE -/obj/item/gun/ballistic/shotgun/brimstone/sawoff(mob/user) +/obj/item/gun/ballistic/shotgun/brimstone/sawoff(forced = FALSE) . = ..() if(.) weapon_weight = WEAPON_MEDIUM @@ -115,7 +108,7 @@ rack_sound = 'sound/weapons/gun/shotgun/rack_alt.ogg' fire_delay = 0.1 SECONDS -/obj/item/gun/ballistic/shotgun/hellfire/sawoff(mob/user) +/obj/item/gun/ballistic/shotgun/hellfire/sawoff(forced = FALSE) . = ..() if(.) var/obj/item/ammo_box/magazine/internal/tube = magazine @@ -142,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 @@ -216,83 +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) - -/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" - -/obj/item/gun/ballistic/shotgun/bulldog/minutemen //TODO: REPATH - name = "\improper CM-15" - desc = "A standard-issue shotgun of CLIP, most often used by boarding crews. Only compatible with specialized 8-round magazines." - icon = 'icons/obj/guns/manufacturer/clip_lanchester/48x32.dmi' - lefthand_file = 'icons/obj/guns/manufacturer/clip_lanchester/lefthand.dmi' - righthand_file = 'icons/obj/guns/manufacturer/clip_lanchester/righthand.dmi' - mob_overlay_icon = 'icons/obj/guns/manufacturer/clip_lanchester/onmob.dmi' - - mag_type = /obj/item/ammo_box/magazine/cm15_mag - icon_state = "cm15" - item_state = "cm15" - empty_alarm = FALSE - empty_indicator = FALSE - unique_mag_sprites_for_variants = FALSE - manufacturer = MANUFACTURER_MINUTEMAN - fire_select_icon_state_prefix = "clip_" - adjust_fire_select_icon_state_on_safety = TRUE +EMPTY_GUN_HELPER(shotgun/automatic/bulldog/inteq) + ///////////////////////////// // DOUBLE BARRELED SHOTGUN // @@ -393,7 +316,7 @@ EMPTY_GUN_HELPER(shotgun/bulldog/inteq) if(unique_reskin && !current_skin && user.canUseTopic(src, BE_CLOSE, NO_DEXTERITY) && (!bolt_locked)) reskin_obj(user) -/obj/item/gun/ballistic/shotgun/doublebarrel/sawoff(mob/user) +/obj/item/gun/ballistic/shotgun/doublebarrel/sawoff(forced = FALSE) . = ..() if(.) weapon_weight = WEAPON_MEDIUM @@ -438,7 +361,7 @@ EMPTY_GUN_HELPER(shotgun/bulldog/inteq) item_state = "dshotgun_srm" unique_reskin = null -/obj/item/gun/ballistic/shotgun/doublebarrel/roumain/sawoff(mob/user) +/obj/item/gun/ballistic/shotgun/doublebarrel/roumain/sawoff(forced = FALSE) . = ..() if(.) item_state = "dshotgun_srm_sawn" @@ -493,7 +416,7 @@ EMPTY_GUN_HELPER(shotgun/bulldog/inteq) if(sawn_off) . += "ishotgun_sawn" -/obj/item/gun/ballistic/shotgun/doublebarrel/improvised/sawoff(mob/user) +/obj/item/gun/ballistic/shotgun/doublebarrel/improvised/sawoff(forced = FALSE) . = ..() if(. && slung) //sawing off the gun removes the sling new /obj/item/stack/cable_coil(get_turf(src), 10) @@ -501,13 +424,7 @@ EMPTY_GUN_HELPER(shotgun/bulldog/inteq) update_appearance() /obj/item/gun/ballistic/shotgun/doublebarrel/improvised/sawn - name = "sawn-off improvised shotgun" - desc = "A single-shot shotgun. Better not miss." - icon_state = "ishotgun_sawn" - item_state = "ishotgun_sawn" - w_class = WEIGHT_CLASS_NORMAL sawn_off = TRUE - slot_flags = ITEM_SLOT_BELT /obj/item/gun/ballistic/shotgun/automatic/combat/compact/compact name = "compact compact combat shotgun" @@ -673,7 +590,7 @@ EMPTY_GUN_HELPER(shotgun/bulldog/inteq) balloon_alert_to_viewers("quickly racks!") fire_delay = 0 SECONDS -/obj/item/gun/ballistic/shotgun/flamingarrow/sawoff(mob/user) +/obj/item/gun/ballistic/shotgun/flamingarrow/sawoff(forced = FALSE) . = ..() if(.) var/obj/item/ammo_box/magazine/internal/tube = magazine @@ -698,7 +615,7 @@ EMPTY_GUN_HELPER(shotgun/bulldog/inteq) base_icon_state = "flamingarrow_factory" item_state = "flamingarrow_factory" -/obj/item/gun/ballistic/shotgun/flamingarrow/factory/sawoff(mob/user) +/obj/item/gun/ballistic/shotgun/flamingarrow/factory/sawoff(forced = FALSE) . = ..() if(.) item_state = "flamingarrow_factory_sawn" @@ -711,12 +628,76 @@ EMPTY_GUN_HELPER(shotgun/bulldog/inteq) icon_state = "flamingbolt" item_state = "flamingbolt" -/obj/item/gun/ballistic/shotgun/flamingarrow/bolt/sawoff(mob/user) +/obj/item/gun/ballistic/shotgun/flamingarrow/bolt/sawoff(forced = FALSE) . = ..() if(.) 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(forced = FALSE) + . = ..() + 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(forced = FALSE) + . = ..() + 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" @@ -778,7 +759,7 @@ EMPTY_GUN_HELPER(shotgun/bulldog/inteq) gun_firemodes = list(FIREMODE_SEMIAUTO) default_firemode = FIREMODE_SEMIAUTO -/obj/item/gun/ballistic/shotgun/doublebarrel/beacon/sawoff(mob/user) +/obj/item/gun/ballistic/shotgun/doublebarrel/beacon/sawoff(forced = FALSE) . = ..() if(.) item_state = "beacon_sawn" @@ -801,7 +782,7 @@ EMPTY_GUN_HELPER(shotgun/bulldog/inteq) icon_state = "beacon_factory" item_state = "beacon_factory" -/obj/item/gun/ballistic/shotgun/doublebarrel/beacon/factory/sawoff(mob/user) +/obj/item/gun/ballistic/shotgun/doublebarrel/beacon/factory/sawoff(forced = FALSE) . = ..() if(.) item_state = "beacon_factory_sawn" diff --git a/code/modules/projectiles/guns/ballistic/smg.dm b/code/modules/projectiles/guns/ballistic/smg.dm index 2cb68fc09176..6f52daaf2292 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 @@ -19,61 +21,8 @@ eject_sound = 'sound/weapons/gun/smg/smg_unload.ogg' eject_empty_sound = 'sound/weapons/gun/smg/smg_unload.ogg' -/obj/item/gun/ballistic/automatic/smg/calculate_recoil(mob/user, recoil_bonus = 0) - var/gunslinger_bonus = 2 - var/total_recoil - if(.) - total_recoil += . - if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger penalty - total_recoil += gunslinger_bonus - . = total_recoil - return ..() - -/obj/item/gun/ballistic/automatic/smg/calculate_spread(mob/user, bonus_spread) - var/gunslinger_bonus = 16 - var/total_spread = bonus_spread - if(.) - total_spread += . - if(HAS_TRAIT(user, TRAIT_GUNSLINGER)) //gunslinger penalty - total_spread += gunslinger_bonus - . = total_spread - return ..() - -/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" + gunslinger_recoil_bonus = 2 + gunslinger_spread_bonus = 16 /obj/item/gun/ballistic/automatic/smg/wt550 name = "\improper WT-550 Automatic Rifle" @@ -95,34 +44,6 @@ EMPTY_GUN_HELPER(automatic/smg/c20r) /obj/item/gun/ballistic/automatic/smg/wt550/no_mag spawnwithmagazine = FALSE -/obj/item/gun/ballistic/automatic/smg/mini_uzi - name = "\improper Type U3 Uzi" - desc = "A lightweight submachine gun, for when you really want someone dead. Uses 9mm rounds." - - icon = 'icons/obj/guns/manufacturer/frontier_import/48x32.dmi' - lefthand_file = 'icons/obj/guns/manufacturer/frontier_import/lefthand.dmi' - righthand_file = 'icons/obj/guns/manufacturer/frontier_import/righthand.dmi' - mob_overlay_icon = 'icons/obj/guns/manufacturer/frontier_import/onmob.dmi' - icon_state = "uzi" - - mag_type = /obj/item/ammo_box/magazine/uzim9mm - bolt_type = BOLT_TYPE_OPEN - show_magazine_on_sprite = TRUE - - fire_sound = 'sound/weapons/gun/smg/uzi.ogg' - rack_sound = 'sound/weapons/gun/smg/uzi_cocked.ogg' - - load_sound = 'sound/weapons/gun/smg/uzi_reload.ogg' - load_empty_sound = 'sound/weapons/gun/smg/uzi_reload.ogg' - eject_sound = 'sound/weapons/gun/smg/uzi_unload.ogg' - eject_empty_sound = 'sound/weapons/gun/smg/uzi_unload.ogg' - - spread = 4 - spread_unwielded = 8 - wield_slowdown = 0.25 - wield_delay = 0.2 SECONDS - fire_delay = 0.1 SECONDS - /obj/item/gun/ballistic/automatic/smg/vector name = "\improper Vector carbine" desc = "A police carbine based on a pre-Night of Fire SMG design. Most of the complex workings have been removed for reliability. Chambered in 9mm." @@ -138,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" @@ -251,41 +91,6 @@ EMPTY_GUN_HELPER(automatic/smg/c20r) magazine = new /obj/item/ammo_box/magazine/c45_firestorm_mag/pan(src) chamber_round() -/obj/item/gun/ballistic/automatic/smg/cm5 - name = "\improper CM-5" - desc = "The standard issue SMG of CLIP. One of the few firearm designs that were left mostly intact from the designs found on the UNSV Lichtenstein. Chambered in 9mm." - icon = 'icons/obj/guns/manufacturer/clip_lanchester/48x32.dmi' - lefthand_file = 'icons/obj/guns/manufacturer/clip_lanchester/lefthand.dmi' - righthand_file = 'icons/obj/guns/manufacturer/clip_lanchester/righthand.dmi' - mob_overlay_icon = 'icons/obj/guns/manufacturer/clip_lanchester/onmob.dmi' - - icon_state = "cm5" - item_state = "cm5" - - mag_type = /obj/item/ammo_box/magazine/smgm9mm - weapon_weight = WEAPON_LIGHT - fire_sound = 'sound/weapons/gun/smg/smg_heavy.ogg' - manufacturer = MANUFACTURER_MINUTEMAN - - fire_select_icon_state_prefix = "clip_" - adjust_fire_select_icon_state_on_safety = TRUE - -EMPTY_GUN_HELPER(automatic/smg/cm5) - -/obj/item/gun/ballistic/automatic/smg/cm5/compact - name = "\improper CM-5c" - desc = "The compact conversion of the CM-5. While not exactly restricted, it is looked down upon due to CLIP's doctrine on medium-longrange combat, however it excels at close range and is very lightweight. You feel like this gun is mildly unfinished. Chambered in 9mm." - w_class = WEIGHT_CLASS_NORMAL - spread = 25 - spread_unwielded = 40 - - fire_delay = 0.08 SECONDS - - recoil = 1 - recoil_unwielded = 2 - wield_delay = 0.2 SECONDS - wield_slowdown = 0.15 - /obj/item/gun/ballistic/automatic/smg/skm_carbine name = "\improper SKM-24v" desc = "The SKM-24v was a carbine modification of the SKM-24 during the Frontiersmen War. This, however, is just a shoddy imitation of that carbine, effectively an SKM-24 with a sawed down barrel and a folding wire stock. Can be fired with the stock folded, though accuracy suffers. Chambered in 4.6x30mm." @@ -367,7 +172,7 @@ EMPTY_GUN_HELPER(automatic/smg/cm5) eject_empty_sound = 'sound/weapons/gun/smg/smg_unload.ogg' spread = 7 - recoil_unwielded = 10 + spread_unwielded = 10 recoil = 0 recoil_unwielded = 4 @@ -387,6 +192,7 @@ EMPTY_GUN_HELPER(automatic/smg/cm5) name = "\improper Nanotrasen Saber SMG" desc = "A prototype full-auto 9mm submachine gun, designated 'SABR'. Has a threaded barrel for suppressors and a folding stock." icon = 'icons/obj/guns/projectile.dmi' + default_attachments = list(/obj/item/attachment/foldable_stock) icon_state = "saber" item_state = "gun" mag_type = /obj/item/ammo_box/magazine/smgm9mm diff --git a/code/modules/projectiles/guns/ballistic/toy.dm b/code/modules/projectiles/guns/ballistic/toy.dm index 135a1b2d06b0..43a9415671d6 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 abe3e3fd7b43..aaf37d4c9556 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 2ca71649a6f7..5d0e8d54e4e2 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -192,6 +192,8 @@ icon_state = null damage = 20 damage_type = BRUTE + wall_damage_flags = PROJECTILE_BONUS_DAMAGE_MINERALS + wall_damage_override = MINERAL_WALL_INTEGRITY flag = "bomb" range = 3 log_override = TRUE @@ -235,8 +237,6 @@ for(var/obj/item/borg/upgrade/modkit/M in mods) M.projectile_strike(src, target_turf, target, kinetic_gun) if(ismineralturf(target_turf)) - var/turf/closed/mineral/M = target_turf - M.gets_drilled(firer, TRUE) if(iscarbon(firer)) var/mob/living/carbon/C = firer var/skill_modifier = C?.mind.get_skill_modifier(/datum/skill/mining, SKILL_SPEED_MODIFIER) diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm index c2e5b4cb2933..40fd10e94785 100644 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ b/code/modules/projectiles/guns/energy/pulse.dm @@ -46,7 +46,7 @@ /obj/item/gun/energy/pulse/prize/Initialize() . = ..() - GLOB.poi_list += src + SSpoints_of_interest.make_point_of_interest(src) var/turf/T = get_turf(src) message_admins("A pulse rifle prize has been created at [ADMIN_VERBOSEJMP(T)]") @@ -55,7 +55,7 @@ notify_ghosts("Someone won a pulse rifle as a prize!", source = src, action = NOTIFY_ORBIT, header = "Pulse rifle prize") /obj/item/gun/energy/pulse/prize/Destroy() - GLOB.poi_list -= src + SSpoints_of_interest.remove_point_of_interest(src) . = ..() /obj/item/gun/energy/pulse/pistol diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 09de7690b5ea..067a4bbc5d97 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) @@ -122,10 +122,12 @@ heat = 3800 usesound = list('sound/items/welder.ogg', 'sound/items/welder2.ogg') - tool_behaviour = TOOL_WELDER - toolspeed = 0.7 //plasmacutters can be used as welders, and are faster than standard welders + tool_behaviour = TOOL_DECONSTRUCT + wall_decon_damage = 200 + toolspeed = 0.9 //plasmacutters can be used like angle grinders, and are a bit faster 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 + var/charge_cut = 100 //amount of charge used up to start action (multiplied by amount) and per progress_flash_divisor ticks of cutting + var/adv = FALSE /obj/item/gun/energy/plasmacutter/ComponentInitialize() . = ..() @@ -154,29 +156,50 @@ else ..() -// Can we weld? Plasma cutter does not use charge continuously. +// Can we cut? Plasma cutter does not use charge continuously. // Amount cannot be defaulted to 1: most of the code specifies 0 in the call. /obj/item/gun/energy/plasmacutter/tool_use_check(mob/living/user, amount) if(QDELETED(cell)) to_chat(user, "[src] does not have a cell, and cannot be used!") return FALSE - // Amount cannot be used if drain is made continuous, e.g. amount = 5, charge_weld = 25 + // Amount cannot be used if drain is made continuous, e.g. amount = 5, charge_cut = 25 // Then it'll drain 125 at first and 25 periodically, but fail if charge dips below 125 even though it still can finish action - // Alternately it'll need to drain amount*charge_weld every period, which is either obscene or makes it free for other uses - if(amount ? cell.charge < charge_weld * amount : cell.charge < charge_weld) + // Alternately it'll need to drain amount*charge_cut every period, which is either obscene or makes it free for other uses + if(amount ? cell.charge < charge_cut * amount : cell.charge < charge_cut) to_chat(user, "You need more charge to complete this task!") return FALSE 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)) + return (!QDELETED(cell) && cell.use(amount ? amount * charge_cut : charge_cut)) /obj/item/gun/energy/plasmacutter/use_tool(atom/target, mob/living/user, delay, amount=1, volume=0, datum/callback/extra_checks) if(amount) - target.add_overlay(GLOB.welding_sparks) + if(adv) + target.add_overlay(GLOB.advanced_cutting_effect) + else + target.add_overlay(GLOB.cutting_effect) . = ..() - target.cut_overlay(GLOB.welding_sparks) + if(adv) + target.cut_overlay(GLOB.advanced_cutting_effect) + else + target.cut_overlay(GLOB.cutting_effect) else . = ..(amount=1) @@ -185,6 +208,7 @@ icon_state = "adv_plasmacutter" item_state = "adv_plasmacutter" force = 15 + wall_decon_damage = 300 ammo_type = list(/obj/item/ammo_casing/energy/plasma/adv) /obj/item/gun/energy/wormhole_projector diff --git a/code/modules/projectiles/guns/manufacturer/clip_lanchester/ballistics.dm b/code/modules/projectiles/guns/manufacturer/clip_lanchester/ballistics.dm new file mode 100644 index 000000000000..a244b188863a --- /dev/null +++ b/code/modules/projectiles/guns/manufacturer/clip_lanchester/ballistics.dm @@ -0,0 +1,477 @@ +//########### PISTOLS ###########// +/obj/item/gun/ballistic/automatic/pistol/cm23 + name = "\improper CM-23" + desc = "CLIP's standard service pistol. 10 rounds of 10mm ammunition make the CM-23 deadlier than many other service pistols, but its weight and bulk have made it unpopular as a sidearm. It has largely been phased out outside of specialized units and patrols on the fringes of CLIP space. Chambered in 10mm." + icon = 'icons/obj/guns/manufacturer/clip_lanchester/48x32.dmi' + lefthand_file = 'icons/obj/guns/manufacturer/clip_lanchester/lefthand.dmi' + righthand_file = 'icons/obj/guns/manufacturer/clip_lanchester/righthand.dmi' + mob_overlay_icon = 'icons/obj/guns/manufacturer/clip_lanchester/onmob.dmi' + + icon_state = "cm23" + item_state = "clip_generic" + w_class = WEIGHT_CLASS_NORMAL + mag_type = /obj/item/ammo_box/magazine/cm23 +// can_suppress = FALSE + fire_sound = 'sound/weapons/gun/pistol/cm23.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' + manufacturer = MANUFACTURER_MINUTEMAN + load_sound = 'sound/weapons/gun/pistol/candor_reload.ogg' + load_empty_sound = 'sound/weapons/gun/pistol/candor_reload.ogg' + eject_sound = 'sound/weapons/gun/pistol/candor_unload.ogg' + eject_empty_sound = 'sound/weapons/gun/pistol/candor_unload.ogg' + recoil_unwielded = 3 + +/obj/item/ammo_box/magazine/cm23 + name = "CM-23 pistol magazine (10mm)" + desc = "An 10-round magazine magazine designed for the CM-70 pistol. These rounds do moderate damage, but struggle against armor." + icon_state = "cm23_mag-1" + base_icon_state = "cm23_mag" + ammo_type = /obj/item/ammo_casing/c10mm + caliber = "10mm" + max_ammo = 10 + +/obj/item/ammo_box/magazine/cm23/update_icon_state() + . = ..() + icon_state = "[base_icon_state]-[!!ammo_count()]" + +/obj/item/gun/ballistic/automatic/pistol/cm70 + name = "CM-70 machine pistol" + desc = "A compact machine pistol designed to rapidly fire 3-round bursts. Popular with officers and certain special units, the CM-70 is incredibly dangerous at close range. Chambered in 9mm." + icon = 'icons/obj/guns/manufacturer/clip_lanchester/48x32.dmi' + lefthand_file = 'icons/obj/guns/manufacturer/clip_lanchester/lefthand.dmi' + righthand_file = 'icons/obj/guns/manufacturer/clip_lanchester/righthand.dmi' + mob_overlay_icon = 'icons/obj/guns/manufacturer/clip_lanchester/onmob.dmi' + + icon_state = "cm70" + item_state = "clip_generic" + mag_type = /obj/item/ammo_box/magazine/m9mm_cm70 +// can_suppress = FALSE + burst_size = 3 + burst_delay = 0.1 SECONDS + fire_delay = 0.4 SECONDS + gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_BURST) + default_firemode = FIREMODE_SEMIAUTO + manufacturer = MANUFACTURER_MINUTEMAN + + fire_select_icon_state_prefix = "clip_" + adjust_fire_select_icon_state_on_safety = TRUE + + fire_sound = 'sound/weapons/gun/pistol/cm70.ogg' + + spread = 8 + spread_unwielded = 20 + +/obj/item/ammo_box/magazine/m9mm_cm70 + name = "CM-70 machine pistol magazine (9mm)" + desc = "A 18-round magazine designed for the CM-70 machine pistol. These rounds do okay damage, but struggle against armor." + icon_state = "cm70_mag_18" + base_icon_state = "cm70_mag" + ammo_type = /obj/item/ammo_casing/c9mm + caliber = "9mm" + max_ammo = 18 + + +/obj/item/ammo_box/magazine/m9mm_cm70/update_icon_state() + . = ..() + icon_state = "[base_icon_state]_[ammo_count() == 1 ? 1 : round(ammo_count(),3)]" + +//########### SMGS ###########// +/obj/item/gun/ballistic/automatic/smg/cm5 + name = "\improper CM-5" + desc = "CLIP's standard-issue submachine gun. Well-liked for its accuracy, stability, and ease of use compared to other submachineguns. Chambered in 9mm." + icon = 'icons/obj/guns/manufacturer/clip_lanchester/48x32.dmi' + lefthand_file = 'icons/obj/guns/manufacturer/clip_lanchester/lefthand.dmi' + righthand_file = 'icons/obj/guns/manufacturer/clip_lanchester/righthand.dmi' + mob_overlay_icon = 'icons/obj/guns/manufacturer/clip_lanchester/onmob.dmi' + + icon_state = "cm5" + item_state = "cm5" + + mag_type = /obj/item/ammo_box/magazine/cm5_9mm + bolt_type = BOLT_TYPE_CLIP + weapon_weight = WEAPON_LIGHT + fire_sound = 'sound/weapons/gun/smg/cm5.ogg' + manufacturer = MANUFACTURER_MINUTEMAN + + 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" = 37, + "y" = 20, + ), + ATTACHMENT_SLOT_RAIL = list( + "x" = 27, + "y" = 17, + ) + ) + + fire_select_icon_state_prefix = "clip_" + adjust_fire_select_icon_state_on_safety = TRUE + +EMPTY_GUN_HELPER(automatic/smg/cm5) + +/obj/item/ammo_box/magazine/cm5_9mm + name = "CM-5 magazine (9mm)" + desc = "A 30-round magazine for 9mm submachine guns. These rounds do okay damage, but struggle against armor." + icon_state = "cm5_mag-1" + base_icon_state = "cm5_mag" + ammo_type = /obj/item/ammo_casing/c9mm + caliber = "9mm" + max_ammo = 30 + multiple_sprites = AMMO_BOX_FULL_EMPTY + +/obj/item/gun/ballistic/automatic/smg/cm5/compact + name = "\improper CM-5c" + desc = "A modification of the CM-5 featuring a dramatically shortened barrel and removed stock. Designed for CLIP-GOLD covert enforcement agents to maximize portability without sacrificing firepower, though accuracy at range is abysmal at best. Chambered in 9mm." + icon_state = "cm5c" + item_state = "cm5c" + + w_class = WEIGHT_CLASS_NORMAL + spread = 10 + spread_unwielded = 20 + + fire_delay = 0.1 SECONDS + + slot_offsets = list( + ATTACHMENT_SLOT_MUZZLE = list( + "x" = 30, + "y" = 20, + ), + ATTACHMENT_SLOT_RAIL = list( + "x" = 22, + "y" = 17, + ) + ) + + + recoil = 1 + recoil_unwielded = 2 + wield_delay = 0.2 SECONDS + wield_slowdown = 0.15 + + var/obj/item/storage/briefcase/current_case + +/obj/item/gun/ballistic/automatic/smg/cm5/compact/attackby(obj/item/attacking_item, mob/user, params) + . = ..() + if(current_case) + return + if(!istype(attacking_item, /obj/item/storage/briefcase)) + return + if(attacking_item.contents.len != 0) + return + to_chat(user, span_notice("...? You rig [src] to fire from within [attacking_item].")) + current_case = attacking_item + attacking_item.forceMove(src) + icon = attacking_item.icon + base_icon_state = attacking_item.icon_state + item_state = attacking_item.item_state + name = attacking_item.name + lefthand_file = attacking_item.lefthand_file + righthand_file = attacking_item.righthand_file + pickup_sound = attacking_item.pickup_sound + drop_sound = attacking_item.drop_sound + w_class = WEIGHT_CLASS_BULKY + +//how are you even supposed to hold it like this...? + spread += 10 + spread_unwielded +=10 + + cut_overlays() + update_appearance() + +/obj/item/gun/ballistic/automatic/smg/cm5/compact/AltClick(mob/user) + if(!current_case) + return ..() + current_case.forceMove(get_turf(src)) + icon = src::icon + base_icon_state = src::icon_state + item_state = src::item_state + name = src::name + lefthand_file = src::lefthand_file + righthand_file = src::righthand_file + pickup_sound = src::pickup_sound + drop_sound = src::drop_sound + w_class = WEIGHT_CLASS_NORMAL + + spread = src::spread + spread_unwielded = src::spread_unwielded + to_chat(user, span_notice("You remove the [current_case] from [src]")) + current_case = null + + cut_overlays() + update_appearance() + + +//########### MARKSMAN ###########// +/obj/item/gun/ballistic/automatic/marksman/f4 + name = "CM-F4" + desc = "CLIP's marksman rifle, used by both military and law enforcement units. Designed not long after the CM-24, the venerable F4 has adapted well to continued upgrades. Chambered in .308." + + icon = 'icons/obj/guns/manufacturer/clip_lanchester/48x32.dmi' + lefthand_file = 'icons/obj/guns/manufacturer/clip_lanchester/lefthand.dmi' + righthand_file = 'icons/obj/guns/manufacturer/clip_lanchester/righthand.dmi' + mob_overlay_icon = 'icons/obj/guns/manufacturer/clip_lanchester/onmob.dmi' + + icon_state = "f4" + item_state = "f4" + show_magazine_on_sprite = TRUE + weapon_weight = WEAPON_MEDIUM + w_class = WEIGHT_CLASS_BULKY + bolt_type = BOLT_TYPE_CLIP + mag_type = /obj/item/ammo_box/magazine/f4_308 + fire_sound = 'sound/weapons/gun/rifle/f4.ogg' + burst_size = 0 + actions_types = list() + manufacturer = MANUFACTURER_MINUTEMAN + + 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" = 17, + ), + ATTACHMENT_SLOT_RAIL = list( + "x" = 35, + "y" = 16, + ) + ) + + wield_slowdown = 2 + spread = -4 + fire_select_icon_state_prefix = "clip_" + adjust_fire_select_icon_state_on_safety = TRUE + +/obj/item/gun/ballistic/automatic/marksman/f4/inteq + name = "\improper SsG-04" + desc = "An F4 rifle purchased from CLIP and modified to suit IRMG's needs. Chambered in .308." + icon = 'icons/obj/guns/manufacturer/inteq/48x32.dmi' + lefthand_file = 'icons/obj/guns/manufacturer/inteq/lefthand.dmi' + righthand_file = 'icons/obj/guns/manufacturer/inteq/righthand.dmi' + mob_overlay_icon = 'icons/obj/guns/manufacturer/inteq/onmob.dmi' + icon_state = "f4_inteq" + item_state = "f4_inteq" + +/obj/item/gun/ballistic/automatic/marksman/f90 + name = "CM-F90" + desc = "A powerful sniper rifle used by vanishingly rare CLIP specialists, capable of impressive range and penetrating power. Chambered in 6.5mm CLIP." + icon = 'icons/obj/guns/manufacturer/clip_lanchester/48x32.dmi' + lefthand_file = 'icons/obj/guns/manufacturer/clip_lanchester/lefthand.dmi' + righthand_file = 'icons/obj/guns/manufacturer/clip_lanchester/righthand.dmi' + mob_overlay_icon = 'icons/obj/guns/manufacturer/clip_lanchester/onmob.dmi' + + icon_state = "f90" + item_state = "f90" + + fire_sound = 'sound/weapons/gun/sniper/cmf90.ogg' + + mag_type = /obj/item/ammo_box/magazine/f90 + bolt_type = BOLT_TYPE_CLIP + + fire_delay = 1 SECONDS + + manufacturer = MANUFACTURER_MINUTEMAN + 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 + +/obj/item/ammo_box/magazine/f90 + name = "\improper CM-F90 Magazine (6.5x57mm CLIP)" + desc = "A large 5-round box magazine for the CM-F90 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 = "f90_mag" + icon_state = "f90_mag-1" + ammo_type = /obj/item/ammo_casing/a65clip + caliber = "6.5CLIP" + max_ammo = 5 + +/obj/item/ammo_box/magazine/f90/update_icon_state() + . = ..() + icon_state = "[base_icon_state]-[!!ammo_count()]" + +//########### RIFLES ###########// +/obj/item/gun/ballistic/automatic/assault/cm82 + name = "\improper CM-82" + desc = "CLIP's standard assault rifle, still relatively new in service. Accurate, reliable, and easy to use, the CM-82 replaced the CM-24 as CLIP's assault rifle almost overnight, and has proven immensely popular since. Chambered in 5.56mm." + icon = 'icons/obj/guns/manufacturer/clip_lanchester/48x32.dmi' + lefthand_file = 'icons/obj/guns/manufacturer/clip_lanchester/lefthand.dmi' + righthand_file = 'icons/obj/guns/manufacturer/clip_lanchester/righthand.dmi' + mob_overlay_icon = 'icons/obj/guns/manufacturer/clip_lanchester/onmob.dmi' + + fire_sound = 'sound/weapons/gun/rifle/cm82.ogg' + icon_state = "cm82" + item_state = "cm82" + show_magazine_on_sprite = TRUE + w_class = WEIGHT_CLASS_BULKY + slot_flags = ITEM_SLOT_BACK + bolt_type = BOLT_TYPE_CLIP + mag_type = /obj/item/ammo_box/magazine/p16 + spread = 2 + wield_delay = 0.5 SECONDS + + fire_delay = 0.18 SECONDS + + load_sound = 'sound/weapons/gun/rifle/cm82_reload.ogg' + load_empty_sound = 'sound/weapons/gun/rifle/cm82_reload.ogg' + eject_sound = 'sound/weapons/gun/rifle/cm82_unload.ogg' + eject_empty_sound = 'sound/weapons/gun/rifle/cm82_unload.ogg' + + fire_select_icon_state_prefix = "clip_" + adjust_fire_select_icon_state_on_safety = TRUE + +/obj/item/gun/ballistic/automatic/assault/skm/cm24 + name = "\improper CM-24" + desc = "An obsolete and very rugged assault rifle with a heavy projectile and slow action for its class. Once CLIP's standard assault rifle produced in phenomenal numbers for the First Frontiersman War, it now serves as an acceptable, if rare, battle rifle. Chambered in 7.62mm CLIP." + + icon = 'icons/obj/guns/manufacturer/clip_lanchester/48x32.dmi' + lefthand_file = 'icons/obj/guns/manufacturer/clip_lanchester/lefthand.dmi' + righthand_file = 'icons/obj/guns/manufacturer/clip_lanchester/righthand.dmi' + mob_overlay_icon = 'icons/obj/guns/manufacturer/clip_lanchester/onmob.dmi' + + icon_state = "cm24" + item_state = "cm24" + manufacturer = MANUFACTURER_NONE + + fire_select_icon_state_prefix = "clip_" + adjust_fire_select_icon_state_on_safety = TRUE + +/obj/item/gun/ballistic/automatic/hmg/cm40 + name = "\improper CM-40" + desc = "A light machine gun used by CLIP heavy weapons teams, capable of withering suppressive fire. The weight and recoil make it nearly impossible to use without deploying the bipod against appropriate cover, such as a table, or bracing against solid cover. Chambered in 7.62x40mm CLIP." + icon = 'icons/obj/guns/manufacturer/clip_lanchester/48x32.dmi' + lefthand_file = 'icons/obj/guns/manufacturer/clip_lanchester/lefthand.dmi' + righthand_file = 'icons/obj/guns/manufacturer/clip_lanchester/righthand.dmi' + mob_overlay_icon = 'icons/obj/guns/manufacturer/clip_lanchester/onmob.dmi' + + icon_state = "cm40" + item_state = "cm40" + + fire_delay = 0 + + fire_sound = 'sound/weapons/gun/hmg/cm40.ogg' + rack_sound = 'sound/weapons/gun/hmg/cm40_cocked.ogg' + + rack_sound_vary = FALSE + + load_sound_vary = FALSE + eject_sound_vary = FALSE + + load_sound = 'sound/weapons/gun/hmg/cm40_reload.ogg' + load_empty_sound = 'sound/weapons/gun/hmg/cm40_reload.ogg' + eject_sound = 'sound/weapons/gun/hmg/cm40_unload.ogg' + eject_empty_sound = 'sound/weapons/gun/hmg/cm40_unload.ogg' + + fire_delay = 0.1 SECONDS + + show_magazine_on_sprite = TRUE + weapon_weight = WEAPON_MEDIUM + w_class = WEIGHT_CLASS_BULKY + slot_flags = ITEM_SLOT_BACK + manufacturer = MANUFACTURER_MINUTEMAN + mag_type = /obj/item/ammo_box/magazine/cm40_762_40_box + + spread = 10 + spread_unwielded = 35 + + recoil = 2 //identical to other LMGS + recoil_unwielded = 7 //same as skm + + wield_slowdown = 1 //not as severe as other lmgs, but worse than the normal skm + wield_delay = 0.9 SECONDS //faster than normal lmgs, slower than stock skm + + has_bipod = TRUE + + deploy_recoil_bonus = -2 + deploy_spread_bonus = -6 + +/obj/item/gun/ballistic/automatic/hmg/cm40/ComponentInitialize() + . = ..() + AddComponent(/datum/component/automatic_fire, 0.1 SECONDS) + AddElement(/datum/element/update_icon_updates_onmob) + +/obj/item/ammo_box/magazine/cm40_762_40_box + name = "CM-40 box magazine (7.62x40mm CLIP)" + desc = "An 80 round box magazine for CM-40 light machine gun. These rounds do good damage with good armor penetration." + base_icon_state = "cm40_mag" + icon_state = "cm40_mag-1" + ammo_type = /obj/item/ammo_casing/a762_40 + max_ammo = 80 + w_class = WEIGHT_CLASS_NORMAL + +/obj/item/ammo_box/magazine/cm40_762_40_box/update_icon_state() + . = ..() + icon_state = "[base_icon_state]-[!!ammo_count()]" + +//########### MISC ###########// + +/obj/item/gun/ballistic/shotgun/cm15 + name = "\improper CM-15" + desc = "A large automatic shotgun used by CLIP. Generally employed by law enforcement and breaching specialists, and rarely by CLIP-BARD (typically with incendiary ammunition). Chambered in 12 gauge." + icon = 'icons/obj/guns/manufacturer/clip_lanchester/48x32.dmi' + lefthand_file = 'icons/obj/guns/manufacturer/clip_lanchester/lefthand.dmi' + righthand_file = 'icons/obj/guns/manufacturer/clip_lanchester/righthand.dmi' + mob_overlay_icon = 'icons/obj/guns/manufacturer/clip_lanchester/onmob.dmi' + + + + icon_state = "cm15" + item_state = "cm15" + + fire_select_icon_state_prefix = "clip_" + adjust_fire_select_icon_state_on_safety = TRUE + + manufacturer = MANUFACTURER_MINUTEMAN + + weapon_weight = WEAPON_MEDIUM +// can_suppress = FALSE + mag_type = /obj/item/ammo_box/magazine/cm15_12g + + empty_indicator = FALSE + unique_mag_sprites_for_variants = FALSE + + semi_auto = TRUE + internal_magazine = FALSE + casing_ejector = TRUE + tac_reloads = TRUE + pickup_sound = 'sound/items/handling/rifle_pickup.ogg' + + fire_sound = 'sound/weapons/gun/shotgun/bulldog.ogg' + + 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 + diff --git a/code/modules/projectiles/guns/manufacturer/clip_lanchester/lasers.dm b/code/modules/projectiles/guns/manufacturer/clip_lanchester/lasers.dm new file mode 100644 index 000000000000..2fbe0009a563 --- /dev/null +++ b/code/modules/projectiles/guns/manufacturer/clip_lanchester/lasers.dm @@ -0,0 +1,43 @@ +/obj/item/gun/energy/kalix/clip + name = "CM-1" + desc = "CLIP's first standard-issue weapon, a near-copy of colonial-era weapons left behind by Free Zohil forces in CLIP's founding years. Outdated and difficult to source replacement parts for, but nevertheless still very common among BARD personnel and for ceremonal use." + icon = 'icons/obj/guns/manufacturer/clip_lanchester/48x32.dmi' + lefthand_file = 'icons/obj/guns/manufacturer/clip_lanchester/lefthand.dmi' + righthand_file = 'icons/obj/guns/manufacturer/clip_lanchester/righthand.dmi' + mob_overlay_icon = 'icons/obj/guns/manufacturer/clip_lanchester/onmob.dmi' + + icon_state = "cm1" + item_state = "cm1" + + gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_FULLAUTO) + default_firemode = FIREMODE_SEMIAUTO + + cell_type = /obj/item/stock_parts/cell/gun + ammo_type = list(/obj/item/ammo_casing/energy/kalix, /obj/item/ammo_casing/energy/disabler/hitscan) + + manufacturer = MANUFACTURER_MINUTEMAN_LASER + +/obj/item/gun/energy/laser/e50/clip + name = "ECM-50" + desc = "An extensive modification of the Eoehoma E-50 Emitter, customized specifically for CLIP-BARD. Sacrifices some of the E-50's raw power for vastly improved energy efficiency, while preserving its incendiary side-effects." + + icon = 'icons/obj/guns/manufacturer/clip_lanchester/48x32.dmi' + lefthand_file = 'icons/obj/guns/manufacturer/clip_lanchester/lefthand.dmi' + righthand_file = 'icons/obj/guns/manufacturer/clip_lanchester/righthand.dmi' + mob_overlay_icon = 'icons/obj/guns/manufacturer/clip_lanchester/onmob.dmi' + + icon_state = "cm50" + item_state = "cm50" + shaded_charge = TRUE + charge_sections = 4 + + ammo_type = list(/obj/item/ammo_casing/energy/laser/eoehoma/e50/clip) + +/obj/item/ammo_casing/energy/laser/eoehoma/e50/clip + projectile_type = /obj/projectile/beam/emitter/hitscan/clip + fire_sound = 'sound/weapons/gun/laser/heavy_laser.ogg' + e_cost = 6250 + delay = 0.6 SECONDS + +/obj/projectile/beam/emitter/hitscan/clip + damage = 35 diff --git a/code/modules/projectiles/guns/manufacturer/etherbor/energy_gunsword.dm b/code/modules/projectiles/guns/manufacturer/etherbor/energy_gunsword.dm index 4053b5f4d8a6..4e16d2d03512 100644 --- a/code/modules/projectiles/guns/manufacturer/etherbor/energy_gunsword.dm +++ b/code/modules/projectiles/guns/manufacturer/etherbor/energy_gunsword.dm @@ -50,10 +50,12 @@ desc = "The BG-16 is the military-grade beam gun designed and manufactured by Etherbor Industries as the standard-issue close-range weapon of the PGF." icon_state = "pgfgun" item_state = "pgfgun" - w_class = WEIGHT_CLASS_NORMAL + + gun_firemodes = list(FIREMODE_SEMIAUTO, FIREMODE_FULLAUTO) + default_firemode = FIREMODE_SEMIAUTO cell_type = /obj/item/stock_parts/cell/gun/pgf - ammo_type = list(/obj/item/ammo_casing/energy/pgf , /obj/item/ammo_casing/energy/disabler/hitscan) + ammo_type = list(/obj/item/ammo_casing/energy/kalix/pgf , /obj/item/ammo_casing/energy/disabler/hitscan) /obj/projectile/beam/hitscan/kalix/pgf name = "concentrated energy" @@ -64,9 +66,10 @@ muzzle_flash_color_override = LIGHT_COLOR_ELECTRIC_GREEN impact_light_color_override = LIGHT_COLOR_ELECTRIC_GREEN -/obj/item/ammo_casing/energy/pgf +/obj/item/ammo_casing/energy/kalix/pgf projectile_type = /obj/projectile/beam/hitscan/kalix/pgf fire_sound = 'sound/weapons/gun/energy/kalixsmg.ogg' + e_cost = 666 //30 shots per cell delay = 1 /obj/item/gun/energy/kalix/pistol //blue diff --git a/code/modules/projectiles/guns/manufacturer/frontier_import/ballistics.dm b/code/modules/projectiles/guns/manufacturer/frontier_import/ballistics.dm new file mode 100644 index 000000000000..224712438b90 --- /dev/null +++ b/code/modules/projectiles/guns/manufacturer/frontier_import/ballistics.dm @@ -0,0 +1,271 @@ +/obj/item/gun/ballistic/automatic/pistol/mauler + name = "Mauler machine pistol" + desc = "An automatic machine pistol originating from the Shoal. Impressive volume of fire with abysmal accuracy, lackluster armor penetration, and limited magazine size render it mostly useless outside of very close quarters. Chambered in 9mm." + icon = 'icons/obj/guns/manufacturer/frontier_import/48x32.dmi' + lefthand_file = 'icons/obj/guns/manufacturer/hunterspride/lefthand.dmi' + righthand_file = 'icons/obj/guns/manufacturer/hunterspride/righthand.dmi' + mob_overlay_icon = 'icons/obj/guns/manufacturer/frontier_import/onmob.dmi' + + icon_state = "mauler" + item_state = "hp_generic" + w_class = WEIGHT_CLASS_NORMAL + mag_type = /obj/item/ammo_box/magazine/m9mm_mauler + fire_delay = 0.06 SECONDS + + gun_firemodes = list(FIREMODE_FULLAUTO) + default_firemode = FIREMODE_FULLAUTO + + spread = 25 + spread_unwielded = 50 + recoil = 1 + recoil_unwielded = 4 + fire_sound = 'sound/weapons/gun/pistol/mauler.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/candor_cocked.ogg' + + load_sound = 'sound/weapons/gun/pistol/candor_reload.ogg' + load_empty_sound = 'sound/weapons/gun/pistol/candor_reload.ogg' + eject_sound = 'sound/weapons/gun/pistol/candor_unload.ogg' + eject_empty_sound = 'sound/weapons/gun/pistol/candor_unload.ogg' + +/obj/item/gun/ballistic/automatic/pistol/mauler/ComponentInitialize() + . = ..() + AddComponent(/datum/component/automatic_fire, 0.06 SECONDS) + +/obj/item/ammo_box/magazine/m9mm_mauler + name = "mauler machine pistol magazine (9mm)" + desc = "A 12-round magazine designed for the Mauler machine pistol." + icon_state = "mauler_mag-1" + base_icon_state = "mauler_mag" + ammo_type = /obj/item/ammo_casing/c9mm + caliber = "9mm" + max_ammo = 12 + +/obj/item/ammo_box/magazine/m9mm_mauler/update_icon_state() + . = ..() + icon_state = "[base_icon_state]-[!!ammo_count()]" + +/obj/item/gun/ballistic/automatic/pistol/spitter + name = "\improper Spitter" + desc = "An open-bolt submachine gun favored by the Frontiersmen. This design's origins are unclear, but its simple, robust design has been widely copied throughout the Frontier, and it is stereotypically used by pirates and various criminal groups that value low price and ease of concealment. Chambered in 9mm." + icon = 'icons/obj/guns/manufacturer/frontier_import/48x32.dmi' + lefthand_file = 'icons/obj/guns/manufacturer/frontier_import/lefthand.dmi' + righthand_file = 'icons/obj/guns/manufacturer/frontier_import/righthand.dmi' + mob_overlay_icon = 'icons/obj/guns/manufacturer/frontier_import/onmob.dmi' + + icon_state = "spitter" + item_state = "spitter" + mag_type = /obj/item/ammo_box/magazine/spitter_9mm + bolt_type = BOLT_TYPE_OPEN + weapon_weight = WEAPON_LIGHT + show_magazine_on_sprite = TRUE + manufacturer = MANUFACTURER_IMPORT + + spread = 20 + spread_unwielded = 35 + dual_wield_spread = 35 + wield_slowdown = 0.25 + wield_delay = 0.2 SECONDS + fire_delay = 0.09 SECONDS + + fire_sound = 'sound/weapons/gun/smg/spitter.ogg' + rack_sound = 'sound/weapons/gun/smg/spitter_cocked.ogg' + rack_sound_vary = FALSE + + load_sound_vary = FALSE + eject_sound_vary = FALSE + load_sound = 'sound/weapons/gun/smg/spitter_reload.ogg' + load_empty_sound = 'sound/weapons/gun/smg/spitter_reload.ogg' + eject_sound = 'sound/weapons/gun/smg/spitter_unload.ogg' + eject_empty_sound = 'sound/weapons/gun/smg/spitter_unload.ogg' + + valid_attachments = list( + /obj/item/attachment/silencer, + /obj/item/attachment/foldable_stock/spitter + ) + + slot_available = list( + ATTACHMENT_SLOT_MUZZLE = 1, + ATTACHMENT_SLOT_STOCK = 1 + ) + slot_offsets = list( + ATTACHMENT_SLOT_MUZZLE = list( + "x" = 32, + "y" = 23, + ), + ATTACHMENT_SLOT_STOCK = list( + "x" = -5, + "y" = 18, + ) + ) + + default_attachments = list(/obj/item/attachment/foldable_stock/spitter) + + gun_firemodes = list(FIREMODE_FULLAUTO) + default_firemode = FIREMODE_FULLAUTO + + + +/obj/item/ammo_box/magazine/spitter_9mm + name = "spitter pistol magazine (9mm)" + desc = "A thin 30-round magazine for the Spitter submachine gun." + icon_state = "spitter_mag-1" + base_icon_state = "spitter_mag" + ammo_type = /obj/item/ammo_casing/c9mm + caliber = "9mm" + max_ammo = 30 + +/obj/item/ammo_box/magazine/spitter_9mm/update_icon_state() + . = ..() + icon_state = "[base_icon_state]-[!!ammo_count()]" + + +/obj/item/gun/ballistic/automatic/smg/pounder + name = "Pounder" + desc = "An unusual submachine gun of Frontiersman make. A miniscule cartridge lacking both stopping power and armor penetration is compensated for with best-in-class ammunition capacity and cycle rate. Chambered in .22 LR." + icon = 'icons/obj/guns/manufacturer/frontier_import/48x32.dmi' + lefthand_file = 'icons/obj/guns/manufacturer/frontier_import/lefthand.dmi' + righthand_file = 'icons/obj/guns/manufacturer/frontier_import/righthand.dmi' + mob_overlay_icon = 'icons/obj/guns/manufacturer/frontier_import/onmob.dmi' + + icon_state = "pounder" + item_state = "pounder" + mag_type = /obj/item/ammo_box/magazine/c22lr_pounder_pan + burst_size = 1 + fire_delay = 0.05 SECONDS + spread = 25 + spread_unwielded = 50 + + fire_sound = 'sound/weapons/gun/smg/pounder.ogg' + rack_sound = 'sound/weapons/gun/smg/pounder_cocked.ogg' + rack_sound_vary = FALSE + + load_sound_vary = FALSE + eject_sound_vary = FALSE + load_sound = 'sound/weapons/gun/smg/pounder_reload.ogg' + load_empty_sound = 'sound/weapons/gun/smg/pounder_reload.ogg' + eject_sound = 'sound/weapons/gun/smg/pounder_unload.ogg' + eject_empty_sound = 'sound/weapons/gun/smg/pounder_unload.ogg' + + gun_firemodes = list(FIREMODE_FULLAUTO) + default_firemode = FIREMODE_FULLAUTO + + manufacturer = MANUFACTURER_IMPORT + wield_slowdown = 0.5 + +/obj/item/ammo_box/magazine/c22lr_pounder_pan + name = "pan magazine (.22 LR)" + desc = "A 50-round pan magazine for the Pounder submachine gun." + icon_state = "firestorm_pan" + base_icon_state = "firestorm_pan" + ammo_type = /obj/item/ammo_casing/c22lr + caliber = "22lr" + max_ammo = 50 + w_class = WEIGHT_CLASS_NORMAL + +/obj/item/ammo_box/magazine/c22lr_pounder_pan/update_icon_state() + . = ..() + icon_state = "firestorm_pan" + +/obj/item/gun/ballistic/automatic/hmg/shredder + name = "\improper Shredder" + desc = "A vastly atypical heavy machine gun, extensively modified by the Frontiersmen. Additional grips have been added to enable firing from the hip, and it has been modified to fire belts of shotgun shells. Chambered in 12g." + icon = 'icons/obj/guns/manufacturer/frontier_import/48x32.dmi' + lefthand_file = 'icons/obj/guns/manufacturer/frontier_import/lefthand.dmi' + righthand_file = 'icons/obj/guns/manufacturer/frontier_import/righthand.dmi' + mob_overlay_icon = 'icons/obj/guns/manufacturer/frontier_import/onmob.dmi' + + icon_state = "shredder" + item_state = "shredder" + mag_type = /obj/item/ammo_box/magazine/m12_shredder + spread = 15 + recoil = 2 + recoil_unwielded = 7 + fire_delay = 0.16 SECONDS + mag_display_ammo = TRUE + + bolt_type = BOLT_TYPE_STANDARD + show_magazine_on_sprite = TRUE + show_magazine_on_sprite_ammo = TRUE + tac_reloads = FALSE + fire_sound = 'sound/weapons/gun/hmg/shredder.ogg' + rack_sound = 'sound/weapons/gun/hmg/shredder_cocked_alt.ogg' + + load_sound_vary = FALSE + eject_sound_vary = FALSE + load_sound = 'sound/weapons/gun/hmg/shredder_reload.ogg' + load_empty_sound = 'sound/weapons/gun/hmg/shredder_reload.ogg' + eject_sound = 'sound/weapons/gun/hmg/shredder_unload.ogg' + eject_empty_sound = 'sound/weapons/gun/hmg/shredder_unload.ogg' + + manufacturer = MANUFACTURER_IMPORT + has_bipod = FALSE + +/obj/item/ammo_box/magazine/m12_shredder + name = "belt box (12g)" + desc = "A 40-round belt box for the Shredder heavy machine gun." + icon_state = "shredder_mag-1" + base_icon_state = "shredder_mag" + ammo_type = /obj/item/ammo_casing/shotgun/buckshot + caliber = "12ga" + max_ammo = 40 + w_class = WEIGHT_CLASS_NORMAL + +/obj/item/ammo_box/magazine/m12_shredder/update_icon_state() + . = ..() + icon_state = "[base_icon_state]-[!!ammo_count()]" + +/obj/item/ammo_box/magazine/m12_shredder/slug + name = "belt box (12g slug)" + desc = "A 40-round belt box for the Shredder heavy machine gun." + icon_state = "shredder_mag_slug-1" + base_icon_state = "shredder_mag_slug" + ammo_type = /obj/item/ammo_casing/shotgun + caliber = "12ga" + max_ammo = 40 + w_class = WEIGHT_CLASS_NORMAL + + +/obj/item/gun/ballistic/rocketlauncher/oneshot + name = "\improper Hammer" + desc = "A disposable rocket-propelled grenade launcher loaded with a HEDP shell." + + icon = 'icons/obj/guns/manufacturer/frontier_import/48x32.dmi' + lefthand_file = 'icons/obj/guns/manufacturer/frontier_import/lefthand.dmi' + righthand_file = 'icons/obj/guns/manufacturer/frontier_import/righthand.dmi' + mob_overlay_icon = 'icons/obj/guns/manufacturer/frontier_import/onmob.dmi' + base_icon_state = "rpg" + icon_state = "rpg" + item_state = "rpg" + + mag_type = /obj/item/ammo_box/magazine/internal/rocketlauncher/oneshot + fire_sound = 'sound/weapons/gun/general/rocket_launch.ogg' + load_sound = 'sound/weapons/gun/general/rocket_load.ogg' + weapon_weight = WEAPON_HEAVY + bolt_type = BOLT_TYPE_NO_BOLT + + cartridge_wording = "rocket" + empty_indicator = FALSE + sealed_magazine = TRUE + manufacturer = MANUFACTURER_IMPORT + slot_flags = ITEM_SLOT_BACK + + +/obj/item/gun/ballistic/rocketlauncher/oneshot/Initialize() + . = ..() + if(prob(1)) + name = "\improper Mallet" + +/obj/item/gun/ballistic/rocketlauncher/oneshot/examine(mob/user) + . = ..() + if(!chambered) + . += span_warning("It has been spent, and is now useless.") + +/obj/item/ammo_box/magazine/internal/rocketlauncher/oneshot + name = "oneshot rocket launcher magazine" + ammo_type = /obj/item/ammo_casing/caseless/rocket/hedp + caliber = "84mm" + max_ammo = 1 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 000000000000..18239e94dd7e --- /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 66adeb53ac59..2cccb02224ed 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 3aada5ddcb41..b95c3dd37ddb 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -37,6 +37,15 @@ muzzle_type = /obj/effect/projectile/muzzle/laser impact_type = /obj/effect/projectile/impact/laser +/obj/projectile/beam/laser/sharplite + speed = 0.4 + +/obj/projectile/beam/laser/light + damage = 15 + +/obj/projectile/beam/laser/light/sharplite + speed = 0.4 + /obj/projectile/beam/laser/eoehoma damage = 25 armour_penetration = -10 @@ -54,6 +63,9 @@ muzzle_type = /obj/effect/projectile/muzzle/heavy_laser impact_type = /obj/effect/projectile/impact/heavy_laser +/obj/projectile/beam/laser/heavylaser/sharplite + speed = 0.4 + /obj/projectile/beam/laser/on_hit(atom/target, blocked = FALSE) . = ..() if(iscarbon(target)) @@ -119,9 +131,15 @@ muzzle_type = /obj/effect/projectile/muzzle/disabler impact_type = /obj/effect/projectile/impact/disabler +/obj/projectile/beam/disabler/sharplite + speed = 0.4 + /obj/projectile/beam/disabler/weak damage = 15 +/obj/projectile/beam/disabler/weak/sharplite + speed = 0.4 + /obj/projectile/beam/disabler/weak/negative_ap armour_penetration = -30 range = 9 @@ -133,6 +151,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 @@ -146,6 +166,11 @@ return targets_turf.IgniteTurf(rand(8,22), "blue") +/obj/projectile/beam/pulse/sharplite_turret + wall_damage_flags = null + wall_damage_override = 0 + speed = 0.4 + /obj/projectile/beam/pulse/shotgun damage = 40 diff --git a/code/modules/projectiles/projectile/bullets/lmg.dm b/code/modules/projectiles/projectile/bullets/lmg.dm index 79a9b2feb07c..71da70475dde 100644 --- a/code/modules/projectiles/projectile/bullets/lmg.dm +++ b/code/modules/projectiles/projectile/bullets/lmg.dm @@ -67,7 +67,7 @@ /obj/projectile/bullet/mm712x82/hp name = "7.12x82mm hollow point bullet" - damage = 45 + damage = 40 armour_penetration = -20 /obj/projectile/bullet/incendiary/mm712x82 diff --git a/code/modules/projectiles/projectile/bullets/pistol.dm b/code/modules/projectiles/projectile/bullets/pistol.dm index a04fc2995c26..37af59c1de57 100644 --- a/code/modules/projectiles/projectile/bullets/pistol.dm +++ b/code/modules/projectiles/projectile/bullets/pistol.dm @@ -16,7 +16,7 @@ /obj/projectile/bullet/c9mm/hp name = "9mm hollow point bullet" - damage = 40 + damage = 35 armour_penetration = -50 /obj/projectile/bullet/incendiary/c9mm @@ -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 0c62fe5b3d4f..340aa692f5b2 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) @@ -69,7 +69,7 @@ imp.implant(M) /obj/projectile/bullet/c38/hotshot //similar to incendiary bullets, but do not leave a flaming trail - name = ".38 hot shot bullet" + name = ".38 hearth bullet" ricochets_max = 0 /obj/projectile/bullet/c38/hotshot/on_hit(atom/target, blocked = FALSE) @@ -80,7 +80,7 @@ M.IgniteMob() /obj/projectile/bullet/c38/iceblox //see /obj/projectile/temp for the original code - name = ".38 iceblox bullet" + name = ".38 chilled bullet" var/temperature = 100 ricochets_max = 0 @@ -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 f7b963cff94b..1d5d48c9b826 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) @@ -42,13 +42,6 @@ damage = 25 armour_penetration = 20 -//.300 BLK (Polymer Survivor Rifle) - -/obj/projectile/bullet/aac_300blk - name = ".300 Blackout bullet" - damage = 30 - armour_penetration = 20 - //7.62x40mm CLIP (SKM Rifles) /obj/projectile/bullet/a762_40 @@ -56,6 +49,13 @@ damage = 30 armour_penetration = 20 +/obj/projectile/bullet/a762_40/rubber //"rubber" + name = "7.62x40mm CLIP Rubber" + damage = 15 + stamina = 40 + armour_penetration = 20 + + //.308 WIN (M514 & GAL DMRs) /obj/projectile/bullet/a308 @@ -64,6 +64,13 @@ damage = 30 armour_penetration = 40 +/obj/projectile/bullet/a308/rubber //"rubber" + name = ".308 Rubber" + speed = 0.3 + damage = 25 + stamina = 50 + armour_penetration = 40 + // 8x58mm caseless (SG-669) /obj/projectile/bullet/a858 @@ -76,6 +83,20 @@ // .299 Eoehoma Caseless (E-40) /obj/projectile/bullet/c299 - name = ".229 Eoehoma caseless bullet" + name = ".299 Eoehoma caseless bullet" damage = 20 armour_penetration = 10 + +//6.5x57mm CLIP (F90) + +/obj/projectile/bullet/a65clip + name = "6.5x57mm CLIP bullet" + speed = 0.3 + stamina = 10 + damage = 40 + armour_penetration = 50 + + icon_state = "redtrac" + light_system = MOVABLE_LIGHT + light_color = COLOR_SOFT_RED + light_range = 2 diff --git a/code/modules/projectiles/projectile/bullets/shotgun.dm b/code/modules/projectiles/projectile/bullets/shotgun.dm index ba9c8c88d7f8..a069102a39cc 100644 --- a/code/modules/projectiles/projectile/bullets/shotgun.dm +++ b/code/modules/projectiles/projectile/bullets/shotgun.dm @@ -114,3 +114,9 @@ damage = 30 armour_penetration = -25 tile_dropoff = 3 + +/obj/projectile/bullet/pellet/blank + name = "blank" + damage = 30 + range = 2 + armour_penetration = -70 diff --git a/code/modules/projectiles/projectile/bullets/smg.dm b/code/modules/projectiles/projectile/bullets/smg.dm index fb5e2a53ce65..9b11c74e4c1d 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 b398731cfd6c..68071bd2c557 100644 --- a/code/modules/projectiles/projectile/special/plasma.dm +++ b/code/modules/projectiles/projectile/special/plasma.dm @@ -1,36 +1,25 @@ /obj/projectile/plasma name = "plasma blast" icon_state = "plasmacutter" - damage_type = BRUTE - damage = 5 + damage_type = BURN + damage = 15 range = 4 - dismemberment = 20 + dismemberment = 10 + /// 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 0680c62279fd..ede0e69b3ea9 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/holder.dm b/code/modules/reagents/chemistry/holder.dm index 86f4e05226e4..49765fd6747b 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -162,7 +162,7 @@ handle_reactions() return amount -/// Get the name of the reagent there is the most of in this holder +/// DEPRICATED use get_master_regent. Get the name of the reagent there is the most of in this holder /datum/reagents/proc/get_master_reagent_name() var/list/cached_reagents = reagent_list var/name @@ -175,7 +175,7 @@ return name -/// Get the id of the reagent there is the most of in this holder +/// DEPRICATED use get_master_regent. Get the id of the reagent there is the most of in this holder /datum/reagents/proc/get_master_reagent_id() var/list/cached_reagents = reagent_list var/max_type @@ -512,7 +512,7 @@ matching_container = 1 else - if(cached_my_atom.type == C.required_container) + if(cached_my_atom.type in typesof(C.required_container)) matching_container = 1 if (isliving(cached_my_atom) && !C.mob_react) //Makes it so certain chemical reactions don't occur in mobs return @@ -611,6 +611,7 @@ //Clear from relevant lists addiction_list -= R reagent_list -= R + SEND_SIGNAL(src, COMSIG_REAGENTS_DEL_REAGENT, R) qdel(R) update_total() if(my_atom) @@ -638,6 +639,8 @@ del_reagent(R.type) if(my_atom) my_atom.on_reagent_change(CLEAR_REAGENTS) + + SEND_SIGNAL(src, COMSIG_REAGENTS_CLEAR_REAGENTS) return 0 /** @@ -747,6 +750,8 @@ if(my_atom) my_atom.on_reagent_change(ADD_REAGENT) R.on_merge(data, amount) + + SEND_SIGNAL(src, COMSIG_REAGENTS_ADD_REAGENT, cached_reagents, amount, reagtemp, data, no_react) if(!no_react) handle_reactions() return TRUE @@ -765,6 +770,8 @@ update_total() if(my_atom) my_atom.on_reagent_change(ADD_REAGENT) + + SEND_SIGNAL(src, COMSIG_REAGENTS_NEW_REAGENT, reagent, amount, reagtemp, data, no_react) if(!no_react) handle_reactions() return TRUE @@ -797,6 +804,7 @@ //and zero, to prevent removing more than the holder has stored amount = clamp(amount, 0, R.volume) R.volume -= amount + SEND_SIGNAL(src, COMSIG_REAGENTS_REM_REAGENT, A, amount) update_total() if(!safety)//So it does not handle reactions when it need not to handle_reactions() diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index c9791666b54f..8e6935766346 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -86,10 +86,6 @@ if(machine_stat & BROKEN) . += "waitlight" -/obj/machinery/chem_master/blob_act(obj/structure/blob/B) - if (prob(50)) - qdel(src) - /obj/machinery/chem_master/attackby(obj/item/I, mob/user, params) if(default_deconstruction_screwdriver(user, "mixer0_nopower", "mixer0", I)) return @@ -341,18 +337,18 @@ reagents.trans_to(P, vol_each, transfered_by = usr) return TRUE if(item_type == "condimentPack") - var/obj/item/reagent_containers/food/condiment/pack/P + var/obj/item/reagent_containers/condiment/pack/P for(var/i = 0; i < amount; i++) - P = new/obj/item/reagent_containers/food/condiment/pack(drop_location()) + P = new/obj/item/reagent_containers/condiment/pack(drop_location()) P.originalname = name P.name = trim("[name] pack") P.desc = "A small condiment pack. The label says it contains [name]." reagents.trans_to(P, vol_each, transfered_by = usr) return TRUE if(item_type == "condimentBottle") - var/obj/item/reagent_containers/food/condiment/P + var/obj/item/reagent_containers/condiment/P for(var/i = 0; i < amount; i++) - P = new/obj/item/reagent_containers/food/condiment(drop_location()) + P = new/obj/item/reagent_containers/condiment(drop_location()) P.originalname = name P.name = trim("[name] bottle") reagents.trans_to(P, vol_each, transfered_by = usr) diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index 10519c75c434..ad27b15207a8 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -125,6 +125,7 @@ All effects don't start immediately, but rather get worse over time; the rate is description = "A widely known coffee-flavoured liqueur. Still labeled under an old name from Earth, despite the loss of history." color = "#664300" // rgb: 102, 67, 0 boozepwr = 45 + taste_description = "a bitter combination" glass_icon_state = "kahluaglass" glass_name = "glass of coffee liquor" glass_desc = "Bitter from the coffee and alcohol alike!" @@ -1373,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/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm index bf13904972bf..d37048250e62 100644 --- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm @@ -316,17 +316,21 @@ description = "Coffee and ice, refreshing and cool." color = "#112a3b" // rgb: 16, 40, 56 nutriment_factor = 0 + overdose_threshold = 80 taste_description = "bitter coldness" glass_icon_state = "icedcoffeeglass" glass_name = "iced coffee" glass_desc = "Iced black coffee. It's still going to be pretty bitter on it's own, though!" +/datum/reagent/consumable/icecoffee/overdose_process(mob/living/M) + M.Jitter(5) + ..() + /datum/reagent/consumable/icecoffee/on_mob_life(mob/living/carbon/M) M.dizziness = max(0,M.dizziness-5) M.drowsyness = max(0,M.drowsyness-3) M.AdjustSleeping(-40) M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) - M.Jitter(5) ..() . = 1 @@ -335,18 +339,22 @@ description = "Coffee with pulsing ice shards" color = "#132043" // rgb: 16, 40, 56 nutriment_factor = 0 + overdose_threshold = 80 quality = DRINK_FANTASTIC taste_description = "bitter coldness and a hint of smoke" glass_icon_state = "hoticecoffee" glass_name = "hot ice coffee" glass_desc = "The wonders of fusion mixed into a cup of coffee, resulting in an extremely hot-cold drink." +/datum/reagent/consumable/hot_ice_coffee/overdose_process(mob/living/M) + M.Jitter(5) + ..() + /datum/reagent/consumable/hot_ice_coffee/on_mob_life(mob/living/carbon/M) M.dizziness = max(0,M.dizziness-5) M.drowsyness = max(0,M.drowsyness-3) M.AdjustSleeping(-60) M.adjust_bodytemperature(-20 * TEMPERATURE_DAMAGE_COEFFICIENT, M.get_body_temp_normal()) - M.Jitter(5) M.adjustToxLoss(1*REM, 0) ..() . = TRUE @@ -617,17 +625,21 @@ description = "A hot beverage for those who can't handle the lactose." color = "#664300" // rgb: 102, 67, 0 quality = DRINK_NICE + overdose_threshold = 80 taste_description = "creamy coffee" glass_icon_state = "soy_latte" glass_name = "soy latte" glass_desc = "A nice and refreshing beverage. It goes well with a book, if you have the time to read." +/datum/reagent/consumable/soy_latte/overdose_process(mob/living/M) + M.Jitter(5) + ..() + /datum/reagent/consumable/soy_latte/on_mob_life(mob/living/carbon/M) M.dizziness = max(0,M.dizziness-5) M.drowsyness = max(0,M.drowsyness-3) M.SetSleeping(0) M.adjust_bodytemperature(5 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, M.get_body_temp_normal()) - M.Jitter(5) if(M.getBruteLoss() && prob(20)) M.heal_bodypart_damage(1,0, 0) ..() @@ -638,17 +650,21 @@ description = "A nice, strong and tasty beverage while you are reading." color = "#664300" // rgb: 102, 67, 0 quality = DRINK_NICE + overdose_threshold = 80 taste_description = "bitter cream" glass_icon_state = "cafe_latte" glass_name = "cafe latte" glass_desc = "A nice, strong and refreshing beverage. It goes well with a book, if you have the time to read." +/datum/reagent/consumable/cafe_latte/overdose_process(mob/living/M) + M.Jitter(5) + ..() + /datum/reagent/consumable/cafe_latte/on_mob_life(mob/living/carbon/M) M.dizziness = max(0,M.dizziness-5) M.drowsyness = max(0,M.drowsyness-3) M.SetSleeping(0) M.adjust_bodytemperature(5 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, M.get_body_temp_normal()) - M.Jitter(5) if(M.getBruteLoss() && prob(20)) M.heal_bodypart_damage(1,0, 0) ..() diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index b776a285b346..a62dfc53b63b 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 7c2b3f62099f..abdaf511691d 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -113,9 +113,9 @@ /datum/reagent/consumable/cooking_oil/expose_obj(obj/O, reac_volume) if(holder && holder.chem_temp >= fry_temperature) - if(isitem(O) && !istype(O, /obj/item/reagent_containers/food/snacks/deepfryholder)) + if(isitem(O) && !istype(O, /obj/item/food/deepfryholder)) O.loc.visible_message("[O] rapidly fries as it's splashed with hot oil! Somehow.") - var/obj/item/reagent_containers/food/snacks/deepfryholder/F = new(O.drop_location(), O) + var/obj/item/food/deepfryholder/F = new(O.drop_location(), O) F.fry(volume) F.reagents.add_reagent(/datum/reagent/consumable/cooking_oil, reac_volume) @@ -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 11a930efda30..6460cd423f78 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) ..() @@ -1961,7 +1956,10 @@ ..() /datum/reagent/medicine/soulus/overdose_process(mob/living/M) - M.ForceContractDisease(new /datum/disease/transformation/legionvirus(), FALSE, TRUE) + var/mob/living/carbon/C = M + if(!istype(C.getorganslot(ORGAN_SLOT_REGENERATIVE_CORE), /obj/item/organ/legion_skull)) + var/obj/item/organ/legion_skull/spare_ribs = new() + spare_ribs.Insert(M) ..() /datum/reagent/medicine/soulus/on_mob_end_metabolize(mob/living/M) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 24db5dd524d8..b6fe4370d9c5 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -243,49 +243,10 @@ REMOVE_TRAIT(L, TRAIT_HOLY, type) ..() -/datum/reagent/water/holywater/expose_mob(mob/living/M, method=TOUCH, reac_volume) - if(iscultist(M)) - to_chat(M, "A vile holiness begins to spread its shining tendrils through your mind, purging the Geometer of Blood's influence!") - ..() - -/datum/reagent/water/holywater/on_mob_life(mob/living/carbon/M) - if(!data) - data = list("misc" = 1) - data["misc"]++ - M.jitteriness = min(M.jitteriness+4,10) - if(iscultist(M)) - for(var/datum/action/innate/cult/blood_magic/BM in M.actions) - to_chat(M, "Your blood rites falter as holy water scours your body!") - for(var/datum/action/innate/cult/blood_spell/BS in BM.spells) - qdel(BS) - if(data["misc"] >= 25) // 10 units, 45 seconds @ metabolism 0.4 units & tick rate 1.8 sec - if(!M.stuttering) - M.stuttering = 1 - M.stuttering = min(M.stuttering+4, 10) - M.Dizzy(5) - if(iscultist(M) && prob(20)) - M.say(pick("Av'te Nar'Sie","Pa'lid Mors","INO INO ORA ANA","SAT ANA!","Daim'niodeis Arc'iai Le'eones","R'ge Na'sie","Diabo us Vo'iscum","Eld' Mon Nobis"), forced = "holy water") - if(prob(10)) - M.visible_message("[M] starts having a seizure!", "You have a seizure!") - M.Unconscious(120) - to_chat(M, "[pick("Your blood is your bond - you are nothing without it", "Do not forget your place", \ - "All that power, and you still fail?", "If you cannot scour this poison, I shall scour your meager life!")].") - if(data["misc"] >= 60) // 30 units, 135 seconds - if(iscultist(M)) - SSticker.mode.remove_cultist(M.mind, FALSE, TRUE) - M.jitteriness = 0 - M.stuttering = 0 - holder.remove_reagent(type, volume) // maybe this is a little too perfect and a max() cap on the statuses would be better?? - return - holder.remove_reagent(type, 0.4) //fixed consumption to prevent balancing going out of whack - /datum/reagent/water/holywater/expose_turf(turf/T, reac_volume) ..() if(!istype(T)) return - if(reac_volume>=10) - for(var/obj/effect/rune/R in T) - qdel(R) T.Bless() // Holy water. Mostly the same as water, it also heals the plant a little with the power of the spirits. Also ALSO increases instability. @@ -346,22 +307,12 @@ return ..() /datum/reagent/fuel/unholywater/on_mob_life(mob/living/carbon/M) - if(iscultist(M)) - M.drowsyness = max(M.drowsyness-5, 0) - M.AdjustAllImmobility(-40) - M.adjustStaminaLoss(-10, 0) - M.adjustToxLoss(-2, 0) - M.adjustOxyLoss(-2, 0) - M.adjustBruteLoss(-2, 0) - M.adjustFireLoss(-2, 0) - if(ishuman(M) && M.blood_volume < BLOOD_VOLUME_NORMAL) - M.blood_volume += 3 - else // Will deal about 90 damage when 50 units are thrown - M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 3, 150) - M.adjustToxLoss(2, 0) - M.adjustFireLoss(2, 0) - M.adjustOxyLoss(2, 0) - M.adjustBruteLoss(2, 0) + // Will deal about 90 damage when 50 units are thrown + M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 3, 150) + M.adjustToxLoss(2, 0) + M.adjustFireLoss(2, 0) + M.adjustOxyLoss(2, 0) + M.adjustBruteLoss(2, 0) holder.remove_reagent(type, 1) return TRUE @@ -516,12 +467,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 +542,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) ..() @@ -626,11 +569,14 @@ name = "Chlorine" description = "A pale yellow gas that's well known as an oxidizer. While it forms many harmless molecules in its elemental form it is far from harmless." reagent_state = GAS + metabolization_rate = REAGENTS_METABOLISM * 0.5 color = "#FFFB89" //pale yellow? let's make it light gray - taste_description = "chlorine" + taste_description = "caustic" /datum/reagent/chlorine/on_mob_life(mob/living/carbon/M) - M.take_bodypart_damage(1*REM, 0, 0, 0) + M.take_bodypart_damage(0, 1*REM, 0, 0) + if(prob(25)) + M.adjustOrganLoss(ORGAN_SLOT_LUNGS,2*REM) . = 1 ..() @@ -649,6 +595,45 @@ mytray.adjustWater(-round(chems.get_reagent_amount(type) * 0.5)) mytray.adjustWeeds(-rand(1,3)) +/datum/reagent/chlorine/expose_obj(obj/exposed_object, reac_volume) + if((!exposed_object) || (!reac_volume)) + return 0 + var/temp = holder ? holder.chem_temp : T20C + exposed_object.atmos_spawn_air("cl2=[reac_volume/2];TEMP=[temp]") + +/datum/reagent/chlorine/expose_turf(turf/open/exposed_turf, reac_volume) + if(istype(exposed_turf)) + var/temp = holder ? holder.chem_temp : T20C + exposed_turf.atmos_spawn_air("cl2=[reac_volume/2];TEMP=[temp]") + return + +/datum/reagent/hydrogen_chloride + name = "Hydrogen Chloride" + description = "A colorless gas that turns into hydrochloric acid in the presence of water." + reagent_state = GAS + metabolization_rate = REAGENTS_METABOLISM * 0.5 + color = "#f4ffe0" + taste_description = "acid" + +/datum/reagent/hydrogen_chloride/on_mob_life(mob/living/carbon/exposed_mob) + exposed_mob.take_bodypart_damage(0, 2*REM, 0, 0) + exposed_mob.adjustOrganLoss(ORGAN_SLOT_LUNGS,1*REM) + exposed_mob.adjustOrganLoss(ORGAN_SLOT_STOMACH,1*REM) + . = 1 + ..() + +/datum/reagent/hydrogen_chloride/expose_obj(obj/exposed_object, reac_volume) + if((!exposed_object) || (!reac_volume)) + return 0 + var/temp = holder ? holder.chem_temp : T20C + exposed_object.atmos_spawn_air("hcl=[reac_volume/2];TEMP=[temp]") + +/datum/reagent/hydrogen_chloride/expose_turf(turf/open/exposed_turf, reac_volume) + if(istype(exposed_turf)) + var/temp = holder ? holder.chem_temp : T20C + exposed_turf.atmos_spawn_air("hcl=[reac_volume/2];TEMP=[temp]") + return + /datum/reagent/fluorine name = "Fluorine" description = "A comically-reactive chemical element. The universe does not want this stuff to exist in this form in the slightest." @@ -720,8 +705,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) @@ -994,8 +977,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 @@ -1762,12 +1743,6 @@ if(istype(T)) T.MakeDry(ALL, TRUE, reac_volume * 5 SECONDS) //50 deciseconds per unit -/datum/reagent/drying_agent/expose_obj(obj/O, reac_volume) - if(O.type == /obj/item/clothing/shoes/galoshes) - var/t_loc = get_turf(O) - qdel(O) - new /obj/item/clothing/shoes/galoshes/dry(t_loc) - // Virology virus food chems. /datum/reagent/toxin/mutagen/mutagenvirusfood @@ -2328,6 +2303,14 @@ else addtimer(CALLBACK(L, TYPE_PROC_REF(/mob/living, gib)), 5 SECONDS) +/datum/reagent/concrete_mix + name = "Concrete Mix" + description = "Pre-made concrete mix, ideal for lazy engineers." + color = "#c4c0bc" + taste_description = "chalky concrete" + harmful = TRUE + reagent_state = SOLID + /datum/reagent/cement name = "Cement" description = "A sophisticated binding agent used to produce concrete." @@ -2488,3 +2471,38 @@ description = "Bacteria native to the Saint-Roumain Militia home planet." color = "#5a4f42" taste_description = "sour" + +//anti rad foam +/datum/reagent/anti_radiation_foam + name = "Anti-Radiation Foam" + description = "A tried and tested foam, used for decontaminating nuclear disasters." + reagent_state = LIQUID + color = "#A6FAFF55" + taste_description = "bitter, foamy awfulness." + +/datum/reagent/anti_radiation_foam/expose_turf(turf/open/T, reac_volume) + if (!istype(T)) + return + + if(reac_volume >= 1) + var/obj/effect/particle_effect/foam/antirad/F = (locate(/obj/effect/particle_effect/foam/antirad) in T) + if(!F) + F = new(T) + else if(istype(F)) + F.lifetime = initial(F.lifetime) //the foam is what does the cleaning here + +/datum/reagent/anti_radiation_foam/expose_obj(obj/O, reac_volume) + O.wash(CLEAN_RAD) + +/datum/reagent/anti_radiation_foam/expose_mob(mob/living/M, method=TOUCH, reac_volume) + if(method in list(TOUCH, VAPOR)) + M.radiation = M.radiation - rand(max(M.radiation * 0.95, M.radiation)) //get the hose + M.ExtinguishMob() + ..() + + +/datum/reagent/anti_radiation_foam/on_mob_life(mob/living/carbon/M) + M.adjustToxLoss(0.5, 200) + M.adjust_disgust(4) + ..() + . = 1 diff --git a/code/modules/reagents/chemistry/reagents/trickwine_reagents.dm b/code/modules/reagents/chemistry/reagents/trickwine_reagents.dm index be5e2ce35f9a..ff82cd185fb2 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 @@ -127,7 +126,7 @@ T.IgniteTurf(reac_volume) new /obj/effect/hotspot(T, reac_volume * 1, FIRE_MINIMUM_TEMPERATURE_TO_EXIST + reac_volume * 10) var/turf/otherT - for(var/direction in GLOB.cardinals) + for(var/direction in GLOB.alldirs) otherT = get_step(T, direction) otherT.IgniteTurf(reac_volume) new /obj/effect/hotspot(otherT, reac_volume * 1, FIRE_MINIMUM_TEMPERATURE_TO_EXIST + reac_volume * 10) diff --git a/code/modules/reagents/chemistry/recipes/others.dm b/code/modules/reagents/chemistry/recipes/others.dm index e7494191d1df..d9b6b782115e 100644 --- a/code/modules/reagents/chemistry/recipes/others.dm +++ b/code/modules/reagents/chemistry/recipes/others.dm @@ -620,6 +620,10 @@ required_temp = 400 mix_message = "The mixture boils off a grey vapor..."//The water boils off, leaving the cement +/datum/chemical_reaction/quick_concrete + results = list(/datum/reagent/concrete = 5) + required_reagents = list(/datum/reagent/concrete_mix = 5, /datum/reagent/water = 5) + /datum/chemical_reaction/hexement results = list(/datum/reagent/cement/hexement = 1) required_reagents = list(/datum/reagent/cement = 6, /datum/reagent/phenol = 1) diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm index f6f46d3c3970..10713fbf2288 100644 --- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm +++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm @@ -151,17 +151,8 @@ R.stun(20) R.reveal(100) R.adjustHealth(50) - addtimer(CALLBACK(src, PROC_REF(divine_explosion), round(created_volume/48,1),get_turf(holder.my_atom)), 2 SECONDS) ..() -/datum/chemical_reaction/reagent_explosion/potassium_explosion/holyboom/proc/divine_explosion(size, turf/T) - for(var/mob/living/carbon/C in get_hearers_in_view(size,T)) - if(iscultist(C)) - to_chat(C, "The divine explosion sears you!") - C.Paralyze(40) - C.adjust_fire_stacks(5) - C.IgniteMob() - /datum/chemical_reaction/gunpowder results = list(/datum/reagent/gunpowder = 3) required_reagents = list(/datum/reagent/saltpetre = 1, /datum/reagent/medicine/charcoal = 1, /datum/reagent/sulfur = 1) @@ -173,7 +164,6 @@ modifier = 1 mix_message = "Sparks start flying around the gunpowder!" - /datum/chemical_reaction/reagent_explosion/gunpowder_explosion/on_reaction(datum/reagents/holder, created_volume) addtimer(CALLBACK(src, PROC_REF(explode), holder, created_volume), rand(5,10) SECONDS) diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index d3bf1e211290..7429db4c1dec 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -139,7 +139,7 @@ var/chosen = getbork() var/obj/B = new chosen(T) if(prob(5))//Fry it! - var/obj/item/reagent_containers/food/snacks/deepfryholder/fried + var/obj/item/food/deepfryholder/fried fried = new(T, B) fried.fry() // actually set the name and colour it B = fried diff --git a/code/modules/reagents/reagent_containers/concrete_bags.dm b/code/modules/reagents/reagent_containers/concrete_bags.dm new file mode 100644 index 000000000000..eaceb1c85631 --- /dev/null +++ b/code/modules/reagents/reagent_containers/concrete_bags.dm @@ -0,0 +1,58 @@ +/* In a better world, the logic for transfering reagents out of containers wouldn't be in /glass */ + +/obj/item/reagent_containers/glass/concrete_bag + name = "\improper concrete mix bag" + desc = "A bag of concrete mixture from the F.O.O.D corportation. Just add water!" + w_class = WEIGHT_CLASS_HUGE //25+ kg + throw_range = 1 + + amount_per_transfer_from_this = 25 + possible_transfer_amounts = list(25,50,75,100) + list_reagents = list(/datum/reagent/concrete_mix = 200) + reagent_flags = OPENCONTAINER + volume = 200 + + icon = 'icons/obj/chemical/concrete.dmi' + icon_state = "concrete_bag" + item_state = "concrete_bag" + lefthand_file = 'icons/mob/inhands/misc/concrete_bag_lefthand.dmi' + righthand_file = 'icons/mob/inhands/misc/concrete_bag_righthand.dmi' + fill_icon_thresholds = null + + var/opened = FALSE + var/opened_icon_state = "concrete_bag_open" + + drop_sound = 'sound/items/handling/cloth_drop.ogg' + pickup_sound = 'sound/items/handling/cloth_pickup.ogg' + +/obj/item/reagent_containers/glass/concrete_bag/examine(mob/user) + . = ..() + if(!opened) + . += span_notice("[src] is unopened") + else + . += span_notice("[src] has been opened") + +/obj/item/reagent_containers/glass/concrete_bag/AltClick(mob/user) + if(!can_interact(user)) + return + if(!opened) + if(do_after(user, 3 SECONDS)) + visible_message(span_notice("[user] tears the top of [src] off!"), span_notice("You tear the top off [src]!")) + playsound(src, 'sound/items/poster_ripped.ogg', 50, 1) + new /obj/effect/decal/cleanable/generic(get_turf(src)) + icon_state = opened_icon_state + spillable = TRUE + opened = TRUE + return + return + return + +/obj/item/reagent_containers/glass/concrete_bag/attack_self(mob/user) + if(!opened) + return + ..() + +/obj/item/reagent_containers/glass/concrete_bag/attack(mob/user) + if(!opened) + return + ..() diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm index 62661594c06e..999b576ea08c 100644 --- a/code/modules/reagents/reagent_containers/glass.dm +++ b/code/modules/reagents/reagent_containers/glass.dm @@ -87,7 +87,7 @@ else if(reagents.total_volume && is_drainable()) switch(user.a_intent) - if(INTENT_HELP) + if(INTENT_DISARM) attempt_pour(target, user) if(INTENT_HARM) user.visible_message("[user] splashes the contents of [src] onto [target]!", \ diff --git a/code/modules/reagents/reagent_containers/jug.dm b/code/modules/reagents/reagent_containers/jug.dm index 80ebcbb4d5b3..de1570a9ef5c 100644 --- a/code/modules/reagents/reagent_containers/jug.dm +++ b/code/modules/reagents/reagent_containers/jug.dm @@ -143,3 +143,7 @@ /obj/item/reagent_containers/glass/chem_jug/thermite name = "chemical jug (thermite)" list_reagents = list(/datum/reagent/thermite = 150) + +/obj/item/reagent_containers/glass/chem_jug/hexacrete + name = "chemical jug (hexacrete)" + list_reagents = list(/datum/reagent/concrete/hexacrete = 150) diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index b4f46e6e4c19..1fe7a307353d 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -180,7 +180,7 @@ /obj/item/reagent_containers/spray/pepper name = "pepperspray" desc = "Manufactured by UhangInc, used to blind and down an opponent quickly." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' icon_state = "pepperspray" item_state = "pepperspray" lefthand_file = 'icons/mob/inhands/equipment/security_lefthand.dmi' diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 84a8292f7263..54d2fc182398 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -58,6 +58,12 @@ reagent_id = /datum/reagent/firefighting_foam tank_volume = 500 +/obj/structure/reagent_dispensers/foamtank/antirad + name = "anti-radiation foam tank" + desc = "A tank full of decontamination foam" + reagent_id = /datum/reagent/anti_radiation_foam + tank_volume = 1000 + /obj/structure/reagent_dispensers/fueltank name = "fuel tank" desc = "A tank full of industrial welding fuel. Do not consume." @@ -68,9 +74,6 @@ explosion(get_turf(src), 0, 1, 5, flame_range = 5) qdel(src) -/obj/structure/reagent_dispensers/fueltank/blob_act(obj/structure/blob/B) - boom() - /obj/structure/reagent_dispensers/fueltank/ex_act() boom() @@ -161,12 +164,6 @@ icon_state = "beer" reagent_id = /datum/reagent/consumable/ethanol/beer -/obj/structure/reagent_dispensers/beerkeg/blob_act(obj/structure/blob/B) - explosion(src.loc,0,3,5,7,10) - if(!QDELETED(src)) - qdel(src) - - /obj/structure/reagent_dispensers/virusfood name = "virus food dispenser" desc = "A dispenser of low-potency virus mutagenic." diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index b8b08486f20d..9b6a0629fa3e 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -365,7 +365,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) /obj/item/conveyor_switch_construct/afterattack(atom/A, mob/user, proximity) . = ..() - if(!proximity || user.stat || !isfloorturf(A) || istype(A, /area/shuttle)) + if(!proximity || user.stat || !isfloorturf(A)) return var/found = 0 for(var/obj/machinery/conveyor/C in view()) @@ -397,7 +397,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) /obj/item/stack/conveyor/afterattack(atom/A, mob/user, proximity) . = ..() - if(!proximity || user.stat || !isfloorturf(A) || istype(A, /area/shuttle)) + if(!proximity || user.stat || !isfloorturf(A)) return var/cdir = get_dir(A, user) if(A == user.loc) diff --git a/code/modules/research/bepis.dm b/code/modules/research/bepis.dm deleted file mode 100644 index bb56a69adf2b..000000000000 --- a/code/modules/research/bepis.dm +++ /dev/null @@ -1,275 +0,0 @@ -//This system is designed to act as an in-between for cargo and science, and the first major money sink in the game outside of just buying things from cargo (As of 10/9/19, anyway). - -//economics defined values, subject to change should anything be too high or low in practice. - -#define MACHINE_OPERATION 100000 -#define MACHINE_OVERLOAD 500000 -#define MAJOR_THRESHOLD 5500 -#define MINOR_THRESHOLD 3500 -#define STANDARD_DEVIATION 1000 - -/obj/machinery/rnd/bepis - name = "\improper B.E.P.I.S. Chamber" - desc = "A high fidelity testing device which unlocks the secrets of the known universe using the two most powerful substances available to man: excessive amounts of electricity and capital." - icon = 'icons/obj/machines/bepis.dmi' - icon_state = "chamber" - base_icon_state = "chamber" - density = TRUE - layer = ABOVE_MOB_LAYER - use_power = IDLE_POWER_USE - active_power_usage = ACTIVE_DRAW_HIGH - circuit = /obj/item/circuitboard/machine/bepis - - var/banking_amount = 100 - var/banked_cash = 0 //stored player cash - var/datum/bank_account/account //payer's account. - var/account_name //name of the payer's account. - var/error_cause = null - //Vars related to probability and chance of success for testing - var/major_threshold = MAJOR_THRESHOLD - var/minor_threshold = MINOR_THRESHOLD - var/std = STANDARD_DEVIATION //That's Standard Deviation, what did you think it was? - //Stock part variables - var/power_saver = 1 - var/inaccuracy_percentage = 1.5 - var/positive_cash_offset = 0 - var/negative_cash_offset = 0 - var/minor_rewards = list( - //To add a new minor reward, add it here. - /obj/item/stack/circuit_stack/full, - /obj/item/pen/survival, - /obj/item/toy/sprayoncan, - ) - var/static/list/item_list = list() - -/obj/machinery/rnd/bepis/attackby(obj/item/O, mob/user, params) - if(default_deconstruction_screwdriver(user, "chamber_open", "chamber", O)) - update_icon_state() - return - if(default_deconstruction_crowbar(O)) - return - if(!is_operational) - to_chat(user, "[src] can't accept money when it's not functioning.") - return - if(istype(O, /obj/item/holochip) || istype(O, /obj/item/spacecash/bundle)) - var/deposit_value = O.get_item_credit_value() - banked_cash += deposit_value - qdel(O) - say("Deposited [deposit_value] credits into storage.") - update_icon_state() - return - if(istype(O, /obj/item/card/bank)) - var/obj/item/card/bank/bank_card = O - if(bank_card.registered_account) - account = bank_card.registered_account - account_name = bank_card.registered_name - say("New account detected. Console Updated.") - else - say("No account detected on card. Aborting.") - return - return ..() - -/obj/machinery/rnd/bepis/RefreshParts() - var/C = 0 - var/M = 0 - var/L = 0 - var/S = 0 - for(var/obj/item/stock_parts/capacitor/Cap in component_parts) - C += ((Cap.rating - 1) * 0.1) - power_saver = 1 - C - for(var/obj/item/stock_parts/manipulator/Manip in component_parts) - M += ((Manip.rating - 1) * 250) - positive_cash_offset = M - for(var/obj/item/stock_parts/micro_laser/Laser in component_parts) - L += ((Laser.rating - 1) * 250) - negative_cash_offset = L - for(var/obj/item/stock_parts/scanning_module/Scan in component_parts) - S += ((Scan.rating - 1) * 0.25) - inaccuracy_percentage = (1.5 - S) - -/obj/machinery/rnd/bepis/proc/depositcash() - var/deposit_value = 0 - deposit_value = banking_amount - if(deposit_value == 0) - update_icon_state() - say("Attempting to deposit 0 credits. Aborting.") - return - deposit_value = clamp(round(deposit_value, 1), 1, 15000) - if(!account) - say("Cannot find user account. Please swipe a valid ID.") - return - if(!account.has_money(deposit_value)) - say("You do not possess enough credits.") - return - account.adjust_money(-deposit_value, "bepis") //The money vanishes, not paid to any accounts. - SSblackbox.record_feedback("amount", "BEPIS_credits_spent", deposit_value) - log_econ("[deposit_value] credits were inserted into [src] by [account.account_holder]") - banked_cash += deposit_value - use_power(1000 * power_saver) - say("Cash deposit successful. There is [banked_cash] in the chamber.") - update_icon_state() - return - -/obj/machinery/rnd/bepis/proc/withdrawcash() - var/withdraw_value = 0 - withdraw_value = banking_amount - if(withdraw_value > banked_cash) - say("Cannot withdraw more than stored funds. Aborting.") - else - banked_cash -= withdraw_value - new /obj/item/spacecash/bundle(src.loc, withdraw_value) - say("Withdrawing [withdraw_value] credits from the chamber.") - update_icon_state() - return - -/obj/machinery/rnd/bepis/proc/calcsuccess() - var/turf/dropturf = null - var/gauss_major = 0 - var/gauss_minor = 0 - var/gauss_real = 0 - var/list/turfs = block(locate(x-1,y-1,z),locate(x+1,y+1,z)) //NO MORE DISCS IN WINDOWS - while(length(turfs)) - var/turf/T = pick_n_take(turfs) - if(T.is_blocked_turf(TRUE)) - continue - else - dropturf = T - break - if (!dropturf) - dropturf = drop_location() - gauss_major = (gaussian(major_threshold, std) - negative_cash_offset) //This is the randomized profit value that this experiment has to surpass to unlock a tech. - gauss_minor = (gaussian(minor_threshold, std) - negative_cash_offset) //And this is the threshold to instead get a minor prize. - gauss_real = (gaussian(banked_cash, std*inaccuracy_percentage) + positive_cash_offset) //this is the randomized profit value that your experiment expects to give. - say("Real: [gauss_real]. Minor: [gauss_minor]. Major: [gauss_major].") - flick("chamber_flash",src) - update_icon_state() - banked_cash = 0 - if((gauss_real >= gauss_major) && (SSresearch.techweb_nodes_experimental.len > 0)) //Major Success. - say("Experiment concluded with major success. New technology node discovered on technology disc.") - new /obj/item/disk/tech_disk/major(dropturf,1) - if(SSresearch.techweb_nodes_experimental.len == 0) - say("Expended all available experimental technology nodes. Resorting to minor rewards.") - return - if(gauss_real >= gauss_minor) //Minor Success. - var/reward = pick(minor_rewards) - new reward(dropturf) - say("Experiment concluded with partial success. Dispensing compiled research efforts.") - return - if(gauss_real <= -1) //Critical Failure - say("ERROR: CRITICAL MACHIME MALFUNCTI- ON. CURRENCY IS NOT CRASH. CANNOT COMPUTE COMMAND: 'make bucks'") //not a typo, for once. - new /mob/living/simple_animal/deer(dropturf, 1) - use_power(MACHINE_OVERLOAD * power_saver) //To prevent gambling at low cost and also prevent spamming for infinite deer. - return - //Minor Failure - error_cause = pick("attempted to sell grey products to American dominated market.","attempted to sell gray products to British dominated market.","placed wild assumption that PDAs would go out of style.","simulated product #76 damaged brand reputation mortally.","simulated business model resembled 'pyramid scheme' by 98.7%.","product accidently granted override access to all vessel doors.") - say("Experiment concluded with zero product viability. Cause of error: [error_cause]") - return - -/obj/machinery/rnd/bepis/update_icon_state() - if(panel_open == TRUE) - icon_state = "[base_icon_state]_open" - return ..() - if((use_power == ACTIVE_POWER_USE) && (banked_cash > 0) && (is_operational)) - icon_state = "[base_icon_state]_active_loaded" - return ..() - if (((use_power == IDLE_POWER_USE) && (banked_cash > 0)) || (banked_cash > 0) && (!is_operational)) - icon_state = "[base_icon_state]_loaded" - return ..() - if(use_power == ACTIVE_POWER_USE && is_operational) - icon_state = "[base_icon_state]_active" - return ..() - if(((use_power == IDLE_POWER_USE) && (banked_cash == 0)) || (!is_operational)) - icon_state = base_icon_state - return ..() - return ..() - -/obj/machinery/rnd/bepis/ui_interact(mob/user, datum/tgui/ui) - ui = SStgui.try_update_ui(user, src, ui) - if(!ui) - ui = new(user, src, "Bepis", name) - ui.open() - RefreshParts() - -/obj/machinery/rnd/bepis/ui_data(mob/user) - var/list/data = list() - var/powered = FALSE - var/zvalue = (banked_cash - (major_threshold - positive_cash_offset - negative_cash_offset))/(std) - var/std_success = 0 - var/prob_success = 0 - //Admittedly this is messy, but not nearly as messy as the alternative, which is jury-rigging an entire Z-table into the code, or making an adaptive z-table. - var/z = abs(zvalue) - if(z > 0 && z <= 0.5) - std_success = 19.1 - else if(z > 0.5 && z <= 1.0) - std_success = 34.1 - else if(z > 1.0 && z <= 1.5) - std_success = 43.3 - else if(z > 1.5 && z <= 2.0) - std_success = 47.7 - else if(z > 2.0 && z <= 2.5) - std_success = 49.4 - else - std_success = 50 - if(zvalue > 0) - prob_success = 50 + std_success - else if(zvalue == 0) - prob_success = 50 - else - prob_success = 50 - std_success - - if(use_power == ACTIVE_POWER_USE) - powered = TRUE - data["account_owner"] = account_name - data["amount"] = banking_amount - data["stored_cash"] = banked_cash - data["mean_value"] = (major_threshold - positive_cash_offset - negative_cash_offset) - data["error_name"] = error_cause - data["power_saver"] = power_saver - data["accuracy_percentage"] = inaccuracy_percentage * 100 - data["positive_cash_offset"] = positive_cash_offset - data["negative_cash_offset"] = negative_cash_offset - data["manual_power"] = powered ? FALSE : TRUE - data["silicon_check"] = issilicon(user) - data["success_estimate"] = prob_success - return data - -/obj/machinery/rnd/bepis/ui_act(action,params) - . = ..() - if(.) - return - switch(action) - if("deposit_cash") - if(use_power == IDLE_POWER_USE) - return - depositcash() - if("withdraw_cash") - if(use_power == IDLE_POWER_USE) - return - withdrawcash() - if("begin_experiment") - if(use_power == IDLE_POWER_USE) - return - if(banked_cash == 0) - say("Please deposit funds to begin testing.") - return - calcsuccess() - use_power(MACHINE_OPERATION * power_saver) //This thing should eat your APC battery if you're not careful. - set_idle_power() //Machine shuts off after use to prevent spam and look better visually. - update_icon_state() - if("amount") - var/input = text2num(params["amount"]) - if(input) - banking_amount = input - if("toggle_power") - if(use_power == ACTIVE_POWER_USE) - set_idle_power() - else - set_active_power() - update_icon_state() - if("account_reset") - if(use_power == IDLE_POWER_USE) - return - account_name = "" - account = null - say("Account settings reset.") - . = TRUE diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 5e45c756c881..340119a4e78a 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -97,18 +97,25 @@ other types of metals and chemistry for reagents). color = "#8b70ff" illustration = "design" custom_materials = list(/datum/material/iron =300, /datum/material/glass =100) + var/disk_name = "Design Disk" + var/design_name var/list/blueprints = list() - var/list/starting_blueprints = list() + var/starting_blueprints = list() var/max_blueprints = 1 /obj/item/disk/design_disk/Initialize() . = ..() pixel_x = base_pixel_x + rand(-5, 5) pixel_y = base_pixel_y + rand(-5, 5) - blueprints = new/list(max_blueprints) + if(design_name) + name = jointext(list(disk_name, design_name), " - ") + if(length(starting_blueprints)) + for(var/design in starting_blueprints) + blueprints += new design() /obj/item/disk/design_disk/adv name = "Advanced Component Design Disk" + disk_name = "Advanced Design Disk" color = "#bed876" desc = "A disk for storing device design data for construction in lathes. This one has a little bit of extra storage space." custom_materials = list(/datum/material/iron =300, /datum/material/glass = 100, /datum/material/silver = 50) @@ -116,6 +123,7 @@ other types of metals and chemistry for reagents). /obj/item/disk/design_disk/super name = "Super Component Design Disk" + disk_name = "Super Design Disk" color = "#c25454" desc = "A disk for storing device design data for construction in lathes. This one has more extra storage space." custom_materials = list(/datum/material/iron =300, /datum/material/glass = 100, /datum/material/silver = 50, /datum/material/gold = 50) @@ -123,6 +131,7 @@ other types of metals and chemistry for reagents). /obj/item/disk/design_disk/elite name = "Elite Component Design Disk" + disk_name = "Elite Design Disk" color = "#333333" desc = "A disk for storing device design data for construction in lathes. This one has absurd amounts of extra storage space." custom_materials = list(/datum/material/iron =300, /datum/material/glass = 100, /datum/material/silver = 100, /datum/material/gold = 100, /datum/material/bluespace = 50) @@ -130,39 +139,60 @@ other types of metals and chemistry for reagents). //Disks with content /obj/item/disk/design_disk/ammo_c10mm - name = "Design Disk - 10mm Ammo" + design_name = "10mm Ammo" desc = "A design disk containing the pattern for a refill box of standard 10mm ammo, used in Stechkin pistols." - -/obj/item/disk/design_disk/ammo_c10mm/Initialize() - . = ..() - blueprints[1] = new /datum/design/c10mm() - + starting_blueprints = (/datum/design/c10mm) /obj/item/disk/design_disk/disposable_gun - name = "design disk - disposable gun" + design_name = "Disposable gun" desc = "A design disk containing designs for a cheap and disposable gun." illustration = "gun" max_blueprints = 2 - -/obj/item/disk/design_disk/disposable_gun/Initialize() - . = ..() - blueprints[1] = new /datum/design/disposable_gun() + starting_blueprints = list(/datum/design/disposable_gun) /obj/item/disk/design_disk/clip_mechs - name = "design disk - CLIP mecha modifications" - desc = "A design disk containing specifications for CLIP-custom mecha conversions." + design_name = "CLIP exosuit modifications" + desc = "A design disk containing specifications for CLIP-custom exosuit conversions." color = "#57b8f0" max_blueprints = 2 - -/obj/item/disk/design_disk/clip_mechs/Initialize() - . = ..() - blueprints[1] = new /datum/design/clip_ripley_upgrade() - blueprints[2] = new /datum/design/clip_durand_upgrade() + starting_blueprints = list(/datum/design/clip_ripley_upgrade, /datum/design/clip_durand_upgrade) /obj/item/disk/design_disk/ammo_c9mm - name = "Design Disk - 9mm Ammo" + design_name = "9mm Ammo" desc = "A design disk containing the pattern for a refill box of standard 9mm ammo, used in Commander pistols." - -/obj/item/disk/design_disk/ammo_c9mm/Initialize() - . = ..() - blueprints[1] = new /datum/design/c9mmautolathe() + starting_blueprints = list(/datum/design/c9mmautolathe) + +/obj/item/disk/design_disk/blanks + design_name = "Blank Ammo" + starting_blueprints = list(/datum/design/blank_shell) + + +/obj/item/disk/design_disk/ammo_1911 + design_name = "1911 Magazine" + desc = "A design disk containing the pattern for the classic 1911's seven round .45ACP magazine." + illustration = "ammo" + starting_blueprints = list(/datum/design/colt_1911_magazine) + +//KA modkit design discs +/obj/item/disk/design_disk/modkit_disc + design_name = "KA Mod" + desc = "A design disc containing the design for a unique kinetic accelerator modkit. It's compatible with a research console." + illustration = "accel" + color = "#6F6F6F" + starting_blueprints = list(/datum/design/unique_modkit) + +/obj/item/disk/design_disk/modkit_disc/mob_and_turf_aoe + design_name = "Offensive Mining Explosion Mod" + starting_blueprints = list(/datum/design/unique_modkit/offensive_turf_aoe) + +/obj/item/disk/design_disk/modkit_disc/rapid_repeater + design_name = "Rapid Repeater Mod" + starting_blueprints = list(/datum/design/unique_modkit/rapid_repeater) + +/obj/item/disk/design_disk/modkit_disc/resonator_blast + design_name = "Resonator Blast Mod" + starting_blueprints = list(/datum/design/unique_modkit/resonator_blast) + +/obj/item/disk/design_disk/modkit_disc/bounty + design_name = "Death Syphon Mod" + starting_blueprints = list(/datum/design/unique_modkit/bounty) diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 517c8691c92d..0b679dfcc4bf 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -286,7 +286,7 @@ build_type = AUTOLATHE | PROTOLATHE materials = list(/datum/material/iron = 750) build_path = /obj/item/tank/internals/emergency_oxygen/engi/empty - category = list("hacked","Misc","Equipment") + category = list("initial", "Misc","Equipment") departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_CARGO /datum/design/plasmaman_tank_belt @@ -295,7 +295,7 @@ build_type = AUTOLATHE | PROTOLATHE materials = list(/datum/material/iron = 800) build_path = /obj/item/tank/internals/plasmaman/belt/empty - category = list("hacked","Misc","Equipment") + category = list("initial", "Misc","Equipment") departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_CARGO /datum/design/generic_gas_tank @@ -356,7 +356,7 @@ id = "kitchen_knife" build_type = AUTOLATHE materials = list(/datum/material/iron = 12000) - build_path = /obj/item/kitchen/knife + build_path = /obj/item/melee/knife/kitchen category = list("initial","Dinnerware") /datum/design/plastic_knife @@ -364,7 +364,7 @@ id = "plastic_knife" build_type = AUTOLATHE | PROTOLATHE materials = list(/datum/material/plastic = 100) - build_path = /obj/item/kitchen/knife/plastic + build_path = /obj/item/melee/knife/plastic category = list("initial", "Tool Designs","Dinnerware") /datum/design/fork @@ -516,14 +516,6 @@ category = list("initial","Misc", "Tool Designs") departmental_flags = DEPARTMENTAL_FLAG_SERVICE -/datum/design/foilhat - name = "Tinfoil Hat" - id = "tinfoil_hat" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 5500) - build_path = /obj/item/clothing/head/foilhat - category = list("hacked", "Misc") - /datum/design/scalpel name = "Scalpel" id = "scalpel" @@ -772,31 +764,13 @@ build_path = /obj/item/ammo_box/foambox category = list("initial", "Misc") -//hacked autolathe recipes -//WS - emagged recipies -/datum/design/flamethrower - name = "Flamethrower" - id = "flamethrower" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 500) - build_path = /obj/item/flamethrower/full - category = list("hacked", "Security") - -/datum/design/electropack - name = "Electropack" - id = "electropack" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 10000, /datum/material/glass = 2500) - build_path = /obj/item/electropack - category = list("hacked", "Tools") - /datum/design/handcuffs name = "Handcuffs" id = "handcuffs" build_type = AUTOLATHE materials = list(/datum/material/iron = 500) build_path = /obj/item/restraints/handcuffs - category = list("hacked", "Security") + category = list("initial", "Security") /datum/design/receiver name = "Modular Receiver" @@ -804,7 +778,7 @@ build_type = AUTOLATHE materials = list(/datum/material/iron = 15000) build_path = /obj/item/weaponcrafting/receiver - category = list("hacked", "Security") + category = list("initial", "Security") /datum/design/c38_surplus name = "Ammo Box (.38 surplus)" @@ -822,13 +796,21 @@ build_path = /obj/item/ammo_casing/shotgun/beanbag category = list("initial", "Security", "Ammo") +/datum/design/blank_shell + name = "Shotgun Blank" + id = "blank_shell" + build_type = AUTOLATHE | PROTOLATHE + materials = list(/datum/material/iron = 2000) + build_path = /obj/item/ammo_casing/shotgun/blank + category = list("Security", "Ammo") + /datum/design/riot_dart name = "Foam Riot Dart" id = "riot_dart" build_type = AUTOLATHE materials = list(/datum/material/iron = 1000) //Discount for making individually - no box = less metal! build_path = /obj/item/ammo_casing/caseless/foam_dart/riot - category = list("hacked", "Security") + category = list("initial", "Security") /datum/design/riot_darts name = "Foam Riot Dart Box" @@ -836,15 +818,7 @@ build_type = AUTOLATHE materials = list(/datum/material/iron = 50000) //Comes with 40 darts build_path = /obj/item/ammo_box/foambox/riot - category = list("hacked", "Security") - -/datum/design/a357 - name = ".357 Casing" - id = "a357" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 4000) - build_path = /obj/item/ammo_casing/a357 - category = list("emagged", "Security") + category = list("initial", "Security") /datum/design/c10mm_surplus name = "Ammo Box (10mm surplus)" @@ -899,8 +873,8 @@ id = "cleaver" build_type = AUTOLATHE materials = list(/datum/material/iron = 18000) - build_path = /obj/item/kitchen/knife/butcher - category = list("hacked", "Dinnerware") + build_path = /obj/item/melee/knife/butcher + category = list("initial", "Dinnerware") /datum/design/spraycan name = "Spraycan" @@ -985,14 +959,6 @@ build_path = /obj/item/modular_computer/tablet category = list("initial","Misc") -/datum/design/slime_scanner - name = "Slime Scanner" - id = "slime_scanner" - build_type = AUTOLATHE - materials = list(/datum/material/iron = 300, /datum/material/glass = 200) - build_path = /obj/item/slime_scanner - category = list("initial", "Misc") - /datum/design/pet_carrier name = "Pet Carrier" id = "pet_carrier" @@ -1084,7 +1050,7 @@ build_type = AUTOLATHE materials = list(/datum/material/iron = 100, /datum/material/glass = 50) build_path = /obj/item/toy/gun - category = list("hacked", "Misc") + category = list("initial", "Misc") /datum/design/capbox name = "Box of Cap Gun Shots" @@ -1092,7 +1058,7 @@ build_type = AUTOLATHE materials = list(/datum/material/iron = 20, /datum/material/glass = 5) build_path = /obj/item/toy/ammo/gun - category = list("hacked", "Misc") + category = list("initial", "Misc") /datum/design/toy_balloon name = "Plastic Balloon" @@ -1100,7 +1066,7 @@ build_type = AUTOLATHE materials = list(/datum/material/plastic = 1200) build_path = /obj/item/toy/balloon - category = list("hacked", "Misc") + category = list("initial", "Misc") /datum/design/toy_meteor name = "Plastic Toy Meteor" @@ -1108,15 +1074,7 @@ build_type = AUTOLATHE materials = list(/datum/material/plastic = 1000) build_path = /obj/item/toy/minimeteor - category = list("hacked", "Misc") - -/datum/design/toy_armblade - name = "Plastic Armblade" - id = "toy_armblade" - build_type = AUTOLATHE - materials = list(/datum/material/plastic = 2000) - build_path = /obj/item/toy/foamblade - category = list("hacked", "Misc") + category = list("initial", "Misc") /datum/design/plastic_tree name = "Plastic Potted Plant" @@ -1181,7 +1139,7 @@ build_type = AUTOLATHE materials = list(/datum/material/iron = 20000) build_path = /obj/item/ammo_box/magazine/zip_ammo_9mm - category = list("hacked", "Security") + category = list("initial", "Security") /datum/design/pipedispenser name = "Pipe Dispenser (Machine Board)" @@ -1191,6 +1149,46 @@ build_path = /obj/item/circuitboard/machine/pipedispenser category = list("initial", "Machinery") +/datum/design/illestren_a850rclip + name = "8x50 Stripper Clip" + id = "IllestrenStripClip" + build_type = AUTOLATHE + materials = list(/datum/material/iron = 10000) + build_path = /obj/item/ammo_box/magazine/illestren_a850r/empty + category = list("initial", "Security", "Ammo") + +/datum/design/a300clip + name = ".300 Scout Stripper Clip" + id = "ScoutStripClip" + build_type = AUTOLATHE + materials = list(/datum/material/iron = 10000) + build_path = /obj/item/ammo_box/a300/empty + category = list("initial", "Security", "Ammo") + +/datum/design/a762_40clip + name = "7.62 Stripper Clip" + id = "PolymerStripClip" + build_type = AUTOLATHE + materials = list(/datum/material/iron = 10000) + build_path = /obj/item/ammo_box/a762_stripper/empty + category = list("initial", "Security", "Ammo") + +/datum/design/vickland_a308clip + name = ".308 Stripper Clip" + id = "VicklandStripClip" + build_type = AUTOLATHE + materials = list(/datum/material/iron = 10000) + build_path = /obj/item/ammo_box/vickland_a308/empty + category = list("initial", "Security", "Ammo") + +/datum/design/a858clip + name = "8x58 Stripper Clip" + id = "SSGStripClip" + build_type = AUTOLATHE + materials = list(/datum/material/iron = 10000) + build_path = /obj/item/ammo_box/a858/empty + category = list("initial", "Security", "Ammo") + /datum/design/control name = "Blast Door Controller" id = "blast" @@ -1247,3 +1245,12 @@ materials = list(/datum/material/plastic = 30) build_path = /obj/item/folder/biscuit/unsealed/confidental category = list("initial", "Tools", "Misc") + +/datum/design/marker_beacon + name = "Marker Beacon" + id = "marker_beacon" + build_type = AUTOLATHE + materials = list(/datum/material/iron = 50, /datum/material/glass = 20) + build_path = /obj/item/stack/marker_beacon + category = list("initial","Misc") + diff --git a/code/modules/research/designs/comp_board_designs.dm b/code/modules/research/designs/comp_board_designs.dm index 9b167598d026..2ba8ef1e2d7a 100644 --- a/code/modules/research/designs/comp_board_designs.dm +++ b/code/modules/research/designs/comp_board_designs.dm @@ -183,8 +183,8 @@ departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_CARGO /datum/design/board/mechapower - name = "Computer Design (Mech Bay Power Control Console)" - desc = "Allows for the construction of circuit boards used to build a mech bay power control console." + name = "Computer Design (Exosuit) Bay Power Control Console)" + desc = "Allows for the construction of circuit boards used to build an exosuit bay power control console." id = "mechapower" build_path = /obj/item/circuitboard/computer/mech_bay_power_console category = list("Computer Boards") diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index 5f79bbbf12e5..bbc83dd1e705 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -238,14 +238,6 @@ category = list("Research Machinery") departmental_flags = DEPARTMENTAL_FLAG_SCIENCE -/datum/design/board/bepis - name = "Machine Design (B.E.P.I.S. Board)" - desc = "The circuit board for a B.E.P.I.S." - id = "bepis" - build_path = /obj/item/circuitboard/machine/bepis - category = list("Research Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_CARGO - /datum/design/board/rdserver name = "Machine Design (R&D Server Board)" desc = "The circuit board for an R&D Server." @@ -604,13 +596,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/mecha_designs.dm b/code/modules/research/designs/mecha_designs.dm index 61fb07e77502..965a164e35d6 100644 --- a/code/modules/research/designs/mecha_designs.dm +++ b/code/modules/research/designs/mecha_designs.dm @@ -133,8 +133,8 @@ //////////////////////////////////////// /datum/design/mech_scattershot - name = "Exosuit Weapon (LBX AC 10 \"Scattershot\")" - desc = "Allows for the construction of LBX AC 10." + name = "Exosuit Weapon (LBX-10 \"Scattershot\")" + desc = "Allows for the construction of LBX-10." id = "mech_scattershot" build_type = MECHFAB build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot @@ -143,8 +143,8 @@ category = list("Exosuit Equipment") /datum/design/mech_scattershot_ammo - name = "LBX AC 10 Scattershot Ammunition" - desc = "Ammunition for the LBX AC 10 exosuit weapon." + name = "LBX-10 Scattershot Ammunition" + desc = "Ammunition for the LBX-10 exosuit weapon." id = "mech_scattershot_ammo" build_type = PROTOLATHE | MECHFAB build_path = /obj/item/mecha_ammo/scattershot @@ -153,7 +153,7 @@ category = list("Exosuit Ammunition", "Ammo") /datum/design/mech_carbine - name = "Exosuit Weapon (FNX-99 \"Hades\" Carbine)" + name = "Exosuit Weapon (FNX-99 \"Phoenix\" Carbine)" desc = "Allows for the construction of FNX-99 \"Hades\" Carbine." id = "mech_carbine" build_type = MECHFAB @@ -164,7 +164,7 @@ /datum/design/mech_carbine_ammo name = "FNX-99 Carbine Ammunition" - desc = "Ammunition for the FNX-99 \"Hades\" Carbine." + desc = "Ammunition for the FNX-99 \"Phoenix\" Carbine." id = "mech_carbine_ammo" build_type = PROTOLATHE | MECHFAB build_path = /obj/item/mecha_ammo/incendiary @@ -403,7 +403,7 @@ category = list("Exosuit Equipment") /datum/design/mech_lmg - name = "Exosuit Weapon (\"Ultra AC 2\" LMG)" + name = "Exosuit Weapon (\"UMG-2\" LMG)" desc = "A weapon for combat exosuits. Shoots a rapid, three shot burst." id = "mech_lmg" build_type = MECHFAB @@ -413,8 +413,8 @@ category = list("Exosuit Equipment") /datum/design/mech_lmg_ammo - name = "Ultra AC 2 Ammunition" - desc = "Ammunition for the Ultra AC 2 LMG" + name = "UMG-2 Ammunition" + desc = "Ammunition for the UMG-2 LMG" id = "mech_lmg_ammo" build_type = PROTOLATHE | MECHFAB build_path = /obj/item/mecha_ammo/lmg diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm index 816cd4f9fdbf..98a088756d81 100644 --- a/code/modules/research/designs/misc_designs.dm +++ b/code/modules/research/designs/misc_designs.dm @@ -229,7 +229,7 @@ id = "roastingstick" build_type = PROTOLATHE materials = list(/datum/material/iron=1000, /datum/material/glass = 500, /datum/material/bluespace = 250) - build_path = /obj/item/melee/roastingstick + build_path = /obj/item/roastingstick category = list("Equipment") departmental_flags = DEPARTMENTAL_FLAG_SERVICE diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index c444336adde5..1c3edc8b7c32 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -18,7 +18,7 @@ departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_BALLISTICS /datum/design/c38_hotshot - name = "Speed Loader (.38 Hot Shot)" + name = "Speed Loader (.38 Hearth)" desc = "Designed to quickly reload revolvers. Hot Shot bullets contain an incendiary payload." id = "c38_hotshot" build_type = PROTOLATHE @@ -28,7 +28,7 @@ departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_BALLISTICS /datum/design/c38_iceblox - name = "Speed Loader (.38 Iceblox)" + name = "Speed Loader (.38 Chilled)" desc = "Designed to quickly reload revolvers. Iceblox bullets contain a cryogenic payload." id = "c38_iceblox" build_type = PROTOLATHE @@ -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/research_disk.dm b/code/modules/research/research_disk.dm index 5f4fce5fd457..0354fddd50de 100644 --- a/code/modules/research/research_disk.dm +++ b/code/modules/research/research_disk.dm @@ -23,17 +23,6 @@ . = ..() stored_research = new /datum/techweb/admin -/obj/item/disk/tech_disk/major - name = "Reformatted technology disk" - desc = "A disk containing a new, completed tech from the B.E.P.I.S. Upload the disk to an R&D Console to redeem the tech." - color = "#FFBAFF" - illustration = "bepis" - custom_materials = list(/datum/material/iron=300, /datum/material/glass=100) - -/obj/item/disk/tech_disk/major/Initialize() - . = ..() - stored_research = new /datum/techweb/bepis - /obj/item/research_notes name = "research notes" desc = "Valuable scientific data. Use it in a research console to scan it." diff --git a/code/modules/research/techweb/_techweb.dm b/code/modules/research/techweb/_techweb.dm index 339edcfaa9a3..4aae75fbeab2 100644 --- a/code/modules/research/techweb/_techweb.dm +++ b/code/modules/research/techweb/_techweb.dm @@ -53,19 +53,6 @@ organization = ship_name return ..() -/datum/techweb/bepis //Should contain only 1 BEPIS tech selected at random. - id = "EXPERIMENTAL" - organization = "Nanotrasen R&D" - -/datum/techweb/bepis/New() - . = ..() - var/bepis_id = pick(SSresearch.techweb_nodes_experimental) //To add a new tech to the BEPIS, add the ID to this pick list. - var/datum/techweb_node/BN = (SSresearch.techweb_node_by_id(bepis_id)) - hidden_nodes -= BN.id //Has to be removed from hidden nodes - research_node(BN, TRUE, FALSE) - update_node_status(BN) - SSresearch.techweb_nodes_experimental -= bepis_id - /datum/techweb/Destroy() researched_nodes = null researched_designs = null diff --git a/code/modules/research/techweb/_techweb_node.dm b/code/modules/research/techweb/_techweb_node.dm index 73d732e28a1f..ff2b93791a77 100644 --- a/code/modules/research/techweb/_techweb_node.dm +++ b/code/modules/research/techweb/_techweb_node.dm @@ -7,7 +7,6 @@ var/display_name = "Errored Node" var/description = "Why are you seeing this?" var/hidden = FALSE //Whether it starts off hidden. - var/experimental = FALSE //If the tech can be randomly granted by the BEPIS as a reward. Meant to be fully given in tech disks, not researched. var/starting_node = FALSE //Whether it's available without any research. var/list/prereq_ids = list() var/list/design_ids = list() diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index dbca44b757b9..12dee3405a8c 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -13,13 +13,13 @@ // Cargo Stuff "c-reader", "desttagger", "salestagger", "handlabel", "packagewrap", // Research Stuff - "destructive_analyzer", "experimentor", "rdconsole", "bepis", "rdserver", "design_disk", "tech_disk", "mechfab", + "destructive_analyzer", "experimentor", "rdconsole", "rdserver", "design_disk", "tech_disk", "mechfab", // Miscellaneous Stufff "paystand", "space_heater", "bucket", "plastic_knife", "plastic_fork", "plastic_spoon", "fax", // 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 @@ -53,7 +53,7 @@ id = "mech_tools" starting_node = TRUE display_name = "Basic Exosuit Equipment" - description = "Various tools fit for basic mech units" + description = "Various tools fit for basic exosuit units" design_ids = list("mech_drill", "mech_mscanner", "mech_extinguisher", "mech_cable_layer") //WS Edit - Reverted Smartwire /datum/techweb_node/basic_tools @@ -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 @@ -814,7 +814,7 @@ /datum/techweb_node/adv_mecha_tools id = "adv_mecha_tools" display_name = "Advanced Exosuit Equipment" - description = "Tools for high level mech suits" + description = "Tools for high level exosuits" prereq_ids = list("adv_mecha") design_ids = list("mech_rcd", "mech_thrusters") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) @@ -823,7 +823,7 @@ /datum/techweb_node/med_mech_tools id = "med_mech_tools" display_name = "Medical Exosuit Equipment" - description = "Tools for high level mech suits" + description = "Tools for high level exosuits" prereq_ids = list("adv_biotech") design_ids = list("mech_sleeper", "mech_syringe_gun", "mech_medi_beam") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) @@ -832,7 +832,7 @@ /datum/techweb_node/mech_modules id = "adv_mecha_modules" display_name = "Simple Exosuit Modules" - description = "An advanced piece of mech weaponry" + description = "An advanced piece of exosuit weaponry" prereq_ids = list("adv_mecha", "bluespace_power") design_ids = list("mech_energy_relay", "mech_ccw_armor", "mech_proj_armor", "mech_generator_nuclear") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) @@ -840,8 +840,8 @@ /datum/techweb_node/mech_scattershot id = "mecha_tools" - display_name = "Exosuit Weapon (LBX AC 10 \"Scattershot\")" - description = "An advanced piece of mech weaponry" + display_name = "Exosuit Weapon (LBX-10 \"Scattershot\")" + description = "An advanced piece of exosuit weaponry" prereq_ids = list("ballistic_weapons") design_ids = list("mech_scattershot", "mech_scattershot_ammo") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) @@ -849,8 +849,8 @@ /datum/techweb_node/mech_carbine id = "mech_carbine" - display_name = "Exosuit Weapon (FNX-99 \"Hades\" Carbine)" - description = "An advanced piece of mech weaponry" + display_name = "Exosuit Weapon (FNX-99 \"Phoenix\" Carbine)" + description = "An advanced piece of exosuit weaponry" prereq_ids = list("ballistic_weapons") design_ids = list("mech_carbine", "mech_carbine_ammo") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) @@ -859,7 +859,7 @@ /datum/techweb_node/mech_ion id = "mmech_ion" display_name = "Exosuit Weapon (MKIV Ion Heavy Cannon)" - description = "An advanced piece of mech weaponry" + description = "An advanced piece of exosuit weaponry" prereq_ids = list("electronic_weapons", "emp_adv") design_ids = list("mech_ion") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) @@ -868,7 +868,7 @@ /datum/techweb_node/mech_tesla id = "mech_tesla" display_name = "Exosuit Weapon (MKI Tesla Cannon)" - description = "An advanced piece of mech weaponry" + description = "An advanced piece of exosuit weaponry" prereq_ids = list("electronic_weapons", "adv_power") design_ids = list("mech_tesla") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) @@ -877,7 +877,7 @@ /datum/techweb_node/mech_laser id = "mech_laser" display_name = "Exosuit Weapon (CH-PS \"Immolator\" Laser)" - description = "A basic piece of mech weaponry" + description = "A basic piece of exosuit weaponry" prereq_ids = list("beam_weapons") design_ids = list("mech_laser") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) @@ -886,7 +886,7 @@ /datum/techweb_node/mech_laser_heavy id = "mech_laser_heavy" display_name = "Exosuit Weapon (CH-LC \"Solaris\" Laser Cannon)" - description = "An advanced piece of mech weaponry" + description = "An advanced piece of exosuit weaponry" prereq_ids = list("adv_beam_weapons") design_ids = list("mech_laser_heavy") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) @@ -895,7 +895,7 @@ /datum/techweb_node/mech_disabler id = "mech_disabler" display_name = "Exosuit Weapon (CH-DS \"Peacemaker\" Mounted Disabler)" - description = "A basic piece of mech weaponry" + description = "A basic piece of exosuit weaponry" prereq_ids = list("beam_weapons") design_ids = list("mech_disabler") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) @@ -904,7 +904,7 @@ /datum/techweb_node/mech_grenade_launcher id = "mech_grenade_launcher" display_name = "Exosuit Weapon (SGL-6 Grenade Launcher)" - description = "An advanced piece of mech weaponry" + description = "An advanced piece of exosuit weaponry" prereq_ids = list("explosive_weapons") design_ids = list("mech_grenade_launcher", "mech_grenade_launcher_ammo") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) @@ -913,7 +913,7 @@ /datum/techweb_node/mech_missile_rack id = "mech_missile_rack" display_name = "Exosuit Weapon (BRM-6 Missile Rack)" - description = "An advanced piece of mech weaponry" + description = "An advanced piece of exosuit weaponry" prereq_ids = list("explosive_weapons") design_ids = list("mech_missile_rack", "mech_missile_rack_ammo") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) @@ -922,7 +922,7 @@ /datum/techweb_node/clusterbang_launcher id = "clusterbang_launcher" display_name = "Exosuit Module (SOB-3 Clusterbang Launcher)" - description = "An advanced piece of mech weaponry" + description = "An advanced piece of exosuit weaponry" prereq_ids = list("explosive_weapons") design_ids = list("clusterbang_launcher", "clusterbang_launcher_ammo") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) @@ -931,7 +931,7 @@ /datum/techweb_node/mech_teleporter id = "mech_teleporter" display_name = "Exosuit Module (Teleporter Module)" - description = "An advanced piece of mech Equipment" + description = "An advanced piece of exosuit equipment" prereq_ids = list("micro_bluespace") design_ids = list("mech_teleporter") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) @@ -940,7 +940,7 @@ /datum/techweb_node/mech_wormhole_gen id = "mech_wormhole_gen" display_name = "Exosuit Module (Localized Wormhole Generator)" - description = "An advanced piece of mech weaponry" + description = "An advanced piece of exosuit weaponry" prereq_ids = list("bluespace_travel") design_ids = list("mech_wormhole_gen") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) @@ -948,8 +948,8 @@ /datum/techweb_node/mech_lmg id = "mech_lmg" - display_name = "Exosuit Weapon (\"Ultra AC 2\" LMG)" - description = "An advanced piece of mech weaponry" + display_name = "Exosuit Weapon (\"UMG-2\" LMG)" + description = "An advanced piece of exosuit weaponry" prereq_ids = list("ballistic_weapons") design_ids = list("mech_lmg", "mech_lmg_ammo") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) @@ -966,7 +966,7 @@ /////////////////////////Nanites///////////////////////// -//Disabled pending nanite rework --Apogee-dev +//Disabled FOREVER /* /datum/techweb_node/nanite_base id = "nanite_base" @@ -1159,110 +1159,6 @@ research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1500) export_price = 5000 -////////////////////////B.E.P.I.S. Locked Techs//////////////////////// -/datum/techweb_node/light_apps - id = "light_apps" - display_name = "Illumination Applications" - description = "Applications of lighting and vision technology not originally thought to be commercially viable." - prereq_ids = list("base") - design_ids = list("bright_helmet", "rld_mini") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 2500 - hidden = TRUE - experimental = TRUE - -/datum/techweb_node/rolling_table - id = "rolling_table" - display_name = "Advanced Wheel Applications" - description = "Adding wheels to things can lead to extremely beneficial outcomes." - prereq_ids = list("base") - design_ids = list("rolling_table") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 2500 - hidden = TRUE - experimental = TRUE - -/datum/techweb_node/Mauna_Mug - id = "mauna_mug" - display_name = "Mauna Mug" - description = "A bored scientist was thinking to himself for very long...and then realized his coffee got cold! He made this invention to solve this extreme problem." - prereq_ids = list("base") - design_ids = list("mauna_mug") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 2500 - hidden = TRUE - experimental = TRUE - -/datum/techweb_node/spec_eng - id = "spec_eng" - display_name = "Specialized Engineering" - description = "Conventional wisdom has deemed these engineering products 'technically' safe, but far too dangerous to traditionally condone." - prereq_ids = list("base") - design_ids = list("lava_rods", "eng_gloves") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 2500 - hidden = TRUE - experimental = TRUE - -/datum/techweb_node/aus_security - id = "aus_security" - display_name = "Australicus Security Protocols" - description = "It is said that security in the Australicus sector is tight, so we took some pointers from their equipment. Thankfully, our sector lacks any signs of these, 'dropbears'." - prereq_ids = list("base") - design_ids = list("stun_boomerang") - - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 2500 - hidden = TRUE - experimental = TRUE - -/datum/techweb_node/interrogation - id = "interrogation" - display_name = "Enhanced Interrogation Technology" - description = "By cross-referencing several declassified documents from past dictatorial regimes, we were able to develop an incredibly effective interrogation device. \ - Ethical concerns about loss of free will do not apply to criminals, according to galactic law." - prereq_ids = list("base") - design_ids = list("hypnochair") - - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 3500) - export_price = 3500 - hidden = TRUE - experimental = TRUE - -/datum/techweb_node/sticky_advanced - id = "sticky_advanced" - display_name = "Advanced Tapenology" - description = "The absolute pinnacle of engineering!" - design_ids = list("electric_tape", "super_tape") - - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 2500 - hidden = TRUE - experimental = TRUE - -/datum/techweb_node/tackle_advanced - id = "tackle_advanced" - display_name = "Advanced Grapple Technology" - description = "Nanotrasen would like to remind its researching staff that it is never acceptable to \"glomp\" your coworkers, and further \"scientific trials\" on the subject \ - will no longer be accepted in its academic journals." - design_ids = list("tackle_dolphin", "tackle_rocket") - - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 2500 - hidden = TRUE - experimental = TRUE - -/datum/techweb_node/fishing - id = "fishing" - display_name = "Fishing Technology" - description = "Cutting edge fishing advancements." - prereq_ids = list("base") - design_ids = list("fishing_rod_tech") - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) - export_price = 2500 - hidden = TRUE - experimental = TRUE - //Helpers for debugging/balancing the techweb in its entirety! /proc/total_techweb_exports() var/list/datum/techweb_node/processing = list() diff --git a/code/modules/research/xenobiology/crossbreeding/_clothing.dm b/code/modules/research/xenobiology/crossbreeding/_clothing.dm index cab30f0219ef..3d466983f430 100644 --- a/code/modules/research/xenobiology/crossbreeding/_clothing.dm +++ b/code/modules/research/xenobiology/crossbreeding/_clothing.dm @@ -30,70 +30,6 @@ Slimecrossing Armor REMOVE_TRAIT(user, TRAIT_NOBREATH, "breathmask_[REF(src)]") user.remove_status_effect(/datum/status_effect/rebreathing) -/obj/item/clothing/glasses/prism_glasses - name = "prism glasses" - desc = "The lenses seem to glow slightly, and reflect light into dazzling colors." - icon = 'icons/obj/slimecrossing.dmi' - icon_state = "prismglasses" - actions_types = list(/datum/action/item_action/change_prism_colour, /datum/action/item_action/place_light_prism) - var/glasses_color = "#FFFFFF" - -/obj/item/clothing/glasses/prism_glasses/item_action_slot_check(slot) - if(slot == ITEM_SLOT_EYES) - return TRUE - -/obj/structure/light_prism - name = "light prism" - desc = "A shining crystal of semi-solid light. Looks fragile." - icon = 'icons/obj/slimecrossing.dmi' - icon_state = "lightprism" - density = FALSE - anchored = TRUE - max_integrity = 10 - -/obj/structure/light_prism/Initialize(mapload, newcolor) - . = ..() - color = newcolor - set_light_color(newcolor) - set_light(5) - -/obj/structure/light_prism/attack_hand(mob/user) - to_chat(user, "You dispel [src].") - qdel(src) - -/datum/action/item_action/change_prism_colour - name = "Adjust Prismatic Lens" - icon_icon = 'icons/obj/slimecrossing.dmi' - button_icon_state = "prismcolor" - -/datum/action/item_action/change_prism_colour/Trigger() - if(!IsAvailable()) - return - var/obj/item/clothing/glasses/prism_glasses/glasses = target - var/new_color = input(owner, "Choose the lens color:", "Color change",glasses.glasses_color) as color|null - if(!new_color) - return - glasses.glasses_color = new_color - -/datum/action/item_action/place_light_prism - name = "Fabricate Light Prism" - icon_icon = 'icons/obj/slimecrossing.dmi' - button_icon_state = "lightprism" - -/datum/action/item_action/place_light_prism/Trigger() - if(!IsAvailable()) - return - var/obj/item/clothing/glasses/prism_glasses/glasses = target - if(locate(/obj/structure/light_prism) in get_turf(owner)) - to_chat(owner, "There isn't enough ambient energy to fabricate another light prism here.") - return - if(istype(glasses)) - if(!glasses.glasses_color) - to_chat(owner, "The lens is oddly opaque...") - return - to_chat(owner, "You channel nearby light into a glowing, ethereal prism.") - new /obj/structure/light_prism(get_turf(owner), glasses.glasses_color) - /obj/item/clothing/head/peaceflower name = "heroine bud" desc = "An extremely addictive flower, full of peace magic." diff --git a/code/modules/research/xenobiology/crossbreeding/_weapons.dm b/code/modules/research/xenobiology/crossbreeding/_weapons.dm index ac663059d0c0..3f80f17e8a32 100644 --- a/code/modules/research/xenobiology/crossbreeding/_weapons.dm +++ b/code/modules/research/xenobiology/crossbreeding/_weapons.dm @@ -16,35 +16,6 @@ Slimecrossing Weapons if(prob(20)) user.emote("scream") -//Rainbow knife - Burning Rainbow -/obj/item/kitchen/knife/rainbowknife - name = "rainbow knife" - desc = "A strange, transparent knife which constantly shifts color. It hums slightly when moved." - icon = 'icons/obj/slimecrossing.dmi' - icon_state = "rainbowknife" - item_state = "rainbowknife" - force = 18 - throwforce = 15 - damtype = BRUTE - -/obj/item/kitchen/knife/rainbowknife/afterattack(atom/O, mob/user, proximity) - if(proximity && istype(O, /mob/living)) - damtype = pick(BRUTE, BURN, TOX, OXY) - switch(damtype) - if(BRUTE) - hitsound = 'sound/weapons/bladeslice.ogg' - attack_verb = list("slashed","sliced","cut") - if(BURN) - hitsound = 'sound/weapons/sear.ogg' - attack_verb = list("burned","singed","heated") - if(TOX) - hitsound = 'sound/weapons/pierce.ogg' - attack_verb = list("poisoned","dosed","toxified") - if(OXY) - hitsound = 'sound/effects/space_wind.ogg' - attack_verb = list("suffocated","winded","vacuumed") - return ..() - //Adamantine shield - Chilling Adamantine /obj/item/shield/adamantineshield name = "adamantine shield" diff --git a/code/modules/research/xenobiology/crossbreeding/burning.dm b/code/modules/research/xenobiology/crossbreeding/burning.dm index e9fd98232e2c..26c151e42316 100644 --- a/code/modules/research/xenobiology/crossbreeding/burning.dm +++ b/code/modules/research/xenobiology/crossbreeding/burning.dm @@ -305,11 +305,3 @@ Burning extracts: new /obj/item/shield/adamantineshield(get_turf(user)) ..() -/obj/item/slimecross/burning/rainbow - colour = "rainbow" - effect_desc = "Creates the Rainbow Knife, a kitchen knife that deals random types of damage." - -/obj/item/slimecross/burning/rainbow/do_effect(mob/user) - user.visible_message("[src] flattens into a glowing rainbow blade.") - new /obj/item/kitchen/knife/rainbowknife(get_turf(user)) - ..() diff --git a/code/modules/research/xenobiology/crossbreeding/charged.dm b/code/modules/research/xenobiology/crossbreeding/charged.dm index 25aa79302918..f01b148d4d5e 100644 --- a/code/modules/research/xenobiology/crossbreeding/charged.dm +++ b/code/modules/research/xenobiology/crossbreeding/charged.dm @@ -107,7 +107,7 @@ Charged extracts: effect_desc = "Creates a slime cake and some drinks." /obj/item/slimecross/charged/silver/do_effect(mob/user) - new /obj/item/reagent_containers/food/snacks/store/cake/slimecake(get_turf(user)) + new /obj/item/food/cake/slimecake(get_turf(user)) for(var/i in 1 to 10) var/drink_type = get_random_drink() new drink_type(get_turf(user)) diff --git a/code/modules/research/xenobiology/crossbreeding/chilling.dm b/code/modules/research/xenobiology/crossbreeding/chilling.dm index 9fe7857c073b..8b2aa42f0487 100644 --- a/code/modules/research/xenobiology/crossbreeding/chilling.dm +++ b/code/modules/research/xenobiology/crossbreeding/chilling.dm @@ -216,8 +216,7 @@ Chilling extracts: effect_desc = "Creates a pair of Prism Glasses, which allow the wearer to place colored light crystals." /obj/item/slimecross/chilling/pyrite/do_effect(mob/user) - user.visible_message("[src] crystallizes into a pair of spectacles!") - new /obj/item/clothing/glasses/prism_glasses(get_turf(user)) + user.visible_message("[src] does nothing sorry lol!") ..() /obj/item/slimecross/chilling/red diff --git a/code/modules/ruins/lavalandruin_code/elephantgraveyard.dm b/code/modules/ruins/lavalandruin_code/elephantgraveyard.dm deleted file mode 100644 index 7a26946f0ddc..000000000000 --- a/code/modules/ruins/lavalandruin_code/elephantgraveyard.dm +++ /dev/null @@ -1,258 +0,0 @@ -//******Decoration objects -//***Bone statues and giant skeleton parts. -/obj/structure/statue/bone - anchored = TRUE - max_integrity = 120 - material_drop_type = /obj/item/stack/sheet/bone - impressiveness = 18 // Carved from the bones of a massive creature, it's going to be a specticle to say the least - layer = ABOVE_ALL_MOB_LAYER - -/obj/structure/statue/bone/rib - name = "collosal rib" - desc = "It's staggering to think that something this big could have lived, let alone died." - oreAmount = 4 - icon = 'icons/obj/statuelarge.dmi' - icon_state = "rib" - -/obj/structure/statue/bone/skull - name = "collosal skull" - desc = "The gaping maw of a dead, titanic monster." - oreAmount = 12 - icon = 'icons/obj/statuelarge.dmi' - icon_state = "skull" - -/obj/structure/statue/bone/skull/half - desc = "The gaping maw of a dead, titanic monster. This one is cracked in half." - oreAmount = 6 - icon = 'icons/obj/statuelarge.dmi' - icon_state = "skull-half" - -//***Wasteland floor and rock turfs here. -/turf/open/floor/plating/asteroid/basalt/wasteland //Like a more fun version of living in Arizona. - name = "cracked earth" - icon = 'icons/turf/floors.dmi' - icon_state = "wasteland" - base_icon_state = "wasteland" - baseturfs = /turf/open/floor/plating/asteroid/basalt/wasteland - digResult = /obj/item/stack/ore/glass/basalt - initial_gas_mix = LAVALAND_DEFAULT_ATMOS - slowdown = 0.5 - floor_variance = 30 - max_icon_states = 6 - -/turf/closed/mineral/strong/wasteland - name = "ancient dry rock" - color = "#B5651D" - environment_type = "wasteland" - turf_type = /turf/open/floor/plating/asteroid/basalt/wasteland - baseturfs = /turf/open/floor/plating/asteroid/basalt/wasteland - smooth_icon = 'icons/turf/walls/rock_wall.dmi' - base_icon_state = "rock_wall" - smoothing_flags = SMOOTH_BITMASK | SMOOTH_BORDER - -/turf/closed/mineral/strong/wasteland/drop_ores() - if(prob(10)) - new /obj/item/stack/ore/iron(src, 1) - new /obj/item/stack/ore/glass(src, 1) - new /obj/effect/decal/remains/human/grave(src, 1) - else - new /obj/item/stack/sheet/bone(src, 1) - -//***Oil well puddles. -/obj/structure/sink/oil_well //You're not going to enjoy bathing in this... - name = "oil well" - desc = "A bubbling pool of oil.This would probably be valuable, had bluespace technology not destroyed the need for fossil fuels 200 years ago." - icon = 'icons/obj/watercloset.dmi' - icon_state = "puddle-oil" - dispensedreagent = /datum/reagent/fuel/oil - -/obj/structure/sink/oil_well/Initialize() - .=..() - create_reagents(20) - reagents.add_reagent(dispensedreagent, 20) - -/obj/structure/sink/oil_well/attack_hand(mob/M) - flick("puddle-oil-splash",src) - reagents.expose(M, TOUCH, 20) //Covers target in 20u of oil. - to_chat(M, "You touch the pool of oil, only to get oil all over yourself. It would be wise to wash this off with water.") - -/obj/structure/sink/oil_well/attackby(obj/item/O, mob/user, params) - flick("puddle-oil-splash",src) - if(O.tool_behaviour == TOOL_SHOVEL && !(flags_1&NODECONSTRUCT_1)) //attempt to deconstruct the puddle with a shovel - to_chat(user, "You fill in the oil well with soil.") - O.play_tool_sound(src) - deconstruct() - return 1 - if(istype(O, /obj/item/reagent_containers)) //Refilling bottles with oil - var/obj/item/reagent_containers/RG = O - if(RG.is_refillable()) - if(!RG.reagents.holder_full()) - RG.reagents.add_reagent(dispensedreagent, min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this)) - to_chat(user, "You fill [RG] from [src].") - return TRUE - to_chat(user, "\The [RG] is full.") - return FALSE - if(user.a_intent != INTENT_HARM) - to_chat(user, "You won't have any luck getting \the [O] out if you drop it in the oil.") - return 1 - else - return ..() - -/obj/structure/sink/oil_well/drop_materials() - new /obj/effect/decal/cleanable/oil(loc) - -//***Grave mounds. -/obj/structure/closet/crate/grave - name = "burial mound" - desc = "A marked patch of soil, adorned with a wooden cross" - icon_state = "grave" - dense_when_open = TRUE - material_drop = /obj/item/stack/ore/glass/basalt - material_drop_amount = 5 - opened = TRUE - anchorable = FALSE - anchored = TRUE - locked = TRUE - breakout_time = 900 - cutting_tool = /obj/item/shovel - var/lead_tomb = FALSE - var/first_open = FALSE - -/obj/structure/closet/crate/grave/attackby(obj/item/W, mob/user, params) - .=..() - if(istype(W, /obj/item/screwdriver)) - if(!user.is_literate()) - to_chat(user, "You scratch illegibly on [src]!") - return - var/t = stripped_input(user, "What would you like the inscription to be?", name, null, 53) - if(user.get_active_held_item() != W) - return - if(!user.canUseTopic(src, BE_CLOSE)) - return - if(t) - desc = "[t]" - return - -/obj/structure/closet/crate/grave/open(mob/living/user, obj/item/S, force = FALSE) - if(!opened) - to_chat(user, "The ground here is too hard to dig up with your bare hands. You'll need a shovel.") - else - to_chat(user, "The grave has already been dug up.") - -/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) - to_chat(user, "You start start to dig open \the [src] with \the [S]...") - if (do_after(user,20, target = src)) - opened = TRUE - locked = TRUE - dump_contents() - update_appearance() - SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "graverobbing", /datum/mood_event/graverobbing) - if(lead_tomb == TRUE && first_open == TRUE) - user.gain_trauma(/datum/brain_trauma/magic/stalker) - to_chat(user, "Oh no, no no no, THEY'RE EVERYWHERE! EVERY ONE OF THEM IS EVERYWHERE!") - first_open = FALSE - return 1 - return 1 - else - to_chat(user, "You can't dig up a grave with \the [S.name].") - return 1 - else - to_chat(user, "The grave has already been dug up.") - 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) - 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.") - SEND_SIGNAL(user, COMSIG_ADD_MOOD_EVENT, "graverobbing", /datum/mood_event/graverobbing) - deconstruct(TRUE) - return 1 - return - -/obj/structure/closet/crate/grave/bust_open() - ..() - opened = TRUE - update_appearance() - dump_contents() - return - -/obj/structure/closet/crate/grave/stone - name = "burial mound" - desc = "A marked patch of soil, adorned with a sandstone slab" - icon_state = "grave_lead" - -/obj/structure/closet/crate/grave/loot - name = "burial mound" - desc = "A marked patch of soil, showing signs of a burial long ago. You wouldn't disturb a grave... right?" - opened = FALSE - -/obj/structure/closet/crate/grave/loot/PopulateContents() //GRAVEROBBING IS NOW A FEATURE - ..() - new /obj/effect/decal/remains/human/grave(src) - switch(rand(1,7)) - if(1) - new /obj/item/coin/gold(src) - new /obj/item/storage/wallet(src) - if(2) - new /obj/item/clothing/glasses/meson(src) - if(3) - new /obj/item/coin/silver(src) - new /obj/item/shovel/spade(src) - if(4) - new /obj/item/storage/book/bible/booze(src) - if(5) - new /obj/item/clothing/neck/stethoscope(src) - new /obj/item/scalpel(src) - new /obj/item/hemostat(src) - - if(6) - new /obj/item/reagent_containers/glass/beaker(src) - new /obj/item/clothing/glasses/science(src) - if(7) - new /obj/item/clothing/glasses/sunglasses(src) - new /obj/item/clothing/mask/cigarette/rollie(src) - -/obj/structure/closet/crate/grave/loot/lead_researcher - name = "ominous burial mound" - desc = "Even in a place filled to the brim with graves, this one shows a level of preperation and planning that fills you with dread." - icon_state = "grave_lead" - lead_tomb = TRUE - first_open = TRUE - -/obj/structure/closet/crate/grave/loot/lead_researcher/PopulateContents() //ADVANCED GRAVEROBBING - ..() - new /obj/effect/decal/cleanable/blood/gibs/old(src) - -/obj/effect/decal/remains/human/grave - turf_loc_check = FALSE - -//***Fluff items for lore/intrigue -/obj/item/paper/crumpled/muddy/fluff/elephant_graveyard - name = "posted warning" - desc = "It seems to be smudged with mud and... oil?" - default_raw_text = "TO WHOM IT MAY CONCERN

    This area is property of the Nanotrasen Mining Division.

    Trespassing in this area is illegal, highly dangerous, and subject to several NDAs.

    Please turn back now, under intergalactic law section 48-R." - -/obj/item/paper/crumpled/muddy/fluff/elephant_graveyard/rnd_notes - name = "Research Findings: Day 26" - desc = "Huh, this one page looks like it was torn out of a full book. How odd." - icon_state = "docs_part" - default_raw_text = "Researcher name: B--*--* J--*s.

    Detailed findings:Today the camp site's cond-tion has wor--ene*. The ashst--ms keep blocking us off from le-ving the sit* for m-re supplies, and it's lo-king like we're out of pl*sma to p-wer the ge-erat*r. Can't rea-*y study c-*bon *ating with no li--ts, ya know? Da-*y's been going -*f again and ag-*n a-*ut h*w the company's left us to *ie here, but I j-s* keep tell-ng him to stop che*-in* out these damn graves. We m-y b* archaeologists, but -e sho*ld have t-e dec-**cy to know these grav-s are *-l NEW.

    The rest of the page is just semantics about carbon dating methods." - -/obj/item/paper/crumpled/muddy/fluff/elephant_graveyard/mutiny - name = "hastily scribbled note" - desc = "Seems like someone was in a hurry." - default_raw_text = "Alright, we all know that stuck up son a bitch is just doing this to keep us satisifed. Who the hell does he think he is, taking extra rations? We're OUT OF FOOD, CARL. Tomorrow at noon, we're going to try and take the ship by force. He HAS to be lying about the engine cooling down. He HAS TO BE. I'm tellin ya, with this implant I lifted off that last supply ship, I got the smarts to get us offa this shithole. Keep your knife handy carl." - -/obj/item/paper/fluff/ruins/elephant_graveyard/hypothesis - name = "research document" - desc = "Standard Nanotrasen typeface for important research documents." - default_raw_text = "Day 9: Tenative Conclusions

    While the area appears to be of significant cultural importance to the lizard race, outside of some sparce contact with native wildlife, we're yet to find any exact reasoning for the nature of this phenomenon. It seems that organic life is communally drawn to this planet as though it functions as a final resting place for intelligent life. As per company guidelines, this site shall be given the following classification: 'LZ-0271 - Elephant Graveyard'

    Compiled list of Artifact findings (Currently Sent Offsite)
    Cultist Blade Fragments: x8
    Brass Multiplicative Ore Sample: x105
    Syndicate Revolutionary Leader Implant (Broken) x1
    Extinct Cortical Borer Tissue Sample x1
    Space Carp Fossil x3" - -/obj/item/paper/fluff/ruins/elephant_graveyard/final_message - name = "important looking Note" - desc = "This note is well written, and seems to have been put here so you'd find it." - default_raw_text = "If you find this... you don't need to know who I am.

    You need to leave this place. I dunno what shit they did to me out here, but I don't think I'm going to be making it out of here.

    This place... it wears down your psyche. The other researchers out here laughed it off but... They were the first to go.

    One by one they started turning on each other. The more they found out, the more they started fighting and arguing...
    As I speak now, I had to... I wound up having to put most of my men down. I know what I had to do, and I know there's no way left for me to live with myself.
    If anyone ever finds this, just don't touch the graves.

    DO NOT. TOUCH. THE GRAVES. Don't be a dumbass, like we all were." diff --git a/code/modules/ruins/objects_and_mobs/sin_ruins.dm b/code/modules/ruins/objects_and_mobs/sin_ruins.dm index 7b5bd27a8ada..0747fb746ddd 100644 --- a/code/modules/ruins/objects_and_mobs/sin_ruins.dm +++ b/code/modules/ruins/objects_and_mobs/sin_ruins.dm @@ -102,34 +102,3 @@ var/turf/open/chasm/C = T C.set_target(dest) C.drop(user) - -//can't be bothered to do sloth right now, will make later - -/obj/item/kitchen/knife/envy //Envy's knife: Found in the Envy ruin. Attackers take on the appearance of whoever they strike. - name = "envy's knife" - desc = "Their success will be yours." - icon = 'icons/obj/wizard.dmi' - icon_state = "render" - item_state = "knife" - lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi' - force = 18 - throwforce = 10 - w_class = WEIGHT_CLASS_NORMAL - hitsound = 'sound/weapons/bladeslice.ogg' - -/obj/item/kitchen/knife/envy/afterattack(atom/movable/AM, mob/living/carbon/human/user, proximity) - . = ..() - if(!proximity) - return - if(!istype(user)) - return - if(ishuman(AM)) - var/mob/living/carbon/human/H = AM - if(user.real_name != H.dna.real_name) - user.real_name = H.dna.real_name - H.dna.transfer_identity(user, transfer_SE=1) - user.updateappearance(mutcolor_update=1) - user.domutcheck() - user.visible_message("[user]'s appearance shifts into [H]'s!", \ - "[H.p_they(TRUE)] think[H.p_s()] [H.p_theyre()] sooo much better than you. Not anymore, [H.p_they()] won't.") diff --git a/code/modules/ruins/rockplanet_ruin_code.dm b/code/modules/ruins/rockplanet_ruin_code.dm index 57a6d6fd4657..5eea45c24c6c 100644 --- a/code/modules/ruins/rockplanet_ruin_code.dm +++ b/code/modules/ruins/rockplanet_ruin_code.dm @@ -100,7 +100,7 @@ /obj/item/strange_crystal/attackby(obj/item/item, mob/user, params) . = ..() - if(!istype(item, /obj/item/kitchen/knife)) + if(!istype(item, /obj/item/melee/knife)) return playsound(src, 'sound/effects/glassbr1.ogg', 50, TRUE, -1) to_chat(user, "You start breaking [src] up into shards...") @@ -112,3 +112,8 @@ if(give_to_user) user.put_in_hands(result) to_chat(user, "You finish breaking [src]") + +/obj/item/paper/crumpled/muddy/fluff/distillery + name = "distillery instructions" + desc = "A crumpled note soaked in alcohol." + default_raw_text = "

    Moonshine Instructions


    Alright, I know some of y'all ain't literate enough for this, but if I'm ever found dead or missing, read this note. Gotta keep the craft alive.


    1. Fill the still with around 5 units of enzyme. We keep the whole supply in the green crate in the storeroom.
    2. Grind a cob of corn into bits, and add the mash to the still.
    3. Pour an equal amount of sugar into the still, and stir.
    4. Now, you'll have to scoop the product out and filter it by hand. We used to have a better still that'd filter the product itself, until last year's incident. This has to do for now.
    5. Evaluate your product. Good 'shine is clear like water, and burns blue. If it ain't good, dump it.

    PS: If you've got some leftover sugar, mix it into bicaridine. Equal parts sugar, carbon, and oxygen makes a potent salve for your wounds." diff --git a/code/modules/ruins/spaceruin_code/bigderelict1.dm b/code/modules/ruins/spaceruin_code/bigderelict1.dm index 99af3b9efa28..9e2a0957547b 100644 --- a/code/modules/ruins/spaceruin_code/bigderelict1.dm +++ b/code/modules/ruins/spaceruin_code/bigderelict1.dm @@ -6,13 +6,3 @@ /obj/item/paper/crumpled/ruins/bigderelict1/coward icon_state = "scrap_bloodied" default_raw_text = "If anyone finds this, please, don't let my kids know I died a coward.." - -/obj/item/disk/design_disk/ammo_1911 - name = "design disk - 1911 magazine" - desc = "A design disk containing the pattern for the classic 1911's seven round .45ACP magazine." - illustration = "ammo" - -/obj/item/disk/design_disk/ammo_1911/Initialize() - . = ..() - var/datum/design/colt_1911_magazine/M = new - blueprints[1] = M diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index 0c535f58ae23..756d889f5bc5 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -91,7 +91,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/item/storage/overmap_ship, 28) new /obj/item/tank/internals/oxygen/red(src) new /obj/item/tank/internals/oxygen/red(src) new /obj/item/pickaxe/emergency(src) - new /obj/item/kitchen/knife/hunting(src) + new /obj/item/melee/knife/hunting(src) new /obj/item/survivalcapsule(src) /obj/item/storage/overmap_ship/fueled/PopulateContents() diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm index f4d68520c879..6cb9f7304585 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/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 14a7497728a9..1a5ad3d0d35f 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -249,7 +249,7 @@ name = "transit dock" var/datum/map_zone/reserved_mapzone - var/area/shuttle/transit/assigned_area + var/area/hyperspace/assigned_area var/obj/docking_port/mobile/owner /obj/docking_port/stationary/transit/Initialize() @@ -321,6 +321,9 @@ ///A list of all gravity generators currently linked to the shuttle. var/list/gravgen_list = list() + ///A list of all turrets currently linked to the shuttle. + var/list/turret_list = list() + ///if this shuttle can move docking ports other than the one it is docked at var/can_move_docking_ports = TRUE @@ -406,7 +409,7 @@ shuttle_areas = list() var/list/all_turfs = return_ordered_turfs(x, y, z, dir) for(var/turf/curT as anything in all_turfs) - var/area/shuttle/cur_area = curT.loc + var/area/ship/cur_area = curT.loc if(istype(cur_area, area_type)) turf_count++ shuttle_areas[cur_area] = TRUE @@ -428,6 +431,7 @@ for(var/each in place) var/atom/atom = each atom.connect_to_shuttle(src, dock) + SEND_SIGNAL(src, COMSIG_SHIP_DONE_CONNECTING, dock) //this is a hook for custom behaviour. Maybe at some point we could add checks to see if engines are intact /obj/docking_port/mobile/proc/can_move() @@ -647,7 +651,7 @@ continue // out of bounds if(T0.type == T0.baseturfs) continue // indestructible - if(!all_shuttle_areas[T0.loc] || istype(T0.loc, /area/shuttle/transit)) + if(!all_shuttle_areas[T0.loc] || istype(T0.loc, /area/hyperspace)) continue // not part of the shuttle ripple_turfs += T1 @@ -718,13 +722,13 @@ var/obj/docking_port/stationary/S0 = docked if(istype(S0, /obj/docking_port/stationary/transit) && timeLeft(1) <= PARALLAX_LOOP_TIME) for(var/place in shuttle_areas) - var/area/shuttle/shuttle_area = place + var/area/ship/shuttle_area = place if(shuttle_area.parallax_movedir) parallax_slowdown() /obj/docking_port/mobile/proc/parallax_slowdown() for(var/place in shuttle_areas) - var/area/shuttle/shuttle_area = place + var/area/ship/shuttle_area = place shuttle_area.parallax_movedir = FALSE if(assigned_transit && assigned_transit.assigned_area) assigned_transit.assigned_area.parallax_movedir = FALSE diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index 42888130b542..5bf2107a998b 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -1,12 +1,9 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( /mob/living, - /obj/structure/blob, - /obj/effect/rune, /obj/structure/spider/spiderling, /obj/item/disk/nuclear, /obj/machinery/nuclearbomb, /obj/item/beacon, - /obj/singularity/narsie, /obj/singularity/wizard, /obj/machinery/teleport/station, /obj/machinery/teleport/hub, @@ -30,168 +27,3 @@ GLOBAL_LIST_INIT(blacklisted_cargo_types, typecacheof(list( /obj/machinery/camera, /obj/item/gps ))) - -/* -/obj/docking_port/mobile/supply - name = "supply shuttle" - callTime = 600 - - dir = WEST - port_direction = EAST - width = 12 - dwidth = 5 - height = 7 - movement_force = list("KNOCKDOWN" = 0, "THROW" = 0) - - - //Export categories for this run, this is set by console sending the shuttle. - var/export_categories = EXPORT_CARGO - -/obj/docking_port/mobile/supply/register() - . = ..() - SSshuttle.supply = src - -/obj/docking_port/mobile/supply/proc/check_blacklist(areaInstances) - for(var/place in areaInstances) - var/area/shuttle/shuttle_area = place - for(var/trf in shuttle_area) - var/turf/T = trf - for(var/a in T.GetAllContents()) - if(is_type_in_typecache(a, GLOB.blacklisted_cargo_types) && !istype(a, /obj/docking_port)) - return FALSE - return TRUE - -/obj/docking_port/mobile/supply/request(obj/docking_port/stationary/S) - if(mode != SHUTTLE_IDLE) - return 2 - return ..() - - -/obj/docking_port/mobile/supply/initiate_docking() - if(get_docked() == SSshuttle.supply_away_port) // Buy when we leave home. - buy() - . = ..() // Fly/enter transit. - if(. != DOCKING_SUCCESS) - return - if(get_docked() == SSshuttle.supply_away_port) // Sell when we get home - sell() - -/obj/docking_port/mobile/supply/proc/buy() - var/list/obj/miscboxes = list() //miscboxes are combo boxes that contain all small_item orders grouped - var/list/misc_order_num = list() //list of strings of order numbers, so that the manifest can show all orders in a box - var/list/misc_contents = list() //list of lists of items that each box will contain - if(!SSshuttle.shoppinglist.len) - return - - var/list/empty_turfs = list() - for(var/place in shuttle_areas) - var/area/shuttle/shuttle_area = place - for(var/turf/open/floor/T in shuttle_area) - if(T.is_blocked_turf()) - continue - empty_turfs += T - - var/value = 0 - var/purchases = 0 - for(var/datum/supply_order/SO in SSshuttle.shoppinglist) - if(!empty_turfs.len) - break - var/price = SO.pack.cost - var/datum/bank_account/D - if(SO.paying_account) //Someone paid out of pocket - D = SO.paying_account - price *= 1.1 //TODO make this customizable by the quartermaster - else - D = SSeconomy.get_dep_account(ACCOUNT_CAR) - if(D) - if(!D.adjust_money(-price)) - if(SO.paying_account) - D.bank_card_talk("Cargo order #[SO.id] rejected due to lack of funds. Credits required: [price]") - continue - - if(SO.paying_account) - D.bank_card_talk("Cargo order #[SO.id] has shipped. [price] credits have been charged to your bank account.") - var/datum/bank_account/department/cargo = SSeconomy.get_dep_account(ACCOUNT_CAR) - cargo.adjust_money(price - SO.pack.cost) //Cargo gets the handling fee - value += SO.pack.cost - SSshuttle.shoppinglist -= SO - SSshuttle.orderhistory += SO - - if(SO.pack.small_item) //small_item means it gets piled in the miscbox - if(SO.paying_account) - if(!miscboxes.len || !miscboxes[D.account_holder]) //if there's no miscbox for this person - miscboxes[D.account_holder] = new /obj/structure/closet/crate/secure/owned(pick_n_take(empty_turfs), SO.paying_account) - miscboxes[D.account_holder].name = "small items crate - purchased by [D.account_holder]" - misc_contents[D.account_holder] = list() - for (var/item in SO.pack.contains) - misc_contents[D.account_holder] += item - misc_order_num[D.account_holder] = "[misc_order_num[D.account_holder]]#[SO.id] " - else //No private payment, so we just stuff it all into a generic crate - if(!miscboxes.len || !miscboxes["Cargo"]) - miscboxes["Cargo"] = new /obj/structure/closet/crate/secure(pick_n_take(empty_turfs)) - miscboxes["Cargo"].name = "small items crate" - misc_contents["Cargo"] = list() - miscboxes["Cargo"].req_access = list() - for (var/item in SO.pack.contains) - misc_contents["Cargo"] += item - //new item(miscboxes["Cargo"]) - if(SO.pack.access) - miscboxes["Cargo"].req_access += SO.pack.access - misc_order_num["Cargo"] = "[misc_order_num["Cargo"]]#[SO.id] " - else - SO.generate(pick_n_take(empty_turfs)) - - SSblackbox.record_feedback("nested tally", "cargo_imports", 1, list("[SO.pack.cost]", "[SO.pack.name]")) - investigate_log("Order #[SO.id] ([SO.pack.name], placed by [key_name(SO.orderer_ckey)]), paid by [D.account_holder] has shipped.", INVESTIGATE_CARGO) - if(SO.pack.dangerous) - message_admins("\A [SO.pack.name] ordered by [ADMIN_LOOKUPFLW(SO.orderer_ckey)], paid by [D.account_holder] has shipped.") - purchases++ - - for(var/I in miscboxes) - var/datum/supply_order/SO = new/datum/supply_order() - SO.id = misc_order_num[I] - SO.generateCombo(miscboxes[I], I, misc_contents[I]) - qdel(SO) - - var/datum/bank_account/cargo_budget = SSeconomy.get_dep_account(ACCOUNT_CAR) - investigate_log("[purchases] orders in this shipment, worth [value] credits. [cargo_budget.account_balance] credits left.", INVESTIGATE_CARGO) - -/obj/docking_port/mobile/supply/proc/sell() - var/datum/bank_account/D = SSeconomy.get_dep_account(ACCOUNT_CAR) - var/presale_points = D.account_balance - - if(!GLOB.exports_list.len) // No exports list? Generate it! - setupExports() - - var/msg = "" - var/matched_bounty = FALSE - - var/datum/export_report/ex = new - - for(var/place in shuttle_areas) - var/area/shuttle/shuttle_area = place - for(var/atom/movable/AM in shuttle_area) - if(iscameramob(AM)) - continue - if(bounty_ship_item_and_contents(AM, dry_run = FALSE)) - matched_bounty = TRUE - if(!AM.anchored || istype(AM, /obj/mecha)) - export_item_and_contents(AM, export_categories , dry_run = FALSE, external_report = ex) - - if(ex.exported_atoms) - ex.exported_atoms += "." //ugh - - if(matched_bounty) - msg += "Bounty items received. An update has been sent to all bounty consoles. " - - for(var/datum/export/E in ex.total_amount) - var/export_text = E.total_printout(ex) - if(!export_text) - continue - - msg += export_text + "\n" - D.adjust_money(ex.total_value[E]) - - SSshuttle.centcom_message = msg - investigate_log("Shuttle contents sold for [D.account_balance - presale_points] credits. Contents: [ex.exported_atoms ? ex.exported_atoms.Join(",") + "." : "none."] Message: [SSshuttle.centcom_message || "none."]", INVESTIGATE_CARGO) -*/ diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm index 45d7f96b7df4..bc453eecd3d1 100644 --- a/code/modules/spells/spell.dm +++ b/code/modules/spells/spell.dm @@ -117,7 +117,6 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th var/holder_var_amount = 20 //same. The amount adjusted with the mob's var when the spell is used var/clothes_req = TRUE //see if it requires clothes - var/cult_req = FALSE //SPECIAL SNOWFLAKE clothes required for cult only spells var/human_req = FALSE //spell can only be cast by humans var/nonabstract_req = FALSE //spell can only be cast by mobs that are physical entities var/stat_allowed = FALSE //see if it requires being conscious/alive, need to set to 1 for ghostpells @@ -209,13 +208,6 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) //needed for th if(!is_type_in_typecache(H.head, casting_clothes)) to_chat(H, "You don't feel strong enough without your hat!") return FALSE - if(cult_req) //CULT_REQ CLOTHES CHECK - if(!istype(H.wear_suit, /obj/item/clothing/suit/magusred) && !istype(H.wear_suit, /obj/item/clothing/suit/space/hardsuit/cult)) - to_chat(H, "You don't feel strong enough without your armor.") - return FALSE - if(!istype(H.head, /obj/item/clothing/head/magus) && !istype(H.head, /obj/item/clothing/head/helmet/space/hardsuit/cult)) - to_chat(H, "You don't feel strong enough without your helmet.") - return FALSE else if(clothes_req || human_req) to_chat(user, "This spell can only be cast by humans!") diff --git a/code/modules/spells/spell_types/conjure.dm b/code/modules/spells/spell_types/conjure.dm index c34d5cf7c985..d2e3cc957ad9 100644 --- a/code/modules/spells/spell_types/conjure.dm +++ b/code/modules/spells/spell_types/conjure.dm @@ -63,7 +63,7 @@ range = -1 clothes_req = FALSE var/obj/item/item - var/item_type = /obj/item/banhammer + var/item_type = /obj/item school = "conjuration" charge_max = 150 cooldown_min = 10 diff --git a/code/modules/spells/spell_types/construct_spells.dm b/code/modules/spells/spell_types/construct_spells.dm deleted file mode 100644 index 61c05c4170fe..000000000000 --- a/code/modules/spells/spell_types/construct_spells.dm +++ /dev/null @@ -1,327 +0,0 @@ -//////////////////////////////Construct Spells///////////////////////// - -/obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser - charge_max = 1800 - action_background_icon_state = "bg_demon" - -/obj/effect/proc_holder/spell/aoe_turf/conjure/construct/lesser/cult - clothes_req = TRUE - charge_max = 2500 - -/obj/effect/proc_holder/spell/aoe_turf/area_conversion - name = "Area Conversion" - desc = "This spell instantly converts a small area around you." - - school = "transmutation" - charge_max = 50 - clothes_req = FALSE - invocation = "none" - invocation_type = "none" - range = 2 - action_icon = 'icons/mob/actions/actions_cult.dmi' - action_icon_state = "areaconvert" - action_background_icon_state = "bg_cult" - -/obj/effect/proc_holder/spell/aoe_turf/area_conversion/cast(list/targets, mob/user = usr) - playsound(get_turf(user), 'sound/items/welder.ogg', 75, TRUE) - for(var/turf/T in targets) - T.narsie_act(FALSE, TRUE, 100 - (get_dist(user, T) * 25)) - - -/obj/effect/proc_holder/spell/aoe_turf/conjure/floor - name = "Summon Cult Floor" - desc = "This spell constructs a cult floor." - - school = "conjuration" - charge_max = 20 - clothes_req = FALSE - invocation = "none" - invocation_type = "none" - range = 0 - summon_type = list(/turf/open/floor/engine/cult) - action_icon = 'icons/mob/actions/actions_cult.dmi' - action_icon_state = "floorconstruct" - action_background_icon_state = "bg_cult" - - -/obj/effect/proc_holder/spell/aoe_turf/conjure/wall - name = "Summon Cult Wall" - desc = "This spell constructs a cult wall." - - school = "conjuration" - charge_max = 100 - clothes_req = FALSE - invocation = "none" - invocation_type = "none" - range = 0 - action_icon = 'icons/mob/actions/actions_cult.dmi' - action_icon_state = "lesserconstruct" - action_background_icon_state = "bg_cult" - - summon_type = list(/turf/closed/wall/mineral/cult/artificer) //we don't want artificer-based runed metal farms - - -/obj/effect/proc_holder/spell/aoe_turf/conjure/wall/reinforced - name = "Greater Construction" - desc = "This spell constructs a reinforced metal wall." - - school = "conjuration" - charge_max = 300 - clothes_req = FALSE - invocation = "none" - invocation_type = "none" - range = 0 - - summon_type = list(/turf/closed/wall/r_wall) - -/obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone - name = "Summon Soulstone" - desc = "This spell reaches into Nar'Sie's realm, summoning one of the legendary fragments across time and space." - - school = "conjuration" - charge_max = 2400 - clothes_req = FALSE - invocation = "none" - invocation_type = "none" - range = 0 - action_icon = 'icons/mob/actions/actions_cult.dmi' - action_icon_state = "summonsoulstone" - action_background_icon_state = "bg_demon" - - summon_type = list(/obj/item/soulstone) - -/obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone/cult - clothes_req = TRUE - charge_max = 3600 - -/obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone/noncult - summon_type = list(/obj/item/soulstone/anybody) - -/obj/effect/proc_holder/spell/aoe_turf/conjure/soulstone/noncult/purified - summon_type = list(/obj/item/soulstone/anybody/purified) - -/obj/effect/proc_holder/spell/targeted/forcewall/cult - name = "Shield" - desc = "This spell creates a temporary forcefield to shield yourself and allies from incoming fire." - school = "transmutation" - charge_max = 400 - clothes_req = FALSE - invocation = "none" - invocation_type = "none" - wall_type = /obj/effect/forcefield/cult - action_icon = 'icons/mob/actions/actions_cult.dmi' - action_icon_state = "cultforcewall" - action_background_icon_state = "bg_demon" - - - -/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift - name = "Phase Shift" - desc = "This spell allows you to pass through walls." - - school = "transmutation" - charge_max = 250 - clothes_req = FALSE - invocation = "none" - invocation_type = "none" - range = -1 - include_user = TRUE - jaunt_duration = 50 //in deciseconds - action_icon = 'icons/mob/actions/actions_cult.dmi' - action_icon_state = "phaseshift" - action_background_icon_state = "bg_demon" - jaunt_in_time = 6 - jaunt_in_type = /obj/effect/temp_visual/dir_setting/wraith - jaunt_out_type = /obj/effect/temp_visual/dir_setting/wraith/out - -/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/jaunt_steam(mobloc) - return - -/obj/effect/proc_holder/spell/targeted/ethereal_jaunt/shift/angelic - jaunt_in_type = /obj/effect/temp_visual/dir_setting/wraith/angelic - jaunt_out_type = /obj/effect/temp_visual/dir_setting/wraith/out/angelic - -/obj/effect/proc_holder/spell/targeted/projectile/magic_missile/lesser - name = "Lesser Magic Missile" - desc = "This spell fires several, slow moving, magic projectiles at nearby targets." - - school = "evocation" - charge_max = 400 - clothes_req = FALSE - invocation = "none" - invocation_type = "none" - max_targets = 6 - action_icon_state = "magicm" - action_background_icon_state = "bg_demon" - proj_type = /obj/projectile/magic/spell/magic_missile/lesser - -/obj/projectile/magic/spell/magic_missile/lesser - color = "red" //Looks more culty this way - range = 10 - -/obj/effect/proc_holder/spell/targeted/smoke/disable - name = "Paralysing Smoke" - desc = "This spell spawns a cloud of paralysing smoke." - - school = "conjuration" - charge_max = 200 - clothes_req = FALSE - invocation = "none" - invocation_type = "none" - range = -1 - include_user = TRUE - cooldown_min = 20 //25 deciseconds reduction per rank - - smoke_spread = 3 - smoke_amt = 4 - action_icon_state = "smoke" - action_background_icon_state = "bg_cult" - -/obj/effect/proc_holder/spell/pointed/abyssal_gaze - name = "Abyssal Gaze" - desc = "This spell instills a deep terror in your target, temporarily chilling and blinding it." - charge_max = 750 - range = 5 - stat_allowed = FALSE - school = "evocation" - clothes_req = FALSE - invocation = "none" - invocation_type = "none" - ranged_mousepointer = 'icons/effects/mouse_pointers/cult_target.dmi' - action_icon = 'icons/mob/actions/actions_cult.dmi' - action_background_icon_state = "bg_demon" - action_icon_state = "abyssal_gaze" - active_msg = "You prepare to instill a deep terror in a target..." - -/obj/effect/proc_holder/spell/pointed/abyssal_gaze/cast(list/targets, mob/user) - if(!LAZYLEN(targets)) - to_chat(user, "No target found in range!") - return FALSE - if(!can_target(targets[1], user)) - return FALSE - - var/mob/living/carbon/target = targets[1] - if(target.anti_magic_check(TRUE, TRUE)) - to_chat(user, "The spell had no effect!") - to_chat(target, "You feel a freezing darkness closing in on you, but it rapidly dissipates.") - return FALSE - - to_chat(target, "A freezing darkness surrounds you...") - target.playsound_local(get_turf(target), 'sound/hallucinations/i_see_you1.ogg', 50, 1) - user.playsound_local(get_turf(user), 'sound/effects/ghost2.ogg', 50, 1) - target.become_blind(ABYSSAL_GAZE_BLIND) - addtimer(CALLBACK(src, PROC_REF(cure_blindness), target), 40) - target.adjust_bodytemperature(-200) - -/** - * cure_blidness: Cures Abyssal Gaze blindness from the target - * - * Arguments: - * * target The mob that is being cured of the blindness. - */ -/obj/effect/proc_holder/spell/pointed/abyssal_gaze/proc/cure_blindness(mob/target) - if(isliving(target)) - var/mob/living/L = target - L.cure_blind(ABYSSAL_GAZE_BLIND) - -/obj/effect/proc_holder/spell/pointed/abyssal_gaze/can_target(atom/target, mob/user, silent) - . = ..() - if(!.) - return FALSE - if(!iscarbon(target)) - if(!silent) - to_chat(user, "You can only target carbon based lifeforms!") - return FALSE - return TRUE - -/obj/effect/proc_holder/spell/pointed/dominate - name = "Dominate" - desc = "This spell dominates the mind of a lesser creature to the will of Nar'Sie, allying it only to her direct followers." - charge_max = 600 - range = 7 - stat_allowed = FALSE - school = "evocation" - clothes_req = FALSE - invocation = "none" - invocation_type = "none" - ranged_mousepointer = 'icons/effects/mouse_pointers/cult_target.dmi' - action_icon = 'icons/mob/actions/actions_cult.dmi' - action_background_icon_state = "bg_demon" - action_icon_state = "dominate" - active_msg = "You prepare to dominate the mind of a target..." - -/obj/effect/proc_holder/spell/pointed/dominate/cast(list/targets, mob/user) - if(!LAZYLEN(targets)) - to_chat(user, "No target found in range.") - return FALSE - if(!can_target(targets[1], user)) - return FALSE - - var/mob/living/simple_animal/S = targets[1] - S.add_atom_colour("#990000", FIXED_COLOUR_PRIORITY) - S.faction = list("cult") - playsound(get_turf(S), 'sound/effects/ghost.ogg', 100, TRUE) - new /obj/effect/temp_visual/cult/sac(get_turf(S)) - -/obj/effect/proc_holder/spell/pointed/dominate/can_target(atom/target, mob/user, silent) - . = ..() - if(!.) - return FALSE - if(!isanimal(target)) - if(!silent) - to_chat(user, "Target is not a lesser creature!") - return FALSE - - var/mob/living/simple_animal/S = target - if(S.mind) - if(!silent) - to_chat(user, "[S] is too intelligent to dominate!") - return FALSE - if(S.stat) - if(!silent) - to_chat(user, "[S] is dead!") - return FALSE - if(S.sentience_type != SENTIENCE_ORGANIC) - if(!silent) - to_chat(user, "[S] cannot be dominated!") - return FALSE - if("cult" in S.faction) - if(!silent) - to_chat(user, "[S] is already serving Nar'Sie!") - return FALSE - return TRUE - -/obj/effect/proc_holder/spell/targeted/projectile/dumbfire/juggernaut - name = "Gauntlet Echo" - desc = "Channels energy into your gauntlet - firing its essence forward in a slow moving, yet devastating, attack." - proj_type = /obj/projectile/magic/spell/juggernaut - charge_max = 350 - clothes_req = FALSE - action_icon = 'icons/mob/actions/actions_cult.dmi' - action_icon_state = "cultfist" - action_background_icon_state = "bg_demon" - sound = 'sound/weapons/resonator_blast.ogg' - -/obj/projectile/magic/spell/juggernaut - name = "Gauntlet Echo" - icon_state = "cultfist" - alpha = 180 - damage = 30 - damage_type = BRUTE - knockdown = 50 - hitsound = 'sound/weapons/punch3.ogg' - trigger_range = 0 - check_holy = TRUE - ignored_factions = list("cult") - range = 15 - speed = 7 - -/obj/projectile/magic/spell/juggernaut/on_hit(atom/target, blocked) - . = ..() - var/turf/T = get_turf(src) - playsound(T, 'sound/weapons/resonator_blast.ogg', 100, FALSE) - new /obj/effect/temp_visual/cult/sac(T) - for(var/obj/O in range(src,1)) - if(O.density && !istype(O, /obj/structure/destructible/cult)) - O.take_damage(90, BRUTE, "melee", 0) - new /obj/effect/temp_visual/cult/turf/floor(get_turf(O)) diff --git a/code/modules/spells/spell_types/devil.dm b/code/modules/spells/spell_types/devil.dm deleted file mode 100644 index 421b7f40f11c..000000000000 --- a/code/modules/spells/spell_types/devil.dm +++ /dev/null @@ -1,258 +0,0 @@ -/obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork - name = "Summon Pitchfork" - desc = "A devil's weapon of choice. Use this to summon/unsummon your pitchfork." - invocation_type = "none" - include_user = TRUE - range = -1 - clothes_req = FALSE - item_type = /obj/item/pitchfork/demonic - - school = "conjuration" - charge_max = 150 - cooldown_min = 10 - action_icon = 'icons/mob/actions/actions_minor_antag.dmi' - action_icon_state = "pitchfork" - action_background_icon_state = "bg_demon" - -/obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/greater - item_type = /obj/item/pitchfork/demonic/greater - -/obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/ascended - item_type = /obj/item/pitchfork/demonic/ascended - -/obj/effect/proc_holder/spell/targeted/conjure_item/violin - item_type = /obj/item/instrument/violin/golden - desc = "A devil's instrument of choice. Use this to summon/unsummon your golden violin." - invocation_type = INVOCATION_WHISPER - invocation = "I ain't had this much fun since Georgia." - action_icon_state = "golden_violin" - name = "Summon golden violin" - action_icon = 'icons/mob/actions/actions_minor_antag.dmi' - action_background_icon_state = "bg_demon" - -/obj/effect/proc_holder/spell/targeted/summon_contract - name = "Summon infernal contract" - desc = "Skip making a contract by hand, just do it by magic." - invocation_type = INVOCATION_WHISPER - invocation = "Just sign on the dotted line." - include_user = FALSE - range = 5 - clothes_req = FALSE - - school = "conjuration" - charge_max = 150 - cooldown_min = 10 - action_icon_state = "spell_default" - action_background_icon_state = "bg_demon" - -/obj/effect/proc_holder/spell/targeted/summon_contract/cast(list/targets, mob/user = usr) - for(var/mob/living/carbon/C in targets) - if(C.mind && user.mind) - if(C.stat == DEAD) - if(user.dropItemToGround(user.get_active_held_item())) - var/obj/item/paper/contract/infernal/revive/contract = new(user.loc, C.mind, user.mind) - user.put_in_hands(contract) - else - var/obj/item/paper/contract/infernal/contract // = new(user.loc, C.mind, contractType, user.mind) - var/contractTypeName = input(user, "What type of contract?") in sortList(list("Power", "Wealth", "Prestige", "Magic", "Knowledge", "Friendship")) - switch(contractTypeName) - if("Power") - contract = new /obj/item/paper/contract/infernal/power(C.loc, C.mind, user.mind) - if("Wealth") - contract = new /obj/item/paper/contract/infernal/wealth(C.loc, C.mind, user.mind) - if("Prestige") - contract = new /obj/item/paper/contract/infernal/prestige(C.loc, C.mind, user.mind) - if("Magic") - contract = new /obj/item/paper/contract/infernal/magic(C.loc, C.mind, user.mind) - if("Knowledge") - contract = new /obj/item/paper/contract/infernal/knowledge(C.loc, C.mind, user.mind) - if("Friendship") - contract = new /obj/item/paper/contract/infernal/friend(C.loc, C.mind, user.mind) - C.put_in_hands(contract) - else - to_chat(user, "[C] seems to not be sentient. You cannot summon a contract for [C.p_them()].") - - -/obj/effect/proc_holder/spell/aimed/fireball/hellish - name = "Hellfire" - desc = "This spell launches hellfire at the target." - - school = "evocation" - charge_max = 80 - clothes_req = FALSE - invocation = "Your very soul will catch fire!" - invocation_type = INVOCATION_SHOUT - range = 2 - - projectile_type = /obj/projectile/magic - - action_background_icon_state = "bg_demon" - -/obj/effect/proc_holder/spell/targeted/infernal_jaunt - name = "Infernal Jaunt" - desc = "Use hellfire to phase out of existence." - charge_max = 200 - clothes_req = FALSE - selection_type = "range" - range = -1 - cooldown_min = 0 - overlay = null - include_user = TRUE - action_icon_state = "jaunt" - action_background_icon_state = "bg_demon" - phase_allowed = TRUE - -/obj/effect/proc_holder/spell/targeted/infernal_jaunt/cast(list/targets, mob/living/user = usr) - if(istype(user)) - if(istype(user.loc, /obj/effect/dummy/phased_mob/slaughter/)) - if(valid_location(user)) - to_chat(user, "You are now phasing in.") - if(do_after(user, 1.5 SECONDS, user)) - if(valid_location(user)) - user.infernalphasein() - else - to_chat(user, "You are no longer near a potential signer.") - - else - to_chat(user, "You can only re-appear near a potential signer.") - revert_cast() - return ..() - else - user.notransform = TRUE - user.fakefire() - to_chat(src, "You begin to phase back into sinful flames.") - if(do_after(user, 1.5 SECONDS, user)) - user.infernalphaseout() - else - to_chat(user, "You must remain still while exiting.") - user.notransform = FALSE - user.fakefireextinguish() - start_recharge() - return - revert_cast() - -/obj/effect/proc_holder/spell/targeted/infernal_jaunt/proc/valid_location(mob/living/user = usr) - if(istype(get_area(user), /area/shuttle/)) // Can always phase in in a shuttle. - return TRUE - else - for(var/mob/living/C in orange(2, get_turf(user))) //Can also phase in when nearby a potential buyer. - if (C.owns_soul()) - return TRUE - return FALSE - -/mob/living/proc/infernalphaseout() - dust_animation() - spawn_dust() - visible_message("[src] disappears in a flashfire!") - playsound(get_turf(src), 'sound/magic/enter_blood.ogg', 100, TRUE, -1) - var/obj/effect/dummy/phased_mob/slaughter/holder = new /obj/effect/dummy/phased_mob/slaughter(loc) - ExtinguishMob() - forceMove(holder) - holder = holder - notransform = FALSE - fakefireextinguish() - -/mob/living/proc/infernalphasein() - if(notransform) - to_chat(src, "You're too busy to jaunt in.") - return FALSE - fakefire() - forceMove(drop_location()) - client.eye = src - visible_message("[src] appears in a fiery blaze!") - playsound(get_turf(src), 'sound/magic/exit_blood.ogg', 100, TRUE, -1) - addtimer(CALLBACK(src, PROC_REF(fakefireextinguish)), 15, TIMER_UNIQUE) - -/obj/effect/proc_holder/spell/targeted/sintouch - name = "Sin Touch" - desc = "Subtly encourage someone to sin." - charge_max = 1800 - clothes_req = FALSE - selection_type = "range" - range = 2 - cooldown_min = 0 - overlay = null - include_user = FALSE - action_icon = 'icons/mob/actions/actions_cult.dmi' - action_icon_state = "sintouch" - action_background_icon_state = "bg_demon" - phase_allowed = FALSE - random_target = TRUE - random_target_priority = TARGET_RANDOM - max_targets = 3 - invocation = "TASTE SIN AND INDULGE!!" - invocation_type = INVOCATION_SHOUT - -/obj/effect/proc_holder/spell/targeted/sintouch/ascended - name = "Greater sin touch" - charge_max = 100 - range = 7 - max_targets = 10 - -/obj/effect/proc_holder/spell/targeted/sintouch/cast(list/targets, mob/living/user = usr) - for(var/mob/living/carbon/human/H in targets) - if(!H.mind) - continue - if(H.mind.has_antag_datum(/datum/antagonist/sintouched)) - continue - if(H.anti_magic_check(FALSE, TRUE)) - continue - H.mind.add_antag_datum(/datum/antagonist/sintouched) - H.Paralyze(400) - - -/obj/effect/proc_holder/spell/targeted/summon_dancefloor - name = "Summon Dancefloor" - desc = "When what a Devil really needs is funk." - include_user = TRUE - range = -1 - clothes_req = FALSE - - school = "conjuration" - charge_max = 10 - cooldown_min = 50 //5 seconds, so the smoke can't be spammed - action_icon = 'icons/mob/actions/actions_minor_antag.dmi' - action_icon_state = "funk" - action_background_icon_state = "bg_demon" - - var/list/dancefloor_turfs - var/list/dancefloor_turfs_types - var/dancefloor_exists = FALSE - var/datum/effect_system/smoke_spread/transparent/dancefloor_devil/smoke - - -/obj/effect/proc_holder/spell/targeted/summon_dancefloor/cast(list/targets, mob/user = usr) - LAZYINITLIST(dancefloor_turfs) - LAZYINITLIST(dancefloor_turfs_types) - - if(!smoke) - smoke = new() - smoke.set_up(0, get_turf(user)) - smoke.start() - - if(dancefloor_exists) - dancefloor_exists = FALSE - for(var/i in 1 to dancefloor_turfs.len) - var/turf/T = dancefloor_turfs[i] - T.ChangeTurf(dancefloor_turfs_types[i], flags = CHANGETURF_INHERIT_AIR) - else - var/list/funky_turfs = RANGE_TURFS(1, user) - for(var/turf/closed/solid in funky_turfs) - to_chat(user, "You're too close to a wall.") - return - dancefloor_exists = TRUE - var/i = 1 - dancefloor_turfs.len = funky_turfs.len - dancefloor_turfs_types.len = funky_turfs.len - for(var/t in funky_turfs) - var/turf/T = t - dancefloor_turfs[i] = T - dancefloor_turfs_types[i] = T.type - T.ChangeTurf((i % 2 == 0) ? /turf/open/floor/light/colour_cycle/dancefloor_a : /turf/open/floor/light/colour_cycle/dancefloor_b, flags = CHANGETURF_INHERIT_AIR) - i++ - -/datum/effect_system/smoke_spread/transparent/dancefloor_devil - effect_type = /obj/effect/particle_effect/smoke/transparent/dancefloor_devil - -/obj/effect/particle_effect/smoke/transparent/dancefloor_devil - lifetime = 2 diff --git a/code/modules/spells/spell_types/devil_boons.dm b/code/modules/spells/spell_types/devil_boons.dm deleted file mode 100644 index 01ea14b15fa8..000000000000 --- a/code/modules/spells/spell_types/devil_boons.dm +++ /dev/null @@ -1,76 +0,0 @@ -/obj/effect/proc_holder/spell/targeted/summon_wealth - name = "Summon wealth" - desc = "The reward for selling your soul." - invocation_type = "none" - include_user = TRUE - range = -1 - clothes_req = FALSE - school = "conjuration" - charge_max = 100 - cooldown_min = 10 - action_icon = 'icons/mob/actions/actions_minor_antag.dmi' - action_icon_state = "moneybag" - - -/obj/effect/proc_holder/spell/targeted/summon_wealth/cast(list/targets, mob/user = usr) - for(var/mob/living/carbon/C in targets) - if(user.dropItemToGround(user.get_active_held_item())) - var/obj/item = pick( - new /obj/item/coin/gold(user.drop_location()), - new /obj/item/coin/diamond(user.drop_location()), - new /obj/item/coin/silver(user.drop_location()), - new /obj/item/clothing/accessory/medal/gold(user.drop_location()), - new /obj/item/stack/sheet/mineral/gold(user.drop_location()), - new /obj/item/stack/sheet/mineral/silver(user.drop_location()), - new /obj/item/stack/sheet/mineral/diamond(user.drop_location()), - new /obj/item/holochip(user.drop_location(), 1000)) - C.put_in_hands(item) - -/obj/effect/proc_holder/spell/targeted/view_range - name = "Distant vision" - desc = "The reward for selling your soul." - invocation_type = "none" - include_user = TRUE - range = -1 - clothes_req = FALSE - charge_max = 50 - cooldown_min = 10 - action_icon = 'icons/mob/actions/actions_silicon.dmi' - action_icon_state = "camera_jump" - var/ranges = list(7,8,9,10) - -/obj/effect/proc_holder/spell/targeted/view_range/cast(list/targets, mob/user = usr) - for(var/mob/C in targets) - if(!C.client) - continue - C.client.view_size.setTo((input("Select view range:", "Range", 4) in ranges) - 7) - -/obj/effect/proc_holder/spell/targeted/summon_friend - name = "Summon Friend" - desc = "The reward for selling your soul." - invocation_type = "none" - include_user = TRUE - range = -1 - clothes_req = FALSE - charge_max = 50 - cooldown_min = 10 - action_icon = 'icons/mob/actions/actions_spells.dmi' - action_icon_state = "sacredflame" - var/mob/living/friend - var/obj/effect/mob_spawn/human/demonic_friend/friendShell - -/obj/effect/proc_holder/spell/targeted/summon_friend/cast(list/targets, mob/user = usr) - if(!QDELETED(friend)) - to_chat(friend, "Your master has deemed you a poor friend. Your durance in hell will now resume.") - friend.dust(TRUE) - qdel(friendShell) - return - if(!QDELETED(friendShell)) - qdel(friendShell) - return - for(var/C in targets) - var/mob/living/L = C - friendShell = new /obj/effect/mob_spawn/human/demonic_friend(L.loc, L.mind, src) - -/obj/effect/proc_holder/spell/targeted/conjure_item/spellpacket/robeless - clothes_req = FALSE diff --git a/code/modules/spells/spell_types/godhand.dm b/code/modules/spells/spell_types/godhand.dm index 5cf7e7e1e509..94f0c8a4fcad 100644 --- a/code/modules/spells/spell_types/godhand.dm +++ b/code/modules/spells/spell_types/godhand.dm @@ -4,7 +4,7 @@ var/catchphrase = "High Five!" var/on_use_sound = null var/obj/effect/proc_holder/spell/targeted/touch/attached_spell - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' lefthand_file = 'icons/mob/inhands/misc/touchspell_lefthand.dmi' righthand_file = 'icons/mob/inhands/misc/touchspell_righthand.dmi' icon_state = "latexballon" diff --git a/code/modules/spells/spell_types/lichdom.dm b/code/modules/spells/spell_types/lichdom.dm index 720670e3fc21..e7d4a1e39884 100644 --- a/code/modules/spells/spell_types/lichdom.dm +++ b/code/modules/spells/spell_types/lichdom.dm @@ -67,8 +67,6 @@ H.dropItemToGround(H.w_uniform) H.dropItemToGround(H.wear_suit) H.dropItemToGround(H.head) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/black(H), ITEM_SLOT_OCLOTHING) - H.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/black(H), ITEM_SLOT_HEAD) H.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(H), ITEM_SLOT_ICLOTHING) // you only get one phylactery. @@ -99,7 +97,7 @@ name = "phylactery of [mind.name]" active_phylacteries++ - GLOB.poi_list |= src + SSpoints_of_interest.make_point_of_interest(src) START_PROCESSING(SSobj, src) if(initial(SSticker.mode.round_ends_with_antag_death)) SSticker.mode.round_ends_with_antag_death = FALSE @@ -107,7 +105,7 @@ /obj/item/phylactery/Destroy(force=FALSE) STOP_PROCESSING(SSobj, src) active_phylacteries-- - GLOB.poi_list -= src + SSpoints_of_interest.remove_point_of_interest(src) if(!active_phylacteries) SSticker.mode.round_ends_with_antag_death = initial(SSticker.mode.round_ends_with_antag_death) . = ..() @@ -133,8 +131,6 @@ lich.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/magic(lich), ITEM_SLOT_FEET) lich.equip_to_slot_or_del(new /obj/item/clothing/under/color/black(lich), ITEM_SLOT_ICLOTHING) - lich.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/black(lich), ITEM_SLOT_OCLOTHING) - lich.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/black(lich), ITEM_SLOT_HEAD) lich.real_name = mind.name mind.transfer_to(lich) diff --git a/code/modules/spells/spell_types/pointed/mind_transfer.dm b/code/modules/spells/spell_types/pointed/mind_transfer.dm index e0ef3566fa0d..5b069756864d 100644 --- a/code/modules/spells/spell_types/pointed/mind_transfer.dm +++ b/code/modules/spells/spell_types/pointed/mind_transfer.dm @@ -30,7 +30,7 @@ var/mob/living/victim = targets[1] //The target of the spell whos body will be transferred to. var/datum/mind/VM = victim.mind - if(victim.anti_magic_check(TRUE, FALSE) || VM.has_antag_datum(/datum/antagonist/wizard) || VM.has_antag_datum(/datum/antagonist/cult) || VM.has_antag_datum(/datum/antagonist/changeling) || victim.key[1] == "@") + if(victim.anti_magic_check(TRUE, FALSE) || VM.has_antag_datum(/datum/antagonist/wizard) || VM.has_antag_datum(/datum/antagonist/changeling) || victim.key[1] == "@") if(!silent) to_chat(user, "[victim.p_their(TRUE)] mind is resisting your spell!") return FALSE diff --git a/code/modules/spells/spell_types/rightandwrong.dm b/code/modules/spells/spell_types/rightandwrong.dm index 55138a36c367..633aa8dc4f25 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, @@ -22,14 +22,13 @@ GLOBAL_LIST_INIT(summoned_guns, list( /obj/item/gun/ballistic/revolver/mateba, /obj/item/gun/ballistic/rifle/illestren, /obj/item/pneumatic_cannon/speargun, - /obj/item/gun/ballistic/automatic/smg/mini_uzi, /obj/item/gun/energy/lasercannon, /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, @@ -40,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/spells/spell_types/shapeshift.dm b/code/modules/spells/spell_types/shapeshift.dm index 254a43dc23af..3c087cc8840d 100644 --- a/code/modules/spells/spell_types/shapeshift.dm +++ b/code/modules/spells/spell_types/shapeshift.dm @@ -20,8 +20,7 @@ var/list/possible_shapes = list(/mob/living/simple_animal/mouse,\ /mob/living/simple_animal/pet/dog/corgi,\ /mob/living/simple_animal/bot/secbot/ed209,\ - /mob/living/simple_animal/hostile/poison/giant_spider/hunter/viper,\ - /mob/living/simple_animal/hostile/construct/juggernaut) + /mob/living/simple_animal/hostile/poison/giant_spider/hunter/viper,) /obj/effect/proc_holder/spell/targeted/shapeshift/cast(list/targets,mob/user = usr) if(src in user.mob_spell_list) diff --git a/code/modules/spells/spell_types/wizard.dm b/code/modules/spells/spell_types/wizard.dm index 2fab8c5848ef..bc800a49c7d4 100644 --- a/code/modules/spells/spell_types/wizard.dm +++ b/code/modules/spells/spell_types/wizard.dm @@ -132,12 +132,6 @@ sound1 = 'sound/magic/blink.ogg' sound2 = 'sound/magic/blink.ogg' -/obj/effect/proc_holder/spell/targeted/turf_teleport/blink/cult - name = "quickstep" - - charge_max = 100 - clothes_req = TRUE - /obj/effect/proc_holder/spell/targeted/area_teleport/teleport name = "Teleport" desc = "This spell teleports you to an area of your selection." @@ -194,20 +188,6 @@ summon_type = list(/mob/living/simple_animal/hostile/carp) cast_sound = 'sound/magic/summon_karp.ogg' -/obj/effect/proc_holder/spell/aoe_turf/conjure/construct - name = "Artificer" - desc = "This spell conjures a construct which may be controlled by Shades." - school = "conjuration" - charge_max = 600 - clothes_req = FALSE - invocation = "none" - invocation_type = "none" - range = 0 - summon_type = list(/obj/structure/constructshell) - action_icon = 'icons/mob/actions/actions_cult.dmi' - action_icon_state = "artificer" - cast_sound = 'sound/magic/summonitems_generic.ogg' - /obj/effect/proc_holder/spell/aoe_turf/conjure/creature name = "Summon Creature Swarm" desc = "This spell tears the fabric of reality, allowing horrific daemons to spill forth." @@ -223,12 +203,6 @@ summon_type = list(/mob/living/simple_animal/hostile/netherworld) cast_sound = 'sound/magic/summonitems_generic.ogg' -/obj/effect/proc_holder/spell/aoe_turf/conjure/creature/cult - name = "Summon Creatures (DANGEROUS)" - clothes_req = TRUE - charge_max = 5000 - summon_amt = 2 - /obj/effect/proc_holder/spell/aoe_turf/repulse name = "Repulse" desc = "This spell throws everything around the user away." diff --git a/code/modules/station_goals/shield.dm b/code/modules/station_goals/shield.dm index 4c9b3556b6aa..e42cb866b508 100644 --- a/code/modules/station_goals/shield.dm +++ b/code/modules/station_goals/shield.dm @@ -158,26 +158,3 @@ /obj/machinery/satellite/meteor_shield/toggle(user) if(!..(user)) return FALSE - if(obj_flags & EMAGGED) - if(active) - change_meteor_chance(2) - else - change_meteor_chance(0.5) - -/obj/machinery/satellite/meteor_shield/proc/change_meteor_chance(mod) - var/datum/round_event_control/E = locate(/datum/round_event_control/meteor_wave) in SSevents.control - if(E) - E.weight *= mod - -/obj/machinery/satellite/meteor_shield/Destroy() - . = ..() - if(active && (obj_flags & EMAGGED)) - change_meteor_chance(0.5) - -/obj/machinery/satellite/meteor_shield/emag_act(mob/user) - if(obj_flags & EMAGGED) - return - obj_flags |= EMAGGED - to_chat(user, "You access the satellite's debug mode, increasing the chance of meteor strikes.") - if(active) - change_meteor_chance(2) diff --git a/code/modules/surgery/advanced/lobotomy.dm b/code/modules/surgery/advanced/lobotomy.dm index d1c882f96620..0807e1e5c8cc 100644 --- a/code/modules/surgery/advanced/lobotomy.dm +++ b/code/modules/surgery/advanced/lobotomy.dm @@ -26,7 +26,7 @@ implements = list( TOOL_SCALPEL = 85, // there is no way this should be reasonable to do basically at all without a real surgery. ghetto lobotomy, for real? /obj/item/melee/transforming/energy/sword = 25, - /obj/item/kitchen/knife = 15, + /obj/item/melee/knife = 15, /obj/item/shard = 10, /obj/item = 5) time = 10 SECONDS diff --git a/code/modules/surgery/amputation.dm b/code/modules/surgery/amputation.dm index 91cd1dce07e4..e737acbb78d7 100644 --- a/code/modules/surgery/amputation.dm +++ b/code/modules/surgery/amputation.dm @@ -14,9 +14,9 @@ TOOL_SCALPEL = 100, TOOL_SAW = 100, /obj/item/melee/arm_blade = 80, - /obj/item/fireaxe = 50, + /obj/item/melee/axe/fire = 50, /obj/item/hatchet = 40, - /obj/item/kitchen/knife/butcher = 25) + /obj/item/melee/knife/butcher = 25) time = 6.4 SECONDS preop_sound = 'sound/surgery/scalpel1.ogg' success_sound = 'sound/surgery/organ2.ogg' diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm index f8d8a9a49384..53e155210310 100644 --- a/code/modules/surgery/bodyparts/bodyparts.dm +++ b/code/modules/surgery/bodyparts/bodyparts.dm @@ -153,11 +153,6 @@ if(burn_dam > DAMAGE_PRECISION) . += "This limb has [burn_dam > 30 ? "severe" : "minor"] burns." - -/obj/item/bodypart/blob_act() - take_damage(max_damage) - - /obj/item/bodypart/attack(mob/living/carbon/C, mob/user) if(ishuman(C)) var/mob/living/carbon/human/H = C @@ -777,7 +772,11 @@ if (bone_status == BONE_FLAG_NORMAL && body_part & LEGS) // Because arms are not legs owner.set_broken_legs(owner.broken_legs + 1) bone_status = BONE_FLAG_BROKEN - addtimer(CALLBACK(owner, TYPE_PROC_REF(/atom, visible_message), "You hear a cracking sound coming from [owner]'s [name].", "You feel something crack in your [name]!", "You hear an awful cracking sound."), 1 SECONDS) +// addtimer(CALLBACK(src, PROC_REF(break_bone_feedback), 1 SECONDS)) testing sommething + +///obj/item/bodypart/proc/break_bone_feedback() + owner.visible_message("You hear a cracking sound coming from [owner]'s [name].", "You feel something crack in your [name]!", "You hear an awful cracking sound.") + playsound(owner, list('sound/health/bone/bone_break1.ogg','sound/health/bone/bone_break2.ogg','sound/health/bone/bone_break3.ogg','sound/health/bone/bone_break4.ogg','sound/health/bone/bone_break5.ogg','sound/health/bone/bone_break6.ogg'), 100, FALSE, -1) /obj/item/bodypart/proc/fix_bone() // owner.update_inv_splints() breaks diff --git a/code/modules/surgery/bodyparts/head.dm b/code/modules/surgery/bodyparts/head.dm index 05dffd8b4ffd..4c9a9be3b6d4 100644 --- a/code/modules/surgery/bodyparts/head.dm +++ b/code/modules/surgery/bodyparts/head.dm @@ -271,11 +271,6 @@ max_damage = 500 animal_origin = ALIEN_BODYPART -/obj/item/bodypart/head/devil - dismemberable = 0 - max_damage = 5000 - animal_origin = DEVIL_BODYPART - /obj/item/bodypart/head/larva icon = 'icons/mob/animal_parts.dmi' icon_state = "larva_head" diff --git a/code/modules/surgery/bodyparts/parts.dm b/code/modules/surgery/bodyparts/parts.dm index 5f89d15aa95f..543a0e5fddde 100644 --- a/code/modules/surgery/bodyparts/parts.dm +++ b/code/modules/surgery/bodyparts/parts.dm @@ -43,11 +43,6 @@ max_damage = 500 animal_origin = ALIEN_BODYPART -/obj/item/bodypart/chest/devil - dismemberable = 0 - max_damage = 5000 - animal_origin = DEVIL_BODYPART - /obj/item/bodypart/chest/larva icon = 'icons/mob/animal_parts.dmi' icon_state = "larva_chest" @@ -153,12 +148,6 @@ max_damage = 100 animal_origin = ALIEN_BODYPART -/obj/item/bodypart/l_arm/devil - dismemberable = FALSE - can_be_disabled = FALSE - max_damage = 5000 - animal_origin = DEVIL_BODYPART - /obj/item/bodypart/r_arm name = "right arm" desc = "Over 87% of humans are right handed. That figure is much lower \ @@ -255,12 +244,6 @@ max_damage = 100 animal_origin = ALIEN_BODYPART -/obj/item/bodypart/r_arm/devil - dismemberable = FALSE - can_be_disabled = FALSE - max_damage = 5000 - animal_origin = DEVIL_BODYPART - /obj/item/bodypart/leg/left name = "left leg" desc = "Some athletes prefer to tie their left shoelaces first for good \ @@ -346,12 +329,6 @@ max_damage = 100 animal_origin = ALIEN_BODYPART -/obj/item/bodypart/leg/left/devil - dismemberable = FALSE - can_be_disabled = FALSE - max_damage = 5000 - animal_origin = DEVIL_BODYPART - /obj/item/bodypart/leg/right name = "right leg" desc = "You put your right leg in, your right leg out. In, out, in, out, \ @@ -438,9 +415,3 @@ can_be_disabled = FALSE max_damage = 100 animal_origin = ALIEN_BODYPART - -/obj/item/bodypart/leg/right/devil - dismemberable = FALSE - can_be_disabled = FALSE - max_damage = 5000 - animal_origin = DEVIL_BODYPART diff --git a/code/modules/surgery/coronary_bypass.dm b/code/modules/surgery/coronary_bypass.dm index a4628d19efff..ceb376f3587c 100644 --- a/code/modules/surgery/coronary_bypass.dm +++ b/code/modules/surgery/coronary_bypass.dm @@ -22,7 +22,7 @@ name = "incise heart" implements = list( TOOL_SCALPEL = 90, - /obj/item/kitchen/knife = 40, + /obj/item/melee/knife = 40, /obj/item/shard = 33) time = 1.6 SECONDS preop_sound = 'sound/surgery/scalpel1.ogg' diff --git a/code/modules/surgery/experimental_dissection.dm b/code/modules/surgery/experimental_dissection.dm index 70dbac246e4e..fd3c740b9eb1 100644 --- a/code/modules/surgery/experimental_dissection.dm +++ b/code/modules/surgery/experimental_dissection.dm @@ -13,7 +13,7 @@ /datum/surgery_step/clamp_bleeders, /datum/surgery_step/close) possible_locs = list(BODY_ZONE_CHEST) - target_mobtypes = list(/mob/living) //Feel free to dissect devils but they're magic. + target_mobtypes = list(/mob/living) replaced_by = /datum/surgery/advanced/experimental_dissection/adv requires_tech = FALSE var/value_multiplier = 0.25 @@ -34,7 +34,7 @@ /obj/item/scalpel/augment = 75, /obj/item/scalpel/advanced = 60, TOOL_SCALPEL = 45, - /obj/item/kitchen/knife = 30, + /obj/item/melee/knife = 30, /obj/item/shard = 10)// special tools not only cut down time but also improve probability time = 125 silicons_obey_prob = TRUE diff --git a/code/modules/surgery/gastrectomy.dm b/code/modules/surgery/gastrectomy.dm index f4bd48c4729d..6d00f5ae7588 100644 --- a/code/modules/surgery/gastrectomy.dm +++ b/code/modules/surgery/gastrectomy.dm @@ -25,7 +25,7 @@ implements = list( TOOL_SCALPEL = 95, /obj/item/melee/transforming/energy/sword = 33, - /obj/item/kitchen/knife = 40, + /obj/item/melee/knife = 40, /obj/item/shard = 10) time = 52 experience_given = (MEDICAL_SKILL_ORGAN_FIX*0.8) //for consistency across organ surgeries diff --git a/code/modules/surgery/hepatectomy.dm b/code/modules/surgery/hepatectomy.dm index e612b6fa18c5..0571cf9b2397 100644 --- a/code/modules/surgery/hepatectomy.dm +++ b/code/modules/surgery/hepatectomy.dm @@ -24,7 +24,7 @@ implements = list( TOOL_SCALPEL = 95, /obj/item/melee/transforming/energy/sword = 33, - /obj/item/kitchen/knife = 40, + /obj/item/melee/knife = 40, /obj/item/shard = 25) time = 52 experience_given = (MEDICAL_SKILL_ORGAN_FIX*0.8) //repeatable so not as much xp diff --git a/code/modules/surgery/lobectomy.dm b/code/modules/surgery/lobectomy.dm index 09ef68f03e18..79d3d79bcee5 100644 --- a/code/modules/surgery/lobectomy.dm +++ b/code/modules/surgery/lobectomy.dm @@ -23,7 +23,7 @@ implements = list( TOOL_SCALPEL = 95, /obj/item/melee/transforming/energy/sword = 33, - /obj/item/kitchen/knife = 40, + /obj/item/melee/knife = 40, /obj/item/shard = 25) time = 4.2 SECONDS preop_sound = 'sound/surgery/scalpel1.ogg' diff --git a/code/modules/surgery/mechanic_steps.dm b/code/modules/surgery/mechanic_steps.dm index 3730f7cf1302..694081f7af78 100644 --- a/code/modules/surgery/mechanic_steps.dm +++ b/code/modules/surgery/mechanic_steps.dm @@ -4,7 +4,7 @@ implements = list( TOOL_SCREWDRIVER = 100, TOOL_SCALPEL = 75, // med borgs could try to unscrew shell with scalpel - /obj/item/kitchen/knife = 50, + /obj/item/melee/knife/kitchen = 50, /obj/item = 10) time = 2.4 SECONDS preop_sound = 'sound/items/screwdriver.ogg' @@ -28,7 +28,7 @@ implements = list( TOOL_SCREWDRIVER = 100, TOOL_SCALPEL = 75, - /obj/item/kitchen/knife = 50, + /obj/item/melee/knife/kitchen = 50, /obj/item = 10) time = 2.4 SECONDS preop_sound = 'sound/items/screwdriver.ogg' diff --git a/code/modules/surgery/organic_steps.dm b/code/modules/surgery/organic_steps.dm index 42018e6c1d87..39fb1d71b258 100644 --- a/code/modules/surgery/organic_steps.dm +++ b/code/modules/surgery/organic_steps.dm @@ -5,7 +5,7 @@ implements = list( TOOL_SCALPEL = 100, /obj/item/melee/transforming/energy/sword = 40, - /obj/item/kitchen/knife = 40, + /obj/item/melee/knife = 40, /obj/item/shard = 25, /obj/item = 15) //any sharp item time = 1.6 SECONDS @@ -151,18 +151,22 @@ name = "saw bone" implements = list( TOOL_SAW = 100, - /obj/item/fireaxe = 50, + /obj/item/melee/axe/fire = 50, + /obj/item/gear_handle/anglegrinder = 50, /obj/item/melee/arm_blade = 40, /obj/item/hatchet = 40, - /obj/item/kitchen/knife/butcher = 33, + /obj/item/melee/knife/butcher = 33, + /obj/item/gun/energy/plasmacutter = 30, /obj/item = 10) //10% success (sort of) with any sharp item with a force>=10 time = 5.4 SECONDS preop_sound = list( /obj/item/circular_saw = 'sound/surgery/saw.ogg', + /obj/item/gear_handle/anglegrinder = 'sound/surgery/saw.ogg', + /obj/item/gun/energy/plasmacutter = 'sound/weapons/plasma_cutter.ogg', /obj/item/melee/arm_blade = 'sound/surgery/scalpel1.ogg', - /obj/item/fireaxe = 'sound/surgery/scalpel1.ogg', + /obj/item/melee/axe/fire = 'sound/surgery/scalpel1.ogg', /obj/item/hatchet = 'sound/surgery/scalpel1.ogg', - /obj/item/kitchen/knife/butcher = 'sound/surgery/scalpel1.ogg', + /obj/item/melee/knife/butcher = 'sound/surgery/scalpel1.ogg', /obj/item = 'sound/surgery/scalpel1.ogg', ) success_sound = 'sound/surgery/bone3.ogg' diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index 5d6fac852d51..665086d1981d 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -232,11 +232,11 @@ /obj/item/organ/cyberimp/arm/toolset/emag_act(mob/user) for(var/datum/weakref/created_item in items_list) var/obj/potential_knife = created_item.resolve() - if(istype(/obj/item/kitchen/knife/combat/cyborg, potential_knife)) + if(istype(/obj/item/melee/knife/combat/cyborg, potential_knife)) return FALSE to_chat(user, "You unlock [src]'s integrated knife!") - items_list += WEAKREF(new /obj/item/kitchen/knife/combat/cyborg(src)) + items_list += WEAKREF(new /obj/item/melee/knife/combat/cyborg(src)) return TRUE /obj/item/organ/cyberimp/arm/esword diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm index 26b93d2c4642..6ba9ce69d700 100644 --- a/code/modules/surgery/organs/heart.dm +++ b/code/modules/surgery/organs/heart.dm @@ -55,7 +55,7 @@ update_appearance() return 1 -/obj/item/organ/heart/OnEatFrom(eater, feeder) +/obj/item/organ/heart/on_eat_from(eater, feeder) . = ..() beating = FALSE update_appearance() diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index 05ca5131e0f9..f6af39b201c0 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -284,6 +284,38 @@ breath.adjust_moles(GAS_FREON, -gas_breathed) + // Chlorine + var/chlorine_pp = PP(breath,GAS_CHLORINE) + if (prob(chlorine_pp)) + to_chat(H, "Your lungs feel awful!") + if (chlorine_pp >40) + H.emote("gasp") + H.adjustFireLoss(5) + if (prob(chlorine_pp/2)) + to_chat(H, "Your throat closes up!") + H.silent = max(H.silent, 3) + else + H.adjustFireLoss(round(chlorine_pp/8)) + gas_breathed = breath.get_moles(GAS_CHLORINE) + if (gas_breathed > gas_stimulation_min) + H.reagents.add_reagent(/datum/reagent/chlorine,1) + + breath.adjust_moles(GAS_CHLORINE, -gas_breathed) + // Hydrogen Chloride + var/hydrogen_chloride_pp = PP(breath,GAS_HYDROGEN_CHLORIDE) + if (prob(hydrogen_chloride_pp)) + to_chat(H, "Your lungs feel terrible!") + if (hydrogen_chloride_pp >20) + H.emote("gasp") + H.adjustFireLoss(10) + if (prob(hydrogen_chloride_pp/2)) + to_chat(H, "Your throat closes up!") + H.silent = max(H.silent, 3) + else + H.adjustFireLoss(round(hydrogen_chloride_pp/4)) + if (gas_breathed > gas_stimulation_min) + H.reagents.add_reagent(/datum/reagent/hydrogen_chloride) + // Stimulum gas_breathed = PP(breath,GAS_STIMULUM) if (gas_breathed > gas_stimulation_min) diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index b8871b21524e..72b7fba9d2da 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -38,7 +38,14 @@ /obj/item/organ/Initialize() . = ..() if(organ_flags & ORGAN_EDIBLE) - AddComponent(/datum/component/edible, food_reagents, null, RAW | MEAT | GORE, null, 10, null, null, null, COLOR_PINK, CALLBACK(src, PROC_REF(OnEatFrom))) + AddComponent(/datum/component/edible,\ + initial_reagents = food_reagents,\ + foodtypes = RAW | MEAT | GORE,\ + volume = 10,\ + filling_color = COLOR_PINK,\ + pre_eat = CALLBACK(src, PROC_REF(pre_eat)),\ + on_compost = CALLBACK(src, PROC_REF(pre_compost)),\ + after_eat = CALLBACK(src, PROC_REF(on_eat_from))) ///When you take a bite you cant jam it in for surgery anymore. /obj/item/organ/proc/Insert(mob/living/carbon/M, special = 0, drop_if_replaced = TRUE) @@ -133,8 +140,21 @@ STOP_PROCESSING(SSobj, src) return ..() -/obj/item/organ/proc/OnEatFrom(eater, feeder) - useable = FALSE //You can't use it anymore after eating it you spaztic +// Put any "can we eat this" checks for edible organs here +/obj/item/organ/proc/pre_eat(eater, feeder) + if(iscarbon(eater)) + var/mob/living/carbon/target = eater + for(var/S in target.surgeries) + var/datum/surgery/surgery = S + if(surgery.location == zone) + return FALSE + return TRUE + +/obj/item/organ/proc/pre_compost(user) + return TRUE + +/obj/item/organ/proc/on_eat_from(eater, feeder) + useable = FALSE //You bit it, no more using it /obj/item/organ/item_action_slot_check(slot,mob/user) return //so we don't grant the organ's action to mobs who pick up the organ. diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index 6a5a344b177e..b86c5b8b86ce 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -99,10 +99,7 @@ var/log_message = uppertext(message) if(!span_list || !span_list.len) - if(iscultist(user)) - span_list = list("narsiesmall") - else - span_list = list() + span_list = list() user.say(message, spans = span_list, sanitize = FALSE) @@ -135,10 +132,6 @@ if(user.mind.assigned_role == "Mime") power_multiplier *= 0.5 - //Cultists are closer to their gods and are more powerful, but they'll give themselves away - if(iscultist(user)) - power_multiplier *= 2 - //Try to check if the speaker specified a name or a job to focus on var/list/specific_listeners = list() var/found_string = null @@ -148,15 +141,8 @@ for(var/V in listeners) var/mob/living/L = V - var/datum/antagonist/devil/devilinfo = is_devil(L) - if(devilinfo && findtext(message, devilinfo.truename)) - var/start = findtext(message, devilinfo.truename) - listeners = list(L) //Devil names are unique. - power_multiplier *= 5 //if you're a devil and god himself addressed you, you fucked up - //Cut out the name so it doesn't trigger commands - message = copytext(message, 1, start) + copytext(message, start + length(devilinfo.truename)) - break - else if(findtext(message, L.real_name, 1, length(L.real_name) + 1)) + + if(findtext(message, L.real_name, 1, length(L.real_name) + 1)) specific_listeners += L //focus on those with the specified name //Cut out the name so it doesn't trigger commands found_string = L.real_name @@ -331,11 +317,7 @@ for(var/V in listeners) var/mob/living/L = V var/text = "" - if(is_devil(L)) - var/datum/antagonist/devil/devilinfo = is_devil(L) - text = devilinfo.truename - else - text = L.real_name + text = L.real_name addtimer(CALLBACK(L, TYPE_PROC_REF(/atom/movable, say), text), 5 * i) i++ diff --git a/code/modules/surgery/plastic_surgery.dm b/code/modules/surgery/plastic_surgery.dm index 9c87a5b5a93f..ed54575bb1bf 100644 --- a/code/modules/surgery/plastic_surgery.dm +++ b/code/modules/surgery/plastic_surgery.dm @@ -8,7 +8,7 @@ name = "reshape face" implements = list( TOOL_SCALPEL = 100, - /obj/item/kitchen/knife = 40, + /obj/item/melee/knife = 40, TOOL_WIRECUTTER = 33) time = 64 experience_given = MEDICAL_SKILL_MEDIUM diff --git a/code/modules/surgery/revival.dm b/code/modules/surgery/revival.dm index 13e4e3b784c6..7aef39fb5451 100644 --- a/code/modules/surgery/revival.dm +++ b/code/modules/surgery/revival.dm @@ -42,7 +42,7 @@ . = TRUE if(istype(tool, /obj/item/shockpaddles)) var/obj/item/shockpaddles/S = tool - if((S.req_defib && !S.defib.powered) || !S.wielded || S.cooldown || S.busy) + if((S.req_defib && !S.defib.powered) || !HAS_TRAIT(S, TRAIT_WIELDED) || S.cooldown || S.busy) to_chat(user, "You need to wield both paddles, and [S.defib] must be powered!") return FALSE if(istype(tool, /obj/item/melee/baton)) diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index 317297c4fe8d..5da5f497bda4 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -171,7 +171,7 @@ //spases 4 legibilititie icon_state = "swa" - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/items.dmi' lefthand_file = 'icons/mob/inhands/equipment/tools_lefthand.dmi' diff --git a/code/modules/tgui_panel/tgui_panel.dm b/code/modules/tgui_panel/tgui_panel.dm index 44fbffd917ce..1a6fcb37e429 100644 --- a/code/modules/tgui_panel/tgui_panel.dm +++ b/code/modules/tgui_panel/tgui_panel.dm @@ -49,6 +49,7 @@ get_asset_datum(/datum/asset/simple/tgui_panel), )) window.send_asset(get_asset_datum(/datum/asset/simple/namespaced/fontawesome)) + window.send_asset(get_asset_datum(/datum/asset/simple/namespaced/tgfont)) window.send_asset(get_asset_datum(/datum/asset/spritesheet/chat)) request_telemetry() addtimer(CALLBACK(src, PROC_REF(on_initialize_timed_out)), 5 SECONDS) diff --git a/code/modules/unit_tests/create_and_destroy.dm b/code/modules/unit_tests/create_and_destroy.dm index 017356d9152a..0e0248162fc8 100644 --- a/code/modules/unit_tests/create_and_destroy.dm +++ b/code/modules/unit_tests/create_and_destroy.dm @@ -35,8 +35,6 @@ /obj/machinery/power/shuttle/engine/liquid, //needs a template /obj/effect/landmark/subship, - //needs a friend :( - /obj/effect/mob_spawn/human/demonic_friend, //needs a derg /obj/structure/carp_rift, //doesn't have icons @@ -72,7 +70,7 @@ ignore += typesof(/obj/effect/pod_landingzone_effect) ignore += typesof(/obj/effect/pod_landingzone) //These want fried food to take on the shape of, we can't pass that in - ignore += typesof(/obj/item/reagent_containers/food/snacks/deepfryholder) + ignore += typesof(/obj/item/food/deepfryholder) //Can't pass in a thing to glow ignore += typesof(/obj/effect/abstract/eye_lighting) //It wants a lot more context then we have diff --git a/code/modules/unit_tests/icons/worn_icons.dm b/code/modules/unit_tests/icons/worn_icons.dm index eb2d84b73f68..3dba4d7c8e03 100644 --- a/code/modules/unit_tests/icons/worn_icons.dm +++ b/code/modules/unit_tests/icons/worn_icons.dm @@ -78,7 +78,7 @@ spacer = "\n\t" if(cached_slot_flags & ITEM_SLOT_EYES) - icon_file = 'icons/mob/clothing/eyes.dmi' + icon_file = 'icons/mob/clothing/eyes/eyes.dmi' if(!(icon_state in icon_states(icon_file, 1))) already_warned_icons += icon_state fail_reasons += "[spacer][item_path] using invalid [mob_overlay_state ? "mob_overlay_state" : "icon_state"], \"[icon_state]\" in '[icon_file]'[match_message]" diff --git a/code/modules/unit_tests/serving_tray.dm b/code/modules/unit_tests/serving_tray.dm index 9bd487ba68a8..b4dc1f77a520 100644 --- a/code/modules/unit_tests/serving_tray.dm +++ b/code/modules/unit_tests/serving_tray.dm @@ -6,7 +6,7 @@ var/obj/structure/table/the_table = allocate(/obj/structure/table) var/obj/item/storage/bag/tray/test_tray = allocate(/obj/item/storage/bag/tray) var/obj/item/reagent_containers/food/banana = allocate(/obj/item/reagent_containers/food/snacks/grown/banana) - var/obj/item/reagent_containers/food/the_bread = allocate(/obj/item/reagent_containers/food/snacks/breadslice) + var/obj/item/reagent_containers/food/the_bread = allocate(/obj/item/food/breadslice) var/obj/item/reagent_containers/food/sugarcookie = allocate(/obj/item/reagent_containers/food/snacks/sugarcookie) var/obj/item/clothing/under/jumpsuit = allocate(/obj/item/clothing/under/color/black) diff --git a/code/modules/unit_tests/unit_test.dm b/code/modules/unit_tests/unit_test.dm index 7240adb33855..00e7c6e756ac 100644 --- a/code/modules/unit_tests/unit_test.dm +++ b/code/modules/unit_tests/unit_test.dm @@ -111,7 +111,7 @@ GLOBAL_VAR(test_log) log_world("::error file=[file],line=[line],title=[test_path]::[text]") // Normal log message - log_entry += "\tREASON #[reasonID]: [text] at [file]:[line]" + log_entry += "\tFAILURE #[reasonID]: [text] at [file]:[line]" var/message = log_entry.Join("\n") log_test(message) diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index 9e935611e15f..0923ba1cc70e 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) @@ -937,30 +890,30 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) include_modes = list(/datum/game_mode/nuclear) /datum/uplink_item/ammo/mech/bag - name = "Mech Support Kit Bag" - desc = "A duffel bag containing ammo for four full reloads of the scattershotm which is equipped on standard Dark Gygax and Mauler exosuits. Also comes with some support equipment for maintaining the mech, including tools and an inducer." + name = "Exosuit Support Kit Bag" + desc = "A duffel bag containing ammo for four full reloads of the scattershot which is equipped on standard Dark Gygax and Touro exosuits. Also comes with some support equipment for maintaining the exosuit, including tools and an inducer." item = /obj/item/storage/backpack/duffelbag/syndie/ammo/mech cost = 4 include_modes = list(/datum/game_mode/nuclear) -/datum/uplink_item/ammo/mauler/bag - name = "Mauler Ammo Bag" - desc = "A duffel bag containing ammo for three full reloads of the LMG, scattershot carbine, and SRM-8 missile laucher that are equipped on a standard Mauler exosuit." - item = /obj/item/storage/backpack/duffelbag/syndie/ammo/mauler +/datum/uplink_item/ammo/touro/bag + name = "Touro Ammo Bag" + desc = "A duffel bag containing ammo for three full reloads of the LMG, scattershot carbine, and SRM-8 missile laucher that are equipped on a standard Touro exosuit." + item = /obj/item/storage/backpack/duffelbag/syndie/ammo/touro cost = 6 include_modes = list(/datum/game_mode/nuclear) /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) @@ -1195,11 +1148,11 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) cost = 80 include_modes = list(/datum/game_mode/nuclear/clown_ops) -/datum/uplink_item/support/mauler - name = "Mauler Exosuit" - desc = "A massive and incredibly deadly military-grade exosuit. Features long-range targeting, thrust vectoring \ +/datum/uplink_item/support/touro + name = "Touro Exosuit" + desc = "A well-armored and incredibly deadly military-grade exosuit. Features long-range targeting, thrust vectoring \ and deployable smoke. Comes equipped with an LMG, scattershot carbine, missile rack, an antiprojectile armor booster and a Tesla energy array." - item = /obj/mecha/combat/marauder/mauler/loaded + item = /obj/mecha/combat/marauder/touro/loaded cost = 140 // Stealth Items @@ -1247,16 +1200,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) item = /obj/item/codespeak_manual/unlimited cost = 3 -/datum/uplink_item/stealthy_tools/combatbananashoes - name = "Combat Banana Shoes" - desc = "While making the wearer immune to most slipping attacks like regular combat clown shoes, these shoes \ - can generate a large number of synthetic banana peels as the wearer walks, slipping up would-be pursuers. They also \ - squeak significantly louder." - item = /obj/item/clothing/shoes/clown_shoes/banana_shoes/combat - cost = 6 - surplus = 0 - include_modes = list(/datum/game_mode/nuclear/clown_ops) - /datum/uplink_item/stealthy_tools/emplight name = "EMP Flashlight" desc = "A small, self-recharging, short-ranged EMP device disguised as a working flashlight. \ @@ -1832,9 +1775,9 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) /datum/uplink_item/role_restricted/concealed_weapon_bay name = "Concealed Weapon Bay" - desc = "A modification for non-combat mechas that allows them to equip one piece of equipment designed for combat mechs. \ + desc = "A modification for civilian exosuits that allows them to equip one piece of equipment designed for combat exosuits. \ It also hides the equipped weapon from plain sight. \ - Only one can fit on a mecha." + Only one can fit on an exosuit." item = /obj/item/mecha_parts/concealed_weapon_bay cost = 3 restricted_roles = list("Roboticist", "Research Director") @@ -1848,13 +1791,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) restricted_roles = list("Curator") limited_stock = 1 //please don't spam deadchat -/datum/uplink_item/role_restricted/cultconstructkit - name = "Cult Construct Kit" - desc = "Recovered from an abandoned Nar'sie cult lair two construct shells and a stash of empty soulstones was found. These were purified to prevent occult contamination and have been put in a belt so they may be used as an accessible source of disposable minions. The construct shells have been packaged into two beacons for rapid and portable deployment." - item = /obj/item/storage/box/syndie_kit/cultconstructkit - cost = 20 - restricted_roles = list("Chaplain") - /datum/uplink_item/role_restricted/lawnmower name = "Gas powered lawn mower" desc = "A lawn mower is a machine utilizing one or more revolving blades to cut a grass surface to an even height, or bodies if that's your thing" @@ -1920,15 +1856,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) cost = 12 restricted_roles = list("Chemist", "Chief Medical Officer") -/datum/uplink_item/role_restricted/reverse_bear_trap - name = "Reverse Bear Trap" - desc = "An ingenious execution device worn on (or forced onto) the head. Arming it starts a 1-minute kitchen timer mounted on the bear trap. When it goes off, the trap's jaws will \ - violently open, instantly killing anyone wearing it by tearing their jaws in half. To arm, attack someone with it while they're not wearing headgear, and you will force it onto their \ - head after three seconds uninterrupted." - cost = 5 - item = /obj/item/reverse_bear_trap - restricted_roles = list("Clown") - /datum/uplink_item/role_restricted/laser_arm name = "Laser Arm Implant" desc = "An implant that grants you a recharging laser gun inside your arm. Weak to EMPs. Comes with a syndicate autosurgeon for immediate self-application." @@ -1939,7 +1866,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) /datum/uplink_item/role_restricted/greykingsword name = "Blade of The Grey Tide" desc = "A weapon of legend, forged by the greatest crackheads of our generation." - item = /obj/item/melee/greykingsword + item = /obj/item/melee/sword/greyking cost = 2 restricted_roles = list("Assistant", "Chemist") diff --git a/code/modules/vehicles/cars/clowncar.dm b/code/modules/vehicles/cars/clowncar.dm index e9addbd2d5bf..1df30ff3be9b 100644 --- a/code/modules/vehicles/cars/clowncar.dm +++ b/code/modules/vehicles/cars/clowncar.dm @@ -111,8 +111,7 @@ var/randomnum = rand(1,6) switch(randomnum) if(1) - visible_message("[user] presses one of the colorful buttons on [src], and a special banana peel drops out of it.") - new /obj/item/grown/bananapeel/specialpeel(loc) + visible_message("[user] presses one of the colorful buttons on [src], and doesn't do anything. Oops.") if(2) visible_message("[user] presses one of the colorful buttons on [src], and unknown chemicals flood out of it.") var/datum/reagents/R = new/datum/reagents(300) diff --git a/code/modules/vehicles/scooter.dm b/code/modules/vehicles/scooter.dm index 8d6acea28452..ebef11cd2630 100644 --- a/code/modules/vehicles/scooter.dm +++ b/code/modules/vehicles/scooter.dm @@ -57,7 +57,7 @@ ///Stores the default icon state var/board_icon = "skateboard" ///The handheld item counterpart for the board - var/board_item_type = /obj/item/melee/skateboard + var/board_item_type = /obj/item/skateboard ///Stamina drain multiplier var/instability = 10 @@ -165,13 +165,13 @@ desc = "A RaDSTORMz brand professional skateboard. Looks a lot more stable than the average board." icon_state = "skateboard2" board_icon = "skateboard2" - board_item_type = /obj/item/melee/skateboard/pro + board_item_type = /obj/item/skateboard/pro instability = 6 /obj/vehicle/ridden/scooter/skateboard/hoverboard/ name = "hoverboard" desc = "A blast from the past, so retro!" - board_item_type = /obj/item/melee/skateboard/hoverboard + board_item_type = /obj/item/skateboard/hoverboard instability = 3 icon_state = "hoverboard_red" board_icon = "hoverboard_red" @@ -188,7 +188,7 @@ /obj/vehicle/ridden/scooter/skateboard/hoverboard/admin name = "\improper Board Of Directors" desc = "The engineering complexity of a spaceship concentrated inside of a board. Just as expensive, too." - board_item_type = /obj/item/melee/skateboard/hoverboard/admin + board_item_type = /obj/item/skateboard/hoverboard/admin instability = 0 icon_state = "hoverboard_nt" board_icon = "hoverboard_nt" diff --git a/code/modules/vehicles/vehicle_key.dm b/code/modules/vehicles/vehicle_key.dm index ba21f01289b3..6c6623901331 100644 --- a/code/modules/vehicles/vehicle_key.dm +++ b/code/modules/vehicles/vehicle_key.dm @@ -12,15 +12,3 @@ /obj/item/key/janitor desc = "A keyring with a small steel key, and a pink fob reading \"Pussy Wagon\"." icon_state = "keyjanitor" - -/obj/item/key/lasso - name = "bone lasso" - desc = "Perfect for taming all kinds of supernatural beasts! (Warning: only perfect for taming one kind of supernatural beast.)" - force = 12 - icon_state = "lasso" - item_state = "chain" - lefthand_file = 'icons/mob/inhands/weapons/melee_lefthand.dmi' - righthand_file = 'icons/mob/inhands/weapons/melee_righthand.dmi' - attack_verb = list("flogged", "whipped", "lashed", "disciplined") - hitsound = 'sound/weapons/whip.ogg' - slot_flags = ITEM_SLOT_BELT diff --git a/code/modules/vending/autodrobe.dm b/code/modules/vending/autodrobe.dm index 367c309d59a1..413b0238ce5d 100644 --- a/code/modules/vending/autodrobe.dm +++ b/code/modules/vending/autodrobe.dm @@ -7,8 +7,6 @@ product_slogans = "Dress for success!;Suited and booted!;It's show time!;Why leave style up to fate? Use AutoDrobe!" vend_reply = "Thank you for using AutoDrobe!" products = list( - /obj/item/clothing/suit/chickensuit = 1, - /obj/item/clothing/head/chicken = 1, /obj/item/clothing/under/costume/gladiator = 1, /obj/item/clothing/head/helmet/gladiator = 1, /obj/item/clothing/under/rank/command/captain/suit = 1, @@ -29,16 +27,11 @@ /obj/item/clothing/head/that = 1, /obj/item/clothing/under/costume/kilt = 1, /obj/item/clothing/head/beret = 1, - /obj/item/clothing/head/beret/vintage = 1, - /obj/item/clothing/head/beret/archaic = 1, /obj/item/clothing/accessory/waistcoat = 1, - /obj/item/clothing/glasses/monocle =1, - /obj/item/clothing/head/bowler = 1, /obj/item/cane = 1, /obj/item/clothing/under/suit/sl = 1, /obj/item/clothing/mask/fakemoustache = 1, /obj/item/clothing/suit/bio_suit/plaguedoctorsuit = 1, - /obj/item/clothing/head/plaguedoctorhat = 1, /obj/item/clothing/mask/gas/plaguedoctor = 1, /obj/item/clothing/suit/toggle/owlwings = 1, /obj/item/clothing/under/costume/owl = 1, @@ -53,17 +46,9 @@ /obj/item/clothing/head/bandana = 1, /obj/item/clothing/head/bandana = 1, /obj/item/clothing/head/trapper = 1, - /obj/item/clothing/suit/imperium_monk = 1, /obj/item/clothing/mask/gas/cyborg = 1, - /obj/item/clothing/suit/chaplainsuit/holidaypriest = 1, - /obj/item/clothing/suit/chaplainsuit/whiterobe = 1, - /obj/item/clothing/head/wizard/marisa/fake = 1, - /obj/item/clothing/suit/wizrobe/marisa/fake = 1, /obj/item/clothing/under/dress/sundress = 1, - /obj/item/clothing/head/witchwig = 1, /obj/item/staff/broom = 1, - /obj/item/clothing/suit/wizrobe/fake = 1, - /obj/item/clothing/head/wizard/fake = 1, /obj/item/staff = 3, /obj/item/clothing/under/rank/civilian/mime/sexy = 1, /obj/item/clothing/under/rank/civilian/mime/skirt = 1, @@ -77,12 +62,6 @@ /obj/item/clothing/mask/rat/tribal = 1, /obj/item/clothing/mask/rat = 1, /obj/item/clothing/suit/apron/overalls = 1, - /obj/item/clothing/head/rabbitears =1, - /obj/item/clothing/head/sombrero = 1, - /obj/item/clothing/head/sombrero/green = 1, - /obj/item/clothing/suit/poncho = 1, - /obj/item/clothing/suit/poncho/green = 1, - /obj/item/clothing/suit/poncho/red = 1, /obj/item/clothing/head/maidheadband = 1, /obj/item/clothing/under/costume/maid = 1, /obj/item/clothing/gloves/maid = 1, @@ -90,29 +69,15 @@ /obj/item/clothing/under/rank/civilian/janitor/maid = 1, /obj/item/clothing/glasses/cold=1, /obj/item/clothing/glasses/heat=1, - /obj/item/clothing/suit/whitedress = 1, - /obj/item/clothing/head/jester = 1, /obj/item/clothing/suit/hooded/carp_costume = 1, - /obj/item/clothing/suit/hooded/ian_costume = 1, - /obj/item/clothing/suit/hooded/bee_costume = 1, /obj/item/clothing/suit/snowman = 1, /obj/item/clothing/head/snowman = 1, /obj/item/clothing/mask/joy = 1, - /obj/item/clothing/head/cueball = 1, /obj/item/clothing/under/suit/white_on_white = 1, /obj/item/clothing/under/costume/sailor = 1, - /obj/item/clothing/head/delinquent = 1, /obj/item/clothing/head/wig/random = 3, - /obj/item/clothing/head/shrine_wig = 1, - /obj/item/clothing/suit/shrine_maiden = 1, - /obj/item/clothing/suit/changshan_red = 1, - /obj/item/clothing/suit/changshan_blue = 1, - /obj/item/clothing/suit/cheongsam_red = 1, - /obj/item/clothing/suit/cheongsam_blue = 1, /obj/item/gohei = 1, /obj/item/clothing/suit/judgerobe = 1, - /obj/item/clothing/head/powdered_wig = 1, - /obj/item/clothing/glasses/sunglasses/garb = 2, /obj/item/clothing/glasses/blindfold = 1, /obj/item/clothing/mask/muzzle = 2) premium = list( @@ -121,10 +86,8 @@ /obj/item/clothing/head/helmet/roman/fake = 1, /obj/item/clothing/head/helmet/roman/legionnaire/fake = 1, /obj/item/clothing/under/costume/roman = 1, - /obj/item/clothing/shoes/roman = 1, /obj/item/shield/riot/roman/fake = 1, - /obj/item/skub = 1, - /obj/item/clothing/suit/hooded/mysticrobe = 1) + /obj/item/skub = 1) refill_canister = /obj/item/vending_refill/autodrobe default_price = 180 extra_price = 360 diff --git a/code/modules/vending/cigarette.dm b/code/modules/vending/cigarette.dm index 1c377c309464..65437f3bb4ec 100644 --- a/code/modules/vending/cigarette.dm +++ b/code/modules/vending/cigarette.dm @@ -41,7 +41,7 @@ /obj/item/lighter/greyscale = 4, /obj/item/storage/fancy/rollingpapers = 5) -/obj/machinery/vending/cigarette/beach //Used in the lavaland_biodome_beach.dmm ruin +/obj/machinery/vending/cigarette/beach //Used in the old lavaland biodome ruin name = "\improper ShadyCigs Ultra" desc = "Now with extra premium products!" product_ads = "Probably not bad for you!;Dope will get you through times of no money better than money will get you through times of no dope!;It's good for you!" diff --git a/code/modules/vending/clothesmate.dm b/code/modules/vending/clothesmate.dm index e9eef49a0e3a..0c16b36902e2 100644 --- a/code/modules/vending/clothesmate.dm +++ b/code/modules/vending/clothesmate.dm @@ -16,14 +16,10 @@ /obj/item/clothing/head/beanie/yellow = 3, /obj/item/clothing/head/beanie/orange = 3, /obj/item/clothing/head/beanie/cyan = 3, - /obj/item/clothing/head/beanie/christmas = 3, /obj/item/clothing/head/beanie/striped = 3, /obj/item/clothing/head/beanie/stripedred = 3, /obj/item/clothing/head/beanie/stripedblue = 3, /obj/item/clothing/head/beanie/stripedgreen = 3, - /obj/item/clothing/head/beanie/rasta = 3, - /obj/item/clothing/head/kippah = 3, - /obj/item/clothing/head/taqiyahred = 3, /obj/item/clothing/gloves/fingerless = 2, /obj/item/clothing/neck/scarf/pink = 3, /obj/item/clothing/neck/scarf/red = 3, @@ -85,9 +81,6 @@ /obj/item/clothing/accessory/waistcoat = 1, /obj/item/clothing/head/that = 1, /obj/item/clothing/head/fedora = 1, - /obj/item/clothing/glasses/monocle = 1, - /obj/item/clothing/head/sombrero = 1, - /obj/item/clothing/suit/poncho = 1, /obj/item/clothing/under/costume/kilt = 1, /obj/item/clothing/under/dress/sundress = 1, /obj/item/clothing/under/dress/striped = 1, @@ -112,12 +105,10 @@ /obj/item/storage/belt/fannypack/black = 2, /obj/item/clothing/suit/jacket/letterman_syndie = 1, /obj/item/clothing/under/costume/jabroni = 1, - /obj/item/clothing/suit/vapeshirt = 1, /obj/item/clothing/under/costume/geisha = 1) premium = list( /obj/item/clothing/under/suit/checkered = 1, /obj/item/clothing/suit/jacket/leather = 1, - /obj/item/clothing/suit/jacket/leather/overcoat = 1, /obj/item/clothing/neck/necklace/dope = 3, /obj/item/clothing/suit/jacket/letterman_nanotrasen = 1, /obj/item/instrument/piano_synth/headphones/spacepods = 1) diff --git a/code/modules/vending/drinnerware.dm b/code/modules/vending/drinnerware.dm index 3e51271093ad..0dc0102c91ef 100644 --- a/code/modules/vending/drinnerware.dm +++ b/code/modules/vending/drinnerware.dm @@ -8,17 +8,17 @@ /obj/item/reagent_containers/glass/bowl = 20, /obj/item/kitchen/fork = 6, /obj/item/reagent_containers/food/drinks/drinkingglass = 8, - /obj/item/reagent_containers/food/condiment/pack/ketchup = 5, - /obj/item/reagent_containers/food/condiment/pack/hotsauce = 5, - /obj/item/reagent_containers/food/condiment/pack/astrotame = 5, - /obj/item/reagent_containers/food/condiment/saltshaker = 5, - /obj/item/reagent_containers/food/condiment/peppermill = 5, + /obj/item/reagent_containers/condiment/pack/ketchup = 5, + /obj/item/reagent_containers/condiment/pack/hotsauce = 5, + /obj/item/reagent_containers/condiment/pack/astrotame = 5, + /obj/item/reagent_containers/condiment/saltshaker = 5, + /obj/item/reagent_containers/condiment/peppermill = 5, /obj/item/clothing/suit/apron/chef = 2, /obj/item/kitchen/rollingpin = 2, - /obj/item/kitchen/knife = 2, - /obj/item/kitchen/knife/pizza_cutter = 2, + /obj/item/melee/knife/kitchen = 2, + /obj/item/melee/knife/pizza_cutter = 2, /obj/item/book/granter/crafting_recipe/cooking_sweets_101 = 2, - /obj/item/kitchen/knife/butcher = 1) + /obj/item/melee/knife/butcher = 1) refill_canister = /obj/item/vending_refill/dinnerware default_price = 50 extra_price = 250 diff --git a/code/modules/vending/games.dm b/code/modules/vending/games.dm index c803fa347e9f..e54479cd55ca 100644 --- a/code/modules/vending/games.dm +++ b/code/modules/vending/games.dm @@ -15,8 +15,8 @@ /obj/item/camera = 3, /obj/item/dyespray = 3) premium = list( - /obj/item/melee/skateboard/pro = 3, - /obj/item/melee/skateboard/hoverboard = 1) + /obj/item/skateboard/pro = 3, + /obj/item/skateboard/hoverboard = 1) refill_canister = /obj/item/vending_refill/games default_price = 50 extra_price = 250 diff --git a/code/modules/vending/liberation_toy.dm b/code/modules/vending/liberation_toy.dm index 911a190703f4..06069e4db764 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 911eaed20652..37a51b27bb89 100644 --- a/code/modules/vending/security.dm +++ b/code/modules/vending/security.dm @@ -98,7 +98,7 @@ /obj/item/storage/box/lethalshot = 6, /obj/item/stock_parts/cell/gun = 5, - /obj/item/ammo_box/magazine/uzim9mm = 5, + /obj/item/ammo_box/magazine/spitter_9mm = 5, /obj/item/grenade/c4 = 5, /obj/item/grenade/frag = 5, @@ -107,8 +107,7 @@ premium = list() voucher_items = list( "Tactical Energy Gun" = /obj/item/gun/energy/e_gun/hades, - "Combat Shotgun" = /obj/item/gun/ballistic/shotgun/automatic/combat, - "Type U3 Uzi" = /obj/item/gun/ballistic/automatic/smg/mini_uzi) + "Combat Shotgun" = /obj/item/gun/ballistic/shotgun/automatic/combat) /obj/machinery/vending/security/marine/syndicate icon_state = "syndicate-marine" @@ -120,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/sustenance.dm b/code/modules/vending/sustenance.dm index 0519285d26a5..02a95555468f 100644 --- a/code/modules/vending/sustenance.dm +++ b/code/modules/vending/sustenance.dm @@ -7,11 +7,11 @@ icon_state = "sustenance" products = list( /obj/item/reagent_containers/food/snacks/tofu/prison = 24, - /obj/item/reagent_containers/food/snacks/breadslice/moldy = 15, + /obj/item/food/breadslice/moldy = 15, /obj/item/reagent_containers/food/drinks/ice/prison = 12, /obj/item/reagent_containers/food/snacks/candy_corn/prison = 6) contraband = list( - /obj/item/kitchen/knife = 6, + /obj/item/melee/knife/kitchen = 6, /obj/item/reagent_containers/food/drinks/coffee = 12, /obj/item/tank/internals/emergency_oxygen = 6, /obj/item/clothing/mask/breath = 6) diff --git a/code/modules/vending/toys.dm b/code/modules/vending/toys.dm index a5092cf7373f..08af917aa86a 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/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm index da3fdb134010..2bef026cebff 100644 --- a/code/modules/vending/wardrobes.dm +++ b/code/modules/vending/wardrobes.dm @@ -163,8 +163,7 @@ /obj/item/clothing/head/soft/black = 2, /obj/item/clothing/mask/bandana/skull = 2 ) - contraband = list(/obj/item/clothing/suit/hooded/enginseer = 2, // WS edit: enginsineer robes - /obj/item/organ/tongue/robot = 2) + contraband = list(/obj/item/organ/tongue/robot = 2) refill_canister = /obj/item/vending_refill/wardrobe/robo_wardrobe extra_price = 300 /obj/item/vending_refill/wardrobe/robo_wardrobe @@ -282,7 +281,7 @@ vend_reply = "Thank you for using the ChefDrobe!" products = list(/obj/item/clothing/under/suit/waiter = 2, /obj/item/radio/headset/headset_srv = 2, - /obj/item/clothing/head/beret/service = 2, //WS edit - berets + /obj/item/clothing/head/beret/service = 2, /obj/item/clothing/accessory/waistcoat = 2, /obj/item/clothing/suit/apron/chef = 3, /obj/item/clothing/head/soft/mime = 2, @@ -291,10 +290,8 @@ /obj/item/clothing/suit/toggle/chef = 1, /obj/item/clothing/under/rank/civilian/chef = 1, /obj/item/clothing/under/rank/civilian/chef/skirt = 2, - ///obj/item/clothing/under/rank/chef = 3,//WS edit - Better security jumpsuit sprites /obj/item/clothing/head/chefhat = 1, /obj/item/clothing/under/shorts/cookjorts = 2, - /obj/item/clothing/shoes/cookflops = 2, /obj/item/reagent_containers/glass/rag = 1, /obj/item/clothing/accessory/armband/med = 4, /obj/item/clothing/suit/hooded/wintercoat = 2) @@ -375,29 +372,16 @@ icon_state = "chapdrobe" product_ads = "Are you being bothered by cultists or pesky revenants? Then come and dress like the holy man!;Clothes for men of the cloth!" vend_reply = "Thank you for using the ChapDrobe!" - products = list(/obj/item/storage/box/holy = 1, - /obj/item/storage/backpack/cultpack = 1, + products = list(/obj/item/storage/backpack/cultpack = 1, /obj/item/clothing/head/beret/service = 1, //WS edit - berets /obj/item/clothing/accessory/pocketprotector/cosmetology = 1, /obj/item/clothing/under/rank/civilian/chaplain = 1, /obj/item/clothing/under/rank/civilian/chaplain/skirt = 2, /obj/item/clothing/shoes/sneakers/black = 1, - /obj/item/clothing/suit/chaplainsuit/nun = 1, - /obj/item/clothing/head/nun_hood = 1, - /obj/item/clothing/suit/chaplainsuit/holidaypriest = 1, - /obj/item/clothing/suit/hooded/chaplainsuit/monkhabit = 1, /obj/item/storage/fancy/candle_box = 2, - /obj/item/clothing/head/kippah = 3, - /obj/item/clothing/suit/chaplainsuit/whiterobe = 1, - /obj/item/clothing/head/taqiyahwhite = 1, - /obj/item/clothing/head/taqiyahred = 3, - /obj/item/clothing/suit/chaplainsuit/monkrobeeast = 1, - /obj/item/clothing/accessory/armband/med = 4, - /obj/item/clothing/head/beanie/rasta = 1) + /obj/item/clothing/accessory/armband/med = 4) contraband = list(/obj/item/toy/plush/plushvar = 1, /obj/item/toy/plush/narplush = 1) - premium = list(/obj/item/clothing/suit/chaplainsuit/bishoprobe = 1, - /obj/item/clothing/head/bishopmitre = 1) refill_canister = /obj/item/vending_refill/wardrobe/chap_wardrobe /obj/item/vending_refill/wardrobe/chap_wardrobe machine_name = "ChapDrobe" @@ -433,8 +417,7 @@ /obj/item/clothing/shoes/sneakers/white = 2, /obj/item/clothing/suit/toggle/labcoat/genetics = 2, /obj/item/clothing/accessory/armband/medblue = 4, - /obj/item/storage/backpack/genetics = 2, - /obj/item/storage/backpack/satchel/gen = 2) + /obj/item/storage/backpack/genetics = 2) refill_canister = /obj/item/vending_refill/wardrobe/gene_wardrobe /obj/item/vending_refill/wardrobe/gene_wardrobe machine_name = "GeneDrobe" @@ -455,7 +438,6 @@ /obj/item/clothing/accessory/armband/hydro = 4, /obj/item/storage/backpack/satchel/vir = 2) contraband = list(/obj/item/clothing/suit/bio_suit/plaguedoctorsuit = 1, - /obj/item/clothing/head/plaguedoctorhat = 1, /obj/item/clothing/mask/gas/plaguedoctor = 1) refill_canister = /obj/item/vending_refill/wardrobe/viro_wardrobe /obj/item/vending_refill/wardrobe/viro_wardrobe diff --git a/config/admins.txt b/config/admins.txt index b695c94f084b..24f777f26b19 100644 --- a/config/admins.txt +++ b/config/admins.txt @@ -5,5 +5,6 @@ #If SQL-based admin loading is enabled, admins listed here will always be loaded first and will override any duplicate entries in the database. MarkSuckerberg = Development Head +rkz = Development Head #just use the database, this is deprecated diff --git a/html/changelogs/AutoChangeLog-pr-3395.yml b/html/changelogs/AutoChangeLog-pr-3395.yml new file mode 100644 index 000000000000..e7146487ce7f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3395.yml @@ -0,0 +1,4 @@ +author: FalloutFalcon, Mothblocks, Cyberboss +changes: + - {rscadd: retry failed unit tests.} +delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3417.yml b/html/changelogs/AutoChangeLog-pr-3417.yml new file mode 100644 index 000000000000..f00e3b3d4845 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3417.yml @@ -0,0 +1,5 @@ +author: SomeguyManperson +changes: + - {balance: you no longer need a lasso to ride a goliath} + - {rscdel: no more lasso} +delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3447.yml b/html/changelogs/AutoChangeLog-pr-3447.yml new file mode 100644 index 000000000000..a3c00b8de0da --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3447.yml @@ -0,0 +1,4 @@ +author: Bjarl +changes: + - {code_imp: A large amount of cruft has been deleted.} +delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3472.yml b/html/changelogs/AutoChangeLog-pr-3472.yml new file mode 100644 index 000000000000..899e00d9c9e5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3472.yml @@ -0,0 +1,4 @@ +author: thgvr +changes: + - {bugfix: fixed digitigrade combat/jackboots} +delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3475.yml b/html/changelogs/AutoChangeLog-pr-3475.yml new file mode 100644 index 000000000000..fb28b86b493c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3475.yml @@ -0,0 +1,5 @@ +author: DrCrawler +changes: + - {rscadd: Gives IPCs a little more adjectives to work with.} + - {rscdel: Removed some duplicate adjectives from the raw file.} +delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3484.yml b/html/changelogs/AutoChangeLog-pr-3484.yml new file mode 100644 index 000000000000..e1268b036c5f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3484.yml @@ -0,0 +1,6 @@ +author: Sadhorizon +changes: + - {rscadd: Cybersun Biodynamics stamp.} + - {rscadd: Cybersun secret documents.} + - {rscadd: Cybersun captain's safe.} +delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-3488.yml b/html/changelogs/AutoChangeLog-pr-3488.yml new file mode 100644 index 000000000000..99d5cdb6d1e7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3488.yml @@ -0,0 +1,4 @@ +author: rye-rice, Imaginos16 +changes: + - {rscadd: Resprites Wisp} +delete-after: true diff --git a/html/changelogs/archive/2024-07.yml b/html/changelogs/archive/2024-07.yml index 6eca9f799e42..9f9679a752b3 100644 --- a/html/changelogs/archive/2024-07.yml +++ b/html/changelogs/archive/2024-07.yml @@ -127,3 +127,41 @@ Fest1v3: - rscadd: adds a few vox sprites - bugfix: fixes a few vox sprites +2024-07-24: + DIB-DOG: + - bugfix: fixed the foodtype of two Gezenan drinks to match their descriptions + - rscadd: added a taste description to Keh'Lu'Tex Liqueur + Gristlebee: + - rscadd: Acquire Mission containers and Mission drills display their objective + type. + - rscadd: Changed name of base fish type to generic fish + SomeguyManperson: + - bugfix: the BG-16 is now as ammo efficient as the BG-12 + - bugfix: the BG-16 has automatic fire again + generalthrax: + - balance: Undoubles the price on every automatic gun and removed 250 from the price + of every semi-auto pistol. +2024-07-26: + Cloudbreak: + - rscadd: A new ruin, the Abandoned Listening Post. + - rscadd: Areas associated with the listening post. + - bugfix: Single line in maps catalogue. +2024-07-27: + Gristlebee: + - rscadd: Marker beacons can now be printed at the autolathe from the Misc tab +2024-07-31: + rkz, benbot(benjamin), Time-Green, SteelSlayer, floyd, Qustinuus, ArcaneDefence, FlowerCuco: + - rscadd: Food storage! Hide some glass in the captains cake! Begone digestive tract! + - rscadd: Bread, Cake and Spaghetti to Newfood + - rscadd: some smaller foods can now be eaten whilst on the run! (This ONLY applies + to newfood items thus far!) + - rscadd: converted edible component to work with newfood + - rscdel: oldfood for Bread, Cake and Spaghetti + - rscdel: Temporarily removes customfood bread, cake, pasta, and sandwiches + - tweak: edited a few messed up values + - tweak: food trash is sensible now. Finishing stuff like cake will actually spawn + a plate rubbish. Instead of you eating the plate, biggun, perhaps properly dispose + of it! + - bugfix: Wildly STUPID item weights. Candycorn and cakes are no longer the SAME + size + - code_imp: provides some semblance of sorting for signal defines diff --git a/html/changelogs/archive/2024-08.yml b/html/changelogs/archive/2024-08.yml new file mode 100644 index 000000000000..722a57377629 --- /dev/null +++ b/html/changelogs/archive/2024-08.yml @@ -0,0 +1,234 @@ +2024-08-02: + FalloutFalcon: + - rscadd: New admin button to launch a distress announcement quicker. + Sadhorizon: + - tweak: Cafe latte, iced coffee, hot ice coffee and soy latte now only make your + character jitter on OD. + - tweak: Reduced the prices of first aid kits. + - tweak: Remapped the Kilo-class Mining Ship + SomeguyManperson: + - rscadd: legion attacks will now inject an organ which eventually causes a transformation, + rather than instantly killing and transforming people. +2024-08-03: + Anticept: + - bugfix: Executing someone with a gun is back, you psychos. Paint the floor red! + Martinpachu: + - balance: 8x50 boxes now come with 25 ammo as opposed to 20. + Sadhorizon: + - tweak: Internals Crate now costs 100 credits and contains full oxygen tanks. + - tweak: Plasmaman Tank Kit renamed to Plasmaman Internals Crate. It now costs 100 + credits and contains full plasma tanks. + SomeguyManperson: + - bugfix: mini/energy gun cases no longer spawn with the wrong weapon in them + - balance: gun attachments are now small instead of normal sized + Yata9ar4su: + - bugfix: Cash bundle value will now be correct in chat, cash will not drop upon + stacking + firebudgy: + - rscadd: New sprites for Vox! Vanguard and Honorable Vanguard Battlecoat sprite + changes, NGR hard hats, and hazard vests! + generalthrax: + - rscadd: Industrial jacket now keeps you warm + - bugfix: Contender is now called the Beacon in cargo + zimon9: + - rscadd: an anesthetics crate +2024-08-04: + Apogee-dev: + - bugfix: Changed almost every player facing instance of the word "mech" to "exosuit" + - balance: Replaced syndie survival boxes in outfit datums with normal job-equivalent + boxes + FalloutFalcon: + - balance: nerfed legion money drops. + Gristlebee: + - rscadd: Sandbags can be deconed by click dragging them onto your mob. + - rscadd: Sandbags to the outpost for 150 credits. + Martinpachu: + - rscadd: Clips of all kinds (not magazines!) can now be produced on the autolathe. + - rscdel: Clip cargo packs, as they are now redundant. + PositiveEntropy: + - imageadd: Resprites muzzle flashes! + Sadhorizon: + - imageadd: Added directionals for mining processing consoles. + Thera-Pissed: + - bugfix: hydrogen and combustion bugs + Zevotech: + - balance: the Quirk Social Anxiety no longer silences you randomly + - bugfix: Stuttering is now far less extreme and will not delete characters + - bugfix: Psicodine now actually suppresses the effects of social anxiety + firebudgy: + - bugfix: Fixed three typos in the code. + phoaly: + - balance: Buffed LP hardsuits +2024-08-07: + Sadhorizon: + - tweak: Remapped the Dwayne-class Long Range Mining Transport. + - rscadd: Added a random plushie spawner and a random moth plushie spawner. + Thera-Pissed: + - rscadd: Chlorine and Hydrogen Chloride gases! Wear your goggles! +2024-08-10: + generalthrax: + - rscadd: Cleanbots now destroy cigarette butts, and dispense enough acid to do + so. + rye-rice: + - bugfix: indie sec hardsuit now shows up +2024-08-11: + firebudgy: + - rscadd: Sprites for several different kinds of scarves for Vox! + - rscadd: Additional sprites for several other items for Vox, such as chest-high + towels and hazard jackets. + - rscadd: Created onmob_neck_vox.dmi file, plus enabled support for it. + generalthrax: + - bugfix: Fixes the Industrial Jacket to be warm (For Real) + phoaly: + - balance: Talos Corpsman has been readded with a different medkit loadout. +2024-08-16: + OrionTheFox: + - rscadd: Suit Storage Units now provide feedback when Decontamination fails to + activate + - imageadd: Suit Storage Units now have a visible red light when Locked - when hacked, + Decontamination now has a red-yellow flashing light to distinguish from the + Locked light. +2024-08-18: + Cloudbreak: + - rscadd: Frontiersman sprites for the Vox! + Gristlebee: + - bugfix: water turfs reagent scooping + - code_imp: span classes to span macros + - refactor: acid turfs repathed under water + - refactor: Pouring out a reagent container is now bound to disarm intent instead + of help intent. + - rscadd: Examine hints for flipped tables + - bugfix: You can no longer phase through a flipped table. + meemofcourse: + - bugfix: Hardliner troopers should no longer spawn as Hardliner pilots +2024-08-20: + Aquidu: + - bugfix: Fixed a bug relating to literal spaghetti code. + zimon9: + - bugfix: fixed a short on the Shetland +2024-08-21: + FalloutFalcon: + - rscadd: Added var to let admins bypass do_teleport vlevel restriction + Sadhorizon: + - bugfix: Ranged frontersman with internals now drops the correct revolver type. +2024-08-22: + rye-rice, Imaginos16: + - rscadd: Adds new belt sprites +2024-08-23: + retlaw34, rye-rice, Apogee-dev: + - rscadd: Adds CLIPs weapons + - rscadd: Adds the New Frontiersmen weapons + - rscadd: 556 ammo box to cargo + - rscadd: inteq sprites should look better +2024-08-24: + generalthrax: + - rscdel: Removed a bunch of random items from fitting in wallets (notably screwdrivers, + cigarettes, suture / mesh / gauze) + - rscadd: Ship keys and derringers can now fit in wallets +2024-08-26: + Aquidu: + - rscadd: Rations now have icons that help show the contents. + - rscadd: Condiments and drink mixes now have colors when full to help show the + contents. + - rscadd: Unique sprites for the ration heater, drink packs ration drinks, and "side" + category rations. + - code_imp: Changes the sound effect for opening the drink ration to the bottle + cap sound to line up with the icon. + DIB-DOG: + - rscadd: Added a standard vest to the armory office locker + - rscadd: Added a Security camera console to the bridge + - balance: Silkenweave jackets and Betzu hats now provide cold protection but no + armor + - balance: Crying Sun now has 4 combustion/2 ion engines instead of 2/4 + - bugfix: Fixes turrets on the Crying Sun and its subshuttle, the Nail. + FalloutFalcon, MrSamu99, Fikou: + - rscadd: a few shipments of MOD control units have found there way to the frontier, + premium versions of existing hard suits with the latest tech! + - rscadd: Ported modsuits from tg, no mapped stuff yet + Gristlebee: + - balance: Durand shield consumes less charge on being hit, passive drain increased. + - bugfix: Mechs consume the correct amount of power on movement. + - refactor: normal_step_energy_drain is now base_step_energy_drain + - rscadd: Grills can now cook food. + - rscdel: Xeno-energy working as grill fuel. + - balance: Outpost food costs + - bugfix: Grills + Ms-Mee: + - bugfix: fixed handle_quirk_conflict behavior + Sadhorizon: + - bugfix: Gloves now show up in the loadout preview. + - rscadd: Brown gloves were added to the loadout. + - tweak: Moved everything out of autolathe contraband - you no longer have to hack + it, ever. + - rscdel: Removed foilhat, flamethrower, electropack, .357 casing and slime scanner + from the autolathe. + - rscadd: Added a bunch of new items to the loadout. + - tweak: Changed the description of red suspenders. + - rscadd: Ihejirka space outpost now has player-accessible cryogenics. + SomeguyManperson: + - balance: wormholes on the overmap no longer decay when used + Thera-Pissed: + - code_imp: TEG efficiency now depends on temperature delta. + Vekter: + - bugfix: Removed an extra fire extinguisher from the crew quarters on the IRMV + Talos. +2024-08-27: + Baystation12, Kapu1178, rye-rice: + - rscadd: Particles! + - rscadd: Bleeding has better feedback + - rscadd: Bone breaking now has sound effects + - rscadd: Getting shot now throws blood squirts! Live through the somme for REAL + this time! + - balance: gibbing no longer destroys your chest, no more legion transfers! + - bugfix: Lava particles should no longer destroy your FPS + FalloutFalcon: + - balance: Ballistic weapons now have a minimum camera shake. + - bugfix: Gunslinger now functions as intended. +2024-08-28: + Anticept: + - bugfix: Adjusted the Box Hospital Ship's engineering layout so that it's less + jank, and the power system doesn't loop on itself anymore. + FalloutFalcon: + - rscdel: Removed blob and alot of stuff close to blob + Gristlebee: + - rscadd: Weapon cells can be inserted directly into weapon chargers to charge them. + - bugfix: e40s not charging in weapons rechargers. + firebudgy: + - bugfix: Medical Examinations via Flashlight is now an option again. Check eye + health or see what's in someone's mouth! + meemofcourse: + - rscadd: Vox lore blurb + - bugfix: Inconsistent capitalization when speaking due to guestbook + - code_imp: Changed how the game recognizes Vox and Sarathi age + thgvr: + - imageadd: Kepori hardsuits now have a fallback icon +2024-08-29: + Apogee-dev: + - balance: SUNS and SolCon armor now uses standard armor rather than bulletproof + - balance: Normalized armor values between various faction helmets, coats, and vests + - balance: Armored coats now provide armor protection for the chest and groin only; + environmental protection unchanged + - bugfix: removed armor from some overlooked berets and soft hats + - refactor: Renamed the Mauler exosuit and several exosuit weapons to avoid confusion + Gristlebee: + - rscadd: Black Market Stock Cycling and item weighting + - rscadd: New black market stock + - rscadd: Tech and Ammo tab + - rscadd: Dead Drops + - rscadd: LTRSBT moved to the Black Market Catalogue + - rscadd: LTSRBT Crafting Recipe, 2 BS crystals, a bank card, 5 duct tape, a circuit + board and a network card + - rscadd: Reflavours the disco grenade + - rscadd: variable for powercells to show if they're rigged + - rscdel: Some old blackmarket stock + - balance: LTRSBT shipping cost up to 100 credits + - balance: Launch delivery more reliable + - bugfix: Powerfist works again + - spellcheck: fixed a few typos in the black market + - code_imp: Dynamic Overmap encounters store what ruins were spawned + - code_imp: get_block_portion and get_position_in_margin methods in mapzones.dm + - code_imp: Pair items now handled by a list + - refactor: Black Market item stocking +2024-08-30: + meemofcourse: + - rscadd: Character slots have been raised to 40. BYOND members get 50. diff --git a/html/changelogs/archive/2024-09.yml b/html/changelogs/archive/2024-09.yml new file mode 100644 index 000000000000..52b3cbfbf679 --- /dev/null +++ b/html/changelogs/archive/2024-09.yml @@ -0,0 +1,220 @@ +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 +2024-09-15: + FalloutFalcon: + - rscdel: Removed useless vars + Gristlebee: + - 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. + Zevotech: + - bugfix: Certain Subshuttle engine prechargers have now been correctly rotated. +2024-09-16: + Gristlebee: + - bugfix: Misfires no longer have 100% chance +2024-09-18: + Bjarl: + - rscadd: You can now purchase concrete mix at the outpost. For concrete making. +2024-09-19: + FalloutFalcon: + - code_imp: ctf machines now only process while ctf is running + Rye-Rice, Gristlebee: + - rscadd: Comfortable Temperature ranges + - imageadd: Temperature HUD alerts +2024-09-21: + Bjarl: + - rscadd: The PGF now has it's own turret offerings. They come in light, normal, + and heavy flavor. + FalloutFalcon: + - code_imp: added ruin tags to ruin map templates to be used soon for stuff. + Gristlebee: + - rscadd: Inteq wintercoats and hoodies in the Talos, Colossus, Vaquero and Valor + uniform lockers + PositiveEntropy: + - rscadd: A new and refurbished Elite Syndicate suit has just been unveiled! + Sadhorizon: + - rscadd: Added "ballistic goggles" - new indie security clothing item. + - imageadd: Added Kepori bulletproof helmet sprites. +2024-09-22: + Bjarl: + - code_imp: Ship Turrets can now be attached to control consoles outside the area + they are in. please look at ship maps for examples on how. + - rscadd: Every single ship with turrets now does the above + PositiveEntropy: + - rscadd: Gorlex Splinters now have winter coats! + Sadhorizon: + - bugfix: Panacea-class is no longer an independent ship. +2024-09-23: + Bjarl: + - rscadd: You can now buy flares at the outpost + - rscadd: Wasteplanets now will generate concrete filled caves. +2024-09-24: + Apogee-dev: + - balance: Changed decoration on Miskilamo ships to look similar to each other + - balance: reduced Kilo starting funds to 1500 + - bugfix: fixed wires on Mudskipper + Bjarl: + - bugfix: turrets will now _actually_ connect to their console. i swear im a real + coder. + FalloutFalcon: + - code_imp: bunch of code organization related to melee + - refactor: cleaned up a bunch of melee items to have better inheritance and paths + PositiveEntropy: + - imageadd: Resprites all balaclavas! + Thera-Pissed: + - rscdel: unused did_fire var + - rscdel: B.E.P.I.S. and related tech nodes. + rye, erika: + - rscadd: concrete jugs have been replaced by much more appropriate concrete bags, + jee, i hope whoever made *that* blunder got fired. + thgvr: + - balance: Colossus now only has 2 recruit slots instead of a whopping !!5!! + - rscadd: A bunch of kepori underwear have sprites now + trazodont: + - bugfix: miso soup spelling error + zimon9: + - rscadd: Adds a bit more contrast to the output of health analyzers +2024-09-25: + Jedi-Toothpaste: + - bugfix: Added windows to the mudskipper and shetland's engines. + - bugfix: Adjusted the blast doors which open on the Shetland's engines. + SomeguyManperson: + - bugfix: sawn off illestren/improvised shotgun stats are now consistent if they + are spawned in +2024-09-26: + FalloutFalcon: + - rscadd: Added new blank shells for training drills! + - refactor: Minor refactor of design disks to reduce repeated code + - rscadd: Ballistics now have a minimum recoil, not enough to mess up your shot! + - bugfix: ships now start closed. shiptesters be writing there memos and ship names. + - rscadd: You can now see ships in the orbit menu and its alot prettier! + - code_imp: ported tg points of interest and a much improved orbit menu + Gristlebee: + - bugfix: fixes wall deconstruction causing runtimes + Jedi-Toothpaste: + - bugfix: Fixed the lack of windows for the Kilo's Thrusters, and fixed the broken + link for the new blast doors. + generalthrax: + - balance: Most common accessories now fit on pants + - rscadd: Exosuit Recharger machines are now available from cargo + - balance: Rust Reds on the blackmarket are now available to a maximum of 3 + zimon9: + - rscadd: Added fruit puree to vegan rations + - rscdel: Removed pizza crackers from vegan rations +2024-09-27: + Jedi-Toothpaste: + - rscadd: Firelocks to the Valor-Class' Doors + - rscadd: Lighting to dark areas on the Valor-Class' Doors + - rscadd: New areas on the Valor-Class to seperate rooms + - rscadd: Added APC for the Surgical Area + PositiveEntropy: + - imageadd: Adjusts the inner part of the normal rabbit ears. +2024-09-28: + Sadhorizon: + - rscadd: Added a fax machine to the Dwayne-class. + SomeguyManperson: + - bugfix: legion skulls will no longer check if they should rise up and consume + their owner if they are ownerless +2024-09-29: + fighterslam: + - balance: Modernizes and slightly buffs the Ranger. +2024-09-30: + Bjarl: + - rscdel: The Elephant Graveyard ruin has been taken out back + - bugfix: m90 posters are real again + FalloutFalcon: + - bugfix: sawnoff weapons made from init now function correctly + - bugfix: condiment packs are no longer invisible and missing names + MassiveMen: + - rscadd: Added the fire axe to the black market uplink + Thera-Pissed: + - rscadd: New wasteplanet ruin, the abandoned Miskilamo shipbreaking yard! diff --git a/html/changelogs/archive/2024-10.yml b/html/changelogs/archive/2024-10.yml new file mode 100644 index 000000000000..5b95989e7c16 --- /dev/null +++ b/html/changelogs/archive/2024-10.yml @@ -0,0 +1,78 @@ +2024-10-01: + Erika Fox: + - rscadd: Anti-Radiation Foam is now available at the outpost + - code_imp: Fireaxe cabinets have been repathed, and now function as a more general + cabinet object. please report any inconsistencies with behavior + Sadhorizon: + - tweak: You can now put knives in secbelts and the subtypes of secbelts. + - bugfix: You can now fit all knives in mining webbings. + SomeguyManperson: + - bugfix: hallucinations can no longer be permanent unless treated +2024-10-02: + Bjarl: + - rscadd: One-Shot Rocket Launcher. A quick solution to an armored problem. + - rscadd: You can now scribble profane things onto the tube of your rocket launcher. + Use this power wisely. + - imageadd: 'Rye: A sprite for a one-shot rocket launcher' + generalthrax: + - balance: Molotov cocktails now create turf fires + - balance: Hearthwine now create turf fires in a 3x3 area + tmtmtl30, Thgvr: + - rscadd: Added bunkbeds, which can now be crafted with metal or placed by mappers. + - bugfix: Beds facing alternate directions now correctly support people buckling + to them and bedsheets being placed on top of them. +2024-10-03: + Bjarl: + - bugfix: defibs now work again. +2024-10-05: + Bjarl: + - rscadd: A cargo ship happened to lose an entire crate of Hammer Rocket Launchers + while travelling through the system. We have reason to believe they're probably + on sale now. + - rscdel: you can no longer purchase PML-9s on the black market. + Gristlebee, Rye-Rice, INFRARED_BARON: + - rscadd: Inteq Gygax and mech charges + - rscadd: Paladin shield backlash + - bugfix: Durand shield blocking all projectiles + - imageadd: Inteq Gygax sprites + Jedi-Toothpaste: + - rscadd: Added extra intercoms in high traffic areas on the Valor Class + - rscadd: Added Firelocks underneath the Cargo-Bay Doors on the Valor Class + - rscadd: Air Alarms, Scrubbers and Vents to every applicable room + MemeSnorfer: + - rscadd: Three new Elzuose horn types. Cervid, Prong, and Brow + PositiveEntropy: + - imageadd: Waste Planet Turfs Now Look Much More Refined! + Thera-Pissed: + - rscadd: pipe dispenser UI is now similar to rapid pipe dispenser UI. + generalthrax: + - balance: Replace red insuls with yellow insuls in syndicate toolboxes + zimon9: + - bugfix: fixed the waste and scrubber gas reclamation filters on the colossus +2024-10-06: + Apogee-dev: + - balance: removed one recruit slot from the vaquero + - rscadd: Added Nanotrasen Harrier-class cruiser + - rscdel: Removed Osprey-class cruiser + - rscdel: Removed Skipper-class cruiser + - balance: increased mudskipper limit to 2 + - balance: cut a deckhand slot from kilo + Bjarl: + - rscadd: IRMG engineers have rolled new turrets out into the frontier. Please report + back on their effectiveness. Unless you have been shot. Then you should be dead. + - rscadd: Sharplite has produced a line of turrets for Nanotrasen, which is now + mounting them on relevant vessels. + Sadhorizon: + - bugfix: Komodo Bridge Officer is now actually an officer. + SomeguyManperson: + - rscdel: missions will no longer request capturing ice demons + Thera-Pissed: + - rscadd: angle grinders for salvage + - rscadd: reworks plasma cutters for salvage +2024-10-07: + Aquidu: + - code_imp: Changes flameless ration heaters to "small" items + - code_imp: Adds flameless ration heaters to the ration pack item whitelist. + thgvr: + - imageadd: Some backpack sprites for Kepori + - imageadd: Shrunk down the sprite of guncases diff --git a/html/font-awesome/README.MD b/html/font-awesome/README.MD index 7d693c36f031..ba9121311d40 100644 --- a/html/font-awesome/README.MD +++ b/html/font-awesome/README.MD @@ -1,6 +1,6 @@ Due to the fact browse_rsc can't create subdirectories, every time you update font-awesome you'll need to change relative webfont references in all.min.css eg ../webfonts/fa-regular-400.ttf => fa-regular-400.ttf (or whatever you call it in asset datum) -Second change is ripping out file types other than woff and eot(ie8) from the css +Second change is ripping out file types other than ~~ woff and eot(ie8)~~ ttf from the css -Finally, removing brand related css. \ No newline at end of file +Finally, removing brand related css. diff --git a/html/font-awesome/css/all.min.css b/html/font-awesome/css/all.min.css index 5c4407984031..7a283f087ca9 100644 --- a/html/font-awesome/css/all.min.css +++ b/html/font-awesome/css/all.min.css @@ -1,4377 +1,6 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 6.1.2 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2022 Fonticons, Inc. */ -.fa, -.fab, -.fal, -.far, -.fas { - -moz-osx-font-smoothing: grayscale; - -webkit-font-smoothing: antialiased; - display: inline-block; - font-style: normal; - font-variant: normal; - text-rendering: auto; - line-height: 1; -} -.fa-lg { - font-size: 1.33333em; - line-height: 0.75em; - vertical-align: -0.0667em; -} -.fa-xs { - font-size: 0.75em; -} -.fa-sm { - font-size: 0.875em; -} -.fa-1x { - font-size: 1em; -} -.fa-2x { - font-size: 2em; -} -.fa-3x { - font-size: 3em; -} -.fa-4x { - font-size: 4em; -} -.fa-5x { - font-size: 5em; -} -.fa-6x { - font-size: 6em; -} -.fa-7x { - font-size: 7em; -} -.fa-8x { - font-size: 8em; -} -.fa-9x { - font-size: 9em; -} -.fa-10x { - font-size: 10em; -} -.fa-fw { - text-align: center; - width: 1.25em; -} -.fa-ul { - list-style-type: none; - margin-left: 2.5em; - padding-left: 0; -} -.fa-ul > li { - position: relative; -} -.fa-li { - left: -2em; - position: absolute; - text-align: center; - width: 2em; - line-height: inherit; -} -.fa-border { - border: 0.08em solid #eee; - border-radius: 0.1em; - padding: 0.2em 0.25em 0.15em; -} -.fa-pull-left { - float: left; -} -.fa-pull-right { - float: right; -} -.fa.fa-pull-left, -.fab.fa-pull-left, -.fal.fa-pull-left, -.far.fa-pull-left, -.fas.fa-pull-left { - margin-right: 0.3em; -} -.fa.fa-pull-right, -.fab.fa-pull-right, -.fal.fa-pull-right, -.far.fa-pull-right, -.fas.fa-pull-right { - margin-left: 0.3em; -} -.fa-spin { - animation: fa-spin 2s infinite linear; -} -.fa-pulse { - animation: fa-spin 1s infinite steps(8); -} -@keyframes fa-spin { - 0% { - transform: rotate(0deg); - } - to { - transform: rotate(1turn); - } -} -.fa-rotate-90 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)"; - transform: rotate(90deg); -} -.fa-rotate-180 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)"; - transform: rotate(180deg); -} -.fa-rotate-270 { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)"; - transform: rotate(270deg); -} -.fa-flip-horizontal { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)"; - transform: scaleX(-1); -} -.fa-flip-vertical { - transform: scaleY(-1); -} -.fa-flip-both, -.fa-flip-horizontal.fa-flip-vertical, -.fa-flip-vertical { - -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"; -} -.fa-flip-both, -.fa-flip-horizontal.fa-flip-vertical { - transform: scale(-1); -} -:root .fa-flip-both, -:root .fa-flip-horizontal, -:root .fa-flip-vertical, -:root .fa-rotate-90, -:root .fa-rotate-180, -:root .fa-rotate-270 { - filter: none; -} -.fa-stack { - display: inline-block; - height: 2em; - line-height: 2em; - position: relative; - vertical-align: middle; - width: 2.5em; -} -.fa-stack-1x, -.fa-stack-2x { - left: 0; - position: absolute; - text-align: center; - width: 100%; -} -.fa-stack-1x { - line-height: inherit; -} -.fa-stack-2x { - font-size: 2em; -} -.fa-inverse { - color: #fff; -} -.fa-500px:before { - content: "\f26e"; -} -.fa-accessible-icon:before { - content: "\f368"; -} -.fa-accusoft:before { - content: "\f369"; -} -.fa-acquisitions-incorporated:before { - content: "\f6af"; -} -.fa-ad:before { - content: "\f641"; -} -.fa-address-book:before { - content: "\f2b9"; -} -.fa-address-card:before { - content: "\f2bb"; -} -.fa-adjust:before { - content: "\f042"; -} -.fa-adn:before { - content: "\f170"; -} -.fa-adobe:before { - content: "\f778"; -} -.fa-adversal:before { - content: "\f36a"; -} -.fa-affiliatetheme:before { - content: "\f36b"; -} -.fa-air-freshener:before { - content: "\f5d0"; -} -.fa-airbnb:before { - content: "\f834"; -} -.fa-algolia:before { - content: "\f36c"; -} -.fa-align-center:before { - content: "\f037"; -} -.fa-align-justify:before { - content: "\f039"; -} -.fa-align-left:before { - content: "\f036"; -} -.fa-align-right:before { - content: "\f038"; -} -.fa-alipay:before { - content: "\f642"; -} -.fa-allergies:before { - content: "\f461"; -} -.fa-amazon:before { - content: "\f270"; -} -.fa-amazon-pay:before { - content: "\f42c"; -} -.fa-ambulance:before { - content: "\f0f9"; -} -.fa-american-sign-language-interpreting:before { - content: "\f2a3"; -} -.fa-amilia:before { - content: "\f36d"; -} -.fa-anchor:before { - content: "\f13d"; -} -.fa-android:before { - content: "\f17b"; -} -.fa-angellist:before { - content: "\f209"; -} -.fa-angle-double-down:before { - content: "\f103"; -} -.fa-angle-double-left:before { - content: "\f100"; -} -.fa-angle-double-right:before { - content: "\f101"; -} -.fa-angle-double-up:before { - content: "\f102"; -} -.fa-angle-down:before { - content: "\f107"; -} -.fa-angle-left:before { - content: "\f104"; -} -.fa-angle-right:before { - content: "\f105"; -} -.fa-angle-up:before { - content: "\f106"; -} -.fa-angry:before { - content: "\f556"; -} -.fa-angrycreative:before { - content: "\f36e"; -} -.fa-angular:before { - content: "\f420"; -} -.fa-ankh:before { - content: "\f644"; -} -.fa-app-store:before { - content: "\f36f"; -} -.fa-app-store-ios:before { - content: "\f370"; -} -.fa-apper:before { - content: "\f371"; -} -.fa-apple:before { - content: "\f179"; -} -.fa-apple-alt:before { - content: "\f5d1"; -} -.fa-apple-pay:before { - content: "\f415"; -} -.fa-archive:before { - content: "\f187"; -} -.fa-archway:before { - content: "\f557"; -} -.fa-arrow-alt-circle-down:before { - content: "\f358"; -} -.fa-arrow-alt-circle-left:before { - content: "\f359"; -} -.fa-arrow-alt-circle-right:before { - content: "\f35a"; -} -.fa-arrow-alt-circle-up:before { - content: "\f35b"; -} -.fa-arrow-circle-down:before { - content: "\f0ab"; -} -.fa-arrow-circle-left:before { - content: "\f0a8"; -} -.fa-arrow-circle-right:before { - content: "\f0a9"; -} -.fa-arrow-circle-up:before { - content: "\f0aa"; -} -.fa-arrow-down:before { - content: "\f063"; -} -.fa-arrow-left:before { - content: "\f060"; -} -.fa-arrow-right:before { - content: "\f061"; -} -.fa-arrow-up:before { - content: "\f062"; -} -.fa-arrows-alt:before { - content: "\f0b2"; -} -.fa-arrows-alt-h:before { - content: "\f337"; -} -.fa-arrows-alt-v:before { - content: "\f338"; -} -.fa-artstation:before { - content: "\f77a"; -} -.fa-assistive-listening-systems:before { - content: "\f2a2"; -} -.fa-asterisk:before { - content: "\f069"; -} -.fa-asymmetrik:before { - content: "\f372"; -} -.fa-at:before { - content: "\f1fa"; -} -.fa-atlas:before { - content: "\f558"; -} -.fa-atlassian:before { - content: "\f77b"; -} -.fa-atom:before { - content: "\f5d2"; -} -.fa-audible:before { - content: "\f373"; -} -.fa-audio-description:before { - content: "\f29e"; -} -.fa-autoprefixer:before { - content: "\f41c"; -} -.fa-avianex:before { - content: "\f374"; -} -.fa-aviato:before { - content: "\f421"; -} -.fa-award:before { - content: "\f559"; -} -.fa-aws:before { - content: "\f375"; -} -.fa-baby:before { - content: "\f77c"; -} -.fa-baby-carriage:before { - content: "\f77d"; -} -.fa-backspace:before { - content: "\f55a"; -} -.fa-backward:before { - content: "\f04a"; -} -.fa-bacon:before { - content: "\f7e5"; -} -.fa-balance-scale:before { - content: "\f24e"; -} -.fa-balance-scale-left:before { - content: "\f515"; -} -.fa-balance-scale-right:before { - content: "\f516"; -} -.fa-ban:before { - content: "\f05e"; -} -.fa-band-aid:before { - content: "\f462"; -} -.fa-bandcamp:before { - content: "\f2d5"; -} -.fa-barcode:before { - content: "\f02a"; -} -.fa-bars:before { - content: "\f0c9"; -} -.fa-baseball-ball:before { - content: "\f433"; -} -.fa-basketball-ball:before { - content: "\f434"; -} -.fa-bath:before { - content: "\f2cd"; -} -.fa-battery-empty:before { - content: "\f244"; -} -.fa-battery-full:before { - content: "\f240"; -} -.fa-battery-half:before { - content: "\f242"; -} -.fa-battery-quarter:before { - content: "\f243"; -} -.fa-battery-three-quarters:before { - content: "\f241"; -} -.fa-battle-net:before { - content: "\f835"; -} -.fa-bed:before { - content: "\f236"; -} -.fa-beer:before { - content: "\f0fc"; -} -.fa-behance:before { - content: "\f1b4"; -} -.fa-behance-square:before { - content: "\f1b5"; -} -.fa-bell:before { - content: "\f0f3"; -} -.fa-bell-slash:before { - content: "\f1f6"; -} -.fa-bezier-curve:before { - content: "\f55b"; -} -.fa-bible:before { - content: "\f647"; -} -.fa-bicycle:before { - content: "\f206"; -} -.fa-biking:before { - content: "\f84a"; -} -.fa-bimobject:before { - content: "\f378"; -} -.fa-binoculars:before { - content: "\f1e5"; -} -.fa-biohazard:before { - content: "\f780"; -} -.fa-birthday-cake:before { - content: "\f1fd"; -} -.fa-bitbucket:before { - content: "\f171"; -} -.fa-bitcoin:before { - content: "\f379"; -} -.fa-bity:before { - content: "\f37a"; -} -.fa-black-tie:before { - content: "\f27e"; -} -.fa-blackberry:before { - content: "\f37b"; -} -.fa-blender:before { - content: "\f517"; -} -.fa-blender-phone:before { - content: "\f6b6"; -} -.fa-blind:before { - content: "\f29d"; -} -.fa-blog:before { - content: "\f781"; -} -.fa-blogger:before { - content: "\f37c"; -} -.fa-blogger-b:before { - content: "\f37d"; -} -.fa-bluetooth:before { - content: "\f293"; -} -.fa-bluetooth-b:before { - content: "\f294"; -} -.fa-bold:before { - content: "\f032"; -} -.fa-bolt:before { - content: "\f0e7"; -} -.fa-bomb:before { - content: "\f1e2"; -} -.fa-bone:before { - content: "\f5d7"; -} -.fa-bong:before { - content: "\f55c"; -} -.fa-book:before { - content: "\f02d"; -} -.fa-book-dead:before { - content: "\f6b7"; -} -.fa-book-medical:before { - content: "\f7e6"; -} -.fa-book-open:before { - content: "\f518"; -} -.fa-book-reader:before { - content: "\f5da"; -} -.fa-bookmark:before { - content: "\f02e"; -} -.fa-bootstrap:before { - content: "\f836"; -} -.fa-border-all:before { - content: "\f84c"; -} -.fa-border-none:before { - content: "\f850"; -} -.fa-border-style:before { - content: "\f853"; -} -.fa-bowling-ball:before { - content: "\f436"; -} -.fa-box:before { - content: "\f466"; -} -.fa-box-open:before { - content: "\f49e"; -} -.fa-boxes:before { - content: "\f468"; -} -.fa-braille:before { - content: "\f2a1"; -} -.fa-brain:before { - content: "\f5dc"; -} -.fa-bread-slice:before { - content: "\f7ec"; -} -.fa-briefcase:before { - content: "\f0b1"; -} -.fa-briefcase-medical:before { - content: "\f469"; -} -.fa-broadcast-tower:before { - content: "\f519"; -} -.fa-broom:before { - content: "\f51a"; -} -.fa-brush:before { - content: "\f55d"; -} -.fa-btc:before { - content: "\f15a"; -} -.fa-buffer:before { - content: "\f837"; -} -.fa-bug:before { - content: "\f188"; -} -.fa-building:before { - content: "\f1ad"; -} -.fa-bullhorn:before { - content: "\f0a1"; -} -.fa-bullseye:before { - content: "\f140"; -} -.fa-burn:before { - content: "\f46a"; -} -.fa-buromobelexperte:before { - content: "\f37f"; -} -.fa-bus:before { - content: "\f207"; -} -.fa-bus-alt:before { - content: "\f55e"; -} -.fa-business-time:before { - content: "\f64a"; -} -.fa-buysellads:before { - content: "\f20d"; -} -.fa-calculator:before { - content: "\f1ec"; -} -.fa-calendar:before { - content: "\f133"; -} -.fa-calendar-alt:before { - content: "\f073"; -} -.fa-calendar-check:before { - content: "\f274"; -} -.fa-calendar-day:before { - content: "\f783"; -} -.fa-calendar-minus:before { - content: "\f272"; -} -.fa-calendar-plus:before { - content: "\f271"; -} -.fa-calendar-times:before { - content: "\f273"; -} -.fa-calendar-week:before { - content: "\f784"; -} -.fa-camera:before { - content: "\f030"; -} -.fa-camera-retro:before { - content: "\f083"; -} -.fa-campground:before { - content: "\f6bb"; -} -.fa-canadian-maple-leaf:before { - content: "\f785"; -} -.fa-candy-cane:before { - content: "\f786"; -} -.fa-cannabis:before { - content: "\f55f"; -} -.fa-capsules:before { - content: "\f46b"; -} -.fa-car:before { - content: "\f1b9"; -} -.fa-car-alt:before { - content: "\f5de"; -} -.fa-car-battery:before { - content: "\f5df"; -} -.fa-car-crash:before { - content: "\f5e1"; -} -.fa-car-side:before { - content: "\f5e4"; -} -.fa-caret-down:before { - content: "\f0d7"; -} -.fa-caret-left:before { - content: "\f0d9"; -} -.fa-caret-right:before { - content: "\f0da"; -} -.fa-caret-square-down:before { - content: "\f150"; -} -.fa-caret-square-left:before { - content: "\f191"; -} -.fa-caret-square-right:before { - content: "\f152"; -} -.fa-caret-square-up:before { - content: "\f151"; -} -.fa-caret-up:before { - content: "\f0d8"; -} -.fa-carrot:before { - content: "\f787"; -} -.fa-cart-arrow-down:before { - content: "\f218"; -} -.fa-cart-plus:before { - content: "\f217"; -} -.fa-cash-register:before { - content: "\f788"; -} -.fa-cat:before { - content: "\f6be"; -} -.fa-cc-amazon-pay:before { - content: "\f42d"; -} -.fa-cc-amex:before { - content: "\f1f3"; -} -.fa-cc-apple-pay:before { - content: "\f416"; -} -.fa-cc-diners-club:before { - content: "\f24c"; -} -.fa-cc-discover:before { - content: "\f1f2"; -} -.fa-cc-jcb:before { - content: "\f24b"; -} -.fa-cc-mastercard:before { - content: "\f1f1"; -} -.fa-cc-paypal:before { - content: "\f1f4"; -} -.fa-cc-stripe:before { - content: "\f1f5"; -} -.fa-cc-visa:before { - content: "\f1f0"; -} -.fa-centercode:before { - content: "\f380"; -} -.fa-centos:before { - content: "\f789"; -} -.fa-certificate:before { - content: "\f0a3"; -} -.fa-chair:before { - content: "\f6c0"; -} -.fa-chalkboard:before { - content: "\f51b"; -} -.fa-chalkboard-teacher:before { - content: "\f51c"; -} -.fa-charging-station:before { - content: "\f5e7"; -} -.fa-chart-area:before { - content: "\f1fe"; -} -.fa-chart-bar:before { - content: "\f080"; -} -.fa-chart-line:before { - content: "\f201"; -} -.fa-chart-pie:before { - content: "\f200"; -} -.fa-check:before { - content: "\f00c"; -} -.fa-check-circle:before { - content: "\f058"; -} -.fa-check-double:before { - content: "\f560"; -} -.fa-check-square:before { - content: "\f14a"; -} -.fa-cheese:before { - content: "\f7ef"; -} -.fa-chess:before { - content: "\f439"; -} -.fa-chess-bishop:before { - content: "\f43a"; -} -.fa-chess-board:before { - content: "\f43c"; -} -.fa-chess-king:before { - content: "\f43f"; -} -.fa-chess-knight:before { - content: "\f441"; -} -.fa-chess-pawn:before { - content: "\f443"; -} -.fa-chess-queen:before { - content: "\f445"; -} -.fa-chess-rook:before { - content: "\f447"; -} -.fa-chevron-circle-down:before { - content: "\f13a"; -} -.fa-chevron-circle-left:before { - content: "\f137"; -} -.fa-chevron-circle-right:before { - content: "\f138"; -} -.fa-chevron-circle-up:before { - content: "\f139"; -} -.fa-chevron-down:before { - content: "\f078"; -} -.fa-chevron-left:before { - content: "\f053"; -} -.fa-chevron-right:before { - content: "\f054"; -} -.fa-chevron-up:before { - content: "\f077"; -} -.fa-child:before { - content: "\f1ae"; -} -.fa-chrome:before { - content: "\f268"; -} -.fa-chromecast:before { - content: "\f838"; -} -.fa-church:before { - content: "\f51d"; -} -.fa-circle:before { - content: "\f111"; -} -.fa-circle-notch:before { - content: "\f1ce"; -} -.fa-city:before { - content: "\f64f"; -} -.fa-clinic-medical:before { - content: "\f7f2"; -} -.fa-clipboard:before { - content: "\f328"; -} -.fa-clipboard-check:before { - content: "\f46c"; -} -.fa-clipboard-list:before { - content: "\f46d"; -} -.fa-clock:before { - content: "\f017"; -} -.fa-clone:before { - content: "\f24d"; -} -.fa-closed-captioning:before { - content: "\f20a"; -} -.fa-cloud:before { - content: "\f0c2"; -} -.fa-cloud-download-alt:before { - content: "\f381"; -} -.fa-cloud-meatball:before { - content: "\f73b"; -} -.fa-cloud-moon:before { - content: "\f6c3"; -} -.fa-cloud-moon-rain:before { - content: "\f73c"; -} -.fa-cloud-rain:before { - content: "\f73d"; -} -.fa-cloud-showers-heavy:before { - content: "\f740"; -} -.fa-cloud-sun:before { - content: "\f6c4"; -} -.fa-cloud-sun-rain:before { - content: "\f743"; -} -.fa-cloud-upload-alt:before { - content: "\f382"; -} -.fa-cloudscale:before { - content: "\f383"; -} -.fa-cloudsmith:before { - content: "\f384"; -} -.fa-cloudversify:before { - content: "\f385"; -} -.fa-cocktail:before { - content: "\f561"; -} -.fa-code:before { - content: "\f121"; -} -.fa-code-branch:before { - content: "\f126"; -} -.fa-codepen:before { - content: "\f1cb"; -} -.fa-codiepie:before { - content: "\f284"; -} -.fa-coffee:before { - content: "\f0f4"; -} -.fa-cog:before { - content: "\f013"; -} -.fa-cogs:before { - content: "\f085"; -} -.fa-coins:before { - content: "\f51e"; -} -.fa-columns:before { - content: "\f0db"; -} -.fa-comment:before { - content: "\f075"; -} -.fa-comment-alt:before { - content: "\f27a"; -} -.fa-comment-dollar:before { - content: "\f651"; -} -.fa-comment-dots:before { - content: "\f4ad"; -} -.fa-comment-medical:before { - content: "\f7f5"; -} -.fa-comment-slash:before { - content: "\f4b3"; -} -.fa-comments:before { - content: "\f086"; -} -.fa-comments-dollar:before { - content: "\f653"; -} -.fa-compact-disc:before { - content: "\f51f"; -} -.fa-compass:before { - content: "\f14e"; -} -.fa-compress:before { - content: "\f066"; -} -.fa-compress-arrows-alt:before { - content: "\f78c"; -} -.fa-concierge-bell:before { - content: "\f562"; -} -.fa-confluence:before { - content: "\f78d"; -} -.fa-connectdevelop:before { - content: "\f20e"; -} -.fa-contao:before { - content: "\f26d"; -} -.fa-cookie:before { - content: "\f563"; -} -.fa-cookie-bite:before { - content: "\f564"; -} -.fa-copy:before { - content: "\f0c5"; -} -.fa-copyright:before { - content: "\f1f9"; -} -.fa-couch:before { - content: "\f4b8"; -} -.fa-cpanel:before { - content: "\f388"; -} -.fa-creative-commons:before { - content: "\f25e"; -} -.fa-creative-commons-by:before { - content: "\f4e7"; -} -.fa-creative-commons-nc:before { - content: "\f4e8"; -} -.fa-creative-commons-nc-eu:before { - content: "\f4e9"; -} -.fa-creative-commons-nc-jp:before { - content: "\f4ea"; -} -.fa-creative-commons-nd:before { - content: "\f4eb"; -} -.fa-creative-commons-pd:before { - content: "\f4ec"; -} -.fa-creative-commons-pd-alt:before { - content: "\f4ed"; -} -.fa-creative-commons-remix:before { - content: "\f4ee"; -} -.fa-creative-commons-sa:before { - content: "\f4ef"; -} -.fa-creative-commons-sampling:before { - content: "\f4f0"; -} -.fa-creative-commons-sampling-plus:before { - content: "\f4f1"; -} -.fa-creative-commons-share:before { - content: "\f4f2"; -} -.fa-creative-commons-zero:before { - content: "\f4f3"; -} -.fa-credit-card:before { - content: "\f09d"; -} -.fa-critical-role:before { - content: "\f6c9"; -} -.fa-crop:before { - content: "\f125"; -} -.fa-crop-alt:before { - content: "\f565"; -} -.fa-cross:before { - content: "\f654"; -} -.fa-crosshairs:before { - content: "\f05b"; -} -.fa-crow:before { - content: "\f520"; -} -.fa-crown:before { - content: "\f521"; -} -.fa-crutch:before { - content: "\f7f7"; -} -.fa-css3:before { - content: "\f13c"; -} -.fa-css3-alt:before { - content: "\f38b"; -} -.fa-cube:before { - content: "\f1b2"; -} -.fa-cubes:before { - content: "\f1b3"; -} -.fa-cut:before { - content: "\f0c4"; -} -.fa-cuttlefish:before { - content: "\f38c"; -} -.fa-d-and-d:before { - content: "\f38d"; -} -.fa-d-and-d-beyond:before { - content: "\f6ca"; -} -.fa-dashcube:before { - content: "\f210"; -} -.fa-database:before { - content: "\f1c0"; -} -.fa-deaf:before { - content: "\f2a4"; -} -.fa-delicious:before { - content: "\f1a5"; -} -.fa-democrat:before { - content: "\f747"; -} -.fa-deploydog:before { - content: "\f38e"; -} -.fa-deskpro:before { - content: "\f38f"; -} -.fa-desktop:before { - content: "\f108"; -} -.fa-dev:before { - content: "\f6cc"; -} -.fa-deviantart:before { - content: "\f1bd"; -} -.fa-dharmachakra:before { - content: "\f655"; -} -.fa-dhl:before { - content: "\f790"; -} -.fa-diagnoses:before { - content: "\f470"; -} -.fa-diaspora:before { - content: "\f791"; -} -.fa-dice:before { - content: "\f522"; -} -.fa-dice-d20:before { - content: "\f6cf"; -} -.fa-dice-d6:before { - content: "\f6d1"; -} -.fa-dice-five:before { - content: "\f523"; -} -.fa-dice-four:before { - content: "\f524"; -} -.fa-dice-one:before { - content: "\f525"; -} -.fa-dice-six:before { - content: "\f526"; -} -.fa-dice-three:before { - content: "\f527"; -} -.fa-dice-two:before { - content: "\f528"; -} -.fa-digg:before { - content: "\f1a6"; -} -.fa-digital-ocean:before { - content: "\f391"; -} -.fa-digital-tachograph:before { - content: "\f566"; -} -.fa-directions:before { - content: "\f5eb"; -} -.fa-discord:before { - content: "\f392"; -} -.fa-discourse:before { - content: "\f393"; -} -.fa-divide:before { - content: "\f529"; -} -.fa-dizzy:before { - content: "\f567"; -} -.fa-dna:before { - content: "\f471"; -} -.fa-dochub:before { - content: "\f394"; -} -.fa-docker:before { - content: "\f395"; -} -.fa-dog:before { - content: "\f6d3"; -} -.fa-dollar-sign:before { - content: "\f155"; -} -.fa-dolly:before { - content: "\f472"; -} -.fa-dolly-flatbed:before { - content: "\f474"; -} -.fa-donate:before { - content: "\f4b9"; -} -.fa-door-closed:before { - content: "\f52a"; -} -.fa-door-open:before { - content: "\f52b"; -} -.fa-dot-circle:before { - content: "\f192"; -} -.fa-dove:before { - content: "\f4ba"; -} -.fa-download:before { - content: "\f019"; -} -.fa-draft2digital:before { - content: "\f396"; -} -.fa-drafting-compass:before { - content: "\f568"; -} -.fa-dragon:before { - content: "\f6d5"; -} -.fa-draw-polygon:before { - content: "\f5ee"; -} -.fa-dribbble:before { - content: "\f17d"; -} -.fa-dribbble-square:before { - content: "\f397"; -} -.fa-dropbox:before { - content: "\f16b"; -} -.fa-drum:before { - content: "\f569"; -} -.fa-drum-steelpan:before { - content: "\f56a"; -} -.fa-drumstick-bite:before { - content: "\f6d7"; -} -.fa-drupal:before { - content: "\f1a9"; -} -.fa-dumbbell:before { - content: "\f44b"; -} -.fa-dumpster:before { - content: "\f793"; -} -.fa-dumpster-fire:before { - content: "\f794"; -} -.fa-dungeon:before { - content: "\f6d9"; -} -.fa-dyalog:before { - content: "\f399"; -} -.fa-earlybirds:before { - content: "\f39a"; -} -.fa-ebay:before { - content: "\f4f4"; -} -.fa-edge:before { - content: "\f282"; -} -.fa-edit:before { - content: "\f044"; -} -.fa-egg:before { - content: "\f7fb"; -} -.fa-eject:before { - content: "\f052"; -} -.fa-elementor:before { - content: "\f430"; -} -.fa-ellipsis-h:before { - content: "\f141"; -} -.fa-ellipsis-v:before { - content: "\f142"; -} -.fa-ello:before { - content: "\f5f1"; -} -.fa-ember:before { - content: "\f423"; -} -.fa-empire:before { - content: "\f1d1"; -} -.fa-envelope:before { - content: "\f0e0"; -} -.fa-envelope-open:before { - content: "\f2b6"; -} -.fa-envelope-open-text:before { - content: "\f658"; -} -.fa-envelope-square:before { - content: "\f199"; -} -.fa-envira:before { - content: "\f299"; -} -.fa-equals:before { - content: "\f52c"; -} -.fa-eraser:before { - content: "\f12d"; -} -.fa-erlang:before { - content: "\f39d"; -} -.fa-ethereum:before { - content: "\f42e"; -} -.fa-ethernet:before { - content: "\f796"; -} -.fa-etsy:before { - content: "\f2d7"; -} -.fa-euro-sign:before { - content: "\f153"; -} -.fa-evernote:before { - content: "\f839"; -} -.fa-exchange-alt:before { - content: "\f362"; -} -.fa-exclamation:before { - content: "\f12a"; -} -.fa-exclamation-circle:before { - content: "\f06a"; -} -.fa-exclamation-triangle:before { - content: "\f071"; -} -.fa-expand:before { - content: "\f065"; -} -.fa-expand-arrows-alt:before { - content: "\f31e"; -} -.fa-expeditedssl:before { - content: "\f23e"; -} -.fa-external-link-alt:before { - content: "\f35d"; -} -.fa-external-link-square-alt:before { - content: "\f360"; -} -.fa-eye:before { - content: "\f06e"; -} -.fa-eye-dropper:before { - content: "\f1fb"; -} -.fa-eye-slash:before { - content: "\f070"; -} -.fa-facebook:before { - content: "\f09a"; -} -.fa-facebook-f:before { - content: "\f39e"; -} -.fa-facebook-messenger:before { - content: "\f39f"; -} -.fa-facebook-square:before { - content: "\f082"; -} -.fa-fan:before { - content: "\f863"; -} -.fa-fantasy-flight-games:before { - content: "\f6dc"; -} -.fa-fast-backward:before { - content: "\f049"; -} -.fa-fast-forward:before { - content: "\f050"; -} -.fa-fax:before { - content: "\f1ac"; -} -.fa-feather:before { - content: "\f52d"; -} -.fa-feather-alt:before { - content: "\f56b"; -} -.fa-fedex:before { - content: "\f797"; -} -.fa-fedora:before { - content: "\f798"; -} -.fa-female:before { - content: "\f182"; -} -.fa-fighter-jet:before { - content: "\f0fb"; -} -.fa-figma:before { - content: "\f799"; -} -.fa-file:before { - content: "\f15b"; -} -.fa-file-alt:before { - content: "\f15c"; -} -.fa-file-archive:before { - content: "\f1c6"; -} -.fa-file-audio:before { - content: "\f1c7"; -} -.fa-file-code:before { - content: "\f1c9"; -} -.fa-file-contract:before { - content: "\f56c"; -} -.fa-file-csv:before { - content: "\f6dd"; -} -.fa-file-download:before { - content: "\f56d"; -} -.fa-file-excel:before { - content: "\f1c3"; -} -.fa-file-export:before { - content: "\f56e"; -} -.fa-file-image:before { - content: "\f1c5"; -} -.fa-file-import:before { - content: "\f56f"; -} -.fa-file-invoice:before { - content: "\f570"; -} -.fa-file-invoice-dollar:before { - content: "\f571"; -} -.fa-file-medical:before { - content: "\f477"; -} -.fa-file-medical-alt:before { - content: "\f478"; -} -.fa-file-pdf:before { - content: "\f1c1"; -} -.fa-file-powerpoint:before { - content: "\f1c4"; -} -.fa-file-prescription:before { - content: "\f572"; -} -.fa-file-signature:before { - content: "\f573"; -} -.fa-file-upload:before { - content: "\f574"; -} -.fa-file-video:before { - content: "\f1c8"; -} -.fa-file-word:before { - content: "\f1c2"; -} -.fa-fill:before { - content: "\f575"; -} -.fa-fill-drip:before { - content: "\f576"; -} -.fa-film:before { - content: "\f008"; -} -.fa-filter:before { - content: "\f0b0"; -} -.fa-fingerprint:before { - content: "\f577"; -} -.fa-fire:before { - content: "\f06d"; -} -.fa-fire-alt:before { - content: "\f7e4"; -} -.fa-fire-extinguisher:before { - content: "\f134"; -} -.fa-firefox:before { - content: "\f269"; -} -.fa-first-aid:before { - content: "\f479"; -} -.fa-first-order:before { - content: "\f2b0"; -} -.fa-first-order-alt:before { - content: "\f50a"; -} -.fa-firstdraft:before { - content: "\f3a1"; -} -.fa-fish:before { - content: "\f578"; -} -.fa-fist-raised:before { - content: "\f6de"; -} -.fa-flag:before { - content: "\f024"; -} -.fa-flag-checkered:before { - content: "\f11e"; -} -.fa-flag-usa:before { - content: "\f74d"; -} -.fa-flask:before { - content: "\f0c3"; -} -.fa-flickr:before { - content: "\f16e"; -} -.fa-flipboard:before { - content: "\f44d"; -} -.fa-flushed:before { - content: "\f579"; -} -.fa-fly:before { - content: "\f417"; -} -.fa-folder:before { - content: "\f07b"; -} -.fa-folder-minus:before { - content: "\f65d"; -} -.fa-folder-open:before { - content: "\f07c"; -} -.fa-folder-plus:before { - content: "\f65e"; -} -.fa-font:before { - content: "\f031"; -} -.fa-font-awesome:before { - content: "\f2b4"; -} -.fa-font-awesome-alt:before { - content: "\f35c"; -} -.fa-font-awesome-flag:before { - content: "\f425"; -} -.fa-font-awesome-logo-full:before { - content: "\f4e6"; -} -.fa-fonticons:before { - content: "\f280"; -} -.fa-fonticons-fi:before { - content: "\f3a2"; -} -.fa-football-ball:before { - content: "\f44e"; -} -.fa-fort-awesome:before { - content: "\f286"; -} -.fa-fort-awesome-alt:before { - content: "\f3a3"; -} -.fa-forumbee:before { - content: "\f211"; -} -.fa-forward:before { - content: "\f04e"; -} -.fa-foursquare:before { - content: "\f180"; -} -.fa-free-code-camp:before { - content: "\f2c5"; -} -.fa-freebsd:before { - content: "\f3a4"; -} -.fa-frog:before { - content: "\f52e"; -} -.fa-frown:before { - content: "\f119"; -} -.fa-frown-open:before { - content: "\f57a"; -} -.fa-fulcrum:before { - content: "\f50b"; -} -.fa-funnel-dollar:before { - content: "\f662"; -} -.fa-futbol:before { - content: "\f1e3"; -} -.fa-galactic-republic:before { - content: "\f50c"; -} -.fa-galactic-senate:before { - content: "\f50d"; -} -.fa-gamepad:before { - content: "\f11b"; -} -.fa-gas-pump:before { - content: "\f52f"; -} -.fa-gavel:before { - content: "\f0e3"; -} -.fa-gem:before { - content: "\f3a5"; -} -.fa-genderless:before { - content: "\f22d"; -} -.fa-get-pocket:before { - content: "\f265"; -} -.fa-gg:before { - content: "\f260"; -} -.fa-gg-circle:before { - content: "\f261"; -} -.fa-ghost:before { - content: "\f6e2"; -} -.fa-gift:before { - content: "\f06b"; -} -.fa-gifts:before { - content: "\f79c"; -} -.fa-git:before { - content: "\f1d3"; -} -.fa-git-alt:before { - content: "\f841"; -} -.fa-git-square:before { - content: "\f1d2"; -} -.fa-github:before { - content: "\f09b"; -} -.fa-github-alt:before { - content: "\f113"; -} -.fa-github-square:before { - content: "\f092"; -} -.fa-gitkraken:before { - content: "\f3a6"; -} -.fa-gitlab:before { - content: "\f296"; -} -.fa-gitter:before { - content: "\f426"; -} -.fa-glass-cheers:before { - content: "\f79f"; -} -.fa-glass-martini:before { - content: "\f000"; -} -.fa-glass-martini-alt:before { - content: "\f57b"; -} -.fa-glass-whiskey:before { - content: "\f7a0"; -} -.fa-glasses:before { - content: "\f530"; -} -.fa-glide:before { - content: "\f2a5"; -} -.fa-glide-g:before { - content: "\f2a6"; -} -.fa-globe:before { - content: "\f0ac"; -} -.fa-globe-africa:before { - content: "\f57c"; -} -.fa-globe-americas:before { - content: "\f57d"; -} -.fa-globe-asia:before { - content: "\f57e"; -} -.fa-globe-europe:before { - content: "\f7a2"; -} -.fa-gofore:before { - content: "\f3a7"; -} -.fa-golf-ball:before { - content: "\f450"; -} -.fa-goodreads:before { - content: "\f3a8"; -} -.fa-goodreads-g:before { - content: "\f3a9"; -} -.fa-google:before { - content: "\f1a0"; -} -.fa-google-drive:before { - content: "\f3aa"; -} -.fa-google-play:before { - content: "\f3ab"; -} -.fa-google-plus:before { - content: "\f2b3"; -} -.fa-google-plus-g:before { - content: "\f0d5"; -} -.fa-google-plus-square:before { - content: "\f0d4"; -} -.fa-google-wallet:before { - content: "\f1ee"; -} -.fa-gopuram:before { - content: "\f664"; -} -.fa-graduation-cap:before { - content: "\f19d"; -} -.fa-gratipay:before { - content: "\f184"; -} -.fa-grav:before { - content: "\f2d6"; -} -.fa-greater-than:before { - content: "\f531"; -} -.fa-greater-than-equal:before { - content: "\f532"; -} -.fa-grimace:before { - content: "\f57f"; -} -.fa-grin:before { - content: "\f580"; -} -.fa-grin-alt:before { - content: "\f581"; -} -.fa-grin-beam:before { - content: "\f582"; -} -.fa-grin-beam-sweat:before { - content: "\f583"; -} -.fa-grin-hearts:before { - content: "\f584"; -} -.fa-grin-squint:before { - content: "\f585"; -} -.fa-grin-squint-tears:before { - content: "\f586"; -} -.fa-grin-stars:before { - content: "\f587"; -} -.fa-grin-tears:before { - content: "\f588"; -} -.fa-grin-tongue:before { - content: "\f589"; -} -.fa-grin-tongue-squint:before { - content: "\f58a"; -} -.fa-grin-tongue-wink:before { - content: "\f58b"; -} -.fa-grin-wink:before { - content: "\f58c"; -} -.fa-grip-horizontal:before { - content: "\f58d"; -} -.fa-grip-lines:before { - content: "\f7a4"; -} -.fa-grip-lines-vertical:before { - content: "\f7a5"; -} -.fa-grip-vertical:before { - content: "\f58e"; -} -.fa-gripfire:before { - content: "\f3ac"; -} -.fa-grunt:before { - content: "\f3ad"; -} -.fa-guitar:before { - content: "\f7a6"; -} -.fa-gulp:before { - content: "\f3ae"; -} -.fa-h-square:before { - content: "\f0fd"; -} -.fa-hacker-news:before { - content: "\f1d4"; -} -.fa-hacker-news-square:before { - content: "\f3af"; -} -.fa-hackerrank:before { - content: "\f5f7"; -} -.fa-hamburger:before { - content: "\f805"; -} -.fa-hammer:before { - content: "\f6e3"; -} -.fa-hamsa:before { - content: "\f665"; -} -.fa-hand-holding:before { - content: "\f4bd"; -} -.fa-hand-holding-heart:before { - content: "\f4be"; -} -.fa-hand-holding-usd:before { - content: "\f4c0"; -} -.fa-hand-lizard:before { - content: "\f258"; -} -.fa-hand-middle-finger:before { - content: "\f806"; -} -.fa-hand-paper:before { - content: "\f256"; -} -.fa-hand-peace:before { - content: "\f25b"; -} -.fa-hand-point-down:before { - content: "\f0a7"; -} -.fa-hand-point-left:before { - content: "\f0a5"; -} -.fa-hand-point-right:before { - content: "\f0a4"; -} -.fa-hand-point-up:before { - content: "\f0a6"; -} -.fa-hand-pointer:before { - content: "\f25a"; -} -.fa-hand-rock:before { - content: "\f255"; -} -.fa-hand-scissors:before { - content: "\f257"; -} -.fa-hand-spock:before { - content: "\f259"; -} -.fa-hands:before { - content: "\f4c2"; -} -.fa-hands-helping:before { - content: "\f4c4"; -} -.fa-handshake:before { - content: "\f2b5"; -} -.fa-hanukiah:before { - content: "\f6e6"; -} -.fa-hard-hat:before { - content: "\f807"; -} -.fa-hashtag:before { - content: "\f292"; -} -.fa-hat-wizard:before { - content: "\f6e8"; -} -.fa-haykal:before { - content: "\f666"; -} -.fa-hdd:before { - content: "\f0a0"; -} -.fa-heading:before { - content: "\f1dc"; -} -.fa-headphones:before { - content: "\f025"; -} -.fa-headphones-alt:before { - content: "\f58f"; -} -.fa-headset:before { - content: "\f590"; -} -.fa-heart:before { - content: "\f004"; -} -.fa-heart-broken:before { - content: "\f7a9"; -} -.fa-heartbeat:before { - content: "\f21e"; -} -.fa-helicopter:before { - content: "\f533"; -} -.fa-highlighter:before { - content: "\f591"; -} -.fa-hiking:before { - content: "\f6ec"; -} -.fa-hippo:before { - content: "\f6ed"; -} -.fa-hips:before { - content: "\f452"; -} -.fa-hire-a-helper:before { - content: "\f3b0"; -} -.fa-history:before { - content: "\f1da"; -} -.fa-hockey-puck:before { - content: "\f453"; -} -.fa-holly-berry:before { - content: "\f7aa"; -} -.fa-home:before { - content: "\f015"; -} -.fa-hooli:before { - content: "\f427"; -} -.fa-hornbill:before { - content: "\f592"; -} -.fa-horse:before { - content: "\f6f0"; -} -.fa-horse-head:before { - content: "\f7ab"; -} -.fa-hospital:before { - content: "\f0f8"; -} -.fa-hospital-alt:before { - content: "\f47d"; -} -.fa-hospital-symbol:before { - content: "\f47e"; -} -.fa-hot-tub:before { - content: "\f593"; -} -.fa-hotdog:before { - content: "\f80f"; -} -.fa-hotel:before { - content: "\f594"; -} -.fa-hotjar:before { - content: "\f3b1"; -} -.fa-hourglass:before { - content: "\f254"; -} -.fa-hourglass-end:before { - content: "\f253"; -} -.fa-hourglass-half:before { - content: "\f252"; -} -.fa-hourglass-start:before { - content: "\f251"; -} -.fa-house-damage:before { - content: "\f6f1"; -} -.fa-houzz:before { - content: "\f27c"; -} -.fa-hryvnia:before { - content: "\f6f2"; -} -.fa-html5:before { - content: "\f13b"; -} -.fa-hubspot:before { - content: "\f3b2"; -} -.fa-i-cursor:before { - content: "\f246"; -} -.fa-ice-cream:before { - content: "\f810"; -} -.fa-icicles:before { - content: "\f7ad"; -} -.fa-icons:before { - content: "\f86d"; -} -.fa-id-badge:before { - content: "\f2c1"; -} -.fa-id-card:before { - content: "\f2c2"; -} -.fa-id-card-alt:before { - content: "\f47f"; -} -.fa-igloo:before { - content: "\f7ae"; -} -.fa-image:before { - content: "\f03e"; -} -.fa-images:before { - content: "\f302"; -} -.fa-imdb:before { - content: "\f2d8"; -} -.fa-inbox:before { - content: "\f01c"; -} -.fa-indent:before { - content: "\f03c"; -} -.fa-industry:before { - content: "\f275"; -} -.fa-infinity:before { - content: "\f534"; -} -.fa-info:before { - content: "\f129"; -} -.fa-info-circle:before { - content: "\f05a"; -} -.fa-instagram:before { - content: "\f16d"; -} -.fa-intercom:before { - content: "\f7af"; -} -.fa-internet-explorer:before { - content: "\f26b"; -} -.fa-invision:before { - content: "\f7b0"; -} -.fa-ioxhost:before { - content: "\f208"; -} -.fa-italic:before { - content: "\f033"; -} -.fa-itch-io:before { - content: "\f83a"; -} -.fa-itunes:before { - content: "\f3b4"; -} -.fa-itunes-note:before { - content: "\f3b5"; -} -.fa-java:before { - content: "\f4e4"; -} -.fa-jedi:before { - content: "\f669"; -} -.fa-jedi-order:before { - content: "\f50e"; -} -.fa-jenkins:before { - content: "\f3b6"; -} -.fa-jira:before { - content: "\f7b1"; -} -.fa-joget:before { - content: "\f3b7"; -} -.fa-joint:before { - content: "\f595"; -} -.fa-joomla:before { - content: "\f1aa"; -} -.fa-journal-whills:before { - content: "\f66a"; -} -.fa-js:before { - content: "\f3b8"; -} -.fa-js-square:before { - content: "\f3b9"; -} -.fa-jsfiddle:before { - content: "\f1cc"; -} -.fa-kaaba:before { - content: "\f66b"; -} -.fa-kaggle:before { - content: "\f5fa"; -} -.fa-key:before { - content: "\f084"; -} -.fa-keybase:before { - content: "\f4f5"; -} -.fa-keyboard:before { - content: "\f11c"; -} -.fa-keycdn:before { - content: "\f3ba"; -} -.fa-khanda:before { - content: "\f66d"; -} -.fa-kickstarter:before { - content: "\f3bb"; -} -.fa-kickstarter-k:before { - content: "\f3bc"; -} -.fa-kiss:before { - content: "\f596"; -} -.fa-kiss-beam:before { - content: "\f597"; -} -.fa-kiss-wink-heart:before { - content: "\f598"; -} -.fa-kiwi-bird:before { - content: "\f535"; -} -.fa-korvue:before { - content: "\f42f"; -} -.fa-landmark:before { - content: "\f66f"; -} -.fa-language:before { - content: "\f1ab"; -} -.fa-laptop:before { - content: "\f109"; -} -.fa-laptop-code:before { - content: "\f5fc"; -} -.fa-laptop-medical:before { - content: "\f812"; -} -.fa-laravel:before { - content: "\f3bd"; -} -.fa-lastfm:before { - content: "\f202"; -} -.fa-lastfm-square:before { - content: "\f203"; -} -.fa-laugh:before { - content: "\f599"; -} -.fa-laugh-beam:before { - content: "\f59a"; -} -.fa-laugh-squint:before { - content: "\f59b"; -} -.fa-laugh-wink:before { - content: "\f59c"; -} -.fa-layer-group:before { - content: "\f5fd"; -} -.fa-leaf:before { - content: "\f06c"; -} -.fa-leanpub:before { - content: "\f212"; -} -.fa-lemon:before { - content: "\f094"; -} -.fa-less:before { - content: "\f41d"; -} -.fa-less-than:before { - content: "\f536"; -} -.fa-less-than-equal:before { - content: "\f537"; -} -.fa-level-down-alt:before { - content: "\f3be"; -} -.fa-level-up-alt:before { - content: "\f3bf"; -} -.fa-life-ring:before { - content: "\f1cd"; -} -.fa-lightbulb:before { - content: "\f0eb"; -} -.fa-line:before { - content: "\f3c0"; -} -.fa-link:before { - content: "\f0c1"; -} -.fa-linkedin:before { - content: "\f08c"; -} -.fa-linkedin-in:before { - content: "\f0e1"; -} -.fa-linode:before { - content: "\f2b8"; -} -.fa-linux:before { - content: "\f17c"; -} -.fa-lira-sign:before { - content: "\f195"; -} -.fa-list:before { - content: "\f03a"; -} -.fa-list-alt:before { - content: "\f022"; -} -.fa-list-ol:before { - content: "\f0cb"; -} -.fa-list-ul:before { - content: "\f0ca"; -} -.fa-location-arrow:before { - content: "\f124"; -} -.fa-lock:before { - content: "\f023"; -} -.fa-lock-open:before { - content: "\f3c1"; -} -.fa-long-arrow-alt-down:before { - content: "\f309"; -} -.fa-long-arrow-alt-left:before { - content: "\f30a"; -} -.fa-long-arrow-alt-right:before { - content: "\f30b"; -} -.fa-long-arrow-alt-up:before { - content: "\f30c"; -} -.fa-low-vision:before { - content: "\f2a8"; -} -.fa-luggage-cart:before { - content: "\f59d"; -} -.fa-lyft:before { - content: "\f3c3"; -} -.fa-magento:before { - content: "\f3c4"; -} -.fa-magic:before { - content: "\f0d0"; -} -.fa-magnet:before { - content: "\f076"; -} -.fa-mail-bulk:before { - content: "\f674"; -} -.fa-mailchimp:before { - content: "\f59e"; -} -.fa-male:before { - content: "\f183"; -} -.fa-mandalorian:before { - content: "\f50f"; -} -.fa-map:before { - content: "\f279"; -} -.fa-map-marked:before { - content: "\f59f"; -} -.fa-map-marked-alt:before { - content: "\f5a0"; -} -.fa-map-marker:before { - content: "\f041"; -} -.fa-map-marker-alt:before { - content: "\f3c5"; -} -.fa-map-pin:before { - content: "\f276"; -} -.fa-map-signs:before { - content: "\f277"; -} -.fa-markdown:before { - content: "\f60f"; -} -.fa-marker:before { - content: "\f5a1"; -} -.fa-mars:before { - content: "\f222"; -} -.fa-mars-double:before { - content: "\f227"; -} -.fa-mars-stroke:before { - content: "\f229"; -} -.fa-mars-stroke-h:before { - content: "\f22b"; -} -.fa-mars-stroke-v:before { - content: "\f22a"; -} -.fa-mask:before { - content: "\f6fa"; -} -.fa-mastodon:before { - content: "\f4f6"; -} -.fa-maxcdn:before { - content: "\f136"; -} -.fa-medal:before { - content: "\f5a2"; -} -.fa-medapps:before { - content: "\f3c6"; -} -.fa-medium:before { - content: "\f23a"; -} -.fa-medium-m:before { - content: "\f3c7"; -} -.fa-medkit:before { - content: "\f0fa"; -} -.fa-medrt:before { - content: "\f3c8"; -} -.fa-meetup:before { - content: "\f2e0"; -} -.fa-megaport:before { - content: "\f5a3"; -} -.fa-meh:before { - content: "\f11a"; -} -.fa-meh-blank:before { - content: "\f5a4"; -} -.fa-meh-rolling-eyes:before { - content: "\f5a5"; -} -.fa-memory:before { - content: "\f538"; -} -.fa-mendeley:before { - content: "\f7b3"; -} -.fa-menorah:before { - content: "\f676"; -} -.fa-mercury:before { - content: "\f223"; -} -.fa-meteor:before { - content: "\f753"; -} -.fa-microchip:before { - content: "\f2db"; -} -.fa-microphone:before { - content: "\f130"; -} -.fa-microphone-alt:before { - content: "\f3c9"; -} -.fa-microphone-alt-slash:before { - content: "\f539"; -} -.fa-microphone-slash:before { - content: "\f131"; -} -.fa-microscope:before { - content: "\f610"; -} -.fa-microsoft:before { - content: "\f3ca"; -} -.fa-minus:before { - content: "\f068"; -} -.fa-minus-circle:before { - content: "\f056"; -} -.fa-minus-square:before { - content: "\f146"; -} -.fa-mitten:before { - content: "\f7b5"; -} -.fa-mix:before { - content: "\f3cb"; -} -.fa-mixcloud:before { - content: "\f289"; -} -.fa-mizuni:before { - content: "\f3cc"; -} -.fa-mobile:before { - content: "\f10b"; -} -.fa-mobile-alt:before { - content: "\f3cd"; -} -.fa-modx:before { - content: "\f285"; -} -.fa-monero:before { - content: "\f3d0"; -} -.fa-money-bill:before { - content: "\f0d6"; -} -.fa-money-bill-alt:before { - content: "\f3d1"; -} -.fa-money-bill-wave:before { - content: "\f53a"; -} -.fa-money-bill-wave-alt:before { - content: "\f53b"; -} -.fa-money-check:before { - content: "\f53c"; -} -.fa-money-check-alt:before { - content: "\f53d"; -} -.fa-monument:before { - content: "\f5a6"; -} -.fa-moon:before { - content: "\f186"; -} -.fa-mortar-pestle:before { - content: "\f5a7"; -} -.fa-mosque:before { - content: "\f678"; -} -.fa-motorcycle:before { - content: "\f21c"; -} -.fa-mountain:before { - content: "\f6fc"; -} -.fa-mouse-pointer:before { - content: "\f245"; -} -.fa-mug-hot:before { - content: "\f7b6"; -} -.fa-music:before { - content: "\f001"; -} -.fa-napster:before { - content: "\f3d2"; -} -.fa-neos:before { - content: "\f612"; -} -.fa-network-wired:before { - content: "\f6ff"; -} -.fa-neuter:before { - content: "\f22c"; -} -.fa-newspaper:before { - content: "\f1ea"; -} -.fa-nimblr:before { - content: "\f5a8"; -} -.fa-node:before { - content: "\f419"; -} -.fa-node-js:before { - content: "\f3d3"; -} -.fa-not-equal:before { - content: "\f53e"; -} -.fa-notes-medical:before { - content: "\f481"; -} -.fa-npm:before { - content: "\f3d4"; -} -.fa-ns8:before { - content: "\f3d5"; -} -.fa-nutritionix:before { - content: "\f3d6"; -} -.fa-object-group:before { - content: "\f247"; -} -.fa-object-ungroup:before { - content: "\f248"; -} -.fa-odnoklassniki:before { - content: "\f263"; -} -.fa-odnoklassniki-square:before { - content: "\f264"; -} -.fa-oil-can:before { - content: "\f613"; -} -.fa-old-republic:before { - content: "\f510"; -} -.fa-om:before { - content: "\f679"; -} -.fa-opencart:before { - content: "\f23d"; -} -.fa-openid:before { - content: "\f19b"; -} -.fa-opera:before { - content: "\f26a"; -} -.fa-optin-monster:before { - content: "\f23c"; -} -.fa-osi:before { - content: "\f41a"; -} -.fa-otter:before { - content: "\f700"; -} -.fa-outdent:before { - content: "\f03b"; -} -.fa-page4:before { - content: "\f3d7"; -} -.fa-pagelines:before { - content: "\f18c"; -} -.fa-pager:before { - content: "\f815"; -} -.fa-paint-brush:before { - content: "\f1fc"; -} -.fa-paint-roller:before { - content: "\f5aa"; -} -.fa-palette:before { - content: "\f53f"; -} -.fa-palfed:before { - content: "\f3d8"; -} -.fa-pallet:before { - content: "\f482"; -} -.fa-paper-plane:before { - content: "\f1d8"; -} -.fa-paperclip:before { - content: "\f0c6"; -} -.fa-parachute-box:before { - content: "\f4cd"; -} -.fa-paragraph:before { - content: "\f1dd"; -} -.fa-parking:before { - content: "\f540"; -} -.fa-passport:before { - content: "\f5ab"; -} -.fa-pastafarianism:before { - content: "\f67b"; -} -.fa-paste:before { - content: "\f0ea"; -} -.fa-patreon:before { - content: "\f3d9"; -} -.fa-pause:before { - content: "\f04c"; -} -.fa-pause-circle:before { - content: "\f28b"; -} -.fa-paw:before { - content: "\f1b0"; -} -.fa-paypal:before { - content: "\f1ed"; -} -.fa-peace:before { - content: "\f67c"; -} -.fa-pen:before { - content: "\f304"; -} -.fa-pen-alt:before { - content: "\f305"; -} -.fa-pen-fancy:before { - content: "\f5ac"; -} -.fa-pen-nib:before { - content: "\f5ad"; -} -.fa-pen-square:before { - content: "\f14b"; -} -.fa-pencil-alt:before { - content: "\f303"; -} -.fa-pencil-ruler:before { - content: "\f5ae"; -} -.fa-penny-arcade:before { - content: "\f704"; -} -.fa-people-carry:before { - content: "\f4ce"; -} -.fa-pepper-hot:before { - content: "\f816"; -} -.fa-percent:before { - content: "\f295"; -} -.fa-percentage:before { - content: "\f541"; -} -.fa-periscope:before { - content: "\f3da"; -} -.fa-person-booth:before { - content: "\f756"; -} -.fa-phabricator:before { - content: "\f3db"; -} -.fa-phoenix-framework:before { - content: "\f3dc"; -} -.fa-phoenix-squadron:before { - content: "\f511"; -} -.fa-phone:before { - content: "\f095"; -} -.fa-phone-alt:before { - content: "\f879"; -} -.fa-phone-slash:before { - content: "\f3dd"; -} -.fa-phone-square:before { - content: "\f098"; -} -.fa-phone-square-alt:before { - content: "\f87b"; -} -.fa-phone-volume:before { - content: "\f2a0"; -} -.fa-photo-video:before { - content: "\f87c"; -} -.fa-php:before { - content: "\f457"; -} -.fa-pied-piper:before { - content: "\f2ae"; -} -.fa-pied-piper-alt:before { - content: "\f1a8"; -} -.fa-pied-piper-hat:before { - content: "\f4e5"; -} -.fa-pied-piper-pp:before { - content: "\f1a7"; -} -.fa-piggy-bank:before { - content: "\f4d3"; -} -.fa-pills:before { - content: "\f484"; -} -.fa-pinterest:before { - content: "\f0d2"; -} -.fa-pinterest-p:before { - content: "\f231"; -} -.fa-pinterest-square:before { - content: "\f0d3"; -} -.fa-pizza-slice:before { - content: "\f818"; -} -.fa-place-of-worship:before { - content: "\f67f"; -} -.fa-plane:before { - content: "\f072"; -} -.fa-plane-arrival:before { - content: "\f5af"; -} -.fa-plane-departure:before { - content: "\f5b0"; -} -.fa-play:before { - content: "\f04b"; -} -.fa-play-circle:before { - content: "\f144"; -} -.fa-playstation:before { - content: "\f3df"; -} -.fa-plug:before { - content: "\f1e6"; -} -.fa-plus:before { - content: "\f067"; -} -.fa-plus-circle:before { - content: "\f055"; -} -.fa-plus-square:before { - content: "\f0fe"; -} -.fa-podcast:before { - content: "\f2ce"; -} -.fa-poll:before { - content: "\f681"; -} -.fa-poll-h:before { - content: "\f682"; -} -.fa-poo:before { - content: "\f2fe"; -} -.fa-poo-storm:before { - content: "\f75a"; -} -.fa-poop:before { - content: "\f619"; -} -.fa-portrait:before { - content: "\f3e0"; -} -.fa-pound-sign:before { - content: "\f154"; -} -.fa-power-off:before { - content: "\f011"; -} -.fa-pray:before { - content: "\f683"; -} -.fa-praying-hands:before { - content: "\f684"; -} -.fa-prescription:before { - content: "\f5b1"; -} -.fa-prescription-bottle:before { - content: "\f485"; -} -.fa-prescription-bottle-alt:before { - content: "\f486"; -} -.fa-print:before { - content: "\f02f"; -} -.fa-procedures:before { - content: "\f487"; -} -.fa-product-hunt:before { - content: "\f288"; -} -.fa-project-diagram:before { - content: "\f542"; -} -.fa-pushed:before { - content: "\f3e1"; -} -.fa-puzzle-piece:before { - content: "\f12e"; -} -.fa-python:before { - content: "\f3e2"; -} -.fa-qq:before { - content: "\f1d6"; -} -.fa-qrcode:before { - content: "\f029"; -} -.fa-question:before { - content: "\f128"; -} -.fa-question-circle:before { - content: "\f059"; -} -.fa-quidditch:before { - content: "\f458"; -} -.fa-quinscape:before { - content: "\f459"; -} -.fa-quora:before { - content: "\f2c4"; -} -.fa-quote-left:before { - content: "\f10d"; -} -.fa-quote-right:before { - content: "\f10e"; -} -.fa-quran:before { - content: "\f687"; -} -.fa-r-project:before { - content: "\f4f7"; -} -.fa-radiation:before { - content: "\f7b9"; -} -.fa-radiation-alt:before { - content: "\f7ba"; -} -.fa-rainbow:before { - content: "\f75b"; -} -.fa-random:before { - content: "\f074"; -} -.fa-raspberry-pi:before { - content: "\f7bb"; -} -.fa-ravelry:before { - content: "\f2d9"; -} -.fa-react:before { - content: "\f41b"; -} -.fa-reacteurope:before { - content: "\f75d"; -} -.fa-readme:before { - content: "\f4d5"; -} -.fa-rebel:before { - content: "\f1d0"; -} -.fa-receipt:before { - content: "\f543"; -} -.fa-recycle:before { - content: "\f1b8"; -} -.fa-red-river:before { - content: "\f3e3"; -} -.fa-reddit:before { - content: "\f1a1"; -} -.fa-reddit-alien:before { - content: "\f281"; -} -.fa-reddit-square:before { - content: "\f1a2"; -} -.fa-redhat:before { - content: "\f7bc"; -} -.fa-redo:before { - content: "\f01e"; -} -.fa-redo-alt:before { - content: "\f2f9"; -} -.fa-registered:before { - content: "\f25d"; -} -.fa-remove-format:before { - content: "\f87d"; -} -.fa-renren:before { - content: "\f18b"; -} -.fa-reply:before { - content: "\f3e5"; -} -.fa-reply-all:before { - content: "\f122"; -} -.fa-replyd:before { - content: "\f3e6"; -} -.fa-republican:before { - content: "\f75e"; -} -.fa-researchgate:before { - content: "\f4f8"; -} -.fa-resolving:before { - content: "\f3e7"; -} -.fa-restroom:before { - content: "\f7bd"; -} -.fa-retweet:before { - content: "\f079"; -} -.fa-rev:before { - content: "\f5b2"; -} -.fa-ribbon:before { - content: "\f4d6"; -} -.fa-ring:before { - content: "\f70b"; -} -.fa-road:before { - content: "\f018"; -} -.fa-robot:before { - content: "\f544"; -} -.fa-rocket:before { - content: "\f135"; -} -.fa-rocketchat:before { - content: "\f3e8"; -} -.fa-rockrms:before { - content: "\f3e9"; -} -.fa-route:before { - content: "\f4d7"; -} -.fa-rss:before { - content: "\f09e"; -} -.fa-rss-square:before { - content: "\f143"; -} -.fa-ruble-sign:before { - content: "\f158"; -} -.fa-ruler:before { - content: "\f545"; -} -.fa-ruler-combined:before { - content: "\f546"; -} -.fa-ruler-horizontal:before { - content: "\f547"; -} -.fa-ruler-vertical:before { - content: "\f548"; -} -.fa-running:before { - content: "\f70c"; -} -.fa-rupee-sign:before { - content: "\f156"; -} -.fa-sad-cry:before { - content: "\f5b3"; -} -.fa-sad-tear:before { - content: "\f5b4"; -} -.fa-safari:before { - content: "\f267"; -} -.fa-salesforce:before { - content: "\f83b"; -} -.fa-sass:before { - content: "\f41e"; -} -.fa-satellite:before { - content: "\f7bf"; -} -.fa-satellite-dish:before { - content: "\f7c0"; -} -.fa-save:before { - content: "\f0c7"; -} -.fa-schlix:before { - content: "\f3ea"; -} -.fa-school:before { - content: "\f549"; -} -.fa-screwdriver:before { - content: "\f54a"; -} -.fa-scribd:before { - content: "\f28a"; -} -.fa-scroll:before { - content: "\f70e"; -} -.fa-sd-card:before { - content: "\f7c2"; -} -.fa-search:before { - content: "\f002"; -} -.fa-search-dollar:before { - content: "\f688"; -} -.fa-search-location:before { - content: "\f689"; -} -.fa-search-minus:before { - content: "\f010"; -} -.fa-search-plus:before { - content: "\f00e"; -} -.fa-searchengin:before { - content: "\f3eb"; -} -.fa-seedling:before { - content: "\f4d8"; -} -.fa-sellcast:before { - content: "\f2da"; -} -.fa-sellsy:before { - content: "\f213"; -} -.fa-server:before { - content: "\f233"; -} -.fa-servicestack:before { - content: "\f3ec"; -} -.fa-shapes:before { - content: "\f61f"; -} -.fa-share:before { - content: "\f064"; -} -.fa-share-alt:before { - content: "\f1e0"; -} -.fa-share-alt-square:before { - content: "\f1e1"; -} -.fa-share-square:before { - content: "\f14d"; -} -.fa-shekel-sign:before { - content: "\f20b"; -} -.fa-shield-alt:before { - content: "\f3ed"; -} -.fa-ship:before { - content: "\f21a"; -} -.fa-shipping-fast:before { - content: "\f48b"; -} -.fa-shirtsinbulk:before { - content: "\f214"; -} -.fa-shoe-prints:before { - content: "\f54b"; -} -.fa-shopping-bag:before { - content: "\f290"; -} -.fa-shopping-basket:before { - content: "\f291"; -} -.fa-shopping-cart:before { - content: "\f07a"; -} -.fa-shopware:before { - content: "\f5b5"; -} -.fa-shower:before { - content: "\f2cc"; -} -.fa-shuttle-van:before { - content: "\f5b6"; -} -.fa-sign:before { - content: "\f4d9"; -} -.fa-sign-in-alt:before { - content: "\f2f6"; -} -.fa-sign-language:before { - content: "\f2a7"; -} -.fa-sign-out-alt:before { - content: "\f2f5"; -} -.fa-signal:before { - content: "\f012"; -} -.fa-signature:before { - content: "\f5b7"; -} -.fa-sim-card:before { - content: "\f7c4"; -} -.fa-simplybuilt:before { - content: "\f215"; -} -.fa-sistrix:before { - content: "\f3ee"; -} -.fa-sitemap:before { - content: "\f0e8"; -} -.fa-sith:before { - content: "\f512"; -} -.fa-skating:before { - content: "\f7c5"; -} -.fa-sketch:before { - content: "\f7c6"; -} -.fa-skiing:before { - content: "\f7c9"; -} -.fa-skiing-nordic:before { - content: "\f7ca"; -} -.fa-skull:before { - content: "\f54c"; -} -.fa-skull-crossbones:before { - content: "\f714"; -} -.fa-skyatlas:before { - content: "\f216"; -} -.fa-skype:before { - content: "\f17e"; -} -.fa-slack:before { - content: "\f198"; -} -.fa-slack-hash:before { - content: "\f3ef"; -} -.fa-slash:before { - content: "\f715"; -} -.fa-sleigh:before { - content: "\f7cc"; -} -.fa-sliders-h:before { - content: "\f1de"; -} -.fa-slideshare:before { - content: "\f1e7"; -} -.fa-smile:before { - content: "\f118"; -} -.fa-smile-beam:before { - content: "\f5b8"; -} -.fa-smile-wink:before { - content: "\f4da"; -} -.fa-smog:before { - content: "\f75f"; -} -.fa-smoking:before { - content: "\f48d"; -} -.fa-smoking-ban:before { - content: "\f54d"; -} -.fa-sms:before { - content: "\f7cd"; -} -.fa-snapchat:before { - content: "\f2ab"; -} -.fa-snapchat-ghost:before { - content: "\f2ac"; -} -.fa-snapchat-square:before { - content: "\f2ad"; -} -.fa-snowboarding:before { - content: "\f7ce"; -} -.fa-snowflake:before { - content: "\f2dc"; -} -.fa-snowman:before { - content: "\f7d0"; -} -.fa-snowplow:before { - content: "\f7d2"; -} -.fa-socks:before { - content: "\f696"; -} -.fa-solar-panel:before { - content: "\f5ba"; -} -.fa-sort:before { - content: "\f0dc"; -} -.fa-sort-alpha-down:before { - content: "\f15d"; -} -.fa-sort-alpha-down-alt:before { - content: "\f881"; -} -.fa-sort-alpha-up:before { - content: "\f15e"; -} -.fa-sort-alpha-up-alt:before { - content: "\f882"; -} -.fa-sort-amount-down:before { - content: "\f160"; -} -.fa-sort-amount-down-alt:before { - content: "\f884"; -} -.fa-sort-amount-up:before { - content: "\f161"; -} -.fa-sort-amount-up-alt:before { - content: "\f885"; -} -.fa-sort-down:before { - content: "\f0dd"; -} -.fa-sort-numeric-down:before { - content: "\f162"; -} -.fa-sort-numeric-down-alt:before { - content: "\f886"; -} -.fa-sort-numeric-up:before { - content: "\f163"; -} -.fa-sort-numeric-up-alt:before { - content: "\f887"; -} -.fa-sort-up:before { - content: "\f0de"; -} -.fa-soundcloud:before { - content: "\f1be"; -} -.fa-sourcetree:before { - content: "\f7d3"; -} -.fa-spa:before { - content: "\f5bb"; -} -.fa-space-shuttle:before { - content: "\f197"; -} -.fa-speakap:before { - content: "\f3f3"; -} -.fa-speaker-deck:before { - content: "\f83c"; -} -.fa-spell-check:before { - content: "\f891"; -} -.fa-spider:before { - content: "\f717"; -} -.fa-spinner:before { - content: "\f110"; -} -.fa-splotch:before { - content: "\f5bc"; -} -.fa-spotify:before { - content: "\f1bc"; -} -.fa-spray-can:before { - content: "\f5bd"; -} -.fa-square:before { - content: "\f0c8"; -} -.fa-square-full:before { - content: "\f45c"; -} -.fa-square-root-alt:before { - content: "\f698"; -} -.fa-squarespace:before { - content: "\f5be"; -} -.fa-stack-exchange:before { - content: "\f18d"; -} -.fa-stack-overflow:before { - content: "\f16c"; -} -.fa-stackpath:before { - content: "\f842"; -} -.fa-stamp:before { - content: "\f5bf"; -} -.fa-star:before { - content: "\f005"; -} -.fa-star-and-crescent:before { - content: "\f699"; -} -.fa-star-half:before { - content: "\f089"; -} -.fa-star-half-alt:before { - content: "\f5c0"; -} -.fa-star-of-david:before { - content: "\f69a"; -} -.fa-star-of-life:before { - content: "\f621"; -} -.fa-staylinked:before { - content: "\f3f5"; -} -.fa-steam:before { - content: "\f1b6"; -} -.fa-steam-square:before { - content: "\f1b7"; -} -.fa-steam-symbol:before { - content: "\f3f6"; -} -.fa-step-backward:before { - content: "\f048"; -} -.fa-step-forward:before { - content: "\f051"; -} -.fa-stethoscope:before { - content: "\f0f1"; -} -.fa-sticker-mule:before { - content: "\f3f7"; -} -.fa-sticky-note:before { - content: "\f249"; -} -.fa-stop:before { - content: "\f04d"; -} -.fa-stop-circle:before { - content: "\f28d"; -} -.fa-stopwatch:before { - content: "\f2f2"; -} -.fa-store:before { - content: "\f54e"; -} -.fa-store-alt:before { - content: "\f54f"; -} -.fa-strava:before { - content: "\f428"; -} -.fa-stream:before { - content: "\f550"; -} -.fa-street-view:before { - content: "\f21d"; -} -.fa-strikethrough:before { - content: "\f0cc"; -} -.fa-stripe:before { - content: "\f429"; -} -.fa-stripe-s:before { - content: "\f42a"; -} -.fa-stroopwafel:before { - content: "\f551"; -} -.fa-studiovinari:before { - content: "\f3f8"; -} -.fa-stumbleupon:before { - content: "\f1a4"; -} -.fa-stumbleupon-circle:before { - content: "\f1a3"; -} -.fa-subscript:before { - content: "\f12c"; -} -.fa-subway:before { - content: "\f239"; -} -.fa-suitcase:before { - content: "\f0f2"; -} -.fa-suitcase-rolling:before { - content: "\f5c1"; -} -.fa-sun:before { - content: "\f185"; -} -.fa-superpowers:before { - content: "\f2dd"; -} -.fa-superscript:before { - content: "\f12b"; -} -.fa-supple:before { - content: "\f3f9"; -} -.fa-surprise:before { - content: "\f5c2"; -} -.fa-suse:before { - content: "\f7d6"; -} -.fa-swatchbook:before { - content: "\f5c3"; -} -.fa-swimmer:before { - content: "\f5c4"; -} -.fa-swimming-pool:before { - content: "\f5c5"; -} -.fa-symfony:before { - content: "\f83d"; -} -.fa-synagogue:before { - content: "\f69b"; -} -.fa-sync:before { - content: "\f021"; -} -.fa-sync-alt:before { - content: "\f2f1"; -} -.fa-syringe:before { - content: "\f48e"; -} -.fa-table:before { - content: "\f0ce"; -} -.fa-table-tennis:before { - content: "\f45d"; -} -.fa-tablet:before { - content: "\f10a"; -} -.fa-tablet-alt:before { - content: "\f3fa"; -} -.fa-tablets:before { - content: "\f490"; -} -.fa-tachometer-alt:before { - content: "\f3fd"; -} -.fa-tag:before { - content: "\f02b"; -} -.fa-tags:before { - content: "\f02c"; -} -.fa-tape:before { - content: "\f4db"; -} -.fa-tasks:before { - content: "\f0ae"; -} -.fa-taxi:before { - content: "\f1ba"; -} -.fa-teamspeak:before { - content: "\f4f9"; -} -.fa-teeth:before { - content: "\f62e"; -} -.fa-teeth-open:before { - content: "\f62f"; -} -.fa-telegram:before { - content: "\f2c6"; -} -.fa-telegram-plane:before { - content: "\f3fe"; -} -.fa-temperature-high:before { - content: "\f769"; -} -.fa-temperature-low:before { - content: "\f76b"; -} -.fa-tencent-weibo:before { - content: "\f1d5"; -} -.fa-tenge:before { - content: "\f7d7"; -} -.fa-terminal:before { - content: "\f120"; -} -.fa-text-height:before { - content: "\f034"; -} -.fa-text-width:before { - content: "\f035"; -} -.fa-th:before { - content: "\f00a"; -} -.fa-th-large:before { - content: "\f009"; -} -.fa-th-list:before { - content: "\f00b"; -} -.fa-the-red-yeti:before { - content: "\f69d"; -} -.fa-theater-masks:before { - content: "\f630"; -} -.fa-themeco:before { - content: "\f5c6"; -} -.fa-themeisle:before { - content: "\f2b2"; -} -.fa-thermometer:before { - content: "\f491"; -} -.fa-thermometer-empty:before { - content: "\f2cb"; -} -.fa-thermometer-full:before { - content: "\f2c7"; -} -.fa-thermometer-half:before { - content: "\f2c9"; -} -.fa-thermometer-quarter:before { - content: "\f2ca"; -} -.fa-thermometer-three-quarters:before { - content: "\f2c8"; -} -.fa-think-peaks:before { - content: "\f731"; -} -.fa-thumbs-down:before { - content: "\f165"; -} -.fa-thumbs-up:before { - content: "\f164"; -} -.fa-thumbtack:before { - content: "\f08d"; -} -.fa-ticket-alt:before { - content: "\f3ff"; -} -.fa-times:before { - content: "\f00d"; -} -.fa-times-circle:before { - content: "\f057"; -} -.fa-tint:before { - content: "\f043"; -} -.fa-tint-slash:before { - content: "\f5c7"; -} -.fa-tired:before { - content: "\f5c8"; -} -.fa-toggle-off:before { - content: "\f204"; -} -.fa-toggle-on:before { - content: "\f205"; -} -.fa-toilet:before { - content: "\f7d8"; -} -.fa-toilet-paper:before { - content: "\f71e"; -} -.fa-toolbox:before { - content: "\f552"; -} -.fa-tools:before { - content: "\f7d9"; -} -.fa-tooth:before { - content: "\f5c9"; -} -.fa-torah:before { - content: "\f6a0"; -} -.fa-torii-gate:before { - content: "\f6a1"; -} -.fa-tractor:before { - content: "\f722"; -} -.fa-trade-federation:before { - content: "\f513"; -} -.fa-trademark:before { - content: "\f25c"; -} -.fa-traffic-light:before { - content: "\f637"; -} -.fa-train:before { - content: "\f238"; -} -.fa-tram:before { - content: "\f7da"; -} -.fa-transgender:before { - content: "\f224"; -} -.fa-transgender-alt:before { - content: "\f225"; -} -.fa-trash:before { - content: "\f1f8"; -} -.fa-trash-alt:before { - content: "\f2ed"; -} -.fa-trash-restore:before { - content: "\f829"; -} -.fa-trash-restore-alt:before { - content: "\f82a"; -} -.fa-tree:before { - content: "\f1bb"; -} -.fa-trello:before { - content: "\f181"; -} -.fa-tripadvisor:before { - content: "\f262"; -} -.fa-trophy:before { - content: "\f091"; -} -.fa-truck:before { - content: "\f0d1"; -} -.fa-truck-loading:before { - content: "\f4de"; -} -.fa-truck-monster:before { - content: "\f63b"; -} -.fa-truck-moving:before { - content: "\f4df"; -} -.fa-truck-pickup:before { - content: "\f63c"; -} -.fa-tshirt:before { - content: "\f553"; -} -.fa-tty:before { - content: "\f1e4"; -} -.fa-tumblr:before { - content: "\f173"; -} -.fa-tumblr-square:before { - content: "\f174"; -} -.fa-tv:before { - content: "\f26c"; -} -.fa-twitch:before { - content: "\f1e8"; -} -.fa-twitter:before { - content: "\f099"; -} -.fa-twitter-square:before { - content: "\f081"; -} -.fa-typo3:before { - content: "\f42b"; -} -.fa-uber:before { - content: "\f402"; -} -.fa-ubuntu:before { - content: "\f7df"; -} -.fa-uikit:before { - content: "\f403"; -} -.fa-umbrella:before { - content: "\f0e9"; -} -.fa-umbrella-beach:before { - content: "\f5ca"; -} -.fa-underline:before { - content: "\f0cd"; -} -.fa-undo:before { - content: "\f0e2"; -} -.fa-undo-alt:before { - content: "\f2ea"; -} -.fa-uniregistry:before { - content: "\f404"; -} -.fa-universal-access:before { - content: "\f29a"; -} -.fa-university:before { - content: "\f19c"; -} -.fa-unlink:before { - content: "\f127"; -} -.fa-unlock:before { - content: "\f09c"; -} -.fa-unlock-alt:before { - content: "\f13e"; -} -.fa-untappd:before { - content: "\f405"; -} -.fa-upload:before { - content: "\f093"; -} -.fa-ups:before { - content: "\f7e0"; -} -.fa-usb:before { - content: "\f287"; -} -.fa-user:before { - content: "\f007"; -} -.fa-user-alt:before { - content: "\f406"; -} -.fa-user-alt-slash:before { - content: "\f4fa"; -} -.fa-user-astronaut:before { - content: "\f4fb"; -} -.fa-user-check:before { - content: "\f4fc"; -} -.fa-user-circle:before { - content: "\f2bd"; -} -.fa-user-clock:before { - content: "\f4fd"; -} -.fa-user-cog:before { - content: "\f4fe"; -} -.fa-user-edit:before { - content: "\f4ff"; -} -.fa-user-friends:before { - content: "\f500"; -} -.fa-user-graduate:before { - content: "\f501"; -} -.fa-user-injured:before { - content: "\f728"; -} -.fa-user-lock:before { - content: "\f502"; -} -.fa-user-md:before { - content: "\f0f0"; -} -.fa-user-minus:before { - content: "\f503"; -} -.fa-user-ninja:before { - content: "\f504"; -} -.fa-user-nurse:before { - content: "\f82f"; -} -.fa-user-plus:before { - content: "\f234"; -} -.fa-user-secret:before { - content: "\f21b"; -} -.fa-user-shield:before { - content: "\f505"; -} -.fa-user-slash:before { - content: "\f506"; -} -.fa-user-tag:before { - content: "\f507"; -} -.fa-user-tie:before { - content: "\f508"; -} -.fa-user-times:before { - content: "\f235"; -} -.fa-users:before { - content: "\f0c0"; -} -.fa-users-cog:before { - content: "\f509"; -} -.fa-usps:before { - content: "\f7e1"; -} -.fa-ussunnah:before { - content: "\f407"; -} -.fa-utensil-spoon:before { - content: "\f2e5"; -} -.fa-utensils:before { - content: "\f2e7"; -} -.fa-vaadin:before { - content: "\f408"; -} -.fa-vector-square:before { - content: "\f5cb"; -} -.fa-venus:before { - content: "\f221"; -} -.fa-venus-double:before { - content: "\f226"; -} -.fa-venus-mars:before { - content: "\f228"; -} -.fa-viacoin:before { - content: "\f237"; -} -.fa-viadeo:before { - content: "\f2a9"; -} -.fa-viadeo-square:before { - content: "\f2aa"; -} -.fa-vial:before { - content: "\f492"; -} -.fa-vials:before { - content: "\f493"; -} -.fa-viber:before { - content: "\f409"; -} -.fa-video:before { - content: "\f03d"; -} -.fa-video-slash:before { - content: "\f4e2"; -} -.fa-vihara:before { - content: "\f6a7"; -} -.fa-vimeo:before { - content: "\f40a"; -} -.fa-vimeo-square:before { - content: "\f194"; -} -.fa-vimeo-v:before { - content: "\f27d"; -} -.fa-vine:before { - content: "\f1ca"; -} -.fa-vk:before { - content: "\f189"; -} -.fa-vnv:before { - content: "\f40b"; -} -.fa-voicemail:before { - content: "\f897"; -} -.fa-volleyball-ball:before { - content: "\f45f"; -} -.fa-volume-down:before { - content: "\f027"; -} -.fa-volume-mute:before { - content: "\f6a9"; -} -.fa-volume-off:before { - content: "\f026"; -} -.fa-volume-up:before { - content: "\f028"; -} -.fa-vote-yea:before { - content: "\f772"; -} -.fa-vr-cardboard:before { - content: "\f729"; -} -.fa-vuejs:before { - content: "\f41f"; -} -.fa-walking:before { - content: "\f554"; -} -.fa-wallet:before { - content: "\f555"; -} -.fa-warehouse:before { - content: "\f494"; -} -.fa-water:before { - content: "\f773"; -} -.fa-wave-square:before { - content: "\f83e"; -} -.fa-waze:before { - content: "\f83f"; -} -.fa-weebly:before { - content: "\f5cc"; -} -.fa-weibo:before { - content: "\f18a"; -} -.fa-weight:before { - content: "\f496"; -} -.fa-weight-hanging:before { - content: "\f5cd"; -} -.fa-weixin:before { - content: "\f1d7"; -} -.fa-whatsapp:before { - content: "\f232"; -} -.fa-whatsapp-square:before { - content: "\f40c"; -} -.fa-wheelchair:before { - content: "\f193"; -} -.fa-whmcs:before { - content: "\f40d"; -} -.fa-wifi:before { - content: "\f1eb"; -} -.fa-wikipedia-w:before { - content: "\f266"; -} -.fa-wind:before { - content: "\f72e"; -} -.fa-window-close:before { - content: "\f410"; -} -.fa-window-maximize:before { - content: "\f2d0"; -} -.fa-window-minimize:before { - content: "\f2d1"; -} -.fa-window-restore:before { - content: "\f2d2"; -} -.fa-windows:before { - content: "\f17a"; -} -.fa-wine-bottle:before { - content: "\f72f"; -} -.fa-wine-glass:before { - content: "\f4e3"; -} -.fa-wine-glass-alt:before { - content: "\f5ce"; -} -.fa-wix:before { - content: "\f5cf"; -} -.fa-wizards-of-the-coast:before { - content: "\f730"; -} -.fa-wolf-pack-battalion:before { - content: "\f514"; -} -.fa-won-sign:before { - content: "\f159"; -} -.fa-wordpress:before { - content: "\f19a"; -} -.fa-wordpress-simple:before { - content: "\f411"; -} -.fa-wpbeginner:before { - content: "\f297"; -} -.fa-wpexplorer:before { - content: "\f2de"; -} -.fa-wpforms:before { - content: "\f298"; -} -.fa-wpressr:before { - content: "\f3e4"; -} -.fa-wrench:before { - content: "\f0ad"; -} -.fa-x-ray:before { - content: "\f497"; -} -.fa-xbox:before { - content: "\f412"; -} -.fa-xing:before { - content: "\f168"; -} -.fa-xing-square:before { - content: "\f169"; -} -.fa-y-combinator:before { - content: "\f23b"; -} -.fa-yahoo:before { - content: "\f19e"; -} -.fa-yammer:before { - content: "\f840"; -} -.fa-yandex:before { - content: "\f413"; -} -.fa-yandex-international:before { - content: "\f414"; -} -.fa-yarn:before { - content: "\f7e3"; -} -.fa-yelp:before { - content: "\f1e9"; -} -.fa-yen-sign:before { - content: "\f157"; -} -.fa-yin-yang:before { - content: "\f6ad"; -} -.fa-yoast:before { - content: "\f2b1"; -} -.fa-youtube:before { - content: "\f167"; -} -.fa-youtube-square:before { - content: "\f431"; -} -.fa-zhihu:before { - content: "\f63f"; -} -.sr-only { - border: 0; - clip: rect(0, 0, 0, 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; -} -.sr-only-focusable:active, -.sr-only-focusable:focus { - clip: auto; - height: auto; - margin: 0; - overflow: visible; - position: static; - width: auto; -} -@font-face { - font-family: "Font Awesome 5 Free"; - font-style: normal; - font-weight: 400; - font-display: auto; - src: url(fa-regular-400.eot); - src: url(fa-regular-400.eot?#iefix) format("embedded-opentype"), - url(fa-regular-400.woff) format("woff"); -} -.far { - font-weight: 400; -} -@font-face { - font-family: "Font Awesome 5 Free"; - font-style: normal; - font-weight: 900; - font-display: auto; - src: url(fa-solid-900.eot); - src: url(fa-solid-900.eot?#iefix) format("embedded-opentype"), - url(fa-solid-900.woff) format("woff"); -} -.fa, -.far, -.fas { - font-family: "Font Awesome 5 Free"; -} -.fa, -.fas { - font-weight: 900; -} +.fa{font-family:"Font Awesome 6 Free";font-weight:900}.fa,.fa-brands,.fa-duotone,.fa-light,.fa-regular,.fa-solid,.fa-thin,.fab,.fad,.fal,.far,.fas,.fat{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc( 2em*-1);position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border-radius:.1em;border:.08em solid #eee;padding:.2em .25em .15em}.fa-pull-left{float:left;margin-right:.3em}.fa-pull-right{float:right;margin-left:.3em}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:0;animation-delay:0;-webkit-animation-direction:normal;animation-direction:normal;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:0;animation-delay:0;-webkit-animation-direction:normal;animation-direction:normal;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:cubic-bezier(.28,.84,.42,1);animation-timing-function:cubic-bezier(.28,.84,.42,1)}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:cubic-bezier(.4,0,.6,1);animation-timing-function:cubic-bezier(.4,0,.6,1)}.fa-beat-fade,.fa-fade{-webkit-animation-delay:0;animation-delay:0;-webkit-animation-direction:normal;animation-direction:normal;-webkit-animation-duration:1s;animation-duration:1s}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:cubic-bezier(.4,0,.6,1);animation-timing-function:cubic-bezier(.4,0,.6,1)}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:0;animation-delay:0;-webkit-animation-direction:normal;animation-direction:normal;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:linear;animation-timing-function:linear}.fa-shake,.fa-spin{-webkit-animation-delay:0;animation-delay:0;-webkit-animation-direction:normal;animation-direction:normal}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:linear;animation-timing-function:linear}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:normal;animation-direction:normal;-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite;-webkit-animation-timing-function:steps(8);animation-timing-function:steps(8)}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(1.25);transform:scale(1.25)}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(1.25);transform:scale(1.25)}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(1.1,.9) translateY(0);transform:scale(1.1,.9) translateY(0)}30%{-webkit-transform:scale(.9,1.1) translateY(-.5em);transform:scale(.9,1.1) translateY(-.5em)}50%{-webkit-transform:scale(1.05,.95) translateY(0);transform:scale(1.05,.95) translateY(0)}57%{-webkit-transform:scale(1) translateY(-.125em);transform:scale(1) translateY(-.125em)}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(1.1,.9) translateY(0);transform:scale(1.1,.9) translateY(0)}30%{-webkit-transform:scale(.9,1.1) translateY(-.5em);transform:scale(.9,1.1) translateY(-.5em)}50%{-webkit-transform:scale(1.05,.95) translateY(0);transform:scale(1.05,.95) translateY(0)}57%{-webkit-transform:scale(1) translateY(-.125em);transform:scale(1) translateY(-.125em)}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:.4}}@keyframes fa-fade{50%{opacity:.4}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:.4;-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(1.125);transform:scale(1.125)}}@keyframes fa-beat-fade{0%,to{opacity:.4;-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(1.125);transform:scale(1.125)}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(0,1,0,-180deg);transform:rotate3d(0,1,0,-180deg)}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(0,1,0,-180deg);transform:rotate3d(0,1,0,-180deg)}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(none);transform:rotate(none)}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:auto}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-a:before{content:"\41"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:"\f2bb"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-anchor:before{content:"\f13d"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-anchor-circle-exclamation:before{content:"\e4ab"}.fa-anchor-circle-xmark:before{content:"\e4ac"}.fa-anchor-lock:before{content:"\e4ad"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-angle-double-left:before,.fa-angles-left:before{content:"\f100"}.fa-angle-double-right:before,.fa-angles-right:before{content:"\f101"}.fa-angle-double-up:before,.fa-angles-up:before{content:"\f102"}.fa-ankh:before{content:"\f644"}.fa-apple-alt:before,.fa-apple-whole:before{content:"\f5d1"}.fa-archway:before{content:"\f557"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:"\f175"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:"\f884"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-arrow-down-up-lock:before{content:"\e4b0"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:"\f177"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:"\f245"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:"\f0ec"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:"\f08b"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:"\f178"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:"\f090"}.fa-arrow-right-to-city:before{content:"\e4b3"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:"\f01e"}.fa-arrow-trend-down:before{content:"\e097"}.fa-arrow-trend-up:before{content:"\e098"}.fa-arrow-turn-down:before,.fa-level-down:before{content:"\f149"}.fa-arrow-turn-up:before,.fa-level-up:before{content:"\f148"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-arrow-up-from-bracket:before{content:"\e09a"}.fa-arrow-up-from-ground-water:before{content:"\e4b5"}.fa-arrow-up-from-water-pump:before{content:"\e4b6"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-arrow-up-right-dots:before{content:"\e4b7"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:"\f08e"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:"\f885"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:"\f161"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-arrows-down-to-line:before{content:"\e4b8"}.fa-arrows-down-to-people:before{content:"\e4b9"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:"\f07e"}.fa-arrows-left-right-to-line:before{content:"\e4ba"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-arrows-spin:before{content:"\e4bb"}.fa-arrows-split-up-and-left:before{content:"\e4bc"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-arrows-to-dot:before{content:"\e4be"}.fa-arrows-to-eye:before{content:"\e4bf"}.fa-arrows-turn-right:before{content:"\e4c0"}.fa-arrows-turn-to-dots:before{content:"\e4c1"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:"\f07d"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:"\f047"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-asterisk:before{content:"\2a"}.fa-at:before{content:"\40"}.fa-atom:before{content:"\f5d2"}.fa-audio-description:before{content:"\f29e"}.fa-austral-sign:before{content:"\e0a9"}.fa-award:before{content:"\f559"}.fa-b:before{content:"\42"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:"\f77d"}.fa-backward:before{content:"\f04a"}.fa-backward-fast:before,.fa-fast-backward:before{content:"\f049"}.fa-backward-step:before,.fa-step-backward:before{content:"\f048"}.fa-bacon:before{content:"\f7e5"}.fa-bacteria:before{content:"\e059"}.fa-bacterium:before{content:"\e05a"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:"\f290"}.fa-bahai:before,.fa-haykal:before{content:"\f666"}.fa-baht-sign:before{content:"\e0ac"}.fa-ban:before,.fa-cancel:before{content:"\f05e"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:"\f54d"}.fa-band-aid:before,.fa-bandage:before{content:"\f462"}.fa-barcode:before{content:"\f02a"}.fa-bars:before,.fa-navicon:before{content:"\f0c9"}.fa-bars-progress:before,.fa-tasks-alt:before{content:"\f828"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:"\f550"}.fa-baseball-ball:before,.fa-baseball:before{content:"\f433"}.fa-baseball-bat-ball:before{content:"\f432"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:"\f291"}.fa-basketball-ball:before,.fa-basketball:before{content:"\f434"}.fa-bath:before,.fa-bathtub:before{content:"\f2cd"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-battery-3:before,.fa-battery-half:before{content:"\f242"}.fa-battery-2:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-bed:before{content:"\f236"}.fa-bed-pulse:before,.fa-procedures:before{content:"\f487"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-bell:before{content:"\f0f3"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:"\f562"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bicycle:before{content:"\f206"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-bitcoin-sign:before{content:"\e0b4"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blog:before{content:"\f781"}.fa-bold:before{content:"\f032"}.fa-bolt:before,.fa-zap:before{content:"\f0e7"}.fa-bolt-lightning:before{content:"\e0b7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-atlas:before,.fa-book-atlas:before{content:"\f558"}.fa-bible:before,.fa-book-bible:before{content:"\f647"}.fa-book-bookmark:before{content:"\e0bb"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:"\f66a"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-open-reader:before,.fa-book-reader:before{content:"\f5da"}.fa-book-quran:before,.fa-quran:before{content:"\f687"}.fa-book-dead:before,.fa-book-skull:before{content:"\f6b7"}.fa-book-tanakh:before,.fa-tanakh:before{content:"\f827"}.fa-bookmark:before{content:"\f02e"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before,.fa-border-top-left:before{content:"\f853"}.fa-bore-hole:before{content:"\e4c3"}.fa-bottle-droplet:before{content:"\e4c4"}.fa-bottle-water:before{content:"\e4c5"}.fa-bowl-food:before{content:"\e4c6"}.fa-bowl-rice:before{content:"\e2eb"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-box-open:before{content:"\f49e"}.fa-box-tissue:before{content:"\e05b"}.fa-boxes-packing:before{content:"\e4c7"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-brazilian-real-sign:before{content:"\e46c"}.fa-bread-slice:before{content:"\f7ec"}.fa-bridge:before{content:"\e4c8"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-bridge-circle-exclamation:before{content:"\e4ca"}.fa-bridge-circle-xmark:before{content:"\e4cb"}.fa-bridge-lock:before{content:"\e4cc"}.fa-bridge-water:before{content:"\e4ce"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broom:before{content:"\f51a"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-brush:before{content:"\f55d"}.fa-bucket:before{content:"\e4cf"}.fa-bug:before{content:"\f188"}.fa-bug-slash:before{content:"\e490"}.fa-bugs:before{content:"\e4d0"}.fa-building:before{content:"\f1ad"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-building-circle-check:before{content:"\e4d2"}.fa-building-circle-exclamation:before{content:"\e4d3"}.fa-building-circle-xmark:before{content:"\e4d4"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:"\f19c"}.fa-building-flag:before{content:"\e4d5"}.fa-building-lock:before{content:"\e4d6"}.fa-building-ngo:before{content:"\e4d7"}.fa-building-shield:before{content:"\e4d8"}.fa-building-un:before{content:"\e4d9"}.fa-building-user:before{content:"\e4da"}.fa-building-wheat:before{content:"\e4db"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burger:before,.fa-hamburger:before{content:"\f805"}.fa-burst:before{content:"\e4dc"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before,.fa-bus-simple:before{content:"\f55e"}.fa-briefcase-clock:before,.fa-business-time:before{content:"\f64a"}.fa-c:before{content:"\43"}.fa-cable-car:before,.fa-tram:before{content:"\f7da"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:"\f1fd"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-week:before{content:"\f784"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:"\f273"}.fa-camera-alt:before,.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-camera-rotate:before{content:"\e0d8"}.fa-campground:before{content:"\f6bb"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-battery-car:before,.fa-car-battery:before{content:"\f5df"}.fa-car-burst:before,.fa-car-crash:before{content:"\f5e1"}.fa-car-on:before{content:"\e4dd"}.fa-car-alt:before,.fa-car-rear:before{content:"\f5de"}.fa-car-side:before{content:"\f5e4"}.fa-car-tunnel:before{content:"\e4de"}.fa-caravan:before{content:"\f8ff"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:"\f474"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:"\f59d"}.fa-cart-plus:before{content:"\f217"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:"\f07a"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cedi-sign:before{content:"\e0df"}.fa-cent-sign:before{content:"\e3f5"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-blackboard:before,.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:"\f51c"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:"\f79f"}.fa-charging-station:before{content:"\f5e7"}.fa-area-chart:before,.fa-chart-area:before{content:"\f1fe"}.fa-bar-chart:before,.fa-chart-bar:before{content:"\f080"}.fa-chart-column:before{content:"\e0e3"}.fa-chart-gantt:before{content:"\e0e4"}.fa-chart-line:before,.fa-line-chart:before{content:"\f201"}.fa-chart-pie:before,.fa-pie-chart:before{content:"\f200"}.fa-chart-simple:before{content:"\e473"}.fa-check:before{content:"\f00c"}.fa-check-double:before{content:"\f560"}.fa-check-to-slot:before,.fa-vote-yea:before{content:"\f772"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-child-dress:before{content:"\e59c"}.fa-child-reaching:before{content:"\e59d"}.fa-child-rifle:before{content:"\e4e0"}.fa-children:before{content:"\e4e1"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:"\f0ab"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:"\f0a8"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:"\f0a9"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:"\f0aa"}.fa-check-circle:before,.fa-circle-check:before{content:"\f058"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:"\f13a"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:"\f137"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:"\f139"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:"\f4b9"}.fa-circle-dot:before,.fa-dot-circle:before{content:"\f192"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:"\f358"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:"\f06a"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-adjust:before,.fa-circle-half-stroke:before{content:"\f042"}.fa-circle-info:before,.fa-info-circle:before{content:"\f05a"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:"\f359"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-circle-nodes:before{content:"\e4e2"}.fa-circle-notch:before{content:"\f1ce"}.fa-circle-pause:before,.fa-pause-circle:before{content:"\f28b"}.fa-circle-play:before,.fa-play-circle:before{content:"\f144"}.fa-circle-plus:before,.fa-plus-circle:before{content:"\f055"}.fa-circle-question:before,.fa-question-circle:before{content:"\f059"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:"\f7ba"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:"\f35a"}.fa-circle-stop:before,.fa-stop-circle:before{content:"\f28d"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:"\f35b"}.fa-circle-user:before,.fa-user-circle:before{content:"\f2bd"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:"\f057"}.fa-city:before{content:"\f64f"}.fa-clapperboard:before{content:"\e131"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clipboard-question:before{content:"\e4e3"}.fa-clipboard-user:before{content:"\f7f3"}.fa-clock-four:before,.fa-clock:before{content:"\f017"}.fa-clock-rotate-left:before,.fa-history:before{content:"\f1da"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:"\f0ee"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:"\f76c"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-showers-water:before{content:"\e4e4"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-clover:before{content:"\e139"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-code-commit:before{content:"\f386"}.fa-code-compare:before{content:"\e13a"}.fa-code-fork:before{content:"\e13b"}.fa-code-merge:before{content:"\f387"}.fa-code-pull-request:before{content:"\e13c"}.fa-coins:before{content:"\f51e"}.fa-colon-sign:before{content:"\e140"}.fa-comment:before{content:"\f075"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before,.fa-commenting:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comment-sms:before,.fa-sms:before{content:"\f7cd"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:"\f568"}.fa-compress:before{content:"\f066"}.fa-computer:before{content:"\e4e5"}.fa-computer-mouse:before,.fa-mouse:before{content:"\f8cc"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cow:before{content:"\f6c8"}.fa-credit-card-alt:before,.fa-credit-card:before{content:"\f09d"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before,.fa-crop-simple:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-cruzeiro-sign:before{content:"\e152"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cubes-stacked:before{content:"\e4e6"}.fa-d:before{content:"\44"}.fa-database:before{content:"\f1c0"}.fa-backspace:before,.fa-delete-left:before{content:"\f55a"}.fa-democrat:before{content:"\f747"}.fa-desktop-alt:before,.fa-desktop:before{content:"\f390"}.fa-dharmachakra:before{content:"\f655"}.fa-diagram-next:before{content:"\e476"}.fa-diagram-predecessor:before{content:"\e477"}.fa-diagram-project:before,.fa-project-diagram:before{content:"\f542"}.fa-diagram-successor:before{content:"\e47a"}.fa-diamond:before{content:"\f219"}.fa-diamond-turn-right:before,.fa-directions:before{content:"\f5eb"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-disease:before{content:"\f7fa"}.fa-display:before{content:"\e163"}.fa-divide:before{content:"\f529"}.fa-dna:before{content:"\f471"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:"\24"}.fa-dolly-box:before,.fa-dolly:before{content:"\f472"}.fa-dong-sign:before{content:"\e169"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dove:before{content:"\f4ba"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:"\f309"}.fa-download:before{content:"\f019"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-droplet:before,.fa-tint:before{content:"\f043"}.fa-droplet-slash:before,.fa-tint-slash:before{content:"\f5c7"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-e:before{content:"\45"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:"\f2a2"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f57c"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:"\f57d"}.fa-earth-asia:before,.fa-globe-asia:before{content:"\f57e"}.fa-earth-europe:before,.fa-globe-europe:before{content:"\f7a2"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:"\e47b"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elevator:before{content:"\e16d"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:"\f141"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:"\f142"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-circle-check:before{content:"\e4e8"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-equals:before{content:"\3d"}.fa-eraser:before{content:"\f12d"}.fa-ethernet:before{content:"\f796"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:"\f153"}.fa-exclamation:before{content:"\21"}.fa-expand:before{content:"\f065"}.fa-explosion:before{content:"\e4e9"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:"\f1fb"}.fa-eye-low-vision:before,.fa-low-vision:before{content:"\f2a8"}.fa-eye-slash:before{content:"\f070"}.fa-f:before{content:"\46"}.fa-angry:before,.fa-face-angry:before{content:"\f556"}.fa-dizzy:before,.fa-face-dizzy:before{content:"\f567"}.fa-face-flushed:before,.fa-flushed:before{content:"\f579"}.fa-face-frown:before,.fa-frown:before{content:"\f119"}.fa-face-frown-open:before,.fa-frown-open:before{content:"\f57a"}.fa-face-grimace:before,.fa-grimace:before{content:"\f57f"}.fa-face-grin:before,.fa-grin:before{content:"\f580"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:"\f582"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:"\f583"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:"\f584"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:"\f585"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:"\f586"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:"\f588"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:"\f589"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:"\f58b"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:"\f581"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:"\f58c"}.fa-face-kiss:before,.fa-kiss:before{content:"\f596"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:"\f597"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:"\f598"}.fa-face-laugh:before,.fa-laugh:before{content:"\f599"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:"\f59a"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:"\f59b"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:"\f59c"}.fa-face-meh:before,.fa-meh:before{content:"\f11a"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:"\f5a4"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:"\f5b3"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:"\f5b4"}.fa-face-smile:before,.fa-smile:before{content:"\f118"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:"\f4da"}.fa-face-surprise:before,.fa-surprise:before{content:"\f5c2"}.fa-face-tired:before,.fa-tired:before{content:"\f5c8"}.fa-fan:before{content:"\f863"}.fa-faucet:before{content:"\e005"}.fa-faucet-drip:before{content:"\e006"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before,.fa-feather-pointed:before{content:"\f56b"}.fa-ferry:before{content:"\e4ea"}.fa-file:before{content:"\f15b"}.fa-file-arrow-down:before,.fa-file-download:before{content:"\f56d"}.fa-file-arrow-up:before,.fa-file-upload:before{content:"\f574"}.fa-file-audio:before{content:"\f1c7"}.fa-file-circle-check:before{content:"\e5a0"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-file-circle-minus:before{content:"\e4ed"}.fa-file-circle-plus:before{content:"\e494"}.fa-file-circle-question:before{content:"\e4ef"}.fa-file-circle-xmark:before{content:"\e5a1"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-excel:before{content:"\f1c3"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-file-medical:before{content:"\f477"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-edit:before,.fa-file-pen:before{content:"\f31c"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-shield:before{content:"\e4f0"}.fa-file-signature:before{content:"\f573"}.fa-file-video:before{content:"\f1c8"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:"\f478"}.fa-file-word:before{content:"\f1c2"}.fa-file-archive:before,.fa-file-zipper:before{content:"\f1c6"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:"\f662"}.fa-filter-circle-xmark:before{content:"\e17b"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-burner:before{content:"\e4f1"}.fa-fire-extinguisher:before{content:"\f134"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:"\f7e4"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-fish:before{content:"\f578"}.fa-fish-fins:before{content:"\e4f2"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flask-vial:before{content:"\e4f3"}.fa-floppy-disk:before,.fa-save:before{content:"\f0c7"}.fa-florin-sign:before{content:"\e184"}.fa-folder-blank:before,.fa-folder:before{content:"\f07b"}.fa-folder-closed:before{content:"\e185"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-folder-tree:before{content:"\f802"}.fa-font:before{content:"\f031"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before,.fa-forward-fast:before{content:"\f050"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-franc-sign:before{content:"\e18f"}.fa-frog:before{content:"\f52e"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:"\f1e3"}.fa-g:before{content:"\47"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:"\f624"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:"\f625"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:"\f629"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:"\f62a"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-glass-water:before{content:"\e4f4"}.fa-glass-water-droplet:before{content:"\e4f5"}.fa-glasses:before{content:"\f530"}.fa-globe:before{content:"\f0ac"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:"\f450"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-greater-than:before{content:"\3e"}.fa-greater-than-equal:before{content:"\f532"}.fa-grip-horizontal:before,.fa-grip:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-group-arrows-rotate:before{content:"\e4f6"}.fa-guarani-sign:before{content:"\e19a"}.fa-guitar:before{content:"\f7a6"}.fa-gun:before{content:"\e19b"}.fa-h:before{content:"\48"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-paper:before,.fa-hand:before{content:"\f256"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:"\f255"}.fa-allergies:before,.fa-hand-dots:before{content:"\f461"}.fa-fist-raised:before,.fa-hand-fist:before{content:"\f6de"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-holding-hand:before{content:"\e4f7"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-sparkles:before{content:"\e05d"}.fa-hand-spock:before{content:"\f259"}.fa-handcuffs:before{content:"\e4f8"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:"\f2a3"}.fa-hands-bound:before{content:"\e4f9"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:"\e05e"}.fa-hands-clapping:before{content:"\e1a8"}.fa-hands-holding:before{content:"\f4c2"}.fa-hands-holding-child:before{content:"\e4fa"}.fa-hands-holding-circle:before{content:"\e4fb"}.fa-hands-praying:before,.fa-praying-hands:before{content:"\f684"}.fa-handshake:before{content:"\f2b5"}.fa-hands-helping:before,.fa-handshake-angle:before{content:"\f4c4"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:"\f4c6"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:"\e05f"}.fa-handshake-slash:before{content:"\e060"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-drive:before,.fa-hdd:before{content:"\f0a0"}.fa-hashtag:before{content:"\23"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-head-side-cough:before{content:"\e061"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-head-side-mask:before{content:"\e063"}.fa-head-side-virus:before{content:"\e064"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-circle-bolt:before{content:"\e4fc"}.fa-heart-circle-check:before{content:"\e4fd"}.fa-heart-circle-exclamation:before{content:"\e4fe"}.fa-heart-circle-minus:before{content:"\e4ff"}.fa-heart-circle-plus:before{content:"\e500"}.fa-heart-circle-xmark:before{content:"\e501"}.fa-heart-broken:before,.fa-heart-crack:before{content:"\f7a9"}.fa-heart-pulse:before,.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-helicopter-symbol:before{content:"\e502"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:"\f807"}.fa-helmet-un:before{content:"\e503"}.fa-highlighter:before{content:"\f591"}.fa-hill-avalanche:before{content:"\e507"}.fa-hill-rockslide:before{content:"\e508"}.fa-hippo:before{content:"\f6ed"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:"\f0f8"}.fa-hospital-user:before{content:"\f80d"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hourglass-empty:before,.fa-hourglass:before{content:"\f254"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:"\f015"}.fa-home-lg:before,.fa-house-chimney:before{content:"\e3af"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:"\f6f1"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:"\f7f2"}.fa-house-chimney-user:before{content:"\e065"}.fa-house-chimney-window:before{content:"\e00d"}.fa-house-circle-check:before{content:"\e509"}.fa-house-circle-exclamation:before{content:"\e50a"}.fa-house-circle-xmark:before{content:"\e50b"}.fa-house-crack:before{content:"\e3b1"}.fa-house-fire:before{content:"\e50c"}.fa-house-flag:before{content:"\e50d"}.fa-house-flood-water:before{content:"\e50e"}.fa-house-flood-water-circle-arrow-right:before{content:"\e50f"}.fa-house-laptop:before,.fa-laptop-house:before{content:"\e066"}.fa-house-lock:before{content:"\e510"}.fa-house-medical:before{content:"\e3b2"}.fa-house-medical-circle-check:before{content:"\e511"}.fa-house-medical-circle-exclamation:before{content:"\e512"}.fa-house-medical-circle-xmark:before{content:"\e513"}.fa-house-medical-flag:before{content:"\e514"}.fa-house-signal:before{content:"\e012"}.fa-house-tsunami:before{content:"\e515"}.fa-home-user:before,.fa-house-user:before{content:"\e1b0"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:"\f6f2"}.fa-hurricane:before{content:"\f751"}.fa-i:before{content:"\49"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:"\f47f"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-image-portrait:before,.fa-portrait:before{content:"\f3e0"}.fa-images:before{content:"\f302"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:"\e1bc"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-italic:before{content:"\f033"}.fa-j:before{content:"\4a"}.fa-jar:before{content:"\e516"}.fa-jar-wheat:before{content:"\e517"}.fa-jedi:before{content:"\f669"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:"\f0fb"}.fa-jet-fighter-up:before{content:"\e518"}.fa-joint:before{content:"\f595"}.fa-jug-detergent:before{content:"\e519"}.fa-k:before{content:"\4b"}.fa-kaaba:before{content:"\f66b"}.fa-key:before{content:"\f084"}.fa-keyboard:before{content:"\f11c"}.fa-khanda:before{content:"\f66d"}.fa-kip-sign:before{content:"\e1c4"}.fa-first-aid:before,.fa-kit-medical:before{content:"\f479"}.fa-kitchen-set:before{content:"\e51a"}.fa-kiwi-bird:before{content:"\f535"}.fa-l:before{content:"\4c"}.fa-land-mine-on:before{content:"\e51b"}.fa-landmark:before{content:"\f66f"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:"\f752"}.fa-landmark-flag:before{content:"\e51c"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-file:before{content:"\e51d"}.fa-laptop-medical:before{content:"\f812"}.fa-lari-sign:before{content:"\e1c8"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-arrows-alt-h:before,.fa-left-right:before{content:"\f337"}.fa-lemon:before{content:"\f094"}.fa-less-than:before{content:"\3c"}.fa-less-than-equal:before{content:"\f537"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-lines-leaning:before{content:"\e51e"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:"\f127"}.fa-lira-sign:before{content:"\f195"}.fa-list-squares:before,.fa-list:before{content:"\f03a"}.fa-list-check:before,.fa-tasks:before{content:"\f0ae"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:"\f0cb"}.fa-list-dots:before,.fa-list-ul:before{content:"\f0ca"}.fa-litecoin-sign:before{content:"\e1d3"}.fa-location-arrow:before{content:"\f124"}.fa-location-crosshairs:before,.fa-location:before{content:"\f601"}.fa-location-dot:before,.fa-map-marker-alt:before{content:"\f3c5"}.fa-location-pin:before,.fa-map-marker:before{content:"\f041"}.fa-location-pin-lock:before{content:"\e51f"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-locust:before{content:"\e520"}.fa-lungs:before{content:"\f604"}.fa-lungs-virus:before{content:"\e067"}.fa-m:before{content:"\4d"}.fa-magnet:before{content:"\f076"}.fa-magnifying-glass:before,.fa-search:before{content:"\f002"}.fa-magnifying-glass-arrow-right:before{content:"\e521"}.fa-magnifying-glass-chart:before{content:"\e522"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:"\f688"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:"\f010"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:"\f00e"}.fa-manat-sign:before{content:"\e1d5"}.fa-map:before{content:"\f279"}.fa-map-location:before,.fa-map-marked:before{content:"\f59f"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-pin:before{content:"\f276"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-and-venus:before{content:"\f224"}.fa-mars-and-venus-burst:before{content:"\e523"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:"\f22b"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:"\f22a"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:"\f57b"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:"\f561"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:"\f000"}.fa-mask:before{content:"\f6fa"}.fa-mask-face:before{content:"\e1d7"}.fa-mask-ventilator:before{content:"\e524"}.fa-masks-theater:before,.fa-theater-masks:before{content:"\f630"}.fa-mattress-pillow:before{content:"\e525"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:"\f31e"}.fa-medal:before{content:"\f5a2"}.fa-memory:before{content:"\f538"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:"\f3c9"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-mill-sign:before{content:"\e1ed"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:"\f78c"}.fa-minus:before,.fa-subtract:before{content:"\f068"}.fa-mitten:before{content:"\f7b5"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:"\f3ce"}.fa-mobile-button:before{content:"\f10b"}.fa-mobile-retro:before{content:"\e527"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:"\f3cf"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:"\f3cd"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-bill-transfer:before{content:"\e528"}.fa-money-bill-trend-up:before{content:"\e529"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wheat:before{content:"\e52a"}.fa-money-bills:before{content:"\e1f3"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-mosquito:before{content:"\e52b"}.fa-mosquito-net:before{content:"\e52c"}.fa-motorcycle:before{content:"\f21c"}.fa-mound:before{content:"\e52d"}.fa-mountain:before{content:"\f6fc"}.fa-mountain-city:before{content:"\e52e"}.fa-mountain-sun:before{content:"\e52f"}.fa-mug-hot:before{content:"\f7b6"}.fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"}.fa-music:before{content:"\f001"}.fa-n:before{content:"\4e"}.fa-naira-sign:before{content:"\e1f6"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-not-equal:before{content:"\f53e"}.fa-notdef:before{content:"\e1fe"}.fa-note-sticky:before,.fa-sticky-note:before{content:"\f249"}.fa-notes-medical:before{content:"\f481"}.fa-o:before{content:"\4f"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-oil-can:before{content:"\f613"}.fa-oil-well:before{content:"\e532"}.fa-om:before{content:"\f679"}.fa-otter:before{content:"\f700"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-p:before{content:"\50"}.fa-pager:before{content:"\f815"}.fa-paint-roller:before{content:"\f5aa"}.fa-paint-brush:before,.fa-paintbrush:before{content:"\f1fc"}.fa-palette:before{content:"\f53f"}.fa-pallet:before{content:"\f482"}.fa-panorama:before{content:"\e209"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-passport:before{content:"\f5ab"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-pause:before{content:"\f04c"}.fa-paw:before{content:"\f1b0"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before,.fa-pen-clip:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:"\f5ae"}.fa-edit:before,.fa-pen-to-square:before{content:"\f044"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:"\e068"}.fa-people-carry-box:before,.fa-people-carry:before{content:"\f4ce"}.fa-people-group:before{content:"\e533"}.fa-people-line:before{content:"\e534"}.fa-people-pulling:before{content:"\e535"}.fa-people-robbery:before{content:"\e536"}.fa-people-roof:before{content:"\e537"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before,.fa-percentage:before{content:"\25"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-person-arrow-down-to-line:before{content:"\e538"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-biking:before,.fa-person-biking:before{content:"\f84a"}.fa-person-booth:before{content:"\f756"}.fa-person-breastfeeding:before{content:"\e53a"}.fa-person-burst:before{content:"\e53b"}.fa-person-cane:before{content:"\e53c"}.fa-person-chalkboard:before{content:"\e53d"}.fa-person-circle-check:before{content:"\e53e"}.fa-person-circle-exclamation:before{content:"\e53f"}.fa-person-circle-minus:before{content:"\e540"}.fa-person-circle-plus:before{content:"\e541"}.fa-person-circle-question:before{content:"\e542"}.fa-person-circle-xmark:before{content:"\e543"}.fa-digging:before,.fa-person-digging:before{content:"\f85e"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:"\f470"}.fa-female:before,.fa-person-dress:before{content:"\f182"}.fa-person-dress-burst:before{content:"\e544"}.fa-person-drowning:before{content:"\e545"}.fa-person-falling:before{content:"\e546"}.fa-person-falling-burst:before{content:"\e547"}.fa-person-half-dress:before{content:"\e548"}.fa-person-harassing:before{content:"\e549"}.fa-hiking:before,.fa-person-hiking:before{content:"\f6ec"}.fa-person-military-pointing:before{content:"\e54a"}.fa-person-military-rifle:before{content:"\e54b"}.fa-person-military-to-person:before{content:"\e54c"}.fa-person-praying:before,.fa-pray:before{content:"\f683"}.fa-person-pregnant:before{content:"\e31e"}.fa-person-rays:before{content:"\e54d"}.fa-person-rifle:before{content:"\e54e"}.fa-person-running:before,.fa-running:before{content:"\f70c"}.fa-person-shelter:before{content:"\e54f"}.fa-person-skating:before,.fa-skating:before{content:"\f7c5"}.fa-person-skiing:before,.fa-skiing:before{content:"\f7c9"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:"\f7ca"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:"\f7ce"}.fa-person-swimming:before,.fa-swimmer:before{content:"\f5c4"}.fa-person-through-window:before{content:"\e5a9"}.fa-person-walking:before,.fa-walking:before{content:"\f554"}.fa-person-walking-arrow-loop-left:before{content:"\e551"}.fa-person-walking-arrow-right:before{content:"\e552"}.fa-person-walking-dashed-line-arrow-right:before{content:"\e553"}.fa-person-walking-luggage:before{content:"\e554"}.fa-blind:before,.fa-person-walking-with-cane:before{content:"\f29d"}.fa-peseta-sign:before{content:"\e221"}.fa-peso-sign:before{content:"\e222"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before,.fa-phone-flip:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-photo-film:before,.fa-photo-video:before{content:"\f87c"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-circle-check:before{content:"\e555"}.fa-plane-circle-exclamation:before{content:"\e556"}.fa-plane-circle-xmark:before{content:"\e557"}.fa-plane-departure:before{content:"\f5b0"}.fa-plane-lock:before{content:"\e558"}.fa-plane-slash:before{content:"\e069"}.fa-plane-up:before{content:"\e22d"}.fa-plant-wilt:before{content:"\e5aa"}.fa-plate-wheat:before{content:"\e55a"}.fa-play:before{content:"\f04b"}.fa-plug:before{content:"\f1e6"}.fa-plug-circle-bolt:before{content:"\e55b"}.fa-plug-circle-check:before{content:"\e55c"}.fa-plug-circle-exclamation:before{content:"\e55d"}.fa-plug-circle-minus:before{content:"\e55e"}.fa-plug-circle-plus:before{content:"\e55f"}.fa-plug-circle-xmark:before{content:"\e560"}.fa-add:before,.fa-plus:before{content:"\2b"}.fa-plus-minus:before{content:"\e43c"}.fa-podcast:before{content:"\f2ce"}.fa-poo:before{content:"\f2fe"}.fa-poo-bolt:before,.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-power-off:before{content:"\f011"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-pump-medical:before{content:"\e06a"}.fa-pump-soap:before{content:"\e06b"}.fa-puzzle-piece:before{content:"\f12e"}.fa-q:before{content:"\51"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\3f"}.fa-quote-left-alt:before,.fa-quote-left:before{content:"\f10d"}.fa-quote-right-alt:before,.fa-quote-right:before{content:"\f10e"}.fa-r:before{content:"\52"}.fa-radiation:before{content:"\f7b9"}.fa-radio:before{content:"\f8d7"}.fa-rainbow:before{content:"\f75b"}.fa-ranking-star:before{content:"\e561"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-ad:before,.fa-rectangle-ad:before{content:"\f641"}.fa-list-alt:before,.fa-rectangle-list:before{content:"\f022"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:"\f410"}.fa-recycle:before{content:"\f1b8"}.fa-registered:before{content:"\f25d"}.fa-repeat:before{content:"\f363"}.fa-mail-reply:before,.fa-reply:before{content:"\f3e5"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-republican:before{content:"\f75e"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-ribbon:before{content:"\f4d6"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-exchange-alt:before,.fa-right-left:before{content:"\f362"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:"\f30b"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:"\f2f6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-road-barrier:before{content:"\e562"}.fa-road-bridge:before{content:"\e563"}.fa-road-circle-check:before{content:"\e564"}.fa-road-circle-exclamation:before{content:"\e565"}.fa-road-circle-xmark:before{content:"\e566"}.fa-road-lock:before{content:"\e567"}.fa-road-spikes:before{content:"\e568"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rotate:before,.fa-sync-alt:before{content:"\f2f1"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:"\f2ea"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:"\f2f9"}.fa-route:before{content:"\f4d7"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:"\f158"}.fa-rug:before{content:"\e569"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-rupee-sign:before,.fa-rupee:before{content:"\f156"}.fa-rupiah-sign:before{content:"\e23d"}.fa-s:before{content:"\53"}.fa-sack-dollar:before{content:"\f81d"}.fa-sack-xmark:before{content:"\e56a"}.fa-sailboat:before{content:"\e445"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-balance-scale:before,.fa-scale-balanced:before{content:"\f24e"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:"\f515"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:"\f516"}.fa-school:before{content:"\f549"}.fa-school-circle-check:before{content:"\e56b"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-school-circle-xmark:before{content:"\e56d"}.fa-school-flag:before{content:"\e56e"}.fa-school-lock:before{content:"\e56f"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-screwdriver:before{content:"\f54a"}.fa-screwdriver-wrench:before,.fa-tools:before{content:"\f7d9"}.fa-scroll:before{content:"\f70e"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-sd-card:before{content:"\f7c2"}.fa-section:before{content:"\e447"}.fa-seedling:before,.fa-sprout:before{content:"\f4d8"}.fa-server:before{content:"\f233"}.fa-shapes:before,.fa-triangle-circle-square:before{content:"\f61f"}.fa-arrow-turn-right:before,.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-share-from-square:before,.fa-share-square:before{content:"\f14d"}.fa-share-alt:before,.fa-share-nodes:before{content:"\f1e0"}.fa-sheet-plastic:before{content:"\e571"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:"\f20b"}.fa-shield-blank:before,.fa-shield:before{content:"\f132"}.fa-shield-cat:before{content:"\e572"}.fa-shield-dog:before{content:"\e573"}.fa-shield-alt:before,.fa-shield-halved:before{content:"\f3ed"}.fa-shield-heart:before{content:"\e574"}.fa-shield-virus:before{content:"\e06c"}.fa-ship:before{content:"\f21a"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:"\f553"}.fa-shoe-prints:before{content:"\f54b"}.fa-shop:before,.fa-store-alt:before{content:"\f54f"}.fa-shop-lock:before{content:"\e4a5"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:"\e070"}.fa-shower:before{content:"\f2cc"}.fa-shrimp:before{content:"\e448"}.fa-random:before,.fa-shuffle:before{content:"\f074"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:"\f197"}.fa-sign-hanging:before,.fa-sign:before{content:"\f4d9"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-map-signs:before,.fa-signs-post:before{content:"\f277"}.fa-sim-card:before{content:"\f7c4"}.fa-sink:before{content:"\e06d"}.fa-sitemap:before{content:"\f0e8"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before,.fa-sliders:before{content:"\f1de"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-soap:before{content:"\e06e"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-spa:before{content:"\f5bb"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-spray-can:before{content:"\f5bd"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:"\f5d0"}.fa-square:before{content:"\f0c8"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:"\f14c"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:"\f150"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:"\f191"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:"\f152"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:"\f151"}.fa-check-square:before,.fa-square-check:before{content:"\f14a"}.fa-envelope-square:before,.fa-square-envelope:before{content:"\f199"}.fa-square-full:before{content:"\f45c"}.fa-h-square:before,.fa-square-h:before{content:"\f0fd"}.fa-minus-square:before,.fa-square-minus:before{content:"\f146"}.fa-square-nfi:before{content:"\e576"}.fa-parking:before,.fa-square-parking:before{content:"\f540"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:"\f14b"}.fa-square-person-confined:before{content:"\e577"}.fa-phone-square:before,.fa-square-phone:before{content:"\f098"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:"\f87b"}.fa-plus-square:before,.fa-square-plus:before{content:"\f0fe"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:"\f682"}.fa-poll:before,.fa-square-poll-vertical:before{content:"\f681"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:"\f698"}.fa-rss-square:before,.fa-square-rss:before{content:"\f143"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:"\f1e1"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:"\f360"}.fa-square-virus:before{content:"\e578"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:"\f2d3"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:"\e579"}.fa-stairs:before{content:"\e289"}.fa-stamp:before{content:"\f5bf"}.fa-stapler:before{content:"\e5af"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:"\f154"}.fa-stethoscope:before{content:"\f0f1"}.fa-stop:before{content:"\f04d"}.fa-stopwatch:before{content:"\f2f2"}.fa-stopwatch-20:before{content:"\e06f"}.fa-store:before{content:"\f54e"}.fa-store-slash:before{content:"\e071"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stroopwafel:before{content:"\f551"}.fa-subscript:before{content:"\f12c"}.fa-suitcase:before{content:"\f0f2"}.fa-medkit:before,.fa-suitcase-medical:before{content:"\f0fa"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-sun-plant-wilt:before{content:"\e57a"}.fa-superscript:before{content:"\f12b"}.fa-swatchbook:before{content:"\f5c3"}.fa-synagogue:before{content:"\f69b"}.fa-syringe:before{content:"\f48e"}.fa-t:before{content:"\54"}.fa-table:before{content:"\f0ce"}.fa-table-cells:before,.fa-th:before{content:"\f00a"}.fa-table-cells-large:before,.fa-th-large:before{content:"\f009"}.fa-columns:before,.fa-table-columns:before{content:"\f0db"}.fa-table-list:before,.fa-th-list:before{content:"\f00b"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:"\f45d"}.fa-tablet-android:before,.fa-tablet:before{content:"\f3fb"}.fa-tablet-button:before{content:"\f10a"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:"\f566"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tarp:before{content:"\e57b"}.fa-tarp-droplet:before{content:"\e57c"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:"\e03f"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:"\e040"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-tenge-sign:before,.fa-tenge:before{content:"\f7d7"}.fa-tent:before{content:"\e57d"}.fa-tent-arrow-down-to-line:before{content:"\e57e"}.fa-tent-arrow-left-right:before{content:"\e57f"}.fa-tent-arrow-turn-left:before{content:"\e580"}.fa-tent-arrows-down:before{content:"\e581"}.fa-tents:before{content:"\e582"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-remove-format:before,.fa-text-slash:before{content:"\f87d"}.fa-text-width:before{content:"\f035"}.fa-thermometer:before{content:"\f491"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumb-tack:before,.fa-thumbtack:before{content:"\f08d"}.fa-ticket:before{content:"\f145"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:"\f3ff"}.fa-timeline:before{content:"\e29c"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-toilet-portable:before{content:"\e583"}.fa-toilets-portable:before{content:"\e584"}.fa-toolbox:before{content:"\f552"}.fa-tooth:before{content:"\f5c9"}.fa-torii-gate:before{content:"\f6a1"}.fa-tornado:before{content:"\f76f"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:"\f519"}.fa-tower-cell:before{content:"\e585"}.fa-tower-observation:before{content:"\e586"}.fa-tractor:before{content:"\f722"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-trailer:before{content:"\e041"}.fa-train:before{content:"\f238"}.fa-subway:before,.fa-train-subway:before{content:"\f239"}.fa-train-tram:before{content:"\e5b4"}.fa-transgender-alt:before,.fa-transgender:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:"\f829"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-tree-city:before{content:"\e587"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:"\f071"}.fa-trophy:before{content:"\f091"}.fa-trowel:before{content:"\e589"}.fa-trowel-bricks:before{content:"\e58a"}.fa-truck:before{content:"\f0d1"}.fa-truck-arrow-right:before{content:"\e58b"}.fa-truck-droplet:before{content:"\e58c"}.fa-shipping-fast:before,.fa-truck-fast:before{content:"\f48b"}.fa-truck-field:before{content:"\e58d"}.fa-truck-field-un:before{content:"\e58e"}.fa-truck-front:before{content:"\e2b7"}.fa-ambulance:before,.fa-truck-medical:before{content:"\f0f9"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-truck-plane:before{content:"\e58f"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-teletype:before,.fa-tty:before{content:"\f1e4"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:"\e2bb"}.fa-level-down-alt:before,.fa-turn-down:before{content:"\f3be"}.fa-level-up-alt:before,.fa-turn-up:before{content:"\f3bf"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:"\f26c"}.fa-u:before{content:"\55"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-universal-access:before{content:"\f29a"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:"\f13e"}.fa-arrows-alt-v:before,.fa-up-down:before{content:"\f338"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:"\f0b2"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:"\f30c"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:"\f424"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:"\f35d"}.fa-upload:before{content:"\f093"}.fa-user:before{content:"\f007"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-clock:before{content:"\f4fd"}.fa-user-doctor:before,.fa-user-md:before{content:"\f0f0"}.fa-user-cog:before,.fa-user-gear:before{content:"\f4fe"}.fa-user-graduate:before{content:"\f501"}.fa-user-friends:before,.fa-user-group:before{content:"\f500"}.fa-user-injured:before{content:"\f728"}.fa-user-alt:before,.fa-user-large:before{content:"\f406"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:"\f4fa"}.fa-user-lock:before{content:"\f502"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-edit:before,.fa-user-pen:before{content:"\f4ff"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-between-lines:before{content:"\e591"}.fa-users-cog:before,.fa-users-gear:before{content:"\f509"}.fa-users-line:before{content:"\e592"}.fa-users-rays:before{content:"\e593"}.fa-users-rectangle:before{content:"\e594"}.fa-users-slash:before{content:"\e073"}.fa-users-viewfinder:before{content:"\e595"}.fa-cutlery:before,.fa-utensils:before{content:"\f2e7"}.fa-v:before{content:"\56"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:"\f5b6"}.fa-vault:before{content:"\e2c5"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-vest:before{content:"\e085"}.fa-vest-patches:before{content:"\e086"}.fa-vial:before{content:"\f492"}.fa-vial-circle-check:before{content:"\e596"}.fa-vial-virus:before{content:"\e597"}.fa-vials:before{content:"\f493"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-virus:before{content:"\e074"}.fa-virus-covid:before{content:"\e4a8"}.fa-virus-covid-slash:before{content:"\e4a9"}.fa-virus-slash:before{content:"\e075"}.fa-viruses:before{content:"\e076"}.fa-voicemail:before{content:"\f897"}.fa-volcano:before{content:"\f770"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-volume-high:before,.fa-volume-up:before{content:"\f028"}.fa-volume-down:before,.fa-volume-low:before{content:"\f027"}.fa-volume-off:before{content:"\f026"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:"\f6a9"}.fa-vr-cardboard:before{content:"\f729"}.fa-w:before{content:"\57"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-wallet:before{content:"\f555"}.fa-magic:before,.fa-wand-magic:before{content:"\f0d0"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:"\e2ca"}.fa-wand-sparkles:before{content:"\f72b"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:"\f5c5"}.fa-wave-square:before{content:"\f83e"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weight-scale:before,.fa-weight:before{content:"\f496"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:"\e2cd"}.fa-wheat-awn-circle-exclamation:before{content:"\e598"}.fa-wheelchair:before{content:"\f193"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:"\e2ce"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:"\f7a0"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:"\f1eb"}.fa-wind:before{content:"\f72e"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:"\f5ce"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:"\f159"}.fa-worm:before{content:"\e599"}.fa-wrench:before{content:"\f0ad"}.fa-x:before{content:"\58"}.fa-x-ray:before{content:"\f497"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:"\f00d"}.fa-xmarks-lines:before{content:"\e59a"}.fa-y:before{content:"\59"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-z:before{content:"\5a"}.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:host,:root{--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands";font-weight:400}.fa-42-group:before,.fa-innosoft:before{content:"\e080"}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-adn:before{content:"\f170"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-alipay:before{content:"\f642"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-amilia:before{content:"\f36d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-pay:before{content:"\f415"}.fa-artstation:before{content:"\f77a"}.fa-asymmetrik:before{content:"\f372"}.fa-atlassian:before{content:"\f77b"}.fa-audible:before{content:"\f373"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-aws:before{content:"\f375"}.fa-bandcamp:before{content:"\f2d5"}.fa-battle-net:before{content:"\f835"}.fa-behance:before{content:"\f1b4"}.fa-bilibili:before{content:"\e3d9"}.fa-bimobject:before{content:"\f378"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bootstrap:before{content:"\f836"}.fa-bots:before{content:"\e340"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-buromobelexperte:before{content:"\f37f"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-cloudflare:before{content:"\e07d"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cmplid:before{content:"\e360"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cotton-bureau:before{content:"\f89e"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-critical-role:before{content:"\f6c9"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\e052"}.fa-dashcube:before{content:"\f210"}.fa-deezer:before{content:"\e077"}.fa-delicious:before{content:"\f1a5"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dhl:before{content:"\f790"}.fa-diaspora:before{content:"\f791"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-draft2digital:before{content:"\f396"}.fa-dribbble:before{content:"\f17d"}.fa-dropbox:before{content:"\f16b"}.fa-drupal:before{content:"\f1a9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edge-legacy:before{content:"\e078"}.fa-elementor:before{content:"\f430"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envira:before{content:"\f299"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-etsy:before{content:"\f2d7"}.fa-evernote:before{content:"\f839"}.fa-expeditedssl:before{content:"\f23e"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-figma:before{content:"\f799"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\e007"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-fly:before{content:"\f417"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:"\f2b4"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-fulcrum:before{content:"\f50b"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-gofore:before{content:"\f3a7"}.fa-golang:before{content:"\e40f"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-pay:before{content:"\e079"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-wallet:before{content:"\f1ee"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guilded:before{content:"\e07e"}.fa-gulp:before{content:"\f3ae"}.fa-hacker-news:before{content:"\f1d4"}.fa-hackerrank:before{content:"\f5f7"}.fa-hashnode:before{content:"\e499"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-hive:before{content:"\e07f"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-hotjar:before{content:"\f3b1"}.fa-houzz:before{content:"\f27c"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-ideal:before{content:"\e013"}.fa-imdb:before{content:"\f2d8"}.fa-instagram:before{content:"\f16d"}.fa-instalod:before{content:"\e081"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joomla:before{content:"\f1aa"}.fa-js:before{content:"\f3b8"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaggle:before{content:"\f5fa"}.fa-keybase:before{content:"\f4f5"}.fa-keycdn:before{content:"\f3ba"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-korvue:before{content:"\f42f"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-leanpub:before{content:"\f212"}.fa-less:before{content:"\f41d"}.fa-line:before{content:"\f3c0"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-mailchimp:before{content:"\f59e"}.fa-mandalorian:before{content:"\f50f"}.fa-markdown:before{content:"\f60f"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medapps:before{content:"\f3c6"}.fa-medium-m:before,.fa-medium:before{content:"\f23a"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-mendeley:before{content:"\f7b3"}.fa-meta:before{content:"\e49b"}.fa-microblog:before{content:"\e01a"}.fa-microsoft:before{content:"\f3ca"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\e056"}.fa-mizuni:before{content:"\f3cc"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-nfc-directional:before{content:"\e530"}.fa-nfc-symbol:before{content:"\e531"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-octopus-deploy:before{content:"\e082"}.fa-odnoklassniki:before{content:"\f263"}.fa-old-republic:before{content:"\f510"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-padlet:before{content:"\e4a0"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-palfed:before{content:"\f3d8"}.fa-patreon:before{content:"\f3d9"}.fa-paypal:before{content:"\f1ed"}.fa-perbyte:before{content:"\e083"}.fa-periscope:before{content:"\f3da"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pix:before{content:"\e43a"}.fa-playstation:before{content:"\f3df"}.fa-product-hunt:before{content:"\f288"}.fa-pushed:before{content:"\f3e1"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-r-project:before{content:"\f4f7"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-redhat:before{content:"\f7bc"}.fa-renren:before{content:"\f18b"}.fa-replyd:before{content:"\f3e6"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-rev:before{content:"\f5b2"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-rust:before{content:"\e07a"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-schlix:before{content:"\f3ea"}.fa-screenpal:before{content:"\e570"}.fa-scribd:before{content:"\f28a"}.fa-searchengin:before{content:"\f3eb"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-servicestack:before{content:"\f3ec"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shopify:before{content:"\e057"}.fa-shopware:before{content:"\f5b5"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sith:before{content:"\f512"}.fa-sitrox:before{content:"\e44a"}.fa-sketch:before{content:"\f7c6"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack-hash:before,.fa-slack:before{content:"\f198"}.fa-slideshare:before{content:"\f1e7"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:"\f2ab"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-space-awesome:before{content:"\e5ac"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spotify:before{content:"\f1bc"}.fa-behance-square:before,.fa-square-behance:before{content:"\f1b5"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:"\f397"}.fa-facebook-square:before,.fa-square-facebook:before{content:"\f082"}.fa-square-font-awesome:before{content:"\e5ad"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-git-square:before,.fa-square-git:before{content:"\f1d2"}.fa-github-square:before,.fa-square-github:before{content:"\f092"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:"\e5ae"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:"\f0d4"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:"\f3af"}.fa-instagram-square:before,.fa-square-instagram:before{content:"\e055"}.fa-js-square:before,.fa-square-js:before{content:"\f3b9"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:"\f203"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:"\f264"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:"\e01e"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:"\f0d3"}.fa-reddit-square:before,.fa-square-reddit:before{content:"\f1a2"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:"\f2ad"}.fa-square-steam:before,.fa-steam-square:before{content:"\f1b7"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:"\f174"}.fa-square-twitter:before,.fa-twitter-square:before{content:"\f081"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:"\f2aa"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:"\f194"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:"\f40c"}.fa-square-xing:before,.fa-xing-square:before{content:"\f169"}.fa-square-youtube:before,.fa-youtube-square:before{content:"\f431"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-symbol:before{content:"\f3f6"}.fa-sticker-mule:before{content:"\f3f7"}.fa-strava:before{content:"\f428"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-superpowers:before{content:"\f2dd"}.fa-supple:before{content:"\f3f9"}.fa-suse:before{content:"\f7d6"}.fa-swift:before{content:"\f8e1"}.fa-symfony:before{content:"\f83d"}.fa-teamspeak:before{content:"\f4f9"}.fa-telegram-plane:before,.fa-telegram:before{content:"\f2c6"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-the-red-yeti:before{content:"\f69d"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-think-peaks:before{content:"\f731"}.fa-tiktok:before{content:"\e07b"}.fa-trade-federation:before{content:"\f513"}.fa-trello:before{content:"\f181"}.fa-tumblr:before{content:"\f173"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-uncharted:before{content:"\e084"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\e049"}.fa-unsplash:before{content:"\e07c"}.fa-untappd:before{content:"\f405"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-vaadin:before{content:"\f408"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viber:before{content:"\f409"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-vuejs:before{content:"\f41f"}.fa-watchman-monitoring:before{content:"\e087"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whmcs:before{content:"\f40d"}.fa-wikipedia-w:before{content:"\f266"}.fa-windows:before{content:"\f17a"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:"\e2d0"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wodu:before{content:"\e088"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-rendact:before,.fa-wpressr:before{content:"\f3e4"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-zhihu:before{content:"\f63f"}:host,:root{--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-family:"Font Awesome 6 Free";font-weight:400}:host,:root{--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-family:"Font Awesome 6 Free";font-weight:900}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(fa-solid-900.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(fa-regular-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a} diff --git a/html/font-awesome/css/v4-shims.min.css b/html/font-awesome/css/v4-shims.min.css index 9316727d18d3..2f6252b52a14 100644 --- a/html/font-awesome/css/v4-shims.min.css +++ b/html/font-awesome/css/v4-shims.min.css @@ -1,1694 +1,6 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 6.1.2 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + * Copyright 2022 Fonticons, Inc. */ -.fa.fa-glass:before { - content: "\f000"; -} -.fa.fa-meetup { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-star-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-star-o:before { - content: "\f005"; -} -.fa.fa-close:before, -.fa.fa-remove:before { - content: "\f00d"; -} -.fa.fa-gear:before { - content: "\f013"; -} -.fa.fa-trash-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-trash-o:before { - content: "\f2ed"; -} -.fa.fa-file-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-file-o:before { - content: "\f15b"; -} -.fa.fa-clock-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-clock-o:before { - content: "\f017"; -} -.fa.fa-arrow-circle-o-down { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-arrow-circle-o-down:before { - content: "\f358"; -} -.fa.fa-arrow-circle-o-up { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-arrow-circle-o-up:before { - content: "\f35b"; -} -.fa.fa-play-circle-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-play-circle-o:before { - content: "\f144"; -} -.fa.fa-repeat:before, -.fa.fa-rotate-right:before { - content: "\f01e"; -} -.fa.fa-refresh:before { - content: "\f021"; -} -.fa.fa-list-alt { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-dedent:before { - content: "\f03b"; -} -.fa.fa-video-camera:before { - content: "\f03d"; -} -.fa.fa-picture-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-picture-o:before { - content: "\f03e"; -} -.fa.fa-photo { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-photo:before { - content: "\f03e"; -} -.fa.fa-image { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-image:before { - content: "\f03e"; -} -.fa.fa-pencil:before { - content: "\f303"; -} -.fa.fa-map-marker:before { - content: "\f3c5"; -} -.fa.fa-pencil-square-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-pencil-square-o:before { - content: "\f044"; -} -.fa.fa-share-square-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-share-square-o:before { - content: "\f14d"; -} -.fa.fa-check-square-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-check-square-o:before { - content: "\f14a"; -} -.fa.fa-arrows:before { - content: "\f0b2"; -} -.fa.fa-times-circle-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-times-circle-o:before { - content: "\f057"; -} -.fa.fa-check-circle-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-check-circle-o:before { - content: "\f058"; -} -.fa.fa-mail-forward:before { - content: "\f064"; -} -.fa.fa-eye, -.fa.fa-eye-slash { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-warning:before { - content: "\f071"; -} -.fa.fa-calendar:before { - content: "\f073"; -} -.fa.fa-arrows-v:before { - content: "\f338"; -} -.fa.fa-arrows-h:before { - content: "\f337"; -} -.fa.fa-bar-chart { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-bar-chart:before { - content: "\f080"; -} -.fa.fa-bar-chart-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-bar-chart-o:before { - content: "\f080"; -} -.fa.fa-facebook-square, -.fa.fa-twitter-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-gears:before { - content: "\f085"; -} -.fa.fa-thumbs-o-up { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-thumbs-o-up:before { - content: "\f164"; -} -.fa.fa-thumbs-o-down { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-thumbs-o-down:before { - content: "\f165"; -} -.fa.fa-heart-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-heart-o:before { - content: "\f004"; -} -.fa.fa-sign-out:before { - content: "\f2f5"; -} -.fa.fa-linkedin-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-linkedin-square:before { - content: "\f08c"; -} -.fa.fa-thumb-tack:before { - content: "\f08d"; -} -.fa.fa-external-link:before { - content: "\f35d"; -} -.fa.fa-sign-in:before { - content: "\f2f6"; -} -.fa.fa-github-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-lemon-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-lemon-o:before { - content: "\f094"; -} -.fa.fa-square-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-square-o:before { - content: "\f0c8"; -} -.fa.fa-bookmark-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-bookmark-o:before { - content: "\f02e"; -} -.fa.fa-facebook, -.fa.fa-twitter { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-facebook:before { - content: "\f39e"; -} -.fa.fa-facebook-f { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-facebook-f:before { - content: "\f39e"; -} -.fa.fa-github { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-credit-card { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-feed:before { - content: "\f09e"; -} -.fa.fa-hdd-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-hdd-o:before { - content: "\f0a0"; -} -.fa.fa-hand-o-right { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-hand-o-right:before { - content: "\f0a4"; -} -.fa.fa-hand-o-left { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-hand-o-left:before { - content: "\f0a5"; -} -.fa.fa-hand-o-up { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-hand-o-up:before { - content: "\f0a6"; -} -.fa.fa-hand-o-down { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-hand-o-down:before { - content: "\f0a7"; -} -.fa.fa-arrows-alt:before { - content: "\f31e"; -} -.fa.fa-group:before { - content: "\f0c0"; -} -.fa.fa-chain:before { - content: "\f0c1"; -} -.fa.fa-scissors:before { - content: "\f0c4"; -} -.fa.fa-files-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-files-o:before { - content: "\f0c5"; -} -.fa.fa-floppy-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-floppy-o:before { - content: "\f0c7"; -} -.fa.fa-navicon:before, -.fa.fa-reorder:before { - content: "\f0c9"; -} -.fa.fa-google-plus, -.fa.fa-google-plus-square, -.fa.fa-pinterest, -.fa.fa-pinterest-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-google-plus:before { - content: "\f0d5"; -} -.fa.fa-money { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-money:before { - content: "\f3d1"; -} -.fa.fa-unsorted:before { - content: "\f0dc"; -} -.fa.fa-sort-desc:before { - content: "\f0dd"; -} -.fa.fa-sort-asc:before { - content: "\f0de"; -} -.fa.fa-linkedin { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-linkedin:before { - content: "\f0e1"; -} -.fa.fa-rotate-left:before { - content: "\f0e2"; -} -.fa.fa-legal:before { - content: "\f0e3"; -} -.fa.fa-dashboard:before, -.fa.fa-tachometer:before { - content: "\f3fd"; -} -.fa.fa-comment-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-comment-o:before { - content: "\f075"; -} -.fa.fa-comments-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-comments-o:before { - content: "\f086"; -} -.fa.fa-flash:before { - content: "\f0e7"; -} -.fa.fa-clipboard, -.fa.fa-paste { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-paste:before { - content: "\f328"; -} -.fa.fa-lightbulb-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-lightbulb-o:before { - content: "\f0eb"; -} -.fa.fa-exchange:before { - content: "\f362"; -} -.fa.fa-cloud-download:before { - content: "\f381"; -} -.fa.fa-cloud-upload:before { - content: "\f382"; -} -.fa.fa-bell-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-bell-o:before { - content: "\f0f3"; -} -.fa.fa-cutlery:before { - content: "\f2e7"; -} -.fa.fa-file-text-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-file-text-o:before { - content: "\f15c"; -} -.fa.fa-building-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-building-o:before { - content: "\f1ad"; -} -.fa.fa-hospital-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-hospital-o:before { - content: "\f0f8"; -} -.fa.fa-tablet:before { - content: "\f3fa"; -} -.fa.fa-mobile-phone:before, -.fa.fa-mobile:before { - content: "\f3cd"; -} -.fa.fa-circle-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-circle-o:before { - content: "\f111"; -} -.fa.fa-mail-reply:before { - content: "\f3e5"; -} -.fa.fa-github-alt { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-folder-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-folder-o:before { - content: "\f07b"; -} -.fa.fa-folder-open-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-folder-open-o:before { - content: "\f07c"; -} -.fa.fa-smile-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-smile-o:before { - content: "\f118"; -} -.fa.fa-frown-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-frown-o:before { - content: "\f119"; -} -.fa.fa-meh-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-meh-o:before { - content: "\f11a"; -} -.fa.fa-keyboard-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-keyboard-o:before { - content: "\f11c"; -} -.fa.fa-flag-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-flag-o:before { - content: "\f024"; -} -.fa.fa-mail-reply-all:before { - content: "\f122"; -} -.fa.fa-star-half-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-star-half-o:before { - content: "\f089"; -} -.fa.fa-star-half-empty { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-star-half-empty:before { - content: "\f089"; -} -.fa.fa-star-half-full { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-star-half-full:before { - content: "\f089"; -} -.fa.fa-code-fork:before { - content: "\f126"; -} -.fa.fa-chain-broken:before { - content: "\f127"; -} -.fa.fa-shield:before { - content: "\f3ed"; -} -.fa.fa-calendar-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-calendar-o:before { - content: "\f133"; -} -.fa.fa-css3, -.fa.fa-html5, -.fa.fa-maxcdn { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-ticket:before { - content: "\f3ff"; -} -.fa.fa-minus-square-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-minus-square-o:before { - content: "\f146"; -} -.fa.fa-level-up:before { - content: "\f3bf"; -} -.fa.fa-level-down:before { - content: "\f3be"; -} -.fa.fa-pencil-square:before { - content: "\f14b"; -} -.fa.fa-external-link-square:before { - content: "\f360"; -} -.fa.fa-compass { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-caret-square-o-down { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-caret-square-o-down:before { - content: "\f150"; -} -.fa.fa-toggle-down { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-toggle-down:before { - content: "\f150"; -} -.fa.fa-caret-square-o-up { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-caret-square-o-up:before { - content: "\f151"; -} -.fa.fa-toggle-up { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-toggle-up:before { - content: "\f151"; -} -.fa.fa-caret-square-o-right { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-caret-square-o-right:before { - content: "\f152"; -} -.fa.fa-toggle-right { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-toggle-right:before { - content: "\f152"; -} -.fa.fa-eur:before, -.fa.fa-euro:before { - content: "\f153"; -} -.fa.fa-gbp:before { - content: "\f154"; -} -.fa.fa-dollar:before, -.fa.fa-usd:before { - content: "\f155"; -} -.fa.fa-inr:before, -.fa.fa-rupee:before { - content: "\f156"; -} -.fa.fa-cny:before, -.fa.fa-jpy:before, -.fa.fa-rmb:before, -.fa.fa-yen:before { - content: "\f157"; -} -.fa.fa-rouble:before, -.fa.fa-rub:before, -.fa.fa-ruble:before { - content: "\f158"; -} -.fa.fa-krw:before, -.fa.fa-won:before { - content: "\f159"; -} -.fa.fa-bitcoin, -.fa.fa-btc { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-bitcoin:before { - content: "\f15a"; -} -.fa.fa-file-text:before { - content: "\f15c"; -} -.fa.fa-sort-alpha-asc:before { - content: "\f15d"; -} -.fa.fa-sort-alpha-desc:before { - content: "\f15e"; -} -.fa.fa-sort-amount-asc:before { - content: "\f160"; -} -.fa.fa-sort-amount-desc:before { - content: "\f161"; -} -.fa.fa-sort-numeric-asc:before { - content: "\f162"; -} -.fa.fa-sort-numeric-desc:before { - content: "\f163"; -} -.fa.fa-xing, -.fa.fa-xing-square, -.fa.fa-youtube, -.fa.fa-youtube-play, -.fa.fa-youtube-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-youtube-play:before { - content: "\f167"; -} -.fa.fa-adn, -.fa.fa-bitbucket, -.fa.fa-bitbucket-square, -.fa.fa-dropbox, -.fa.fa-flickr, -.fa.fa-instagram, -.fa.fa-stack-overflow { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-bitbucket-square:before { - content: "\f171"; -} -.fa.fa-tumblr, -.fa.fa-tumblr-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-long-arrow-down:before { - content: "\f309"; -} -.fa.fa-long-arrow-up:before { - content: "\f30c"; -} -.fa.fa-long-arrow-left:before { - content: "\f30a"; -} -.fa.fa-long-arrow-right:before { - content: "\f30b"; -} -.fa.fa-android, -.fa.fa-apple, -.fa.fa-dribbble, -.fa.fa-foursquare, -.fa.fa-gittip, -.fa.fa-gratipay, -.fa.fa-linux, -.fa.fa-skype, -.fa.fa-trello, -.fa.fa-windows { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-gittip:before { - content: "\f184"; -} -.fa.fa-sun-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-sun-o:before { - content: "\f185"; -} -.fa.fa-moon-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-moon-o:before { - content: "\f186"; -} -.fa.fa-pagelines, -.fa.fa-renren, -.fa.fa-stack-exchange, -.fa.fa-vk, -.fa.fa-weibo { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-arrow-circle-o-right { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-arrow-circle-o-right:before { - content: "\f35a"; -} -.fa.fa-arrow-circle-o-left { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-arrow-circle-o-left:before { - content: "\f359"; -} -.fa.fa-caret-square-o-left { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-caret-square-o-left:before { - content: "\f191"; -} -.fa.fa-toggle-left { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-toggle-left:before { - content: "\f191"; -} -.fa.fa-dot-circle-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-dot-circle-o:before { - content: "\f192"; -} -.fa.fa-vimeo-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-try:before, -.fa.fa-turkish-lira:before { - content: "\f195"; -} -.fa.fa-plus-square-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-plus-square-o:before { - content: "\f0fe"; -} -.fa.fa-openid, -.fa.fa-slack, -.fa.fa-wordpress { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-bank:before, -.fa.fa-institution:before { - content: "\f19c"; -} -.fa.fa-mortar-board:before { - content: "\f19d"; -} -.fa.fa-delicious, -.fa.fa-digg, -.fa.fa-drupal, -.fa.fa-google, -.fa.fa-joomla, -.fa.fa-pied-piper-alt, -.fa.fa-pied-piper-pp, -.fa.fa-reddit, -.fa.fa-reddit-square, -.fa.fa-stumbleupon, -.fa.fa-stumbleupon-circle, -.fa.fa-yahoo { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-spoon:before { - content: "\f2e5"; -} -.fa.fa-behance, -.fa.fa-behance-square, -.fa.fa-steam, -.fa.fa-steam-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-automobile:before { - content: "\f1b9"; -} -.fa.fa-cab:before { - content: "\f1ba"; -} -.fa.fa-envelope-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-envelope-o:before { - content: "\f0e0"; -} -.fa.fa-deviantart, -.fa.fa-soundcloud { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-file-pdf-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-file-pdf-o:before { - content: "\f1c1"; -} -.fa.fa-file-word-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-file-word-o:before { - content: "\f1c2"; -} -.fa.fa-file-excel-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-file-excel-o:before { - content: "\f1c3"; -} -.fa.fa-file-powerpoint-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-file-powerpoint-o:before { - content: "\f1c4"; -} -.fa.fa-file-image-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-file-image-o:before { - content: "\f1c5"; -} -.fa.fa-file-photo-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-file-photo-o:before { - content: "\f1c5"; -} -.fa.fa-file-picture-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-file-picture-o:before { - content: "\f1c5"; -} -.fa.fa-file-archive-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-file-archive-o:before { - content: "\f1c6"; -} -.fa.fa-file-zip-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-file-zip-o:before { - content: "\f1c6"; -} -.fa.fa-file-audio-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-file-audio-o:before { - content: "\f1c7"; -} -.fa.fa-file-sound-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-file-sound-o:before { - content: "\f1c7"; -} -.fa.fa-file-video-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-file-video-o:before { - content: "\f1c8"; -} -.fa.fa-file-movie-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-file-movie-o:before { - content: "\f1c8"; -} -.fa.fa-file-code-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-file-code-o:before { - content: "\f1c9"; -} -.fa.fa-codepen, -.fa.fa-jsfiddle, -.fa.fa-vine { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-life-bouy, -.fa.fa-life-ring { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-life-bouy:before { - content: "\f1cd"; -} -.fa.fa-life-buoy { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-life-buoy:before { - content: "\f1cd"; -} -.fa.fa-life-saver { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-life-saver:before { - content: "\f1cd"; -} -.fa.fa-support { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-support:before { - content: "\f1cd"; -} -.fa.fa-circle-o-notch:before { - content: "\f1ce"; -} -.fa.fa-ra, -.fa.fa-rebel { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-ra:before { - content: "\f1d0"; -} -.fa.fa-resistance { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-resistance:before { - content: "\f1d0"; -} -.fa.fa-empire, -.fa.fa-ge { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-ge:before { - content: "\f1d1"; -} -.fa.fa-git, -.fa.fa-git-square, -.fa.fa-hacker-news, -.fa.fa-y-combinator-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-y-combinator-square:before { - content: "\f1d4"; -} -.fa.fa-yc-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-yc-square:before { - content: "\f1d4"; -} -.fa.fa-qq, -.fa.fa-tencent-weibo, -.fa.fa-wechat, -.fa.fa-weixin { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-wechat:before { - content: "\f1d7"; -} -.fa.fa-send:before { - content: "\f1d8"; -} -.fa.fa-paper-plane-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-paper-plane-o:before { - content: "\f1d8"; -} -.fa.fa-send-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-send-o:before { - content: "\f1d8"; -} -.fa.fa-circle-thin { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-circle-thin:before { - content: "\f111"; -} -.fa.fa-header:before { - content: "\f1dc"; -} -.fa.fa-sliders:before { - content: "\f1de"; -} -.fa.fa-futbol-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-futbol-o:before { - content: "\f1e3"; -} -.fa.fa-soccer-ball-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-soccer-ball-o:before { - content: "\f1e3"; -} -.fa.fa-slideshare, -.fa.fa-twitch, -.fa.fa-yelp { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-newspaper-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-newspaper-o:before { - content: "\f1ea"; -} -.fa.fa-cc-amex, -.fa.fa-cc-discover, -.fa.fa-cc-mastercard, -.fa.fa-cc-paypal, -.fa.fa-cc-stripe, -.fa.fa-cc-visa, -.fa.fa-google-wallet, -.fa.fa-paypal { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-bell-slash-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-bell-slash-o:before { - content: "\f1f6"; -} -.fa.fa-trash:before { - content: "\f2ed"; -} -.fa.fa-copyright { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-eyedropper:before { - content: "\f1fb"; -} -.fa.fa-area-chart:before { - content: "\f1fe"; -} -.fa.fa-pie-chart:before { - content: "\f200"; -} -.fa.fa-line-chart:before { - content: "\f201"; -} -.fa.fa-angellist, -.fa.fa-ioxhost, -.fa.fa-lastfm, -.fa.fa-lastfm-square { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-cc { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-cc:before { - content: "\f20a"; -} -.fa.fa-ils:before, -.fa.fa-shekel:before, -.fa.fa-sheqel:before { - content: "\f20b"; -} -.fa.fa-meanpath { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-meanpath:before { - content: "\f2b4"; -} -.fa.fa-buysellads, -.fa.fa-connectdevelop, -.fa.fa-dashcube, -.fa.fa-forumbee, -.fa.fa-leanpub, -.fa.fa-sellsy, -.fa.fa-shirtsinbulk, -.fa.fa-simplybuilt, -.fa.fa-skyatlas { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-diamond { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-diamond:before { - content: "\f3a5"; -} -.fa.fa-intersex:before { - content: "\f224"; -} -.fa.fa-facebook-official { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-facebook-official:before { - content: "\f09a"; -} -.fa.fa-pinterest-p, -.fa.fa-whatsapp { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-hotel:before { - content: "\f236"; -} -.fa.fa-medium, -.fa.fa-viacoin, -.fa.fa-y-combinator, -.fa.fa-yc { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-yc:before { - content: "\f23b"; -} -.fa.fa-expeditedssl, -.fa.fa-opencart, -.fa.fa-optin-monster { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-battery-4:before, -.fa.fa-battery:before { - content: "\f240"; -} -.fa.fa-battery-3:before { - content: "\f241"; -} -.fa.fa-battery-2:before { - content: "\f242"; -} -.fa.fa-battery-1:before { - content: "\f243"; -} -.fa.fa-battery-0:before { - content: "\f244"; -} -.fa.fa-object-group, -.fa.fa-object-ungroup, -.fa.fa-sticky-note-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-sticky-note-o:before { - content: "\f249"; -} -.fa.fa-cc-diners-club, -.fa.fa-cc-jcb { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-clone, -.fa.fa-hourglass-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-hourglass-o:before { - content: "\f254"; -} -.fa.fa-hourglass-1:before { - content: "\f251"; -} -.fa.fa-hourglass-2:before { - content: "\f252"; -} -.fa.fa-hourglass-3:before { - content: "\f253"; -} -.fa.fa-hand-rock-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-hand-rock-o:before { - content: "\f255"; -} -.fa.fa-hand-grab-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-hand-grab-o:before { - content: "\f255"; -} -.fa.fa-hand-paper-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-hand-paper-o:before { - content: "\f256"; -} -.fa.fa-hand-stop-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-hand-stop-o:before { - content: "\f256"; -} -.fa.fa-hand-scissors-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-hand-scissors-o:before { - content: "\f257"; -} -.fa.fa-hand-lizard-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-hand-lizard-o:before { - content: "\f258"; -} -.fa.fa-hand-spock-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-hand-spock-o:before { - content: "\f259"; -} -.fa.fa-hand-pointer-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-hand-pointer-o:before { - content: "\f25a"; -} -.fa.fa-hand-peace-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-hand-peace-o:before { - content: "\f25b"; -} -.fa.fa-registered { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-chrome, -.fa.fa-creative-commons, -.fa.fa-firefox, -.fa.fa-get-pocket, -.fa.fa-gg, -.fa.fa-gg-circle, -.fa.fa-internet-explorer, -.fa.fa-odnoklassniki, -.fa.fa-odnoklassniki-square, -.fa.fa-opera, -.fa.fa-safari, -.fa.fa-tripadvisor, -.fa.fa-wikipedia-w { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-television:before { - content: "\f26c"; -} -.fa.fa-500px, -.fa.fa-amazon, -.fa.fa-contao { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-calendar-plus-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-calendar-plus-o:before { - content: "\f271"; -} -.fa.fa-calendar-minus-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-calendar-minus-o:before { - content: "\f272"; -} -.fa.fa-calendar-times-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-calendar-times-o:before { - content: "\f273"; -} -.fa.fa-calendar-check-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-calendar-check-o:before { - content: "\f274"; -} -.fa.fa-map-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-map-o:before { - content: "\f279"; -} -.fa.fa-commenting:before { - content: "\f4ad"; -} -.fa.fa-commenting-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-commenting-o:before { - content: "\f4ad"; -} -.fa.fa-houzz, -.fa.fa-vimeo { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-vimeo:before { - content: "\f27d"; -} -.fa.fa-black-tie, -.fa.fa-edge, -.fa.fa-fonticons, -.fa.fa-reddit-alien { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-credit-card-alt:before { - content: "\f09d"; -} -.fa.fa-codiepie, -.fa.fa-fort-awesome, -.fa.fa-mixcloud, -.fa.fa-modx, -.fa.fa-product-hunt, -.fa.fa-scribd, -.fa.fa-usb { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-pause-circle-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-pause-circle-o:before { - content: "\f28b"; -} -.fa.fa-stop-circle-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-stop-circle-o:before { - content: "\f28d"; -} -.fa.fa-bluetooth, -.fa.fa-bluetooth-b, -.fa.fa-envira, -.fa.fa-gitlab, -.fa.fa-wheelchair-alt, -.fa.fa-wpbeginner, -.fa.fa-wpforms { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-wheelchair-alt:before { - content: "\f368"; -} -.fa.fa-question-circle-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-question-circle-o:before { - content: "\f059"; -} -.fa.fa-volume-control-phone:before { - content: "\f2a0"; -} -.fa.fa-asl-interpreting:before { - content: "\f2a3"; -} -.fa.fa-deafness:before, -.fa.fa-hard-of-hearing:before { - content: "\f2a4"; -} -.fa.fa-glide, -.fa.fa-glide-g { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-signing:before { - content: "\f2a7"; -} -.fa.fa-first-order, -.fa.fa-google-plus-official, -.fa.fa-pied-piper, -.fa.fa-snapchat, -.fa.fa-snapchat-ghost, -.fa.fa-snapchat-square, -.fa.fa-themeisle, -.fa.fa-viadeo, -.fa.fa-viadeo-square, -.fa.fa-yoast { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-google-plus-official:before { - content: "\f2b3"; -} -.fa.fa-google-plus-circle { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-google-plus-circle:before { - content: "\f2b3"; -} -.fa.fa-fa, -.fa.fa-font-awesome { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-fa:before { - content: "\f2b4"; -} -.fa.fa-handshake-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-handshake-o:before { - content: "\f2b5"; -} -.fa.fa-envelope-open-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-envelope-open-o:before { - content: "\f2b6"; -} -.fa.fa-linode { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-address-book-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-address-book-o:before { - content: "\f2b9"; -} -.fa.fa-vcard:before { - content: "\f2bb"; -} -.fa.fa-address-card-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-address-card-o:before { - content: "\f2bb"; -} -.fa.fa-vcard-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-vcard-o:before { - content: "\f2bb"; -} -.fa.fa-user-circle-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-user-circle-o:before { - content: "\f2bd"; -} -.fa.fa-user-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-user-o:before { - content: "\f007"; -} -.fa.fa-id-badge { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-drivers-license:before { - content: "\f2c2"; -} -.fa.fa-id-card-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-id-card-o:before { - content: "\f2c2"; -} -.fa.fa-drivers-license-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-drivers-license-o:before { - content: "\f2c2"; -} -.fa.fa-free-code-camp, -.fa.fa-quora, -.fa.fa-telegram { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-thermometer-4:before, -.fa.fa-thermometer:before { - content: "\f2c7"; -} -.fa.fa-thermometer-3:before { - content: "\f2c8"; -} -.fa.fa-thermometer-2:before { - content: "\f2c9"; -} -.fa.fa-thermometer-1:before { - content: "\f2ca"; -} -.fa.fa-thermometer-0:before { - content: "\f2cb"; -} -.fa.fa-bathtub:before, -.fa.fa-s15:before { - content: "\f2cd"; -} -.fa.fa-window-maximize, -.fa.fa-window-restore { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-times-rectangle:before { - content: "\f410"; -} -.fa.fa-window-close-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-window-close-o:before { - content: "\f410"; -} -.fa.fa-times-rectangle-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-times-rectangle-o:before { - content: "\f410"; -} -.fa.fa-bandcamp, -.fa.fa-eercast, -.fa.fa-etsy, -.fa.fa-grav, -.fa.fa-imdb, -.fa.fa-ravelry { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} -.fa.fa-eercast:before { - content: "\f2da"; -} -.fa.fa-snowflake-o { - font-family: "Font Awesome 5 Free"; - font-weight: 400; -} -.fa.fa-snowflake-o:before { - content: "\f2dc"; -} -.fa.fa-spotify, -.fa.fa-superpowers, -.fa.fa-wpexplorer { - font-family: "Font Awesome 5 Brands"; - font-weight: 400; -} +.fa.fa-glass:before{content:"\f000"}.fa.fa-envelope-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-envelope-o:before{content:"\f0e0"}.fa.fa-star-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-o:before{content:"\f005"}.fa.fa-close:before,.fa.fa-remove:before{content:"\f00d"}.fa.fa-gear:before{content:"\f013"}.fa.fa-trash-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-trash-o:before{content:"\f2ed"}.fa.fa-home:before{content:"\f015"}.fa.fa-file-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-o:before{content:"\f15b"}.fa.fa-clock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-clock-o:before{content:"\f017"}.fa.fa-arrow-circle-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-down:before{content:"\f358"}.fa.fa-arrow-circle-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-up:before{content:"\f35b"}.fa.fa-play-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-play-circle-o:before{content:"\f144"}.fa.fa-repeat:before,.fa.fa-rotate-right:before{content:"\f01e"}.fa.fa-refresh:before{content:"\f021"}.fa.fa-list-alt{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-list-alt:before{content:"\f022"}.fa.fa-dedent:before{content:"\f03b"}.fa.fa-video-camera:before{content:"\f03d"}.fa.fa-picture-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-picture-o:before{content:"\f03e"}.fa.fa-photo{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-photo:before{content:"\f03e"}.fa.fa-image{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-image:before{content:"\f03e"}.fa.fa-map-marker:before{content:"\f3c5"}.fa.fa-pencil-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-pencil-square-o:before{content:"\f044"}.fa.fa-edit{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-edit:before{content:"\f044"}.fa.fa-share-square-o:before{content:"\f14d"}.fa.fa-check-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-check-square-o:before{content:"\f14a"}.fa.fa-arrows:before{content:"\f0b2"}.fa.fa-times-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-circle-o:before{content:"\f057"}.fa.fa-check-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-check-circle-o:before{content:"\f058"}.fa.fa-mail-forward:before{content:"\f064"}.fa.fa-expand:before{content:"\f424"}.fa.fa-compress:before{content:"\f422"}.fa.fa-eye,.fa.fa-eye-slash{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-warning:before{content:"\f071"}.fa.fa-calendar:before{content:"\f073"}.fa.fa-arrows-v:before{content:"\f338"}.fa.fa-arrows-h:before{content:"\f337"}.fa.fa-bar-chart-o:before,.fa.fa-bar-chart:before{content:"\e0e3"}.fa.fa-twitter-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-twitter-square:before{content:"\f081"}.fa.fa-facebook-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-square:before{content:"\f082"}.fa.fa-gears:before{content:"\f085"}.fa.fa-thumbs-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-thumbs-o-up:before{content:"\f164"}.fa.fa-thumbs-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-thumbs-o-down:before{content:"\f165"}.fa.fa-heart-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-heart-o:before{content:"\f004"}.fa.fa-sign-out:before{content:"\f2f5"}.fa.fa-linkedin-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-linkedin-square:before{content:"\f08c"}.fa.fa-thumb-tack:before{content:"\f08d"}.fa.fa-external-link:before{content:"\f35d"}.fa.fa-sign-in:before{content:"\f2f6"}.fa.fa-github-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-github-square:before{content:"\f092"}.fa.fa-lemon-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-lemon-o:before{content:"\f094"}.fa.fa-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-square-o:before{content:"\f0c8"}.fa.fa-bookmark-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bookmark-o:before{content:"\f02e"}.fa.fa-facebook,.fa.fa-twitter{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook:before{content:"\f39e"}.fa.fa-facebook-f{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-f:before{content:"\f39e"}.fa.fa-github{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-credit-card{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-feed:before{content:"\f09e"}.fa.fa-hdd-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hdd-o:before{content:"\f0a0"}.fa.fa-hand-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-right:before{content:"\f0a4"}.fa.fa-hand-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-left:before{content:"\f0a5"}.fa.fa-hand-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-up:before{content:"\f0a6"}.fa.fa-hand-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-o-down:before{content:"\f0a7"}.fa.fa-globe:before{content:"\f57d"}.fa.fa-tasks:before{content:"\f828"}.fa.fa-arrows-alt:before{content:"\f31e"}.fa.fa-group:before{content:"\f0c0"}.fa.fa-chain:before{content:"\f0c1"}.fa.fa-cut:before{content:"\f0c4"}.fa.fa-files-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-files-o:before{content:"\f0c5"}.fa.fa-floppy-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-floppy-o:before{content:"\f0c7"}.fa.fa-save{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-save:before{content:"\f0c7"}.fa.fa-navicon:before,.fa.fa-reorder:before{content:"\f0c9"}.fa.fa-magic:before{content:"\e2ca"}.fa.fa-pinterest,.fa.fa-pinterest-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-pinterest-square:before{content:"\f0d3"}.fa.fa-google-plus-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-square:before{content:"\f0d4"}.fa.fa-google-plus{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus:before{content:"\f0d5"}.fa.fa-money:before{content:"\f3d1"}.fa.fa-unsorted:before{content:"\f0dc"}.fa.fa-sort-desc:before{content:"\f0dd"}.fa.fa-sort-asc:before{content:"\f0de"}.fa.fa-linkedin{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-linkedin:before{content:"\f0e1"}.fa.fa-rotate-left:before{content:"\f0e2"}.fa.fa-legal:before{content:"\f0e3"}.fa.fa-dashboard:before,.fa.fa-tachometer:before{content:"\f625"}.fa.fa-comment-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-comment-o:before{content:"\f075"}.fa.fa-comments-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-comments-o:before{content:"\f086"}.fa.fa-flash:before{content:"\f0e7"}.fa.fa-clipboard:before{content:"\f0ea"}.fa.fa-lightbulb-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-lightbulb-o:before{content:"\f0eb"}.fa.fa-exchange:before{content:"\f362"}.fa.fa-cloud-download:before{content:"\f0ed"}.fa.fa-cloud-upload:before{content:"\f0ee"}.fa.fa-bell-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bell-o:before{content:"\f0f3"}.fa.fa-cutlery:before{content:"\f2e7"}.fa.fa-file-text-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-text-o:before{content:"\f15c"}.fa.fa-building-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-building-o:before{content:"\f1ad"}.fa.fa-hospital-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hospital-o:before{content:"\f0f8"}.fa.fa-tablet:before{content:"\f3fa"}.fa.fa-mobile-phone:before,.fa.fa-mobile:before{content:"\f3cd"}.fa.fa-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-circle-o:before{content:"\f111"}.fa.fa-mail-reply:before{content:"\f3e5"}.fa.fa-github-alt{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-folder-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-folder-o:before{content:"\f07b"}.fa.fa-folder-open-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-folder-open-o:before{content:"\f07c"}.fa.fa-smile-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-smile-o:before{content:"\f118"}.fa.fa-frown-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-frown-o:before{content:"\f119"}.fa.fa-meh-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-meh-o:before{content:"\f11a"}.fa.fa-keyboard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-keyboard-o:before{content:"\f11c"}.fa.fa-flag-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-flag-o:before{content:"\f024"}.fa.fa-mail-reply-all:before{content:"\f122"}.fa.fa-star-half-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-o:before{content:"\f5c0"}.fa.fa-star-half-empty{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-empty:before{content:"\f5c0"}.fa.fa-star-half-full{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-star-half-full:before{content:"\f5c0"}.fa.fa-code-fork:before{content:"\f126"}.fa.fa-chain-broken:before,.fa.fa-unlink:before{content:"\f127"}.fa.fa-calendar-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-o:before{content:"\f133"}.fa.fa-css3,.fa.fa-html5,.fa.fa-maxcdn{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-unlock-alt:before{content:"\f09c"}.fa.fa-minus-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-minus-square-o:before{content:"\f146"}.fa.fa-level-up:before{content:"\f3bf"}.fa.fa-level-down:before{content:"\f3be"}.fa.fa-pencil-square:before{content:"\f14b"}.fa.fa-external-link-square:before{content:"\f360"}.fa.fa-compass{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-down:before{content:"\f150"}.fa.fa-toggle-down{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-down:before{content:"\f150"}.fa.fa-caret-square-o-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-up:before{content:"\f151"}.fa.fa-toggle-up{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-up:before{content:"\f151"}.fa.fa-caret-square-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-right:before{content:"\f152"}.fa.fa-toggle-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-right:before{content:"\f152"}.fa.fa-eur:before,.fa.fa-euro:before{content:"\f153"}.fa.fa-gbp:before{content:"\f154"}.fa.fa-dollar:before,.fa.fa-usd:before{content:"\24"}.fa.fa-inr:before,.fa.fa-rupee:before{content:"\e1bc"}.fa.fa-cny:before,.fa.fa-jpy:before,.fa.fa-rmb:before,.fa.fa-yen:before{content:"\f157"}.fa.fa-rouble:before,.fa.fa-rub:before,.fa.fa-ruble:before{content:"\f158"}.fa.fa-krw:before,.fa.fa-won:before{content:"\f159"}.fa.fa-bitcoin,.fa.fa-btc{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bitcoin:before{content:"\f15a"}.fa.fa-file-text:before{content:"\f15c"}.fa.fa-sort-alpha-asc:before{content:"\f15d"}.fa.fa-sort-alpha-desc:before{content:"\f881"}.fa.fa-sort-amount-asc:before{content:"\f884"}.fa.fa-sort-amount-desc:before{content:"\f160"}.fa.fa-sort-numeric-asc:before{content:"\f162"}.fa.fa-sort-numeric-desc:before{content:"\f886"}.fa.fa-youtube-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-youtube-square:before{content:"\f431"}.fa.fa-xing,.fa.fa-xing-square,.fa.fa-youtube{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-xing-square:before{content:"\f169"}.fa.fa-youtube-play{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-youtube-play:before{content:"\f167"}.fa.fa-adn,.fa.fa-bitbucket,.fa.fa-bitbucket-square,.fa.fa-dropbox,.fa.fa-flickr,.fa.fa-instagram,.fa.fa-stack-overflow{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bitbucket-square:before{content:"\f171"}.fa.fa-tumblr,.fa.fa-tumblr-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-tumblr-square:before{content:"\f174"}.fa.fa-long-arrow-down:before{content:"\f309"}.fa.fa-long-arrow-up:before{content:"\f30c"}.fa.fa-long-arrow-left:before{content:"\f30a"}.fa.fa-long-arrow-right:before{content:"\f30b"}.fa.fa-android,.fa.fa-apple,.fa.fa-dribbble,.fa.fa-foursquare,.fa.fa-gittip,.fa.fa-gratipay,.fa.fa-linux,.fa.fa-skype,.fa.fa-trello,.fa.fa-windows{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-gittip:before{content:"\f184"}.fa.fa-sun-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-sun-o:before{content:"\f185"}.fa.fa-moon-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-moon-o:before{content:"\f186"}.fa.fa-pagelines,.fa.fa-renren,.fa.fa-stack-exchange,.fa.fa-vk,.fa.fa-weibo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-arrow-circle-o-right{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-right:before{content:"\f35a"}.fa.fa-arrow-circle-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-arrow-circle-o-left:before{content:"\f359"}.fa.fa-caret-square-o-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-caret-square-o-left:before{content:"\f191"}.fa.fa-toggle-left{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-toggle-left:before{content:"\f191"}.fa.fa-dot-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-dot-circle-o:before{content:"\f192"}.fa.fa-vimeo-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-vimeo-square:before{content:"\f194"}.fa.fa-try:before,.fa.fa-turkish-lira:before{content:"\e2bb"}.fa.fa-plus-square-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-plus-square-o:before{content:"\f0fe"}.fa.fa-openid,.fa.fa-slack,.fa.fa-wordpress{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bank:before,.fa.fa-institution:before{content:"\f19c"}.fa.fa-mortar-board:before{content:"\f19d"}.fa.fa-google,.fa.fa-reddit,.fa.fa-reddit-square,.fa.fa-yahoo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-reddit-square:before{content:"\f1a2"}.fa.fa-behance,.fa.fa-behance-square,.fa.fa-delicious,.fa.fa-digg,.fa.fa-drupal,.fa.fa-joomla,.fa.fa-pied-piper-alt,.fa.fa-pied-piper-pp,.fa.fa-stumbleupon,.fa.fa-stumbleupon-circle{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-behance-square:before{content:"\f1b5"}.fa.fa-steam,.fa.fa-steam-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-steam-square:before{content:"\f1b7"}.fa.fa-automobile:before{content:"\f1b9"}.fa.fa-cab:before{content:"\f1ba"}.fa.fa-deviantart,.fa.fa-soundcloud,.fa.fa-spotify{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-file-pdf-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-pdf-o:before{content:"\f1c1"}.fa.fa-file-word-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-word-o:before{content:"\f1c2"}.fa.fa-file-excel-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-excel-o:before{content:"\f1c3"}.fa.fa-file-powerpoint-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-powerpoint-o:before{content:"\f1c4"}.fa.fa-file-image-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-image-o:before{content:"\f1c5"}.fa.fa-file-photo-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-photo-o:before{content:"\f1c5"}.fa.fa-file-picture-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-picture-o:before{content:"\f1c5"}.fa.fa-file-archive-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-archive-o:before{content:"\f1c6"}.fa.fa-file-zip-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-zip-o:before{content:"\f1c6"}.fa.fa-file-audio-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-audio-o:before{content:"\f1c7"}.fa.fa-file-sound-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-sound-o:before{content:"\f1c7"}.fa.fa-file-video-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-video-o:before{content:"\f1c8"}.fa.fa-file-movie-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-movie-o:before{content:"\f1c8"}.fa.fa-file-code-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-file-code-o:before{content:"\f1c9"}.fa.fa-codepen,.fa.fa-jsfiddle,.fa.fa-vine{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-life-bouy:before,.fa.fa-life-buoy:before,.fa.fa-life-saver:before,.fa.fa-support:before{content:"\f1cd"}.fa.fa-circle-o-notch:before{content:"\f1ce"}.fa.fa-ra,.fa.fa-rebel{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-ra:before{content:"\f1d0"}.fa.fa-resistance{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-resistance:before{content:"\f1d0"}.fa.fa-empire,.fa.fa-ge{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-ge:before{content:"\f1d1"}.fa.fa-git-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-git-square:before{content:"\f1d2"}.fa.fa-git,.fa.fa-hacker-news,.fa.fa-y-combinator-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-y-combinator-square:before{content:"\f1d4"}.fa.fa-yc-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-yc-square:before{content:"\f1d4"}.fa.fa-qq,.fa.fa-tencent-weibo,.fa.fa-wechat,.fa.fa-weixin{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-wechat:before{content:"\f1d7"}.fa.fa-send:before{content:"\f1d8"}.fa.fa-paper-plane-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-paper-plane-o:before{content:"\f1d8"}.fa.fa-send-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-send-o:before{content:"\f1d8"}.fa.fa-circle-thin{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-circle-thin:before{content:"\f111"}.fa.fa-header:before{content:"\f1dc"}.fa.fa-futbol-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-futbol-o:before{content:"\f1e3"}.fa.fa-soccer-ball-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-soccer-ball-o:before{content:"\f1e3"}.fa.fa-slideshare,.fa.fa-twitch,.fa.fa-yelp{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-newspaper-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-newspaper-o:before{content:"\f1ea"}.fa.fa-cc-amex,.fa.fa-cc-discover,.fa.fa-cc-mastercard,.fa.fa-cc-paypal,.fa.fa-cc-stripe,.fa.fa-cc-visa,.fa.fa-google-wallet,.fa.fa-paypal{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bell-slash-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-bell-slash-o:before{content:"\f1f6"}.fa.fa-trash:before{content:"\f2ed"}.fa.fa-copyright{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-eyedropper:before{content:"\f1fb"}.fa.fa-area-chart:before{content:"\f1fe"}.fa.fa-pie-chart:before{content:"\f200"}.fa.fa-line-chart:before{content:"\f201"}.fa.fa-lastfm,.fa.fa-lastfm-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-lastfm-square:before{content:"\f203"}.fa.fa-angellist,.fa.fa-ioxhost{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-cc{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-cc:before{content:"\f20a"}.fa.fa-ils:before,.fa.fa-shekel:before,.fa.fa-sheqel:before{content:"\f20b"}.fa.fa-buysellads,.fa.fa-connectdevelop,.fa.fa-dashcube,.fa.fa-forumbee,.fa.fa-leanpub,.fa.fa-sellsy,.fa.fa-shirtsinbulk,.fa.fa-simplybuilt,.fa.fa-skyatlas{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-diamond{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-diamond:before{content:"\f3a5"}.fa.fa-intersex:before,.fa.fa-transgender:before{content:"\f224"}.fa.fa-transgender-alt:before{content:"\f225"}.fa.fa-facebook-official{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-official:before{content:"\f09a"}.fa.fa-pinterest-p,.fa.fa-whatsapp{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-hotel:before{content:"\f236"}.fa.fa-medium,.fa.fa-viacoin,.fa.fa-y-combinator,.fa.fa-yc{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-yc:before{content:"\f23b"}.fa.fa-expeditedssl,.fa.fa-opencart,.fa.fa-optin-monster{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-battery-4:before,.fa.fa-battery:before{content:"\f240"}.fa.fa-battery-3:before{content:"\f241"}.fa.fa-battery-2:before{content:"\f242"}.fa.fa-battery-1:before{content:"\f243"}.fa.fa-battery-0:before{content:"\f244"}.fa.fa-object-group,.fa.fa-object-ungroup,.fa.fa-sticky-note-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-sticky-note-o:before{content:"\f249"}.fa.fa-cc-diners-club,.fa.fa-cc-jcb{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-clone{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hourglass-o:before{content:"\f254"}.fa.fa-hourglass-1:before{content:"\f251"}.fa.fa-hourglass-2:before{content:"\f252"}.fa.fa-hourglass-3:before{content:"\f253"}.fa.fa-hand-rock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-rock-o:before{content:"\f255"}.fa.fa-hand-grab-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-grab-o:before{content:"\f255"}.fa.fa-hand-paper-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-paper-o:before{content:"\f256"}.fa.fa-hand-stop-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-stop-o:before{content:"\f256"}.fa.fa-hand-scissors-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-scissors-o:before{content:"\f257"}.fa.fa-hand-lizard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-lizard-o:before{content:"\f258"}.fa.fa-hand-spock-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-spock-o:before{content:"\f259"}.fa.fa-hand-pointer-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-pointer-o:before{content:"\f25a"}.fa.fa-hand-peace-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-hand-peace-o:before{content:"\f25b"}.fa.fa-registered{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-creative-commons,.fa.fa-gg,.fa.fa-gg-circle,.fa.fa-odnoklassniki,.fa.fa-odnoklassniki-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-odnoklassniki-square:before{content:"\f264"}.fa.fa-chrome,.fa.fa-firefox,.fa.fa-get-pocket,.fa.fa-internet-explorer,.fa.fa-opera,.fa.fa-safari,.fa.fa-wikipedia-w{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-television:before{content:"\f26c"}.fa.fa-500px,.fa.fa-amazon,.fa.fa-contao{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-calendar-plus-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-plus-o:before{content:"\f271"}.fa.fa-calendar-minus-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-minus-o:before{content:"\f272"}.fa.fa-calendar-times-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-times-o:before{content:"\f273"}.fa.fa-calendar-check-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-calendar-check-o:before{content:"\f274"}.fa.fa-map-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-map-o:before{content:"\f279"}.fa.fa-commenting:before{content:"\f4ad"}.fa.fa-commenting-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-commenting-o:before{content:"\f4ad"}.fa.fa-houzz,.fa.fa-vimeo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-vimeo:before{content:"\f27d"}.fa.fa-black-tie,.fa.fa-edge,.fa.fa-fonticons,.fa.fa-reddit-alien{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-credit-card-alt:before{content:"\f09d"}.fa.fa-codiepie,.fa.fa-fort-awesome,.fa.fa-mixcloud,.fa.fa-modx,.fa.fa-product-hunt,.fa.fa-scribd,.fa.fa-usb{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-pause-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-pause-circle-o:before{content:"\f28b"}.fa.fa-stop-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-stop-circle-o:before{content:"\f28d"}.fa.fa-bluetooth,.fa.fa-bluetooth-b,.fa.fa-envira,.fa.fa-gitlab,.fa.fa-wheelchair-alt,.fa.fa-wpbeginner,.fa.fa-wpforms{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-wheelchair-alt:before{content:"\f368"}.fa.fa-question-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-question-circle-o:before{content:"\f059"}.fa.fa-volume-control-phone:before{content:"\f2a0"}.fa.fa-asl-interpreting:before{content:"\f2a3"}.fa.fa-deafness:before,.fa.fa-hard-of-hearing:before{content:"\f2a4"}.fa.fa-glide,.fa.fa-glide-g{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-signing:before{content:"\f2a7"}.fa.fa-viadeo,.fa.fa-viadeo-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-viadeo-square:before{content:"\f2aa"}.fa.fa-snapchat,.fa.fa-snapchat-ghost{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-snapchat-ghost:before{content:"\f2ab"}.fa.fa-snapchat-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-snapchat-square:before{content:"\f2ad"}.fa.fa-first-order,.fa.fa-google-plus-official,.fa.fa-pied-piper,.fa.fa-themeisle,.fa.fa-yoast{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-official:before{content:"\f2b3"}.fa.fa-google-plus-circle{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-circle:before{content:"\f2b3"}.fa.fa-fa,.fa.fa-font-awesome{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-fa:before{content:"\f2b4"}.fa.fa-handshake-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-handshake-o:before{content:"\f2b5"}.fa.fa-envelope-open-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-envelope-open-o:before{content:"\f2b6"}.fa.fa-linode{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-address-book-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-address-book-o:before{content:"\f2b9"}.fa.fa-vcard:before{content:"\f2bb"}.fa.fa-address-card-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-address-card-o:before{content:"\f2bb"}.fa.fa-vcard-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-vcard-o:before{content:"\f2bb"}.fa.fa-user-circle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-user-circle-o:before{content:"\f2bd"}.fa.fa-user-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-user-o:before{content:"\f007"}.fa.fa-id-badge{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-drivers-license:before{content:"\f2c2"}.fa.fa-id-card-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-id-card-o:before{content:"\f2c2"}.fa.fa-drivers-license-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-drivers-license-o:before{content:"\f2c2"}.fa.fa-free-code-camp,.fa.fa-quora,.fa.fa-telegram{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-thermometer-4:before,.fa.fa-thermometer:before{content:"\f2c7"}.fa.fa-thermometer-3:before{content:"\f2c8"}.fa.fa-thermometer-2:before{content:"\f2c9"}.fa.fa-thermometer-1:before{content:"\f2ca"}.fa.fa-thermometer-0:before{content:"\f2cb"}.fa.fa-bathtub:before,.fa.fa-s15:before{content:"\f2cd"}.fa.fa-window-maximize,.fa.fa-window-restore{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-rectangle:before{content:"\f410"}.fa.fa-window-close-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-window-close-o:before{content:"\f410"}.fa.fa-times-rectangle-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-times-rectangle-o:before{content:"\f410"}.fa.fa-bandcamp,.fa.fa-eercast,.fa.fa-etsy,.fa.fa-grav,.fa.fa-imdb,.fa.fa-ravelry{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-eercast:before{content:"\f2da"}.fa.fa-snowflake-o{font-family:"Font Awesome 6 Free";font-weight:400}.fa.fa-snowflake-o:before{content:"\f2dc"}.fa.fa-meetup,.fa.fa-superpowers,.fa.fa-wpexplorer{font-family:"Font Awesome 6 Brands";font-weight:400} \ No newline at end of file diff --git a/html/font-awesome/webfonts/fa-regular-400.eot b/html/font-awesome/webfonts/fa-regular-400.eot deleted file mode 100644 index d62be2fad885..000000000000 Binary files a/html/font-awesome/webfonts/fa-regular-400.eot and /dev/null differ diff --git a/html/font-awesome/webfonts/fa-regular-400.ttf b/html/font-awesome/webfonts/fa-regular-400.ttf new file mode 100644 index 000000000000..c5ac00957778 Binary files /dev/null and b/html/font-awesome/webfonts/fa-regular-400.ttf differ diff --git a/html/font-awesome/webfonts/fa-regular-400.woff b/html/font-awesome/webfonts/fa-regular-400.woff deleted file mode 100644 index 43b1a9ae49db..000000000000 Binary files a/html/font-awesome/webfonts/fa-regular-400.woff and /dev/null differ diff --git a/html/font-awesome/webfonts/fa-solid-900.eot b/html/font-awesome/webfonts/fa-solid-900.eot deleted file mode 100644 index c77baa8d46ab..000000000000 Binary files a/html/font-awesome/webfonts/fa-solid-900.eot and /dev/null differ diff --git a/html/font-awesome/webfonts/fa-solid-900.ttf b/html/font-awesome/webfonts/fa-solid-900.ttf new file mode 100644 index 000000000000..43ba1cc7d94f Binary files /dev/null and b/html/font-awesome/webfonts/fa-solid-900.ttf differ diff --git a/html/font-awesome/webfonts/fa-solid-900.woff b/html/font-awesome/webfonts/fa-solid-900.woff deleted file mode 100644 index 77c1786227f5..000000000000 Binary files a/html/font-awesome/webfonts/fa-solid-900.woff and /dev/null differ diff --git a/html/font-awesome/webfonts/fa-v4compatibility.ttf b/html/font-awesome/webfonts/fa-v4compatibility.ttf new file mode 100644 index 000000000000..243bc25bd5ee Binary files /dev/null and b/html/font-awesome/webfonts/fa-v4compatibility.ttf differ diff --git a/icons/effects/blood.dmi b/icons/effects/blood.dmi index f7e2e158d422..aed7e9b4fbf4 100644 Binary files a/icons/effects/blood.dmi and b/icons/effects/blood.dmi differ diff --git a/icons/effects/cutting_effect.dmi b/icons/effects/cutting_effect.dmi new file mode 100644 index 000000000000..e8b4abeec5d0 Binary files /dev/null and b/icons/effects/cutting_effect.dmi differ diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi index 0aa256c631e4..bb63eb2b7f0e 100644 Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ diff --git a/icons/effects/magic.dmi b/icons/effects/magic.dmi new file mode 100644 index 000000000000..480332df1349 Binary files /dev/null and b/icons/effects/magic.dmi differ diff --git a/icons/effects/particles/bonfire.dmi b/icons/effects/particles/bonfire.dmi new file mode 100644 index 000000000000..e8e2e36346da Binary files /dev/null and b/icons/effects/particles/bonfire.dmi differ diff --git a/icons/effects/particles/echo.dmi b/icons/effects/particles/echo.dmi new file mode 100644 index 000000000000..60a243a8a7be Binary files /dev/null and b/icons/effects/particles/echo.dmi differ diff --git a/icons/effects/particles/generic.dmi b/icons/effects/particles/generic.dmi new file mode 100644 index 000000000000..dfbb1a47a6ef Binary files /dev/null and b/icons/effects/particles/generic.dmi differ diff --git a/icons/effects/particles/goop.dmi b/icons/effects/particles/goop.dmi new file mode 100644 index 000000000000..673c1a7ad5b6 Binary files /dev/null and b/icons/effects/particles/goop.dmi differ diff --git a/icons/effects/particles/pollen.dmi b/icons/effects/particles/pollen.dmi new file mode 100644 index 000000000000..559c4d1846f6 Binary files /dev/null and b/icons/effects/particles/pollen.dmi differ diff --git a/icons/effects/particles/smoke.dmi b/icons/effects/particles/smoke.dmi new file mode 100644 index 000000000000..4a3239499b96 Binary files /dev/null and b/icons/effects/particles/smoke.dmi 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/effects/weather_effects.dmi b/icons/effects/weather_effects.dmi index a8a7185af500..f76e34ec71ec 100644 Binary files a/icons/effects/weather_effects.dmi and b/icons/effects/weather_effects.dmi differ diff --git a/icons/hud/radial.dmi b/icons/hud/radial.dmi new file mode 100644 index 000000000000..9786d403e0de Binary files /dev/null and b/icons/hud/radial.dmi differ diff --git a/icons/hud/screen_alert.dmi b/icons/hud/screen_alert.dmi index 60ada01078d7..99de0dbf9441 100644 Binary files a/icons/hud/screen_alert.dmi and b/icons/hud/screen_alert.dmi differ diff --git a/icons/mecha/inteq_gygax.dmi b/icons/mecha/inteq_gygax.dmi new file mode 100644 index 000000000000..08105d783ab9 Binary files /dev/null and b/icons/mecha/inteq_gygax.dmi differ diff --git a/icons/mecha/mecha.dmi b/icons/mecha/mecha.dmi index b894d9191225..2993487cb850 100644 Binary files a/icons/mecha/mecha.dmi and b/icons/mecha/mecha.dmi differ diff --git a/icons/mecha/mecha_equipment.dmi b/icons/mecha/mecha_equipment.dmi index 5e08a834a892..76549c15a3e0 100644 Binary files a/icons/mecha/mecha_equipment.dmi and b/icons/mecha/mecha_equipment.dmi differ diff --git a/icons/mob/actions/actions_flightsuit.dmi b/icons/mob/actions/actions_flightsuit.dmi deleted file mode 100644 index 3121c243555f..000000000000 Binary files a/icons/mob/actions/actions_flightsuit.dmi and /dev/null differ diff --git a/icons/mob/actions/actions_mod.dmi b/icons/mob/actions/actions_mod.dmi new file mode 100644 index 000000000000..7f030ad53d42 Binary files /dev/null and b/icons/mob/actions/actions_mod.dmi differ diff --git a/icons/mob/blob.dmi b/icons/mob/blob.dmi deleted file mode 100644 index a197581533c0..000000000000 Binary files a/icons/mob/blob.dmi and /dev/null differ diff --git a/icons/mob/clothing/back.dmi b/icons/mob/clothing/back.dmi index 5508bc67523c..5ca5b6bd045d 100644 Binary files a/icons/mob/clothing/back.dmi and b/icons/mob/clothing/back.dmi differ diff --git a/icons/mob/clothing/back/backpacks.dmi b/icons/mob/clothing/back/backpacks.dmi new file mode 100644 index 000000000000..7138b440a4ad Binary files /dev/null and b/icons/mob/clothing/back/backpacks.dmi differ diff --git a/icons/mob/clothing/back/backpacks_kepori.dmi b/icons/mob/clothing/back/backpacks_kepori.dmi new file mode 100644 index 000000000000..557ee29267fd Binary files /dev/null and b/icons/mob/clothing/back/backpacks_kepori.dmi differ diff --git a/icons/mob/clothing/belt.dmi b/icons/mob/clothing/belt.dmi index 7568a1274d66..94728158d0c5 100644 Binary files a/icons/mob/clothing/belt.dmi and b/icons/mob/clothing/belt.dmi differ diff --git a/icons/mob/clothing/eyes.dmi b/icons/mob/clothing/eyes.dmi deleted file mode 100644 index 12ebf87128c3..000000000000 Binary files a/icons/mob/clothing/eyes.dmi and /dev/null differ diff --git a/icons/mob/clothing/eyes/eyes.dmi b/icons/mob/clothing/eyes/eyes.dmi new file mode 100644 index 000000000000..5c83d2dcfbc3 Binary files /dev/null and b/icons/mob/clothing/eyes/eyes.dmi differ diff --git a/icons/mob/clothing/faction/hardliners/head.dmi b/icons/mob/clothing/faction/hardliners/head.dmi index 839826a7c426..c9c1d5a73f0a 100644 Binary files a/icons/mob/clothing/faction/hardliners/head.dmi and b/icons/mob/clothing/faction/hardliners/head.dmi differ diff --git a/icons/mob/clothing/faction/hardliners/suits.dmi b/icons/mob/clothing/faction/hardliners/suits.dmi index 05f41eb00d25..669cb1534503 100644 Binary files a/icons/mob/clothing/faction/hardliners/suits.dmi and b/icons/mob/clothing/faction/hardliners/suits.dmi differ diff --git a/icons/mob/clothing/faction/ngr/head.dmi b/icons/mob/clothing/faction/ngr/head.dmi index c370f07aa0f3..eb0a316211ee 100644 Binary files a/icons/mob/clothing/faction/ngr/head.dmi and b/icons/mob/clothing/faction/ngr/head.dmi differ diff --git a/icons/mob/clothing/faction/ngr/suits.dmi b/icons/mob/clothing/faction/ngr/suits.dmi index ac4fceb11cae..05561408e367 100644 Binary files a/icons/mob/clothing/faction/ngr/suits.dmi and b/icons/mob/clothing/faction/ngr/suits.dmi differ diff --git a/icons/mob/clothing/feet.dmi b/icons/mob/clothing/feet.dmi index 3246bbb24de2..ec9850144f7b 100644 Binary files a/icons/mob/clothing/feet.dmi and b/icons/mob/clothing/feet.dmi differ diff --git a/icons/mob/clothing/head.dmi b/icons/mob/clothing/head.dmi index f207b2bfd826..d2970f6b9ead 100644 Binary files a/icons/mob/clothing/head.dmi and b/icons/mob/clothing/head.dmi differ diff --git a/icons/mob/clothing/head/armor.dmi b/icons/mob/clothing/head/armor.dmi index 38adc74f3317..a4b4491521ed 100644 Binary files a/icons/mob/clothing/head/armor.dmi and b/icons/mob/clothing/head/armor.dmi differ diff --git a/icons/mob/clothing/head/winterhood.dmi b/icons/mob/clothing/head/winterhood.dmi index 321896641390..cc3fd8a4e5d4 100644 Binary files a/icons/mob/clothing/head/winterhood.dmi and b/icons/mob/clothing/head/winterhood.dmi differ diff --git a/icons/mob/clothing/helmet_overlays.dmi b/icons/mob/clothing/helmet_overlays.dmi index 1c41c357a42a..a6860542bd57 100644 Binary files a/icons/mob/clothing/helmet_overlays.dmi and b/icons/mob/clothing/helmet_overlays.dmi differ diff --git a/icons/mob/clothing/mask.dmi b/icons/mob/clothing/mask.dmi index bfcc9970930f..8affe54d81d4 100644 Binary files a/icons/mob/clothing/mask.dmi and b/icons/mob/clothing/mask.dmi differ diff --git a/icons/mob/clothing/modsuit/mod_clothing.dmi b/icons/mob/clothing/modsuit/mod_clothing.dmi new file mode 100644 index 000000000000..27d4df3b9023 Binary files /dev/null and b/icons/mob/clothing/modsuit/mod_clothing.dmi differ diff --git a/icons/mob/clothing/modsuit/mod_modules.dmi b/icons/mob/clothing/modsuit/mod_modules.dmi new file mode 100644 index 000000000000..11259428cf4d Binary files /dev/null and b/icons/mob/clothing/modsuit/mod_modules.dmi differ diff --git a/icons/mob/clothing/species/kepori.dmi b/icons/mob/clothing/species/kepori.dmi index 1586e80e9b19..9e108db76b87 100644 Binary files a/icons/mob/clothing/species/kepori.dmi and b/icons/mob/clothing/species/kepori.dmi differ diff --git a/icons/mob/clothing/suit.dmi b/icons/mob/clothing/suit.dmi index ca1eb949aa40..b595f529b7ee 100644 Binary files a/icons/mob/clothing/suit.dmi and b/icons/mob/clothing/suit.dmi differ diff --git a/icons/mob/clothing/suits/hooded.dmi b/icons/mob/clothing/suits/hooded.dmi index e1f98d991357..7d2f53a13b06 100644 Binary files a/icons/mob/clothing/suits/hooded.dmi and b/icons/mob/clothing/suits/hooded.dmi differ diff --git a/icons/mob/clothing/suits/spacesuits.dmi b/icons/mob/clothing/suits/spacesuits.dmi index da5075195992..1a0f5001b34a 100644 Binary files a/icons/mob/clothing/suits/spacesuits.dmi and b/icons/mob/clothing/suits/spacesuits.dmi differ diff --git a/icons/mob/clothing/underwear/species/kepori/underwear_legs_kepori.dmi b/icons/mob/clothing/underwear/species/kepori/underwear_legs_kepori.dmi index 166e1a7624d9..133061149889 100644 Binary files a/icons/mob/clothing/underwear/species/kepori/underwear_legs_kepori.dmi and b/icons/mob/clothing/underwear/species/kepori/underwear_legs_kepori.dmi differ diff --git a/icons/mob/clothing/underwear/species/kepori/underwear_legs_keporiOLD.dmi b/icons/mob/clothing/underwear/species/kepori/underwear_legs_keporiOLD.dmi deleted file mode 100644 index aa9c16beb0ab..000000000000 Binary files a/icons/mob/clothing/underwear/species/kepori/underwear_legs_keporiOLD.dmi and /dev/null differ diff --git a/icons/mob/clothing/underwear/species/kepori/underwear_torso_kepori.dmi b/icons/mob/clothing/underwear/species/kepori/underwear_torso_kepori.dmi index 1a6a59cd5241..56c2757dc0f6 100644 Binary files a/icons/mob/clothing/underwear/species/kepori/underwear_torso_kepori.dmi and b/icons/mob/clothing/underwear/species/kepori/underwear_torso_kepori.dmi differ diff --git a/icons/mob/ethereal_parts.dmi b/icons/mob/ethereal_parts.dmi index 14e0c51037fb..c5d0c9b45f78 100644 Binary files a/icons/mob/ethereal_parts.dmi and b/icons/mob/ethereal_parts.dmi differ diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index a819dd3ca780..ab667d8d9337 100644 Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ diff --git a/icons/mob/inhands/equipment/gear_handle_lefthand.dmi b/icons/mob/inhands/equipment/gear_handle_lefthand.dmi new file mode 100644 index 000000000000..169f91ce6eba Binary files /dev/null and b/icons/mob/inhands/equipment/gear_handle_lefthand.dmi differ diff --git a/icons/mob/inhands/equipment/gear_handle_righthand.dmi b/icons/mob/inhands/equipment/gear_handle_righthand.dmi new file mode 100644 index 000000000000..172f18e6095a Binary files /dev/null and b/icons/mob/inhands/equipment/gear_handle_righthand.dmi differ diff --git a/icons/mob/inhands/misc/concrete_bag_lefthand.dmi b/icons/mob/inhands/misc/concrete_bag_lefthand.dmi new file mode 100644 index 000000000000..9d331882dfc1 Binary files /dev/null and b/icons/mob/inhands/misc/concrete_bag_lefthand.dmi differ diff --git a/icons/mob/inhands/misc/concrete_bag_righthand.dmi b/icons/mob/inhands/misc/concrete_bag_righthand.dmi new file mode 100644 index 000000000000..707222f919ea Binary files /dev/null and b/icons/mob/inhands/misc/concrete_bag_righthand.dmi differ diff --git a/icons/mob/inhands/weapons/swords_lefthand.dmi b/icons/mob/inhands/weapons/swords_lefthand.dmi index 41093fde051e..49732e254e41 100644 Binary files a/icons/mob/inhands/weapons/swords_lefthand.dmi and b/icons/mob/inhands/weapons/swords_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/swords_righthand.dmi b/icons/mob/inhands/weapons/swords_righthand.dmi index a8559339cd26..9797eb3ee366 100644 Binary files a/icons/mob/inhands/weapons/swords_righthand.dmi and b/icons/mob/inhands/weapons/swords_righthand.dmi differ diff --git a/icons/mob/simple_frontiersman.dmi b/icons/mob/simple_frontiersman.dmi new file mode 100644 index 000000000000..c5b9962fd236 Binary files /dev/null and b/icons/mob/simple_frontiersman.dmi differ diff --git a/icons/mob/species/human/rabbit.dmi b/icons/mob/species/human/rabbit.dmi index fcc6599f7356..26f0cb080d22 100644 Binary files a/icons/mob/species/human/rabbit.dmi and b/icons/mob/species/human/rabbit.dmi differ diff --git a/icons/mob/species/kepori/onmob_back_kepori.dmi b/icons/mob/species/kepori/onmob_back_kepori.dmi new file mode 100644 index 000000000000..98218916f7c0 Binary files /dev/null and b/icons/mob/species/kepori/onmob_back_kepori.dmi differ diff --git a/icons/mob/species/kepori/onmob_eyes_kepori.dmi b/icons/mob/species/kepori/onmob_eyes_kepori.dmi index 1b6c6f68a3a5..e0151a96122d 100644 Binary files a/icons/mob/species/kepori/onmob_eyes_kepori.dmi and b/icons/mob/species/kepori/onmob_eyes_kepori.dmi differ diff --git a/icons/mob/species/kepori/onmob_head_kepori.dmi b/icons/mob/species/kepori/onmob_head_kepori.dmi index b4631838b75a..1557a2d30c0e 100644 Binary files a/icons/mob/species/kepori/onmob_head_kepori.dmi and b/icons/mob/species/kepori/onmob_head_kepori.dmi differ diff --git a/icons/mob/species/kepori/onmob_suit_kepori.dmi b/icons/mob/species/kepori/onmob_suit_kepori.dmi index 649853ea7280..ae5750dd0558 100644 Binary files a/icons/mob/species/kepori/onmob_suit_kepori.dmi and b/icons/mob/species/kepori/onmob_suit_kepori.dmi differ diff --git a/icons/mob/species/kepori/onmob_uniform_kepori.dmi b/icons/mob/species/kepori/onmob_uniform_kepori.dmi index d6f011cef312..f6d35ec4c795 100644 Binary files a/icons/mob/species/kepori/onmob_uniform_kepori.dmi and b/icons/mob/species/kepori/onmob_uniform_kepori.dmi differ diff --git a/icons/mob/species/misc/digitigrade_shoes.dmi b/icons/mob/species/misc/digitigrade_shoes.dmi index 9d08980b1e58..fb3dd6693471 100644 Binary files a/icons/mob/species/misc/digitigrade_shoes.dmi and b/icons/mob/species/misc/digitigrade_shoes.dmi differ diff --git a/icons/mob/species/misc/digitigrade_suits.dmi b/icons/mob/species/misc/digitigrade_suits.dmi index 8bdb115b0370..b622c59dfa73 100644 Binary files a/icons/mob/species/misc/digitigrade_suits.dmi and b/icons/mob/species/misc/digitigrade_suits.dmi differ diff --git a/icons/mob/species/vox/onmob_back_vox.dmi b/icons/mob/species/vox/onmob_back_vox.dmi index 953ff24a290e..c2000834877e 100644 Binary files a/icons/mob/species/vox/onmob_back_vox.dmi and b/icons/mob/species/vox/onmob_back_vox.dmi differ diff --git a/icons/mob/species/vox/onmob_eyes_vox.dmi b/icons/mob/species/vox/onmob_eyes_vox.dmi index 947496cfb889..1945c69e7fe3 100644 Binary files a/icons/mob/species/vox/onmob_eyes_vox.dmi and b/icons/mob/species/vox/onmob_eyes_vox.dmi differ diff --git a/icons/mob/species/vox/onmob_head_vox.dmi b/icons/mob/species/vox/onmob_head_vox.dmi index c470ee12dbe4..6b150380891f 100644 Binary files a/icons/mob/species/vox/onmob_head_vox.dmi and b/icons/mob/species/vox/onmob_head_vox.dmi differ diff --git a/icons/mob/species/vox/onmob_neck_vox.dmi b/icons/mob/species/vox/onmob_neck_vox.dmi new file mode 100644 index 000000000000..1877ca277c96 Binary files /dev/null and b/icons/mob/species/vox/onmob_neck_vox.dmi differ diff --git a/icons/mob/species/vox/onmob_suit_vox.dmi b/icons/mob/species/vox/onmob_suit_vox.dmi index a7052320af9c..47e2b625c116 100644 Binary files a/icons/mob/species/vox/onmob_suit_vox.dmi and b/icons/mob/species/vox/onmob_suit_vox.dmi differ diff --git a/icons/mob/species/vox/onmob_uniform_vox.dmi b/icons/mob/species/vox/onmob_uniform_vox.dmi index 241b13861b49..04c77c742128 100644 Binary files a/icons/mob/species/vox/onmob_uniform_vox.dmi and b/icons/mob/species/vox/onmob_uniform_vox.dmi differ diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi index 86001423aeba..ec5f14748540 100644 Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ diff --git a/icons/obj/ammo_shotshells.dmi b/icons/obj/ammo_shotshells.dmi index fe37023686bd..55b00cdd0b21 100644 Binary files a/icons/obj/ammo_shotshells.dmi and b/icons/obj/ammo_shotshells.dmi differ diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi index 17bab47dc9ef..68fef79c160b 100644 Binary files a/icons/obj/bureaucracy.dmi and b/icons/obj/bureaucracy.dmi differ diff --git a/icons/obj/chemical/concrete.dmi b/icons/obj/chemical/concrete.dmi new file mode 100644 index 000000000000..26c557e42436 Binary files /dev/null and b/icons/obj/chemical/concrete.dmi differ diff --git a/icons/obj/clothing/back/backpacks.dmi b/icons/obj/clothing/back/backpacks.dmi new file mode 100644 index 000000000000..01e2c1d6923b Binary files /dev/null and b/icons/obj/clothing/back/backpacks.dmi differ diff --git a/icons/obj/clothing/belt_overlays.dmi b/icons/obj/clothing/belt_overlays.dmi index 14af5186ae5c..99887c0a7613 100644 Binary files a/icons/obj/clothing/belt_overlays.dmi and b/icons/obj/clothing/belt_overlays.dmi differ diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi index 20cc5db40a44..d1857dbe878d 100644 Binary files a/icons/obj/clothing/belts.dmi and b/icons/obj/clothing/belts.dmi differ diff --git a/icons/obj/clothing/eyes/eyes.dmi b/icons/obj/clothing/eyes/eyes.dmi new file mode 100644 index 000000000000..63b92986ca50 Binary files /dev/null and b/icons/obj/clothing/eyes/eyes.dmi differ diff --git a/icons/obj/clothing/faction/hardliners/head.dmi b/icons/obj/clothing/faction/hardliners/head.dmi index 5101eeedce9c..75f561897f17 100644 Binary files a/icons/obj/clothing/faction/hardliners/head.dmi and b/icons/obj/clothing/faction/hardliners/head.dmi differ diff --git a/icons/obj/clothing/faction/hardliners/suits.dmi b/icons/obj/clothing/faction/hardliners/suits.dmi index 39da1c952739..0c1cded6bc2a 100644 Binary files a/icons/obj/clothing/faction/hardliners/suits.dmi and b/icons/obj/clothing/faction/hardliners/suits.dmi differ diff --git a/icons/obj/clothing/faction/ngr/head.dmi b/icons/obj/clothing/faction/ngr/head.dmi index d2258c5565dd..92e8a9f45d90 100644 Binary files a/icons/obj/clothing/faction/ngr/head.dmi and b/icons/obj/clothing/faction/ngr/head.dmi differ diff --git a/icons/obj/clothing/faction/ngr/suits.dmi b/icons/obj/clothing/faction/ngr/suits.dmi index 49344c553e03..9c05f154c70c 100644 Binary files a/icons/obj/clothing/faction/ngr/suits.dmi and b/icons/obj/clothing/faction/ngr/suits.dmi differ diff --git a/icons/obj/clothing/flightsuit.dmi b/icons/obj/clothing/flightsuit.dmi deleted file mode 100644 index e08e74db1cec..000000000000 Binary files a/icons/obj/clothing/flightsuit.dmi and /dev/null differ diff --git a/icons/obj/clothing/glasses.dmi b/icons/obj/clothing/glasses.dmi deleted file mode 100644 index 0b7af59b91e4..000000000000 Binary files a/icons/obj/clothing/glasses.dmi and /dev/null differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 402ce131a988..52d9036e0211 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/head/armor.dmi b/icons/obj/clothing/head/armor.dmi index 6757e591c853..8fbb59170268 100644 Binary files a/icons/obj/clothing/head/armor.dmi and b/icons/obj/clothing/head/armor.dmi differ diff --git a/icons/obj/clothing/head/winterhood.dmi b/icons/obj/clothing/head/winterhood.dmi index aa212eb48da2..c89538ccb0b3 100644 Binary files a/icons/obj/clothing/head/winterhood.dmi and b/icons/obj/clothing/head/winterhood.dmi differ diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi index cbe3366557f0..9685db38db1e 100644 Binary files a/icons/obj/clothing/masks.dmi and b/icons/obj/clothing/masks.dmi differ diff --git a/icons/obj/clothing/modsuit/mod_clothing.dmi b/icons/obj/clothing/modsuit/mod_clothing.dmi new file mode 100644 index 000000000000..d2d9e0c72e37 Binary files /dev/null and b/icons/obj/clothing/modsuit/mod_clothing.dmi differ diff --git a/icons/obj/clothing/modsuit/mod_construction.dmi b/icons/obj/clothing/modsuit/mod_construction.dmi new file mode 100644 index 000000000000..a6be94284af8 Binary files /dev/null and b/icons/obj/clothing/modsuit/mod_construction.dmi differ diff --git a/icons/obj/clothing/modsuit/mod_modules.dmi b/icons/obj/clothing/modsuit/mod_modules.dmi new file mode 100644 index 000000000000..69affa3fa499 Binary files /dev/null and b/icons/obj/clothing/modsuit/mod_modules.dmi differ diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi index 5a162a969132..00e1da5d54ea 100644 Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index d325c5098a73..e3ceffdb3329 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/clothing/suits/hooded.dmi b/icons/obj/clothing/suits/hooded.dmi index 6d449550ad43..7c3a70a0624c 100644 Binary files a/icons/obj/clothing/suits/hooded.dmi and b/icons/obj/clothing/suits/hooded.dmi differ diff --git a/icons/obj/food/ration.dmi b/icons/obj/food/ration.dmi index 5bcf1f2b490b..42cc013cc140 100644 Binary files a/icons/obj/food/ration.dmi and b/icons/obj/food/ration.dmi differ diff --git a/icons/obj/food/soupsalad.dmi b/icons/obj/food/soupsalad.dmi index 1205fd888adc..d1baf327dd89 100644 Binary files a/icons/obj/food/soupsalad.dmi and b/icons/obj/food/soupsalad.dmi differ diff --git a/icons/obj/guncase.dmi b/icons/obj/guncase.dmi index 4941b965f2f8..83b5292a5cfd 100644 Binary files a/icons/obj/guncase.dmi and b/icons/obj/guncase.dmi differ diff --git a/icons/obj/guncase_48x32.dmi b/icons/obj/guncase_48x32.dmi deleted file mode 100644 index b5dc20bc64e5..000000000000 Binary files a/icons/obj/guncase_48x32.dmi and /dev/null differ diff --git a/icons/obj/guns/48x32guns.dmi b/icons/obj/guns/48x32guns.dmi index 960b9ec448af..708882c163aa 100644 Binary files a/icons/obj/guns/48x32guns.dmi and b/icons/obj/guns/48x32guns.dmi differ diff --git a/icons/obj/guns/attachments.dmi b/icons/obj/guns/attachments.dmi index 29ae084d5759..c06a2c7e109c 100644 Binary files a/icons/obj/guns/attachments.dmi and b/icons/obj/guns/attachments.dmi differ diff --git a/icons/obj/guns/manufacturer/clip_lanchester/48x32.dmi b/icons/obj/guns/manufacturer/clip_lanchester/48x32.dmi index d87a6f3c8433..e0567289abf6 100644 Binary files a/icons/obj/guns/manufacturer/clip_lanchester/48x32.dmi and b/icons/obj/guns/manufacturer/clip_lanchester/48x32.dmi differ diff --git a/icons/obj/guns/manufacturer/clip_lanchester/lefthand.dmi b/icons/obj/guns/manufacturer/clip_lanchester/lefthand.dmi index 7673c2f6d642..78e16bad6f98 100644 Binary files a/icons/obj/guns/manufacturer/clip_lanchester/lefthand.dmi and b/icons/obj/guns/manufacturer/clip_lanchester/lefthand.dmi differ diff --git a/icons/obj/guns/manufacturer/clip_lanchester/onmob.dmi b/icons/obj/guns/manufacturer/clip_lanchester/onmob.dmi index 4f9158d2d36d..fea6178e903e 100644 Binary files a/icons/obj/guns/manufacturer/clip_lanchester/onmob.dmi and b/icons/obj/guns/manufacturer/clip_lanchester/onmob.dmi differ diff --git a/icons/obj/guns/manufacturer/clip_lanchester/righthand.dmi b/icons/obj/guns/manufacturer/clip_lanchester/righthand.dmi index 4549f30f4ff9..2d5103ec36cc 100644 Binary files a/icons/obj/guns/manufacturer/clip_lanchester/righthand.dmi and b/icons/obj/guns/manufacturer/clip_lanchester/righthand.dmi differ diff --git a/icons/obj/guns/manufacturer/frontier_import/48x32.dmi b/icons/obj/guns/manufacturer/frontier_import/48x32.dmi index 149793c43c38..be95cfa90c14 100644 Binary files a/icons/obj/guns/manufacturer/frontier_import/48x32.dmi and b/icons/obj/guns/manufacturer/frontier_import/48x32.dmi differ diff --git a/icons/obj/guns/manufacturer/frontier_import/lefthand.dmi b/icons/obj/guns/manufacturer/frontier_import/lefthand.dmi index 33b3381bdfe0..e34bf3995dfd 100644 Binary files a/icons/obj/guns/manufacturer/frontier_import/lefthand.dmi and b/icons/obj/guns/manufacturer/frontier_import/lefthand.dmi differ diff --git a/icons/obj/guns/manufacturer/frontier_import/onmob.dmi b/icons/obj/guns/manufacturer/frontier_import/onmob.dmi index a0706579ccb5..e0b05e0ec63f 100644 Binary files a/icons/obj/guns/manufacturer/frontier_import/onmob.dmi and b/icons/obj/guns/manufacturer/frontier_import/onmob.dmi differ diff --git a/icons/obj/guns/manufacturer/frontier_import/righthand.dmi b/icons/obj/guns/manufacturer/frontier_import/righthand.dmi index 73945b8524df..30eeaa12d4e9 100644 Binary files a/icons/obj/guns/manufacturer/frontier_import/righthand.dmi and b/icons/obj/guns/manufacturer/frontier_import/righthand.dmi differ diff --git a/icons/obj/guns/manufacturer/hunterspride/48x32.dmi b/icons/obj/guns/manufacturer/hunterspride/48x32.dmi index 19b4202da78a..70bbef00e1af 100644 Binary files a/icons/obj/guns/manufacturer/hunterspride/48x32.dmi and b/icons/obj/guns/manufacturer/hunterspride/48x32.dmi differ diff --git a/icons/obj/guns/manufacturer/hunterspride/lefthand.dmi b/icons/obj/guns/manufacturer/hunterspride/lefthand.dmi index 4fb5eca5c011..6471cef8b5eb 100644 Binary files a/icons/obj/guns/manufacturer/hunterspride/lefthand.dmi and b/icons/obj/guns/manufacturer/hunterspride/lefthand.dmi differ diff --git a/icons/obj/guns/manufacturer/hunterspride/onmob.dmi b/icons/obj/guns/manufacturer/hunterspride/onmob.dmi index 8911c8fbb68f..361899e3c523 100644 Binary files a/icons/obj/guns/manufacturer/hunterspride/onmob.dmi and b/icons/obj/guns/manufacturer/hunterspride/onmob.dmi differ diff --git a/icons/obj/guns/manufacturer/hunterspride/righthand.dmi b/icons/obj/guns/manufacturer/hunterspride/righthand.dmi index 043167735662..fbf4f7cf3fbf 100644 Binary files a/icons/obj/guns/manufacturer/hunterspride/righthand.dmi and b/icons/obj/guns/manufacturer/hunterspride/righthand.dmi differ diff --git a/icons/obj/guns/manufacturer/inteq/48x32.dmi b/icons/obj/guns/manufacturer/inteq/48x32.dmi index e7deb0f12ce0..021ff448ecb5 100644 Binary files a/icons/obj/guns/manufacturer/inteq/48x32.dmi and b/icons/obj/guns/manufacturer/inteq/48x32.dmi differ diff --git a/icons/obj/guns/manufacturer/inteq/lefthand.dmi b/icons/obj/guns/manufacturer/inteq/lefthand.dmi index 19335eb44ff9..84707c2e5cdc 100644 Binary files a/icons/obj/guns/manufacturer/inteq/lefthand.dmi and b/icons/obj/guns/manufacturer/inteq/lefthand.dmi differ diff --git a/icons/obj/guns/manufacturer/inteq/onmob.dmi b/icons/obj/guns/manufacturer/inteq/onmob.dmi index f402ffd24e2c..a33746030b43 100644 Binary files a/icons/obj/guns/manufacturer/inteq/onmob.dmi and b/icons/obj/guns/manufacturer/inteq/onmob.dmi differ diff --git a/icons/obj/guns/manufacturer/inteq/righthand.dmi b/icons/obj/guns/manufacturer/inteq/righthand.dmi index 33d087f394f1..481731992655 100644 Binary files a/icons/obj/guns/manufacturer/inteq/righthand.dmi and b/icons/obj/guns/manufacturer/inteq/righthand.dmi differ diff --git a/icons/obj/guns/manufacturer/scarborough/48x32.dmi b/icons/obj/guns/manufacturer/scarborough/48x32.dmi index 361448b49a35..87d4d44caeb1 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 8d184d907db6..50cf4e8f0470 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 5127ecfed566..bc0e8e0d7c62 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 5dbfb0acfc25..bfa740f26549 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 000000000000..80ddcbad3c50 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 000000000000..097eda46280e 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 000000000000..4a5a4ba7b32a 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 000000000000..0a9759f4eea1 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 ab051d8a21bb..13ee4f9bfb1f 100644 Binary files a/icons/obj/guns/projectile.dmi and b/icons/obj/guns/projectile.dmi differ diff --git a/icons/obj/improvised.dmi b/icons/obj/improvised.dmi index 43fc38a4be59..20890be4cbc1 100644 Binary files a/icons/obj/improvised.dmi and b/icons/obj/improvised.dmi differ diff --git a/icons/obj/item/gear_packs.dmi b/icons/obj/item/gear_packs.dmi new file mode 100644 index 000000000000..76fb94bd4ff3 Binary files /dev/null and b/icons/obj/item/gear_packs.dmi differ diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi new file mode 100644 index 000000000000..e38eb539cf4d Binary files /dev/null and b/icons/obj/items.dmi differ diff --git a/icons/obj/items_and_weapons.dmi b/icons/obj/items_and_weapons.dmi deleted file mode 100644 index a0ceaebd8383..000000000000 Binary files a/icons/obj/items_and_weapons.dmi and /dev/null differ diff --git a/icons/obj/machines/mining_machines.dmi b/icons/obj/machines/mining_machines.dmi index 96151f074e11..bcd6235d26a6 100644 Binary files a/icons/obj/machines/mining_machines.dmi and b/icons/obj/machines/mining_machines.dmi differ diff --git a/icons/obj/machines/suit_storage.dmi b/icons/obj/machines/suit_storage.dmi index a40d04f500c6..d58a9ef3c079 100644 Binary files a/icons/obj/machines/suit_storage.dmi and b/icons/obj/machines/suit_storage.dmi differ diff --git a/icons/obj/mining.dmi b/icons/obj/mining.dmi index 337e3bf6d8da..efffc5cebb4a 100644 Binary files a/icons/obj/mining.dmi and b/icons/obj/mining.dmi differ diff --git a/icons/obj/mysterybox.dmi b/icons/obj/mysterybox.dmi deleted file mode 100644 index 0023dc066376..000000000000 Binary files a/icons/obj/mysterybox.dmi and /dev/null differ diff --git a/icons/obj/nutanks.dmi b/icons/obj/nutanks.dmi index 4365bdb86771..94e4c7288512 100644 Binary files a/icons/obj/nutanks.dmi and b/icons/obj/nutanks.dmi differ diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi index 1b156b9294f9..8479c100f1b0 100644 Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi index 89f94e16a65a..736a25d57f5f 100644 Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index df2add959648..5353677357cf 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ diff --git a/icons/obj/structures.dmi b/icons/obj/structures.dmi index f5f04901af2a..af3c5cd4be2e 100644 Binary files a/icons/obj/structures.dmi and b/icons/obj/structures.dmi differ diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index 8f2566a98f8a..816d3671a8d9 100644 Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ diff --git a/icons/obj/toy.dmi b/icons/obj/toy.dmi index 78aebb9416c4..2b95535dcb7b 100644 Binary files a/icons/obj/toy.dmi and b/icons/obj/toy.dmi differ diff --git a/icons/obj/transforming_energy.dmi b/icons/obj/transforming_energy.dmi deleted file mode 100644 index ff2f99832d1c..000000000000 Binary files a/icons/obj/transforming_energy.dmi and /dev/null differ diff --git a/icons/obj/vehicles.dmi b/icons/obj/vehicles.dmi index 87cef669faf0..fdefd87860b5 100644 Binary files a/icons/obj/vehicles.dmi and b/icons/obj/vehicles.dmi differ diff --git a/icons/obj/weapon/axe.dmi b/icons/obj/weapon/axe.dmi new file mode 100644 index 000000000000..0ff8a4364833 Binary files /dev/null and b/icons/obj/weapon/axe.dmi differ diff --git a/icons/obj/weapon/baton.dmi b/icons/obj/weapon/baton.dmi new file mode 100644 index 000000000000..c39a8b4e073b Binary files /dev/null and b/icons/obj/weapon/baton.dmi differ diff --git a/icons/obj/weapon/blunt.dmi b/icons/obj/weapon/blunt.dmi new file mode 100644 index 000000000000..480515bbd794 Binary files /dev/null and b/icons/obj/weapon/blunt.dmi differ diff --git a/icons/obj/weapon/energy.dmi b/icons/obj/weapon/energy.dmi new file mode 100644 index 000000000000..5100d715923a Binary files /dev/null and b/icons/obj/weapon/energy.dmi differ diff --git a/icons/obj/item/knife.dmi b/icons/obj/weapon/knife.dmi similarity index 100% rename from icons/obj/item/knife.dmi rename to icons/obj/weapon/knife.dmi diff --git a/icons/obj/weapon/misc.dmi b/icons/obj/weapon/misc.dmi new file mode 100644 index 000000000000..9eabb2c3eaf7 Binary files /dev/null and b/icons/obj/weapon/misc.dmi differ diff --git a/icons/obj/weapon/spear.dmi b/icons/obj/weapon/spear.dmi new file mode 100644 index 000000000000..98b3761430ed Binary files /dev/null and b/icons/obj/weapon/spear.dmi differ diff --git a/icons/obj/weapon/sword.dmi b/icons/obj/weapon/sword.dmi new file mode 100644 index 000000000000..dc8fd8fd5d7d Binary files /dev/null and b/icons/obj/weapon/sword.dmi differ diff --git a/icons/stamp_icons/large_stamp-biodynamics.png b/icons/stamp_icons/large_stamp-biodynamics.png new file mode 100644 index 000000000000..0d09b4f37c00 Binary files /dev/null and b/icons/stamp_icons/large_stamp-biodynamics.png differ diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi index 398d5550f810..1dbb3a101fae 100644 Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ diff --git a/shiptest.dme b/shiptest.dme index c0d9a7d4df66..187540e66a26 100644 --- a/shiptest.dme +++ b/shiptest.dme @@ -25,6 +25,7 @@ #include "code\__DEFINES\_tick.dm" #include "code\__DEFINES\access.dm" #include "code\__DEFINES\achievements.dm" +#include "code\__DEFINES\actions.dm" #include "code\__DEFINES\admin.dm" #include "code\__DEFINES\anomalies.dm" #include "code\__DEFINES\antagonists.dm" @@ -42,13 +43,13 @@ #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" #include "code\__DEFINES\construction.dm" #include "code\__DEFINES\contracts.dm" #include "code\__DEFINES\cooldowns.dm" -#include "code\__DEFINES\cult.dm" #include "code\__DEFINES\directional.dm" #include "code\__DEFINES\diseases.dm" #include "code\__DEFINES\DNA.dm" @@ -66,6 +67,7 @@ #include "code\__DEFINES\food.dm" #include "code\__DEFINES\footsteps.dm" #include "code\__DEFINES\forensics.dm" +#include "code\__DEFINES\generators.dm" #include "code\__DEFINES\guns.dm" #include "code\__DEFINES\hud.dm" #include "code\__DEFINES\icon_smoothing.dm" @@ -94,6 +96,7 @@ #include "code\__DEFINES\menu.dm" #include "code\__DEFINES\misc.dm" #include "code\__DEFINES\mobs.dm" +#include "code\__DEFINES\mod.dm" #include "code\__DEFINES\monkeys.dm" #include "code\__DEFINES\move_force.dm" #include "code\__DEFINES\movement.dm" @@ -103,11 +106,13 @@ #include "code\__DEFINES\obj_flags.dm" #include "code\__DEFINES\overmap.dm" #include "code\__DEFINES\paper.dm" +#include "code\__DEFINES\particles.dm" #include "code\__DEFINES\pinpointers.dm" #include "code\__DEFINES\pipe_construction.dm" #include "code\__DEFINES\plumbing.dm" #include "code\__DEFINES\power.dm" #include "code\__DEFINES\preferences.dm" +#include "code\__DEFINES\processing.dm" #include "code\__DEFINES\procpath.dm" #include "code\__DEFINES\profile.dm" #include "code\__DEFINES\projectiles.dm" @@ -155,13 +160,30 @@ #include "code\__DEFINES\wires.dm" #include "code\__DEFINES\dcs\flags.dm" #include "code\__DEFINES\dcs\helpers.dm" -#include "code\__DEFINES\dcs\signals.dm" +#include "code\__DEFINES\dcs\signals\signals.dm" +#include "code\__DEFINES\dcs\signals\signals_mod.dm" +#include "code\__DEFINES\dcs\signals\signals_reagent.dm" +#include "code\__DEFINES\dcs\signals\signals_ship.dm" +#include "code\__DEFINES\dcs\signals\signals_storage.dm" +#include "code\__DEFINES\dcs\signals\signals_mob\signals_mob_carbon.dm" +#include "code\__DEFINES\dcs\signals\signals_obj\signals_object.dm" +#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" +#include "code\__DEFINES\dcs\signals\signals_obj\signals_machine\signals_machinery.dm" +#include "code\__DEFINES\dcs\signals\signals_obj\signals_machine\signals_supermatter.dm" #include "code\__HELPERS\_auxtools_api.dm" #include "code\__HELPERS\_lists.dm" #include "code\__HELPERS\_logging.dm" +#include "code\__HELPERS\_planes.dm" #include "code\__HELPERS\_string_lists.dm" #include "code\__HELPERS\areas.dm" #include "code\__HELPERS\AStar.dm" +#include "code\__HELPERS\atoms.dm" #include "code\__HELPERS\bindings.dm" #include "code\__HELPERS\bitflag_lists.dm" #include "code\__HELPERS\chat.dm" @@ -173,12 +195,14 @@ #include "code\__HELPERS\files.dm" #include "code\__HELPERS\filters.dm" #include "code\__HELPERS\game.dm" +#include "code\__HELPERS\generators.dm" #include "code\__HELPERS\global_lists.dm" #include "code\__HELPERS\heap.dm" #include "code\__HELPERS\icon_smoothing.dm" #include "code\__HELPERS\icons.dm" #include "code\__HELPERS\level_traits.dm" #include "code\__HELPERS\lighting.dm" +#include "code\__HELPERS\maths.dm" #include "code\__HELPERS\matrices.dm" #include "code\__HELPERS\mobs.dm" #include "code\__HELPERS\mouse_control.dm" @@ -248,7 +272,6 @@ #include "code\_onclick\item_attack.dm" #include "code\_onclick\observer.dm" #include "code\_onclick\other_mobs.dm" -#include "code\_onclick\overmind.dm" #include "code\_onclick\pai.dm" #include "code\_onclick\telekinesis.dm" #include "code\_onclick\hud\_defines.dm" @@ -257,11 +280,8 @@ #include "code\_onclick\hud\alert.dm" #include "code\_onclick\hud\alien.dm" #include "code\_onclick\hud\alien_larva.dm" -#include "code\_onclick\hud\blob_overmind.dm" -#include "code\_onclick\hud\blobbernauthud.dm" #include "code\_onclick\hud\constructs.dm" #include "code\_onclick\hud\credits.dm" -#include "code\_onclick\hud\devil.dm" #include "code\_onclick\hud\drones.dm" #include "code\_onclick\hud\fullscreen.dm" #include "code\_onclick\hud\generic_dextrous.dm" @@ -285,7 +305,6 @@ #include "code\_onclick\hud\screen_objects.dm" #include "code\_onclick\hud\screentip.dm" #include "code\_onclick\hud\storage.dm" -#include "code\_onclick\hud\swarmer.dm" #include "code\controllers\admin.dm" #include "code\controllers\controller.dm" #include "code\controllers\failsafe.dm" @@ -321,6 +340,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" @@ -348,6 +368,7 @@ #include "code\controllers\subsystem\persistence.dm" #include "code\controllers\subsystem\physics.dm" #include "code\controllers\subsystem\ping.dm" +#include "code\controllers\subsystem\points_of_interest.dm" #include "code\controllers\subsystem\profiler.dm" #include "code\controllers\subsystem\radiation.dm" #include "code\controllers\subsystem\radio.dm" @@ -480,7 +501,6 @@ #include "code\datums\components\deployable.dm" #include "code\datums\components\dooropendeathproc.dm" #include "code\datums\components\earprotection.dm" -#include "code\datums\components\edible.dm" #include "code\datums\components\edit_complainer.dm" #include "code\datums\components\embedded.dm" #include "code\datums\components\empprotection.dm" @@ -496,6 +516,7 @@ #include "code\datums\components\hot_ice.dm" #include "code\datums\components\igniter.dm" #include "code\datums\components\infective.dm" +#include "code\datums\components\jetpack.dm" #include "code\datums\components\jousting.dm" #include "code\datums\components\knockback.dm" #include "code\datums\components\knockoff.dm" @@ -523,11 +544,11 @@ #include "code\datums\components\remote_materials.dm" #include "code\datums\components\riding.dm" #include "code\datums\components\rotation.dm" +#include "code\datums\components\shielded.dm" #include "code\datums\components\shrink.dm" #include "code\datums\components\sitcomlaughter.dm" #include "code\datums\components\sizzle.dm" #include "code\datums\components\slippery.dm" -#include "code\datums\components\soulstoned.dm" #include "code\datums\components\spill.dm" #include "code\datums\components\spooky.dm" #include "code\datums\components\squeak.dm" @@ -552,12 +573,13 @@ #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" #include "code\datums\components\fantasy\prefixes.dm" #include "code\datums\components\fantasy\suffixes.dm" +#include "code\datums\components\food\edible.dm" +#include "code\datums\components\food\food_storage.dm" #include "code\datums\components\plumbing\_plumbing.dm" #include "code\datums\components\plumbing\chemical_acclimator.dm" #include "code\datums\components\plumbing\filter.dm" @@ -640,18 +662,21 @@ #include "code\datums\elements\cleaning.dm" #include "code\datums\elements\connect_loc.dm" #include "code\datums\elements\digitalcamo.dm" -#include "code\datums\elements\dunkable.dm" #include "code\datums\elements\earhealing.dm" #include "code\datums\elements\embed.dm" +#include "code\datums\elements\empprotection.dm" #include "code\datums\elements\firestacker.dm" #include "code\datums\elements\forced_gravity.dm" #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\point_of_interest.dm" #include "code\datums\elements\renamemob.dm" #include "code\datums\elements\selfknockback.dm" #include "code\datums\elements\snail_crawl.dm" #include "code\datums\elements\squish.dm" +#include "code\datums\elements\tool_bang.dm" #include "code\datums\elements\tool_flash.dm" #include "code\datums\elements\turf_transparency.dm" #include "code\datums\elements\undertile.dm" @@ -661,6 +686,9 @@ #include "code\datums\elements\world_icon.dm" #include "code\datums\elements\decals\_decals.dm" #include "code\datums\elements\decals\blood.dm" +#include "code\datums\elements\food\dunkable.dm" +#include "code\datums\elements\food\food_trash.dm" +#include "code\datums\elements\food\processable.dm" #include "code\datums\helper_datums\events.dm" #include "code\datums\helper_datums\getrev.dm" #include "code\datums\helper_datums\icon_snapshot.dm" @@ -710,7 +738,6 @@ #include "code\datums\materials\_material.dm" #include "code\datums\materials\basemats.dm" #include "code\datums\materials\meat.dm" -#include "code\datums\materials\pizza.dm" #include "code\datums\mood_events\_mood_event.dm" #include "code\datums\mood_events\beauty_events.dm" #include "code\datums\mood_events\drink_events.dm" @@ -790,6 +817,7 @@ #include "code\datums\wires\fax.dm" #include "code\datums\wires\microwave.dm" #include "code\datums\wires\mines.dm" +#include "code\datums\wires\mod.dm" #include "code\datums\wires\mulebot.dm" #include "code\datums\wires\particle_accelerator.dm" #include "code\datums\wires\r_n_d.dm" @@ -814,11 +842,9 @@ #include "code\game\area\ai_monitored.dm" #include "code\game\area\areas.dm" #include "code\game\area\ship_areas.dm" -#include "code\game\area\Space_Station_13_areas.dm" #include "code\game\area\areas\away_content.dm" #include "code\game\area\areas\centcom.dm" #include "code\game\area\areas\outpost.dm" -#include "code\game\area\areas\shuttles.dm" #include "code\game\area\areas\ruins\_ruins.dm" #include "code\game\area\areas\ruins\beachplanet.dm" #include "code\game\area\areas\ruins\icemoon.dm" @@ -829,6 +855,7 @@ #include "code\game\area\areas\ruins\space.dm" #include "code\game\area\areas\ruins\templates.dm" #include "code\game\area\areas\ruins\wasteplanet.dm" +#include "code\game\atom\atom_orbit.dm" #include "code\game\gamemodes\events.dm" #include "code\game\gamemodes\game_mode.dm" #include "code\game\gamemodes\objective.dm" @@ -839,18 +866,12 @@ #include "code\game\gamemodes\clown_ops\bananium_bomb.dm" #include "code\game\gamemodes\clown_ops\clown_ops.dm" #include "code\game\gamemodes\clown_ops\clown_weapons.dm" -#include "code\game\gamemodes\cult\cult.dm" -#include "code\game\gamemodes\devil\devil_game_mode.dm" -#include "code\game\gamemodes\devil\game_mode.dm" -#include "code\game\gamemodes\devil\objectives.dm" -#include "code\game\gamemodes\devil\devil_agent\devil_agent.dm" #include "code\game\gamemodes\dynamic\dynamic.dm" #include "code\game\gamemodes\dynamic\dynamic_rulesets.dm" #include "code\game\gamemodes\dynamic\dynamic_rulesets_latejoin.dm" #include "code\game\gamemodes\dynamic\dynamic_rulesets_midround.dm" #include "code\game\gamemodes\dynamic\dynamic_rulesets_roundstart.dm" #include "code\game\gamemodes\extended\extended.dm" -#include "code\game\gamemodes\meteor\meteor.dm" #include "code\game\gamemodes\meteor\meteors.dm" #include "code\game\gamemodes\nuclear\nuclear.dm" #include "code\game\gamemodes\sandbox\airlock_maker.dm" @@ -909,7 +930,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" @@ -1096,6 +1116,12 @@ #include "code\game\objects\effects\effect_system\effects_smoke.dm" #include "code\game\objects\effects\effect_system\effects_sparks.dm" #include "code\game\objects\effects\effect_system\effects_water.dm" +#include "code\game\objects\effects\particles\acid.dm" +#include "code\game\objects\effects\particles\fire.dm" +#include "code\game\objects\effects\particles\misc.dm" +#include "code\game\objects\effects\particles\slime.dm" +#include "code\game\objects\effects\particles\smoke.dm" +#include "code\game\objects\effects\particles\water.dm" #include "code\game\objects\effects\spawners\bombspawner.dm" #include "code\game\objects\effects\spawners\bundle.dm" #include "code\game\objects\effects\spawners\gibspawner.dm" @@ -1126,7 +1152,6 @@ #include "code\game\objects\items\cardboard_cutouts.dm" #include "code\game\objects\items\cards_ids.dm" #include "code\game\objects\items\cash.dm" -#include "code\game\objects\items\chainsaw.dm" #include "code\game\objects\items\charter.dm" #include "code\game\objects\items\chromosome.dm" #include "code\game\objects\items\chrono_eraser.dm" @@ -1146,19 +1171,16 @@ #include "code\game\objects\items\dna_injector.dm" #include "code\game\objects\items\documents.dm" #include "code\game\objects\items\door_seal.dm" -#include "code\game\objects\items\dualsaber.dm" #include "code\game\objects\items\dyekit.dm" #include "code\game\objects\items\eightball.dm" -#include "code\game\objects\items\energyhalberd.dm" #include "code\game\objects\items\etherealdiscoball.dm" #include "code\game\objects\items\extinguisher.dm" -#include "code\game\objects\items\fireaxe.dm" #include "code\game\objects\items\flamethrower.dm" +#include "code\game\objects\items\gear_packs.dm" #include "code\game\objects\items\gift.dm" #include "code\game\objects\items\granters.dm" #include "code\game\objects\items\handcuffs.dm" #include "code\game\objects\items\holosign_creator.dm" -#include "code\game\objects\items\holy_weapons.dm" #include "code\game\objects\items\hot_potato.dm" #include "code\game\objects\items\hourglass.dm" #include "code\game\objects\items\inducer.dm" @@ -1171,10 +1193,8 @@ #include "code\game\objects\items\paiwire.dm" #include "code\game\objects\items\pet_carrier.dm" #include "code\game\objects\items\pinpointer.dm" -#include "code\game\objects\items\pitchfork.dm" #include "code\game\objects\items\plushes.dm" #include "code\game\objects\items\pneumaticCannon.dm" -#include "code\game\objects\items\powerfist.dm" #include "code\game\objects\items\puzzle_pieces.dm" #include "code\game\objects\items\RCD.dm" #include "code\game\objects\items\RCL.dm" @@ -1188,20 +1208,15 @@ #include "code\game\objects\items\shrapnel.dm" #include "code\game\objects\items\shuttle_creator.dm" #include "code\game\objects\items\signs.dm" -#include "code\game\objects\items\singularityhammer.dm" -#include "code\game\objects\items\spear.dm" -#include "code\game\objects\items\stunbaton.dm" #include "code\game\objects\items\survery_handheld.dm" #include "code\game\objects\items\taster.dm" #include "code\game\objects\items\teleportation.dm" -#include "code\game\objects\items\teleprod.dm" #include "code\game\objects\items\theft_tools.dm" #include "code\game\objects\items\toy_mechs.dm" #include "code\game\objects\items\toys.dm" #include "code\game\objects\items\trash.dm" #include "code\game\objects\items\vending_items.dm" #include "code\game\objects\items\wayfinding.dm" -#include "code\game\objects\items\weaponry.dm" #include "code\game\objects\items\attachments\_attachment.dm" #include "code\game\objects\items\attachments\bayonet.dm" #include "code\game\objects\items\attachments\laser_sight.dm" @@ -1234,7 +1249,6 @@ #include "code\game\objects\items\devices\powersink.dm" #include "code\game\objects\items\devices\pressureplates.dm" #include "code\game\objects\items\devices\quantum_keycard.dm" -#include "code\game\objects\items\devices\reverse_bear_trap.dm" #include "code\game\objects\items\devices\scanners.dm" #include "code\game\objects\items\devices\sensor_device.dm" #include "code\game\objects\items\devices\spyglasses.dm" @@ -1252,6 +1266,10 @@ #include "code\game\objects\items\devices\radio\headset.dm" #include "code\game\objects\items\devices\radio\intercom.dm" #include "code\game\objects\items\devices\radio\radio.dm" +#include "code\game\objects\items\food\_food.dm" +#include "code\game\objects\items\food\bread.dm" +#include "code\game\objects\items\food\cake.dm" +#include "code\game\objects\items\food\spaghetti.dm" #include "code\game\objects\items\grenades\antigravity.dm" #include "code\game\objects\items\grenades\chem_grenade.dm" #include "code\game\objects\items\grenades\clusterbuster.dm" @@ -1286,9 +1304,20 @@ #include "code\game\objects\items\implants\implanter.dm" #include "code\game\objects\items\implants\implantpad.dm" #include "code\game\objects\items\implants\implantuplink.dm" +#include "code\game\objects\items\melee\chainsaw.dm" +#include "code\game\objects\items\melee\dualsaber.dm" #include "code\game\objects\items\melee\energy.dm" +#include "code\game\objects\items\melee\energyhalberd.dm" +#include "code\game\objects\items\melee\fireaxe.dm" +#include "code\game\objects\items\melee\knife.dm" #include "code\game\objects\items\melee\misc.dm" +#include "code\game\objects\items\melee\powerfist.dm" +#include "code\game\objects\items\melee\spear.dm" +#include "code\game\objects\items\melee\stunbaton.dm" +#include "code\game\objects\items\melee\sword.dm" +#include "code\game\objects\items\melee\teleprod.dm" #include "code\game\objects\items\melee\transforming.dm" +#include "code\game\objects\items\melee\weaponry.dm" #include "code\game\objects\items\robot\ai_upgrades.dm" #include "code\game\objects\items\robot\robot_items.dm" #include "code\game\objects\items\robot\robot_parts.dm" @@ -1347,6 +1376,8 @@ #include "code\game\objects\structures\artstuff.dm" #include "code\game\objects\structures\barsigns.dm" #include "code\game\objects\structures\bedsheet_bin.dm" +#include "code\game\objects\structures\cabinet.dm" +#include "code\game\objects\structures\cabinet_types.dm" #include "code\game\objects\structures\catwalk.dm" #include "code\game\objects\structures\crateshelf.dm" #include "code\game\objects\structures\curtains.dm" @@ -1360,7 +1391,6 @@ #include "code\game\objects\structures\extinguisher.dm" #include "code\game\objects\structures\false_walls.dm" #include "code\game\objects\structures\fence.dm" -#include "code\game\objects\structures\fireaxe.dm" #include "code\game\objects\structures\fireplace.dm" #include "code\game\objects\structures\flora.dm" #include "code\game\objects\structures\fluff.dm" @@ -1444,6 +1474,7 @@ #include "code\game\objects\structures\crates_lockers\closets\secure\security.dm" #include "code\game\objects\structures\crates_lockers\crates\bins.dm" #include "code\game\objects\structures\crates_lockers\crates\critter.dm" +#include "code\game\objects\structures\crates_lockers\crates\graves.dm" #include "code\game\objects\structures\crates_lockers\crates\large.dm" #include "code\game\objects\structures\crates_lockers\crates\secure.dm" #include "code\game\objects\structures\crates_lockers\crates\wooden.dm" @@ -1462,6 +1493,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" @@ -1622,34 +1654,6 @@ #include "code\modules\antagonists\abductor\machinery\experiment.dm" #include "code\modules\antagonists\abductor\machinery\pad.dm" #include "code\modules\antagonists\ashwalker\ashwalker.dm" -#include "code\modules\antagonists\blob\blob.dm" -#include "code\modules\antagonists\blob\blob_mobs.dm" -#include "code\modules\antagonists\blob\blob_report.dm" -#include "code\modules\antagonists\blob\overmind.dm" -#include "code\modules\antagonists\blob\powers.dm" -#include "code\modules\antagonists\blob\blobstrains\_blobstrain.dm" -#include "code\modules\antagonists\blob\blobstrains\_reagent.dm" -#include "code\modules\antagonists\blob\blobstrains\blazing_oil.dm" -#include "code\modules\antagonists\blob\blobstrains\cryogenic_poison.dm" -#include "code\modules\antagonists\blob\blobstrains\debris_devourer.dm" -#include "code\modules\antagonists\blob\blobstrains\distributed_neurons.dm" -#include "code\modules\antagonists\blob\blobstrains\electromagnetic_web.dm" -#include "code\modules\antagonists\blob\blobstrains\energized_jelly.dm" -#include "code\modules\antagonists\blob\blobstrains\explosive_lattice.dm" -#include "code\modules\antagonists\blob\blobstrains\multiplex.dm" -#include "code\modules\antagonists\blob\blobstrains\networked_fibers.dm" -#include "code\modules\antagonists\blob\blobstrains\pressurized_slime.dm" -#include "code\modules\antagonists\blob\blobstrains\reactive_spines.dm" -#include "code\modules\antagonists\blob\blobstrains\regenerative_materia.dm" -#include "code\modules\antagonists\blob\blobstrains\replicating_foam.dm" -#include "code\modules\antagonists\blob\blobstrains\shifting_fragments.dm" -#include "code\modules\antagonists\blob\blobstrains\synchronous_mesh.dm" -#include "code\modules\antagonists\blob\structures\_blob.dm" -#include "code\modules\antagonists\blob\structures\core.dm" -#include "code\modules\antagonists\blob\structures\factory.dm" -#include "code\modules\antagonists\blob\structures\node.dm" -#include "code\modules\antagonists\blob\structures\resource.dm" -#include "code\modules\antagonists\blob\structures\shield.dm" #include "code\modules\antagonists\blood_contract\blood_contract.dm" #include "code\modules\antagonists\borer\borer.dm" #include "code\modules\antagonists\borer\borer_chems.dm" @@ -1684,21 +1688,6 @@ #include "code\modules\antagonists\changeling\powers\strained_muscles.dm" #include "code\modules\antagonists\changeling\powers\tiny_prick.dm" #include "code\modules\antagonists\changeling\powers\transform.dm" -#include "code\modules\antagonists\cult\blood_magic.dm" -#include "code\modules\antagonists\cult\cult.dm" -#include "code\modules\antagonists\cult\cult_comms.dm" -#include "code\modules\antagonists\cult\cult_items.dm" -#include "code\modules\antagonists\cult\cult_structures.dm" -#include "code\modules\antagonists\cult\cult_turf_overlay.dm" -#include "code\modules\antagonists\cult\ritual.dm" -#include "code\modules\antagonists\cult\rune_spawn_action.dm" -#include "code\modules\antagonists\cult\runes.dm" -#include "code\modules\antagonists\devil\devil.dm" -#include "code\modules\antagonists\devil\imp\imp.dm" -#include "code\modules\antagonists\devil\sintouched\objectives.dm" -#include "code\modules\antagonists\devil\sintouched\sintouched.dm" -#include "code\modules\antagonists\devil\true_devil\_true_devil.dm" -#include "code\modules\antagonists\devil\true_devil\inventory.dm" #include "code\modules\antagonists\disease\disease_abilities.dm" #include "code\modules\antagonists\disease\disease_datum.dm" #include "code\modules\antagonists\disease\disease_disease.dm" @@ -1737,8 +1726,6 @@ #include "code\modules\antagonists\slaughter\slaughterevent.dm" #include "code\modules\antagonists\space_dragon\space_dragon.dm" #include "code\modules\antagonists\survivalist\survivalist.dm" -#include "code\modules\antagonists\swarmer\swarmer.dm" -#include "code\modules\antagonists\swarmer\swarmer_event.dm" #include "code\modules\antagonists\traitor\datum_traitor.dm" #include "code\modules\antagonists\traitor\syndicate_contract.dm" #include "code\modules\antagonists\traitor\equipment\contractor.dm" @@ -1749,7 +1736,6 @@ #include "code\modules\antagonists\valentines\valentine.dm" #include "code\modules\antagonists\wizard\wizard.dm" #include "code\modules\antagonists\wizard\equipment\artefact.dm" -#include "code\modules\antagonists\wizard\equipment\soulstone.dm" #include "code\modules\antagonists\wizard\equipment\spellbook.dm" #include "code\modules\antagonists\xeno\xeno.dm" #include "code\modules\assembly\assembly.dm" @@ -1856,9 +1842,7 @@ #include "code\modules\awaymissions\mission_code\research.dm" #include "code\modules\awaymissions\mission_code\snowdin.dm" #include "code\modules\awaymissions\mission_code\spacebattle.dm" -#include "code\modules\awaymissions\mission_code\stationCollision.dm" #include "code\modules\awaymissions\mission_code\undergroundoutpost45.dm" -#include "code\modules\awaymissions\mission_code\wildwest.dm" #include "code\modules\balloon_alert\balloon_alert.dm" #include "code\modules\buildmode\bm_mode.dm" #include "code\modules\buildmode\buildmode.dm" @@ -1869,9 +1853,9 @@ #include "code\modules\buildmode\submodes\basic.dm" #include "code\modules\buildmode\submodes\boom.dm" #include "code\modules\buildmode\submodes\copy.dm" -#include "code\modules\buildmode\submodes\lightmaker.dm" #include "code\modules\buildmode\submodes\delete.dm" #include "code\modules\buildmode\submodes\fill.dm" +#include "code\modules\buildmode\submodes\lightmaker.dm" #include "code\modules\buildmode\submodes\map_export.dm" #include "code\modules\buildmode\submodes\outfit.dm" #include "code\modules\buildmode\submodes\proccall.dm" @@ -1894,11 +1878,13 @@ #include "code\modules\cargo\blackmarket\blackmarket_market.dm" #include "code\modules\cargo\blackmarket\blackmarket_telepad.dm" #include "code\modules\cargo\blackmarket\blackmarket_uplink.dm" +#include "code\modules\cargo\blackmarket\blackmarket_items\ammo.dm" #include "code\modules\cargo\blackmarket\blackmarket_items\clothing.dm" #include "code\modules\cargo\blackmarket\blackmarket_items\consumables.dm" #include "code\modules\cargo\blackmarket\blackmarket_items\emergency.dm" #include "code\modules\cargo\blackmarket\blackmarket_items\explosives.dm" #include "code\modules\cargo\blackmarket\blackmarket_items\misc.dm" +#include "code\modules\cargo\blackmarket\blackmarket_items\tech.dm" #include "code\modules\cargo\blackmarket\blackmarket_items\tools.dm" #include "code\modules\cargo\blackmarket\blackmarket_items\weapons.dm" #include "code\modules\cargo\bounties\assistant.dm" @@ -2003,7 +1989,6 @@ #include "code\modules\clothing\masks\hailer.dm" #include "code\modules\clothing\masks\miscellaneous.dm" #include "code\modules\clothing\neck\_neck.dm" -#include "code\modules\clothing\outfits\event.dm" #include "code\modules\clothing\outfits\plasmaman.dm" #include "code\modules\clothing\outfits\standard.dm" #include "code\modules\clothing\outfits\vv_outfit.dm" @@ -2024,7 +2009,6 @@ #include "code\modules\clothing\outfits\factions\solgov.dm" #include "code\modules\clothing\outfits\factions\syndicate.dm" #include "code\modules\clothing\shoes\_shoes.dm" -#include "code\modules\clothing\shoes\bananashoes.dm" #include "code\modules\clothing\shoes\colour.dm" #include "code\modules\clothing\shoes\magboots.dm" #include "code\modules\clothing\shoes\miscellaneous.dm" @@ -2095,14 +2079,12 @@ #include "code\modules\events\abductor.dm" #include "code\modules\events\alien_infestation.dm" #include "code\modules\events\aurora_caelus.dm" -#include "code\modules\events\blob.dm" #include "code\modules\events\borers.dm" #include "code\modules\events\brain_trauma.dm" #include "code\modules\events\brand_intelligence.dm" #include "code\modules\events\camerafailure.dm" #include "code\modules\events\carp_migration.dm" #include "code\modules\events\communications_blackout.dm" -#include "code\modules\events\devil.dm" #include "code\modules\events\disease_outbreak.dm" #include "code\modules\events\dust.dm" #include "code\modules\events\electrical_storm.dm" @@ -2114,10 +2096,7 @@ #include "code\modules\events\high_priority_bounty.dm" #include "code\modules\events\immovable_rod.dm" #include "code\modules\events\ion_storm.dm" -#include "code\modules\events\major_dust.dm" #include "code\modules\events\mass_hallucination.dm" -#include "code\modules\events\meateor_wave.dm" -#include "code\modules\events\meteor_wave.dm" #include "code\modules\events\nightmare.dm" #include "code\modules\events\operative.dm" #include "code\modules\events\prison_break.dm" @@ -2135,8 +2114,6 @@ #include "code\modules\events\holiday\vday.dm" #include "code\modules\events\holiday\xmas.dm" #include "code\modules\events\wizard\aid.dm" -#include "code\modules\events\wizard\blobies.dm" -#include "code\modules\events\wizard\curseditems.dm" #include "code\modules\events\wizard\departmentrevolt.dm" #include "code\modules\events\wizard\embeddies.dm" #include "code\modules\events\wizard\fakeexplosion.dm" @@ -2150,6 +2127,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" @@ -2177,9 +2155,7 @@ #include "code\modules\food_and_drinks\food\customizables.dm" #include "code\modules\food_and_drinks\food\ration.dm" #include "code\modules\food_and_drinks\food\snacks.dm" -#include "code\modules\food_and_drinks\food\snacks_bread.dm" #include "code\modules\food_and_drinks\food\snacks_burgers.dm" -#include "code\modules\food_and_drinks\food\snacks_cake.dm" #include "code\modules\food_and_drinks\food\snacks_egg.dm" #include "code\modules\food_and_drinks\food\snacks_frozen.dm" #include "code\modules\food_and_drinks\food\snacks_meat.dm" @@ -2190,7 +2166,6 @@ #include "code\modules\food_and_drinks\food\snacks_salad.dm" #include "code\modules\food_and_drinks\food\snacks_sandwichtoast.dm" #include "code\modules\food_and_drinks\food\snacks_soup.dm" -#include "code\modules\food_and_drinks\food\snacks_spaghetti.dm" #include "code\modules\food_and_drinks\food\snacks_vend.dm" #include "code\modules\food_and_drinks\food\snacks\dough.dm" #include "code\modules\food_and_drinks\food\snacks\meat.dm" @@ -2248,6 +2223,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" @@ -2374,7 +2351,6 @@ #include "code\modules\language\teceti_unified.dm" #include "code\modules\language\vox_pidgin.dm" #include "code\modules\language\xenocommon.dm" -#include "code\modules\library\lib_codex_gigas.dm" #include "code\modules\library\lib_items.dm" #include "code\modules\library\lib_machines.dm" #include "code\modules\library\random_books.dm" @@ -2422,6 +2398,7 @@ #include "code\modules\mining\ores_coins.dm" #include "code\modules\mining\satchel_ore_boxdm.dm" #include "code\modules\mining\shelters.dm" +#include "code\modules\mining\equipment\angle_grinder.dm" #include "code\modules\mining\equipment\explorer_gear.dm" #include "code\modules\mining\equipment\kinetic_crusher.dm" #include "code\modules\mining\equipment\lazarus_injector.dm" @@ -2656,11 +2633,9 @@ #include "code\modules\mob\living\silicon\robot\robot_movement.dm" #include "code\modules\mob\living\silicon\robot\robot_say.dm" #include "code\modules\mob\living\simple_animal\animal_defense.dm" -#include "code\modules\mob\living\simple_animal\constructs.dm" #include "code\modules\mob\living\simple_animal\corpse.dm" #include "code\modules\mob\living\simple_animal\damage_procs.dm" #include "code\modules\mob\living\simple_animal\parrot.dm" -#include "code\modules\mob\living\simple_animal\shade.dm" #include "code\modules\mob\living\simple_animal\simple_animal.dm" #include "code\modules\mob\living\simple_animal\status_procs.dm" #include "code\modules\mob\living\simple_animal\bot\bot.dm" @@ -2769,7 +2744,6 @@ #include "code\modules\mob\living\simple_animal\hostile\megafauna\hierophant.dm" #include "code\modules\mob\living\simple_animal\hostile\megafauna\legion.dm" #include "code\modules\mob\living\simple_animal\hostile\megafauna\megafauna.dm" -#include "code\modules\mob\living\simple_animal\hostile\megafauna\swarmer.dm" #include "code\modules\mob\living\simple_animal\hostile\megafauna\wendigo.dm" #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\basilisk.dm" #include "code\modules\mob\living\simple_animal\hostile\mining_mobs\brimdemon.dm" @@ -2807,6 +2781,30 @@ #include "code\modules\mob_spawner\hivebot.dm" #include "code\modules\mob_spawner\spawner.dm" #include "code\modules\mob_spawner\spawner_componet.dm" +#include "code\modules\mod\mod_actions.dm" +#include "code\modules\mod\mod_activation.dm" +#include "code\modules\mod\mod_ai.dm" +#include "code\modules\mod\mod_clothes.dm" +#include "code\modules\mod\mod_construction.dm" +#include "code\modules\mod\mod_control.dm" +#include "code\modules\mod\mod_core.dm" +#include "code\modules\mod\mod_paint.dm" +#include "code\modules\mod\mod_theme.dm" +#include "code\modules\mod\mod_types.dm" +#include "code\modules\mod\mod_ui.dm" +#include "code\modules\mod\modules\_module.dm" +#include "code\modules\mod\modules\modules_antag.dm" +#include "code\modules\mod\modules\modules_engineering.dm" +#include "code\modules\mod\modules\modules_general.dm" +#include "code\modules\mod\modules\modules_maint.dm" +#include "code\modules\mod\modules\modules_medical.dm" +#include "code\modules\mod\modules\modules_ninja.dm" +#include "code\modules\mod\modules\modules_science.dm" +#include "code\modules\mod\modules\modules_security.dm" +#include "code\modules\mod\modules\modules_service.dm" +#include "code\modules\mod\modules\modules_storage.dm" +#include "code\modules\mod\modules\modules_supply.dm" +#include "code\modules\mod\modules\modules_visor.dm" #include "code\modules\modular_computers\laptop_vendor.dm" #include "code\modules\modular_computers\computers\_modular_computer_shared.dm" #include "code\modules\modular_computers\computers\item\computer.dm" @@ -2981,7 +2979,6 @@ #include "code\modules\power\singularity\field_generator.dm" #include "code\modules\power\singularity\generator.dm" #include "code\modules\power\singularity\investigate.dm" -#include "code\modules\power\singularity\narsie.dm" #include "code\modules\power\singularity\singularity.dm" #include "code\modules\power\singularity\particle_accelerator\particle.dm" #include "code\modules\power\singularity\particle_accelerator\particle_accelerator.dm" @@ -3025,7 +3022,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" @@ -3068,7 +3064,11 @@ #include "code\modules\projectiles\guns\energy\pulse.dm" #include "code\modules\projectiles\guns\energy\special.dm" #include "code\modules\projectiles\guns\energy\stun.dm" +#include "code\modules\projectiles\guns\manufacturer\clip_lanchester\ballistics.dm" +#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" @@ -3151,6 +3151,7 @@ #include "code\modules\reagents\reagent_containers\borghydro.dm" #include "code\modules\reagents\reagent_containers\bottle.dm" #include "code\modules\reagents\reagent_containers\chem_pack.dm" +#include "code\modules\reagents\reagent_containers\concrete_bags.dm" #include "code\modules\reagents\reagent_containers\dropper.dm" #include "code\modules\reagents\reagent_containers\glass.dm" #include "code\modules\reagents\reagent_containers\hypospray.dm" @@ -3178,7 +3179,6 @@ #include "code\modules\religion\rites.dm" #include "code\modules\requests\request.dm" #include "code\modules\requests\requests_manager.dm" -#include "code\modules\research\bepis.dm" #include "code\modules\research\designs.dm" #include "code\modules\research\destructive_analyzer.dm" #include "code\modules\research\experimentor.dm" @@ -3269,7 +3269,6 @@ #include "code\modules\ruins\icemoonruin_code\library.dm" #include "code\modules\ruins\icemoonruin_code\wrath.dm" #include "code\modules\ruins\lavalandruin_code\biodome_winter.dm" -#include "code\modules\ruins\lavalandruin_code\elephantgraveyard.dm" #include "code\modules\ruins\lavalandruin_code\puzzle.dm" #include "code\modules\ruins\lavalandruin_code\surface.dm" #include "code\modules\ruins\lavalandruin_code\syndicate_base.dm" @@ -3297,10 +3296,7 @@ #include "code\modules\spells\spell_types\bloodcrawl.dm" #include "code\modules\spells\spell_types\charge.dm" #include "code\modules\spells\spell_types\conjure.dm" -#include "code\modules\spells\spell_types\construct_spells.dm" #include "code\modules\spells\spell_types\curse.dm" -#include "code\modules\spells\spell_types\devil.dm" -#include "code\modules\spells\spell_types\devil_boons.dm" #include "code\modules\spells\spell_types\emplosion.dm" #include "code\modules\spells\spell_types\ethereal_jaunt.dm" #include "code\modules\spells\spell_types\explosion.dm" diff --git a/sound/ambience/storm_indoors.ogg b/sound/ambience/storm_indoors.ogg new file mode 100644 index 000000000000..62e9014a05ff Binary files /dev/null and b/sound/ambience/storm_indoors.ogg differ diff --git a/sound/ambience/storm_outdoors.ogg b/sound/ambience/storm_outdoors.ogg new file mode 100644 index 000000000000..35ae8e5297d6 Binary files /dev/null and b/sound/ambience/storm_outdoors.ogg differ diff --git a/sound/effects/splatter.ogg b/sound/effects/splatter.ogg new file mode 100644 index 000000000000..1c678cfe1268 Binary files /dev/null and b/sound/effects/splatter.ogg differ diff --git a/sound/health/bone/bone_break1.ogg b/sound/health/bone/bone_break1.ogg new file mode 100644 index 000000000000..dd2d22ec792b Binary files /dev/null and b/sound/health/bone/bone_break1.ogg differ diff --git a/sound/health/bone/bone_break2.ogg b/sound/health/bone/bone_break2.ogg new file mode 100644 index 000000000000..aa2537f894de Binary files /dev/null and b/sound/health/bone/bone_break2.ogg differ diff --git a/sound/health/bone/bone_break3.ogg b/sound/health/bone/bone_break3.ogg new file mode 100644 index 000000000000..9f66324be3b2 Binary files /dev/null and b/sound/health/bone/bone_break3.ogg differ diff --git a/sound/health/bone/bone_break4.ogg b/sound/health/bone/bone_break4.ogg new file mode 100644 index 000000000000..bbdfac1ecff3 Binary files /dev/null and b/sound/health/bone/bone_break4.ogg differ diff --git a/sound/health/bone/bone_break5.ogg b/sound/health/bone/bone_break5.ogg new file mode 100644 index 000000000000..dfee0e9baa72 Binary files /dev/null and b/sound/health/bone/bone_break5.ogg differ diff --git a/sound/health/bone/bone_break6.ogg b/sound/health/bone/bone_break6.ogg new file mode 100644 index 000000000000..d41cc8d7cf54 Binary files /dev/null and b/sound/health/bone/bone_break6.ogg differ diff --git a/sound/items/modsuit/atrocinator_step.ogg b/sound/items/modsuit/atrocinator_step.ogg new file mode 100644 index 000000000000..deda85ac354b Binary files /dev/null and b/sound/items/modsuit/atrocinator_step.ogg differ diff --git a/sound/items/modsuit/ballin.ogg b/sound/items/modsuit/ballin.ogg new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/sound/items/modsuit/ballout.ogg b/sound/items/modsuit/ballout.ogg new file mode 100644 index 000000000000..f911f1a6a61d Binary files /dev/null and b/sound/items/modsuit/ballout.ogg differ diff --git a/sound/items/modsuit/flamethrower.ogg b/sound/items/modsuit/flamethrower.ogg new file mode 100644 index 000000000000..447245d50b6e Binary files /dev/null and b/sound/items/modsuit/flamethrower.ogg differ diff --git a/sound/items/modsuit/inflate_bloon.ogg b/sound/items/modsuit/inflate_bloon.ogg new file mode 100644 index 000000000000..9b030d66ced7 Binary files /dev/null and b/sound/items/modsuit/inflate_bloon.ogg differ diff --git a/sound/items/modsuit/loader_charge.ogg b/sound/items/modsuit/loader_charge.ogg new file mode 100644 index 000000000000..61d5531f72ed Binary files /dev/null and b/sound/items/modsuit/loader_charge.ogg differ diff --git a/sound/items/modsuit/loader_launch.ogg b/sound/items/modsuit/loader_launch.ogg new file mode 100644 index 000000000000..513118f3c682 Binary files /dev/null and b/sound/items/modsuit/loader_launch.ogg differ diff --git a/sound/items/modsuit/magnetic_harness.ogg b/sound/items/modsuit/magnetic_harness.ogg new file mode 100644 index 000000000000..3d19fccc5698 Binary files /dev/null and b/sound/items/modsuit/magnetic_harness.ogg differ diff --git a/sound/items/modsuit/rewinder.ogg b/sound/items/modsuit/rewinder.ogg new file mode 100644 index 000000000000..2587562dc117 Binary files /dev/null and b/sound/items/modsuit/rewinder.ogg differ diff --git a/sound/items/modsuit/springlock.ogg b/sound/items/modsuit/springlock.ogg new file mode 100644 index 000000000000..8d0013d26300 Binary files /dev/null and b/sound/items/modsuit/springlock.ogg differ diff --git a/sound/items/modsuit/tem_shot.ogg b/sound/items/modsuit/tem_shot.ogg new file mode 100644 index 000000000000..50905b95f112 Binary files /dev/null and b/sound/items/modsuit/tem_shot.ogg differ diff --git a/sound/items/modsuit/time_anchor_set.ogg b/sound/items/modsuit/time_anchor_set.ogg new file mode 100644 index 000000000000..457f8e6dbaee Binary files /dev/null and b/sound/items/modsuit/time_anchor_set.ogg differ diff --git a/sound/mecha/hydraulic.ogg b/sound/mecha/hydraulic.ogg new file mode 100644 index 000000000000..3281ed2dc0f0 Binary files /dev/null and b/sound/mecha/hydraulic.ogg differ diff --git a/sound/weapons/anglegrinder.ogg b/sound/weapons/anglegrinder.ogg new file mode 100644 index 000000000000..c0bc5b593a18 Binary files /dev/null and b/sound/weapons/anglegrinder.ogg differ diff --git a/sound/weapons/gun/hmg/cm40.ogg b/sound/weapons/gun/hmg/cm40.ogg new file mode 100644 index 000000000000..b45507d29a0c Binary files /dev/null and b/sound/weapons/gun/hmg/cm40.ogg differ diff --git a/sound/weapons/gun/hmg/cm40_cocked.ogg b/sound/weapons/gun/hmg/cm40_cocked.ogg new file mode 100644 index 000000000000..694d4772e980 Binary files /dev/null and b/sound/weapons/gun/hmg/cm40_cocked.ogg differ diff --git a/sound/weapons/gun/hmg/cm40_reload.ogg b/sound/weapons/gun/hmg/cm40_reload.ogg new file mode 100644 index 000000000000..490bbd4fe783 Binary files /dev/null and b/sound/weapons/gun/hmg/cm40_reload.ogg differ diff --git a/sound/weapons/gun/hmg/cm40_unload.ogg b/sound/weapons/gun/hmg/cm40_unload.ogg new file mode 100644 index 000000000000..ae9e31aee537 Binary files /dev/null and b/sound/weapons/gun/hmg/cm40_unload.ogg differ diff --git a/sound/weapons/gun/hmg/shredder.ogg b/sound/weapons/gun/hmg/shredder.ogg new file mode 100644 index 000000000000..38ddfc247eea Binary files /dev/null and b/sound/weapons/gun/hmg/shredder.ogg differ diff --git a/sound/weapons/gun/hmg/shredder_cocked.ogg b/sound/weapons/gun/hmg/shredder_cocked.ogg new file mode 100644 index 000000000000..95130493d4c3 Binary files /dev/null and b/sound/weapons/gun/hmg/shredder_cocked.ogg differ diff --git a/sound/weapons/gun/hmg/shredder_cocked_alt.ogg b/sound/weapons/gun/hmg/shredder_cocked_alt.ogg new file mode 100644 index 000000000000..a73fd1b13b73 Binary files /dev/null and b/sound/weapons/gun/hmg/shredder_cocked_alt.ogg differ diff --git a/sound/weapons/gun/hmg/shredder_reload.ogg b/sound/weapons/gun/hmg/shredder_reload.ogg new file mode 100644 index 000000000000..c7614184d3dd Binary files /dev/null and b/sound/weapons/gun/hmg/shredder_reload.ogg differ diff --git a/sound/weapons/gun/hmg/shredder_unload.ogg b/sound/weapons/gun/hmg/shredder_unload.ogg new file mode 100644 index 000000000000..01e6229aba62 Binary files /dev/null and b/sound/weapons/gun/hmg/shredder_unload.ogg differ diff --git a/sound/weapons/gun/l6/shot_old.ogg b/sound/weapons/gun/l6/shot_old.ogg deleted file mode 100644 index e6c1a9abe958..000000000000 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 000000000000..ca7edcb67c8e Binary files /dev/null and b/sound/weapons/gun/pistol/asp.ogg differ diff --git a/sound/weapons/gun/pistol/cm23.ogg b/sound/weapons/gun/pistol/cm23.ogg new file mode 100644 index 000000000000..f207a4cda894 Binary files /dev/null and b/sound/weapons/gun/pistol/cm23.ogg differ diff --git a/sound/weapons/gun/pistol/cm70.ogg b/sound/weapons/gun/pistol/cm70.ogg new file mode 100644 index 000000000000..2b672fcfb352 Binary files /dev/null and b/sound/weapons/gun/pistol/cm70.ogg differ diff --git a/sound/weapons/gun/pistol/mauler.ogg b/sound/weapons/gun/pistol/mauler.ogg new file mode 100644 index 000000000000..70fb1f9f6eca Binary files /dev/null and b/sound/weapons/gun/pistol/mauler.ogg differ diff --git a/sound/weapons/gun/pistol/rattlesnake.ogg b/sound/weapons/gun/pistol/rattlesnake.ogg new file mode 100644 index 000000000000..34e0412f823d 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 583c3f36034d..000000000000 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 fcf8ad62346b..000000000000 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 d02d1c750c24..91e480bd152a 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 fcd3b99ff80c..000000000000 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 6c574829732e..000000000000 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 91e480bd152a..000000000000 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 000000000000..8132d556869c 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 000000000000..54ad25134ad8 Binary files /dev/null and b/sound/weapons/gun/revolver/viper_prime.ogg differ diff --git a/sound/weapons/gun/rifle/cm82.ogg b/sound/weapons/gun/rifle/cm82.ogg new file mode 100644 index 000000000000..a1bf69ae00f2 Binary files /dev/null and b/sound/weapons/gun/rifle/cm82.ogg differ diff --git a/sound/weapons/gun/rifle/cm82_reload.ogg b/sound/weapons/gun/rifle/cm82_reload.ogg new file mode 100644 index 000000000000..133ad5aede3a Binary files /dev/null and b/sound/weapons/gun/rifle/cm82_reload.ogg differ diff --git a/sound/weapons/gun/rifle/cm82_unload.ogg b/sound/weapons/gun/rifle/cm82_unload.ogg new file mode 100644 index 000000000000..af0b43ecef90 Binary files /dev/null and b/sound/weapons/gun/rifle/cm82_unload.ogg differ diff --git a/sound/weapons/gun/rifle/f4.ogg b/sound/weapons/gun/rifle/f4.ogg new file mode 100644 index 000000000000..75c571db1881 Binary files /dev/null and b/sound/weapons/gun/rifle/f4.ogg differ diff --git a/sound/weapons/gun/rifle/gal.ogg b/sound/weapons/gun/rifle/gal.ogg deleted file mode 100644 index 25402e36cc61..000000000000 Binary files a/sound/weapons/gun/rifle/gal.ogg and /dev/null differ diff --git a/sound/weapons/gun/rifle/hydra.ogg b/sound/weapons/gun/rifle/hydra.ogg new file mode 100644 index 000000000000..180a4082cac8 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 acdb447ca8fd..000000000000 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 48bea46d5cb7..000000000000 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 e999bb9bb7f7..000000000000 Binary files a/sound/weapons/gun/shotgun/shot_old.ogg and /dev/null differ diff --git a/sound/weapons/gun/smg/cm5.ogg b/sound/weapons/gun/smg/cm5.ogg new file mode 100644 index 000000000000..6c363db926f6 Binary files /dev/null and b/sound/weapons/gun/smg/cm5.ogg differ diff --git a/sound/weapons/gun/smg/cm5_reload.ogg b/sound/weapons/gun/smg/cm5_reload.ogg new file mode 100644 index 000000000000..2a108e9e60ec 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 000000000000..e4d3ef42db38 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 000000000000..314fce64c4f5 Binary files /dev/null and b/sound/weapons/gun/smg/cobra.ogg differ diff --git a/sound/weapons/gun/smg/pounder.ogg b/sound/weapons/gun/smg/pounder.ogg new file mode 100644 index 000000000000..c9e6faf8e1ef Binary files /dev/null and b/sound/weapons/gun/smg/pounder.ogg differ diff --git a/sound/weapons/gun/smg/pounder_cocked.ogg b/sound/weapons/gun/smg/pounder_cocked.ogg new file mode 100644 index 000000000000..76929be2f066 Binary files /dev/null and b/sound/weapons/gun/smg/pounder_cocked.ogg differ diff --git a/sound/weapons/gun/smg/pounder_reload.ogg b/sound/weapons/gun/smg/pounder_reload.ogg new file mode 100644 index 000000000000..55bcbc5aa87e Binary files /dev/null and b/sound/weapons/gun/smg/pounder_reload.ogg differ diff --git a/sound/weapons/gun/smg/pounder_unload.ogg b/sound/weapons/gun/smg/pounder_unload.ogg new file mode 100644 index 000000000000..5ce78fc258a2 Binary files /dev/null and b/sound/weapons/gun/smg/pounder_unload.ogg differ diff --git a/sound/weapons/gun/smg/sidewinder.ogg b/sound/weapons/gun/smg/sidewinder.ogg new file mode 100644 index 000000000000..202d9ae5a81d 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 000000000000..d5f7df2fc867 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 000000000000..11f8982beedd 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 000000000000..2d959bc0f42f Binary files /dev/null and b/sound/weapons/gun/smg/sidewinder_unload.ogg differ diff --git a/sound/weapons/gun/smg/spitter.ogg b/sound/weapons/gun/smg/spitter.ogg new file mode 100644 index 000000000000..81fd0263cb2a Binary files /dev/null and b/sound/weapons/gun/smg/spitter.ogg differ diff --git a/sound/weapons/gun/smg/spitter_cocked.ogg b/sound/weapons/gun/smg/spitter_cocked.ogg new file mode 100644 index 000000000000..b3d29c6f690a Binary files /dev/null and b/sound/weapons/gun/smg/spitter_cocked.ogg differ diff --git a/sound/weapons/gun/smg/spitter_reload.ogg b/sound/weapons/gun/smg/spitter_reload.ogg new file mode 100644 index 000000000000..4842c567de2a Binary files /dev/null and b/sound/weapons/gun/smg/spitter_reload.ogg differ diff --git a/sound/weapons/gun/smg/spitter_unload.ogg b/sound/weapons/gun/smg/spitter_unload.ogg new file mode 100644 index 000000000000..dffebe51b177 Binary files /dev/null and b/sound/weapons/gun/smg/spitter_unload.ogg differ diff --git a/sound/weapons/gun/sniper/cmf90.ogg b/sound/weapons/gun/sniper/cmf90.ogg new file mode 100644 index 000000000000..9468bfcc1b94 Binary files /dev/null and b/sound/weapons/gun/sniper/cmf90.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 4c23868da15d..000000000000 Binary files a/sound/weapons/gun/sniper/shot_old.ogg and /dev/null differ diff --git a/strings/ipc_preference_adjectives.txt b/strings/ipc_preference_adjectives.txt index a243b2d77fc5..a106aa76ba8f 100644 --- a/strings/ipc_preference_adjectives.txt +++ b/strings/ipc_preference_adjectives.txt @@ -1,3 +1,5 @@ +Angsty +Awkward Bedraggled Brawny Bulky @@ -22,6 +24,7 @@ Fragile Frail Friendly Gentle +Gormless Hawkish Hefty Hobbling @@ -38,25 +41,39 @@ Mangled Masculine Messy Nimble +Pathetic +Peppy Petite Pompous Pugnacious +Quievering +Radical Repulsive Robust Rough Rusted Scarred Shifty +Shrewd Sickly Skittish Sleek Slender +Slimy Slovenly Sluggish +Sly +Smooth +Sniveling +Soulrendered Spacy Stiff Stony +Stout +Strapping +Sturdy Stylish +Tubular Unattractive Unremarkable Unsightly diff --git a/strings/locations.json b/strings/locations.json index 7a573dd86999..89af1acacd48 100644 --- a/strings/locations.json +++ b/strings/locations.json @@ -51,7 +51,7 @@ "Law Office", "Library", "Locker Room", - "Mech Bay", + "Exosuit Bay", "Medbay Central", "Medbay Maintenance", "Medbay Storage", diff --git a/strings/preference_adjectives.txt b/strings/preference_adjectives.txt index 0d67f16803f8..450e4c78901f 100644 --- a/strings/preference_adjectives.txt +++ b/strings/preference_adjectives.txt @@ -24,7 +24,6 @@ Effeminate Elegant Emaciated Energetic -Energetic Exasperated Exotic Faint @@ -41,7 +40,6 @@ Gentle Gloomy Gormless Hawkish -Hawkish Healthy Hefty Hobbling @@ -57,7 +55,6 @@ Lopsided Lovely Malnourished Mangled -Mangled Masculine Messy Muscular diff --git a/strings/tips.txt b/strings/tips.txt index 85eda2e01283..c2d32c979b9e 100644 --- a/strings/tips.txt +++ b/strings/tips.txt @@ -138,7 +138,7 @@ Epi-pens contain a small amount of formaldehyde, that prevents organs from decay Anomalies will give two frequencies when you analyze them, a primary and a secondary, unstable frequency. The primary will neutralize, and the unstable will more often than not cause an explosion or a similar negative effect. Landmines have 4 wires; one disarms the mind, the other deactivates the pressure plate, another blows it up, and another blows it up on a delay. You can tamper with landmines from range by pulsing the wires with signalers. -Not everyone is from their species' homeworld. It can be common for a human to have a Kalixcian or Teceian name, for example. +Not everyone is from their species' homeworld. It can be common for a human to have a Kalixcian or Tecetian name, for example. It can be fun to brainstorm new characters. Give it a shot, you might like it. You can create entire new shuttles and subshuttles with a shuttle manipulator either from RND or from the outpost. It's usually resource and money-intensive, so be prepared! Class 3 drills are incredibly dangerous alone or in small groups, even if you're experienced with mining and combat. Bring along a larger crew or call someone willing to help if you're thinking of taking them on. @@ -153,6 +153,6 @@ Vox are near-unmatched in hand-to-hand fighting; their kicks deal extra damage a IPC posibrains are contained in the chest, not the head. Shiptest has uptime on Wednesdays, Fridays, and Saturdays. Exosuits are not as durable as they might feel, and it is still wise to take cover with them. -Turning on strafing mode on a mech for combat is wise, and allows you to keep your firing lines constantly on the enemy. +Turning on strafing mode on an exosuit for combat is wise, and allows you to keep your firing lines constantly on the enemy. A Gygax's leg actuators drain the cell very quickly. Use sparingly. -Installing higher tier capacitors on mechs increases power efficiency on mech abilities, weapons, and idling. +Installing higher tier capacitors on exosuits increases power efficiency on exosuit abilities, weapons, and idling. diff --git a/tgui/package.json b/tgui/package.json index 2c5059e3626c..169af0aeafc7 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/packages/tgui-dev-server/package.json b/tgui/packages/tgui-dev-server/package.json index a026558a47a1..1a0f4c972244 100644 --- a/tgui/packages/tgui-dev-server/package.json +++ b/tgui/packages/tgui-dev-server/package.json @@ -4,7 +4,7 @@ "version": "4.3.1", "type": "module", "dependencies": { - "axios": "^1.6.0", + "axios": "^1.7.4", "glob": "^7.1.7", "source-map": "^0.7.3", "stacktrace-parser": "^0.1.10", diff --git a/tgui/packages/tgui/constants.ts b/tgui/packages/tgui/constants.ts index 270ce9873bd6..e17958e787f3 100644 --- a/tgui/packages/tgui/constants.ts +++ b/tgui/packages/tgui/constants.ts @@ -239,7 +239,7 @@ const GASES = [ color: 'paleturquoise', }, { - id: 'hydrogen', + id: 'h2', path: '/datum/gas/hydrogen', name: 'Hydrogen', label: 'H₂', @@ -294,6 +294,20 @@ const GASES = [ label: 'Nitrium', color: 'brown', }, + { + id: 'cl2', + path: '/datum/gas/cl2', + name: 'Chlorine', + label: 'Cl₂', + color: 'yellow', + }, + { + id: 'hcl', + path: '/datum/gas/hcl', + name: 'Hydrogen Chloride', + label: 'HCl', + color: 'greenyellow', + }, ] as const; // Returns gas label based on gasId diff --git a/tgui/packages/tgui/interfaces/Bepis.js b/tgui/packages/tgui/interfaces/Bepis.js deleted file mode 100644 index 99718415ddc9..000000000000 --- a/tgui/packages/tgui/interfaces/Bepis.js +++ /dev/null @@ -1,123 +0,0 @@ -import { useBackend } from '../backend'; -import { - Box, - Button, - Grid, - LabeledList, - NumberInput, - Section, -} from '../components'; -import { Window } from '../layouts'; - -export const Bepis = (props, context) => { - const { act, data } = useBackend(context); - const { amount } = data; - return ( - - -
    -
    act('toggle_power')} - /> - } - > - All you need to know about the B.E.P.I.S. and you! The B.E.P.I.S. - performs hundreds of tests a second using electrical and financial - resources to invent new products, or discover new technologies - otherwise overlooked for being too risky or too niche to produce! -
    -
    act('account_reset')} - /> - } - > - Console is currently being operated by{' '} - {data.account_owner ? data.account_owner : 'no one'}. -
    - - -
    - - - {data.stored_cash} - - - {data.accuracy_percentage}% - - - {data.positive_cash_offset} - - - {data.negative_cash_offset} - - - - act('amount', { - amount: value, - }) - } - /> - - -
    - -
    - - - -
    -
    - ); -}; diff --git a/tgui/packages/tgui/interfaces/BlackMarketUplink.js b/tgui/packages/tgui/interfaces/BlackMarketUplink.js index 2c4a05d09ef5..9fff7cff715f 100644 --- a/tgui/packages/tgui/interfaces/BlackMarketUplink.js +++ b/tgui/packages/tgui/interfaces/BlackMarketUplink.js @@ -23,7 +23,7 @@ export const BlackMarketUplink = (props, context) => { viewing_category, } = data; return ( - +
    { + switch (param) { + case 'red': + return [ + 1, 0, 0, 0, 0.25, 0.5, 0, 0, 0.25, 0, 0.5, 0, 0, 0, 0, 1, 0, 0, 0, 0, + ]; + case 'yellow': + return [ + 0.5, 0.5, 0, 0, 0.5, 0.5, 0, 0, 0.25, 0.25, 0.5, 0, 0, 0, 0, 1, 0, 0, 0, + 0, + ]; + case 'green': + return [ + 0.5, 0.25, 0, 0, 0, 1, 0, 0, 0, 0.25, 0.5, 0, 0, 0, 0, 1, 0, 0, 0, 0, + ]; + case 'teal': + return [ + 0.25, 0.25, 0.25, 0, 0, 0.5, 0.5, 0, 0, 0.5, 0.5, 0, 0, 0, 0, 1, 0, 0, + 0, 0, + ]; + case 'blue': + return [ + 0.25, 0, 0.25, 0, 0, 0.5, 0.25, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, + ]; + case 'purple': + return [ + 0.5, 0, 0.5, 0, 0.25, 0.5, 0.25, 0, 0.5, 0, 0.5, 0, 0, 0, 0, 1, 0, 0, 0, + 0, + ]; + } +}; + +const displayText = (param) => { + switch (param) { + case 'r': + return 'Red'; + case 'g': + return 'Green'; + case 'b': + return 'Blue'; + } +}; + +export const MODpaint = (props, context) => { + const { act, data } = useBackend(context); + const { mapRef, currentColor } = data; + const [ + [rr, rg, rb, ra], + [gr, gg, gb, ga], + [br, bg, bb, ba], + [ar, ag, ab, aa], + [cr, cg, cb, ca], + ] = currentColor; + const presets = ['red', 'yellow', 'green', 'teal', 'blue', 'purple']; + const prefixes = ['r', 'g', 'b']; + return ( + + + + + {[0, 1, 2].map((row) => ( +
    + {[0, 1, 2].map((col) => ( + + + + {`${displayText(prefixes[col])}:`} + + + + `${value}%`} + onDrag={(e, value) => { + let retColor = currentColor; + retColor[row * 4 + col] = value / 100; + act('transition_color', { color: retColor }); + }} + /> + + + ))} +
    + ))} +
    + +
    + + {presets.map((preset) => ( +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    + ); +}; diff --git a/tgui/packages/tgui/interfaces/MODsuit.js b/tgui/packages/tgui/interfaces/MODsuit.js new file mode 100644 index 000000000000..d8edbbc4e3f3 --- /dev/null +++ b/tgui/packages/tgui/interfaces/MODsuit.js @@ -0,0 +1,797 @@ +import { useBackend, useLocalState } from '../backend'; +import { + Button, + ColorBox, + LabeledList, + ProgressBar, + Section, + Collapsible, + Box, + Icon, + Stack, + Table, + Dimmer, + NumberInput, + Flex, + AnimatedNumber, + Dropdown, +} from '../components'; +import { Window } from '../layouts'; + +const ConfigureNumberEntry = (props, context) => { + const { name, value, module_ref } = props; + const { act } = useBackend(context); + return ( + + act('configure', { + 'key': name, + 'value': value, + 'ref': module_ref, + }) + } + /> + ); +}; + +const ConfigureBoolEntry = (props, context) => { + const { name, value, module_ref } = props; + const { act } = useBackend(context); + return ( + + act('configure', { + 'key': name, + 'value': !value, + 'ref': module_ref, + }) + } + /> + ); +}; + +const ConfigureColorEntry = (props, context) => { + const { name, value, module_ref } = props; + const { act } = useBackend(context); + return ( + <> + + + + + + ); +}; + +const displayText = (param) => { + switch (param) { + case 1: + return 'Use'; + case 2: + return 'Toggle'; + case 3: + return 'Select'; + } +}; + +const ParametersSection = (props, context) => { + const { act, data } = useBackend(context); + const { + active, + malfunctioning, + locked, + open, + selected_module, + complexity, + complexity_max, + wearer_name, + wearer_job, + AI, + } = data; + const status = malfunctioning + ? 'Malfunctioning' + : active + ? 'Active' + : 'Inactive'; + return ( +
    + + act('activate')} + /> + } + > + {status} + + act('lock')} + /> + } + > + {locked ? 'Locked' : 'Unlocked'} + + + {open ? 'Open' : 'Closed'} + + + {selected_module || 'None'} + + + {complexity} ({complexity_max}) + + + {wearer_name}, {wearer_job} + + {AI || 'None'} + +
    + ); +}; + +const HardwareSection = (props, context) => { + const { act, data } = useBackend(context); + const { + active, + control, + helmet, + chestplate, + gauntlets, + boots, + core, + charge, + } = data; + return ( +
    + + + {control} + {helmet || 'None'} + + {chestplate || 'None'} + + + {gauntlets || 'None'} + + {boots || 'None'} + + + + {(core && ( + + {core} + + + + + )) || ( + + No Core Detected + + )} + +
    + ); +}; + +const InfoSection = (props, context) => { + const { act, data } = useBackend(context); + const { active, modules } = data; + const info_modules = modules.filter((module) => !!module.id); + + return ( +
    + + {(info_modules.length !== 0 && + info_modules.map((module) => { + const Module = ID2MODULE[module.id]; + return ( + + {!active && } + + + ); + })) || No Info Modules Detected} + +
    + ); +}; + +const ModuleSection = (props, context) => { + const { act, data } = useBackend(context); + const { complexity_max, modules } = data; + const [configureState, setConfigureState] = useLocalState( + context, + 'module_configuration', + null + ); + return ( +
    + + {(modules.length !== 0 && + modules.map((module) => { + return ( + + +
    + {configureState === module.ref && ( + setConfigureState(null)} + /> + )} + + + +
    + {module.description} +
    +
    +
    + ); + })) || ( + + No Modules Detected + + )} +
    +
    + ); +}; + +export const MODsuit = (props, context) => { + const { act, data } = useBackend(context); + const { ui_theme, interface_break } = data; + return ( + + + {(!!interface_break && ) || ( + + + + + + + + + + + + + + + )} + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/Orbit.js b/tgui/packages/tgui/interfaces/Orbit.js deleted file mode 100644 index c34dccacf367..000000000000 --- a/tgui/packages/tgui/interfaces/Orbit.js +++ /dev/null @@ -1,220 +0,0 @@ -import { createSearch } from 'common/string'; -import { multiline } from 'common/string'; -import { resolveAsset } from '../assets'; -import { useBackend, useLocalState } from '../backend'; -import { - Box, - Button, - Divider, - Flex, - Icon, - Input, - Section, -} from '../components'; -import { Window } from '../layouts'; - -const PATTERN_NUMBER = / \(([0-9]+)\)$/; - -const searchFor = (searchText) => - createSearch(searchText, (thing) => thing.name); - -const compareString = (a, b) => (a < b ? -1 : a > b); - -const compareNumberedText = (a, b) => { - const aName = a.name; - const bName = b.name; - - // Check if aName and bName are the same except for a number at the end - // e.g. Medibot (2) and Medibot (3) - const aNumberMatch = aName.match(PATTERN_NUMBER); - const bNumberMatch = bName.match(PATTERN_NUMBER); - - if ( - aNumberMatch && - bNumberMatch && - aName.replace(PATTERN_NUMBER, '') === bName.replace(PATTERN_NUMBER, '') - ) { - const aNumber = parseInt(aNumberMatch[1], 10); - const bNumber = parseInt(bNumberMatch[1], 10); - - return aNumber - bNumber; - } - - return compareString(aName, bName); -}; - -const BasicSection = (props, context) => { - const { act } = useBackend(context); - const { searchText, source, title } = props; - const things = source.filter(searchFor(searchText)); - things.sort(compareNumberedText); - return ( - source.length > 0 && ( -
    - {things.map((thing) => ( -
    - ) - ); -}; - -const OrbitedButton = (props, context) => { - const { act } = useBackend(context); - const { color, thing } = props; - - return ( - - ); -}; - -export const Orbit = (props, context) => { - const { act, data } = useBackend(context); - const { alive, antagonists, auto_observe, dead, ghosts, misc, npcs } = data; - - const [searchText, setSearchText] = useLocalState(context, 'searchText', ''); - - const collatedAntagonists = {}; - for (const antagonist of antagonists) { - if (collatedAntagonists[antagonist.antag] === undefined) { - collatedAntagonists[antagonist.antag] = []; - } - collatedAntagonists[antagonist.antag].push(antagonist); - } - - const sortedAntagonists = Object.entries(collatedAntagonists); - sortedAntagonists.sort((a, b) => { - return compareString(a[0], b[0]); - }); - - const orbitMostRelevant = (searchText) => { - for (const source of [ - sortedAntagonists.map(([_, antags]) => antags), - alive, - ghosts, - dead, - npcs, - misc, - ]) { - const member = source - .filter(searchFor(searchText)) - .sort(compareNumberedText)[0]; - if (member !== undefined) { - act('orbit', { ref: member.ref }); - break; - } - } - }; - - return ( - - -
    - - - - - - setSearchText(value)} - onEnter={(_, value) => orbitMostRelevant(value)} - /> - - - - - -
    - {antagonists.length > 0 && ( -
    - {sortedAntagonists.map(([name, antags]) => ( -
    - {antags - .filter(searchFor(searchText)) - .sort(compareNumberedText) - .map((antag) => ( - - ))} -
    - ))} -
    - )} - -
    - {alive - .filter(searchFor(searchText)) - .sort(compareNumberedText) - .map((thing) => ( - - ))} -
    - -
    - {ghosts - .filter(searchFor(searchText)) - .sort(compareNumberedText) - .map((thing) => ( - - ))} -
    - - - - - - -
    -
    - ); -}; diff --git a/tgui/packages/tgui/interfaces/Orbit/OrbitContent.tsx b/tgui/packages/tgui/interfaces/Orbit/OrbitContent.tsx new file mode 100644 index 000000000000..f3c59a75e189 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Orbit/OrbitContent.tsx @@ -0,0 +1,98 @@ +import { toTitleCase } from 'common/string'; + +import { useBackend } from '../../backend'; +import { NoticeBox, Section, Stack, Table, Tooltip } from '../../components'; + +import { getAntagCategories } from './helpers'; +import { AntagGroup, Observable, OrbitData } from './types'; +import { OrbitSection } from './OrbitSection'; + +type ContentSection = { + content: Observable[]; + title: string; + color?: string; +}; + +export const OrbitContent = (props, context) => { + const { act, data } = useBackend(context); + const { antagonists = [], critical = [] } = data; + const { searchText, autoObserve } = props; + + let antagGroups: AntagGroup[] = []; + if (antagonists.length) { + antagGroups = getAntagCategories(antagonists); + } + + const sections: readonly ContentSection[] = [ + { + content: data.alive, + title: 'Alive', + color: 'good', + }, + { + content: data.dead, + title: 'Dead', + }, + { + content: data.ghosts, + title: 'Ghosts', + }, + { + content: data.misc, + title: 'Misc', + }, + { + content: data.npcs, + title: 'NPCs', + }, + { + content: data.ships, + title: 'Ships', + }, + ]; + + return ( +
    + + {critical.map((crit) => ( + + act('orbit', { ref: crit.ref })} + > + + + {toTitleCase(crit.full_name)} + {crit.extra} + +
    +
    +
    + ))} + + {antagGroups.map(([title, members]) => ( + + ))} + + {sections.map((section) => ( + + ))} +
    +
    + ); +}; diff --git a/tgui/packages/tgui/interfaces/Orbit/OrbitItem.tsx b/tgui/packages/tgui/interfaces/Orbit/OrbitItem.tsx new file mode 100644 index 000000000000..957104afa8b9 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Orbit/OrbitItem.tsx @@ -0,0 +1,50 @@ +import { useBackend } from '../../backend'; +import { Stack, Button, Flex, Icon } from '../../components'; + +import { capitalizeFirst } from 'common/string'; + +import { getDisplayColor, getDisplayName } from './helpers'; +import { Antagonist, Observable, OrbitData } from './types'; + +type Props = { + item: Observable | Antagonist; + autoObserve: boolean; + color: string | undefined; +}; + +export const OrbitItem = (props: Props, context) => { + const { item, autoObserve, color } = props; + const { full_name, icon, job, name, orbiters, ref } = item; + + const { act, data } = useBackend(context); + const { orbiting } = data; + + const selected = ref === orbiting?.ref; + const validIcon = !!job && !!icon && icon !== 'hudunknown'; + + return ( + act('orbit', { auto_observe: autoObserve, ref })} + style={{ + display: 'flex', + }} + > + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/Orbit/OrbitSection.tsx b/tgui/packages/tgui/interfaces/Orbit/OrbitSection.tsx new file mode 100644 index 000000000000..d27d9080e08d --- /dev/null +++ b/tgui/packages/tgui/interfaces/Orbit/OrbitSection.tsx @@ -0,0 +1,65 @@ +import { Collapsible, Flex, Tooltip } from '../../components'; +import { isJobOrNameMatch } from './helpers'; +import { OrbitItem } from './OrbitItem'; +import { OrbitTooltip } from './OrbitTooltip'; +import { Observable } from './types'; + +type Props = { + color?: string; + section: Observable[]; + title: string; + searchQuery: string; + autoObserve: boolean; +}; + +/** + * Displays a collapsible with a map of observable items. + * Filters the results if there is a provided search query. + */ +export const OrbitSection = (props: Props) => { + const { color, section = [], title, searchQuery, autoObserve } = props; + + const filteredSection = section.filter((observable) => + isJobOrNameMatch(observable, searchQuery) + ); + + if (!filteredSection.length) { + return null; + } + + return ( + + + {filteredSection.map((item) => { + const content = ( + + ); + + if (!item.health && !item.extra) { + return content; + } + + return ( + } + key={item.ref} + position="bottom-start" + > + {content} + + ); + })} + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/Orbit/OrbitTooltip.tsx b/tgui/packages/tgui/interfaces/Orbit/OrbitTooltip.tsx new file mode 100644 index 000000000000..0a941dcb0fb5 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Orbit/OrbitTooltip.tsx @@ -0,0 +1,57 @@ +import { LabeledList, NoticeBox } from '../../components'; +import { Antagonist, Observable } from './types'; + +type Props = { + item: Observable | Antagonist; +}; + +/** Displays some info on the mob as a tooltip. */ +export const OrbitTooltip = (props: Props) => { + const { item } = props; + const { extra, name, full_name, health, job } = item; + + let antag; + if ('antag' in item) { + antag = item.antag; + } + + const extraInfo = extra?.split(':'); + const displayHealth = !!health && health >= 0 ? `${health}%` : 'Critical'; + const showAFK = 'client' in item && !item.client; + + return ( + <> + + Last Known Data + + + {extraInfo ? ( + + {extraInfo[1]} + + ) : ( + <> + {!!name && ( + {name} + )} + {!!full_name && ( + + {full_name} + + )} + {!!job && {job}} + {!!antag && ( + {antag} + )} + {!!health && ( + + {displayHealth} + + )} + + )} + {showAFK && Away} + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/Orbit/constants.ts b/tgui/packages/tgui/interfaces/Orbit/constants.ts new file mode 100644 index 000000000000..1edadc9bfe45 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Orbit/constants.ts @@ -0,0 +1,8 @@ +export const HEALTH = { + Good: 69, // nice + Average: 19, + Bad: 0, + Crit: -30, + Dead: -100, + Ruined: -200, +} as const; diff --git a/tgui/packages/tgui/interfaces/Orbit/helpers.ts b/tgui/packages/tgui/interfaces/Orbit/helpers.ts new file mode 100644 index 000000000000..7046f784cd6c --- /dev/null +++ b/tgui/packages/tgui/interfaces/Orbit/helpers.ts @@ -0,0 +1,119 @@ +import { createSearch } from '../../../common/string'; + +import { HEALTH } from './constants'; +import { AntagGroup, Antagonist, Observable } from './types'; + +const PATTERN_NUMBER = / \(([0-9]+)\)$/; + +/** Return a map of strings with each antag in its antag_category */ +export const getAntagCategories = (antagonists: Antagonist[]): AntagGroup[] => { + const categories = new Map(); + + for (const player of antagonists) { + const { antag_group } = player; + + if (!categories.has(antag_group)) { + categories.set(antag_group, []); + } + categories.get(antag_group)!.push(player); + } + + const sorted = Array.from(categories.entries()).sort((a, b) => { + const lowerA = a[0].toLowerCase(); + const lowerB = b[0].toLowerCase(); + + if (lowerA < lowerB) return -1; + if (lowerA > lowerB) return 1; + return 0; + }); + + return sorted; +}; + +/** Returns a disguised name in case the person is wearing someone else's ID */ +export const getDisplayName = ( + full_name: string, + nickname?: string +): string => { + if (!nickname) { + return full_name; + } + + return nickname; +}; + +/** Displays color for buttons based on the health or orbiter count. */ +export const getDisplayColor = ( + item: Observable, + override?: string +): string => { + const { job, health, orbiters } = item; + + // Things like blob camera, etc + if (typeof health !== 'number') { + return override ? 'good' : 'grey'; + } + + // Players that are AFK + if ('client' in item && !item.client) { + return 'grey'; + } + + return getHealthColor(health); +}; + +/** Returns the display color for certain health percentages */ +const getHealthColor = (health: number): string => { + switch (true) { + case health > HEALTH.Good: + return 'good'; + case health > HEALTH.Average: + return 'average'; + default: + return 'bad'; + } +}; + +/** Checks if a full name or job title matches the search. */ +export const isJobOrNameMatch = ( + observable: Observable, + searchQuery: string +): boolean => { + if (!searchQuery) return true; + + const { full_name, job } = observable; + + return ( + full_name?.toLowerCase().includes(searchQuery?.toLowerCase()) || + job?.toLowerCase().includes(searchQuery?.toLowerCase()) || + false + ); +}; + +export const searchFor = (searchText) => + createSearch(searchText, (thing: Observable) => thing.full_name); + +export const compareString = (a, b) => (a < b ? -1 : a > b); + +export const compareNumberedText = (a, b) => { + const aName = a.name; + const bName = b.name; + + // Check if aName and bName are the same except for a number at the end + // e.g. Medibot (2) and Medibot (3) + const aNumberMatch = aName.match(PATTERN_NUMBER); + const bNumberMatch = bName.match(PATTERN_NUMBER); + + if ( + aNumberMatch && + bNumberMatch && + aName.replace(PATTERN_NUMBER, '') === bName.replace(PATTERN_NUMBER, '') + ) { + const aNumber = parseInt(aNumberMatch[1], 10); + const bNumber = parseInt(bNumberMatch[1], 10); + + return aNumber - bNumber; + } + + return compareString(aName, bName); +}; diff --git a/tgui/packages/tgui/interfaces/Orbit/index.tsx b/tgui/packages/tgui/interfaces/Orbit/index.tsx new file mode 100644 index 000000000000..f0854f7bfa69 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Orbit/index.tsx @@ -0,0 +1,86 @@ +import { multiline } from '../../../common/string'; +import { useBackend, useLocalState } from '../../backend'; +import { Button, Divider, Flex, Icon, Input, Section } from '../../components'; +import { Window } from '../../layouts'; + +import { searchFor } from './helpers'; +import { OrbitData } from './types'; +import { OrbitContent } from './OrbitContent'; + +export const Orbit = (props, context) => { + const { act, data } = useBackend(context); + + const [searchText, setSearchText] = useLocalState(context, 'searchText', ''); + const [autoObserve, setAutoObserve] = useLocalState( + context, + 'autoObserve', + false + ); + + const orbitMostRelevant = () => { + const mostRelevant = [ + data.antagonists, + data.alive, + data.ghosts, + data.dead, + data.npcs, + data.misc, + data.ships, + ] + .flat() + .filter(searchFor(searchText)) + .sort()[0]; + + if (mostRelevant !== undefined) { + act('orbit', { ref: mostRelevant.ref }); + } + }; + + return ( + + +
    + + + + + + setSearchText(value)} + onEnter={(_, value) => orbitMostRelevant()} + /> + + + + + +
    + +
    +
    + ); +}; diff --git a/tgui/packages/tgui/interfaces/Orbit/types.ts b/tgui/packages/tgui/interfaces/Orbit/types.ts new file mode 100644 index 000000000000..4912ae10db4c --- /dev/null +++ b/tgui/packages/tgui/interfaces/Orbit/types.ts @@ -0,0 +1,38 @@ +import { BooleanLike } from '../../../common/react'; + +export type Antagonist = Observable & { antag: string; antag_group: string }; + +export type AntagGroup = [string, Antagonist[]]; + +export type OrbitData = { + alive: Observable[]; + antagonists: Antagonist[]; + critical: Critical[]; + dead: Observable[]; + ghosts: Observable[]; + misc: Observable[]; + npcs: Observable[]; + ships: Observable[]; + orbiting: Observable | null; + autoObserve: boolean; +}; + +export type Observable = { + full_name: string; + ref: string; + // Optionals +} & Partial<{ + client: BooleanLike; + extra: string; + health: number; + icon: string; + job: string; + name: string; + orbiters: number; +}>; + +type Critical = { + extra: string; + full_name: string; + ref: string; +}; diff --git a/tgui/packages/tgui/interfaces/PipeDispenser.js b/tgui/packages/tgui/interfaces/PipeDispenser.js new file mode 100644 index 000000000000..61798b67306a --- /dev/null +++ b/tgui/packages/tgui/interfaces/PipeDispenser.js @@ -0,0 +1,193 @@ +import { classes } from 'common/react'; +import { useBackend, useLocalState } from '../backend'; +import { + Box, + Button, + ColorBox, + Flex, + LabeledList, + Section, + Tabs, +} from '../components'; +import { Window } from '../layouts'; + +const ROOT_CATEGORIES = ['Atmospherics', 'Disposals', 'Transit Tubes']; + +const ICON_BY_CATEGORY_NAME = { + 'Atmospherics': 'wrench', + 'Disposals': 'trash-alt', + 'Transit Tubes': 'bus', + 'Pipes': 'grip-lines', + 'Disposal Pipes': 'grip-lines', + 'Devices': 'microchip', + 'Heat Exchange': 'thermometer-half', + 'Station Equipment': 'microchip', +}; + +const PAINT_COLORS = { + grey: '#bbbbbb', + amethyst: '#a365ff', + blue: '#4466ff', + brown: '#b26438', + cyan: '#48eae8', + dark: '#808080', + green: '#1edd00', + orange: '#ffa030', + purple: '#b535ea', + red: '#ff3333', + violet: '#6e00f6', + yellow: '#ffce26', +}; + +export const PipeDispenser = (props, context) => { + const { act, data } = useBackend(context); + const { + category: rootCategoryIndex, + categories = [], + selected_color, + piping_layer, + mode, + } = data; + const previews = data.preview_rows.flatMap((row) => row.previews); + const [categoryName, setCategoryName] = useLocalState( + context, + 'categoryName' + ); + const shownCategory = + categories.find((category) => category.cat_name === categoryName) || + categories[0]; + return ( + + +
    + + + {ROOT_CATEGORIES.map((categoryName, i) => ( +
    + + +
    + {rootCategoryIndex === 0 && ( + + {[1, 2, 3, 4, 5].map((layer) => ( + + act('piping_layer', { + piping_layer: layer, + }) + } + /> + ))} + + )} + + {previews.map((preview) => ( + + ))} + +
    +
    + +
    + + {categories.map((category, i) => ( + setCategoryName(category.cat_name)} + > + {category.cat_name} + + ))} + + {shownCategory?.recipes.map((recipe) => ( + + act('pipe_type', { + pipe_type: recipe.pipe_index, + category: shownCategory.cat_name, + }) + } + /> + ))} +
    +
    +
    +
    +
    + ); +}; diff --git a/tgui/yarn.lock b/tgui/yarn.lock index faa07b26931d..6bb17b2fc675 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" @@ -2737,14 +2951,14 @@ __metadata: languageName: node linkType: hard -"axios@npm:^1.6.0": - version: 1.6.1 - resolution: "axios@npm:1.6.1" +"axios@npm:^1.7.4": + version: 1.7.5 + resolution: "axios@npm:1.7.5" dependencies: - follow-redirects: ^1.15.0 + follow-redirects: ^1.15.6 form-data: ^4.0.0 proxy-from-env: ^1.1.0 - checksum: 573f03f59b7487d54551b16f5e155d1d130ad4864ed32d1da93d522b78a57123b34e3bde37f822a65ee297e79f1db840f9ad6514addff50d3cbf5caeed39e8dc + checksum: 2859fe01437cf133eee35571abc1d4b5224bb13e530e66cb3581ca226e170541dd5eef9f46abb41592cee0a2f54930c9e4978354e0cf1064748fc20d9a05e9d5 languageName: node linkType: hard @@ -2954,12 +3168,12 @@ __metadata: languageName: node linkType: hard -"braces@npm:^3.0.1, braces@npm:~3.0.2": - version: 3.0.2 - resolution: "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: - fill-range: ^7.0.1 - checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459 + fill-range: ^7.1.1 + checksum: b95aa0b3bd909f6cd1720ffcf031aeaf46154dd88b4da01f9a1d3f7ea866a79eba76a6d01cbc3c422b2ee5cdc39a4f02491058d5df0d7bf6e6a162a832df1f69 languageName: node linkType: hard @@ -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" @@ -4482,12 +4748,12 @@ __metadata: languageName: node linkType: hard -"fill-range@npm:^7.0.1": - version: 7.0.1 - resolution: "fill-range@npm:7.0.1" +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" dependencies: to-regex-range: ^5.0.1 - checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917 + checksum: b4abfbca3839a3d55e4ae5ec62e131e2e356bf4859ce8480c64c4876100f4df292a63e5bb1618e1d7460282ca2b305653064f01654474aa35c68000980f17798 languageName: node linkType: hard @@ -4548,13 +4814,13 @@ __metadata: languageName: node linkType: hard -"follow-redirects@npm:^1.15.0": - version: 1.15.4 - resolution: "follow-redirects@npm:1.15.4" +"follow-redirects@npm:^1.15.6": + version: 1.15.6 + resolution: "follow-redirects@npm:1.15.6" peerDependenciesMeta: debug: optional: true - checksum: e178d1deff8b23d5d24ec3f7a94cde6e47d74d0dc649c35fc9857041267c12ec5d44650a0c5597ef83056ada9ea6ca0c30e7c4f97dbf07d035086be9e6a5b7b6 + checksum: a62c378dfc8c00f60b9c80cab158ba54e99ba0239a5dd7c81245e5a5b39d10f0c35e249c3379eae719ff0285fff88c365dd446fab19dee771f1d76252df1bbf5 languageName: node linkType: hard @@ -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" @@ -8579,7 +8940,7 @@ resolve@^2.0.0-next.3: version: 0.0.0-use.local resolution: "tgui-dev-server@workspace:packages/tgui-dev-server" dependencies: - axios: ^1.6.0 + axios: ^1.7.4 glob: ^7.1.7 source-map: ^0.7.3 stacktrace-parser: ^0.1.10 @@ -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/UpdatePaths/Scripts/17256_NEWFOOD_cakebreadnoodle.txt b/tools/UpdatePaths/Scripts/17256_NEWFOOD_cakebreadnoodle.txt new file mode 100644 index 000000000000..b8cec913eef2 --- /dev/null +++ b/tools/UpdatePaths/Scripts/17256_NEWFOOD_cakebreadnoodle.txt @@ -0,0 +1,22 @@ +/obj/item/food/bread : /obj/item/food/bread/plain{@OLD} +/obj/item/food/bread/@SUBTYPES : /obj/item/food/bread/@SUBTYPES{@OLD} +/obj/item/food/breadslice : /obj/item/food/breadslice/plain{@OLD} +/obj/item/food/breadslice/@SUBTYPES : /obj/item/food/breadslice/@SUBTYPES{@OLD} +/obj/item/food/cake : /obj/item/food/cake/plain{@OLD} +/obj/item/food/cake/@SUBTYPES : /obj/item/food/cake/@SUBTYPES{@OLD} +/obj/item/food/cakeslice : /obj/item/food/cakeslice/plain{@OLD} +/obj/item/food/cakeslice/@SUBTYPES : /obj/item/food/cakeslice/@SUBTYPES{@OLD} + +/obj/item/reagent_containers/food/snacks/cherrycupcake/blue : /obj/item/reagent_containers/food/snacks/cherrycupcake/blue{@OLD} + +/obj/item/food/spaghetti : /obj/item/food/spaghetti/raw{@OLD} +/obj/item/food/spaghetti/@SUBTYPES : /obj/item/food/spaghetti/@SUBTYPES{@OLD} + +/obj/item/food/garlicbread : /obj/item/food/garlicbread{@OLD} +/obj/item/food/butterbiscuit : /obj/item/food/butterbiscuit{@OLD} +/obj/item/food/butterdog : /obj/item/food/butterdog{@OLD} + +/obj/item/food/baguette : /obj/item/food/baguette{@OLD} +/obj/item/food/baguette/@SUBTYPES : /obj/item/food/baguette/@SUBTYPES{@OLD} + +/obj/item/food/deepfryholder : /obj/item/food/deepfryholder{@OLD} diff --git a/tools/UpdatePaths/Scripts/2776_cultbegone.txt b/tools/UpdatePaths/Scripts/2776_cultbegone.txt index f2297a7003e7..a4da9dcb3d80 100644 --- a/tools/UpdatePaths/Scripts/2776_cultbegone.txt +++ b/tools/UpdatePaths/Scripts/2776_cultbegone.txt @@ -32,12 +32,12 @@ /obj/item/toy/plush/narplush : /obj/item/toy/plush/lizardplushie /obj/item/bedsheet/cult : /obj/item/bedsheet/dorms -/obj/item/melee/cultblade : /obj/item/claymore/weak -/obj/item/melee/cultblade/dagger : /obj/item/kitchen/knife/combat -/obj/item/melee/cultblade/ghost : /obj/item/kitchen/knife/combat -/obj/item/toy/toy_dagger : /obj/item/kitchen/knife -/obj/item/kitchen/knife/bloodletter : /obj/item/kitchen/knife/combat -/obj/item/kitchen/ritual : /obj/item/kitchen/knife/combat +/obj/item/melee/cultblade : /obj/item/melee/sword/claymore/weak +/obj/item/melee/cultblade/dagger : /obj/item/melee/knife/combat +/obj/item/melee/cultblade/ghost : /obj/item/melee/knife/combat +/obj/item/toy/toy_dagger : /obj/item/melee/knife/kitcken +/obj/item/melee/knife/kitcken/bloodletter : /obj/item/melee/knife/combat +/obj/item/kitchen/ritual : /obj/item/melee/knife/combat /obj/item/restraints/legcuffs/bola/cult : /obj/item/restraints/legcuffs/bola /obj/effect/rune : @DELETE diff --git a/tools/UpdatePaths/Scripts/2932_melee.txt b/tools/UpdatePaths/Scripts/2932_melee.txt new file mode 100644 index 000000000000..60b81ff02b18 --- /dev/null +++ b/tools/UpdatePaths/Scripts/2932_melee.txt @@ -0,0 +1,17 @@ +/obj/item/kitchen/knife : /obj/item/melee/knife/kitchen {@OLD} +/obj/item/kitchen/knife/plastic : /obj/item/melee/knife/plastic {@OLD} +/obj/item/kitchen/knife/letter_opener : /obj/item/melee/knife/letter_opener {@OLD} +/obj/item/kitchen/knife/combat : /obj/item/melee/knife/combat {@OLD} +/obj/item/kitchen/knife/combat/bone : /obj/item/melee/knife/bone {@OLD} +/obj/item/kitchen/knife/combat/survival : /obj/item/melee/knife/survival {@OLD} +/obj/item/kitchen/knife/switchblade : /obj/item/melee/knife/switchblade {@OLD} +/obj/item/kitchen/knife/hunting : obj/item/melee/knife/hunting {@OLD} +/obj/item/kitchen/knife/shiv : obj/item/melee/knife/shiv {@OLD} + +/obj/item/spear : /obj/item/melee/spear {@OLD} +/obj/item/spear/explosive : /obj/item/melee/spear/explosive {@OLD} +/obj/item/spear/bonespear : /obj/item/melee/spear/bone {@OLD} +/obj/item/melee/spear/bonespear : /obj/item/melee/spear/bone {@OLD} + +/obj/item/claymore : /obj/item/melee/sword/claymore {@OLD} +/obj/item/claymore/bone : /obj/item/melee/sword/bone {@OLD} 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 000000000000..c39a060ffcf2 --- /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 sudo systemctl start mysql +2022-10-27T05:36:26.4727646Z mysql -u root -proot -e 'CREATE DATABASE tg_ci;' +2022-10-27T05:36:26.4728040Z mysql -u root -proot tg_ci < SQL/tgstation_schema.sql +2022-10-27T05:36:26.4728458Z mysql -u root -proot -e 'CREATE DATABASE tg_ci_prefixed;' +2022-10-27T05:36:26.4728905Z mysql -u root -proot tg_ci_prefixed < SQL/tgstation_schema_prefixed.sql +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 sudo dpkg --add-architecture i386 +2022-10-27T05:36:28.8182655Z sudo apt update || true +2022-10-27T05:36:28.8183020Z sudo apt install -o APT::Immediate-Configure=false libssl1.1:i386 +2022-10-27T05:36:28.8183412Z bash tools/ci/install_rust_g.sh +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 bash tools/ci/install_auxlua.sh +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 bash tools/ci/install_byond.sh +2022-10-27T05:36:49.3802798Z source $HOME/BYOND/byond/bin/byondsetup +2022-10-27T05:36:49.3803186Z tools/build/build --ci dm -DCIBUILDING -DANSICOLORS +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 source $HOME/BYOND/byond/bin/byondsetup +2022-10-27T05:38:00.9908714Z bash tools/ci/run_server.sh metastation +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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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]FAIL /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 000000000000..eea9b3774cac --- /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 sudo systemctl start mysql +2023-11-12T09:00:20.3452715Z mysql -u root -proot -e 'CREATE DATABASE tg_ci;' +2023-11-12T09:00:20.3453355Z mysql -u root -proot tg_ci < SQL/tgstation_schema.sql +2023-11-12T09:00:20.3454118Z mysql -u root -proot -e 'CREATE DATABASE tg_ci_prefixed;' +2023-11-12T09:00:20.3454828Z mysql -u root -proot tg_ci_prefixed < SQL/tgstation_schema_prefixed.sql +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 bash tools/ci/install_rust_g.sh +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 bash tools/ci/install_auxlua.sh +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 bash tools/ci/install_byond.sh +2023-11-12T09:00:24.7232077Z source $HOME/BYOND/byond/bin/byondsetup +2023-11-12T09:00:24.7232805Z tools/build/build --ci dm -DCIBUILDING -DANSICOLORS -WError -NWTG0001 +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 source $HOME/BYOND/byond/bin/byondsetup +2023-11-12T09:01:31.7008503Z bash tools/ci/run_server.sh tramstation +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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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]FAIL /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 PASS /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 PASS /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 PASS /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 (( 514 )) +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 echo "required-client-version=$(( $( head -n2 tgstation.dmb | tail -n1 | cut -d " " -f 4 ) ))" >> $GITHUB_OUTPUT +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 (( 514 <= 514 )) +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 000000000000..a52375357a07 --- /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 sudo systemctl start mysql +2022-11-01T15:23:22.4811432Z mysql -u root -proot -e 'CREATE DATABASE tg_ci;' +2022-11-01T15:23:22.4811815Z mysql -u root -proot tg_ci < SQL/tgstation_schema.sql +2022-11-01T15:23:22.4812211Z mysql -u root -proot -e 'CREATE DATABASE tg_ci_prefixed;' +2022-11-01T15:23:22.4812696Z mysql -u root -proot tg_ci_prefixed < SQL/tgstation_schema_prefixed.sql +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 sudo dpkg --add-architecture i386 +2022-11-01T15:23:29.0146204Z sudo apt update || true +2022-11-01T15:23:29.0146531Z sudo apt install -o APT::Immediate-Configure=false libssl1.1:i386 +2022-11-01T15:23:29.0146860Z bash tools/ci/install_rust_g.sh +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 bash tools/ci/install_auxlua.sh +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 bash tools/ci/install_byond.sh +2022-11-01T15:24:20.0691690Z source $HOME/BYOND/byond/bin/byondsetup +2022-11-01T15:24:20.0692049Z tools/build/build --ci dm -DCIBUILDING -DANSICOLORS +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 source $HOME/BYOND/byond/bin/byondsetup +2022-11-01T15:25:41.7169083Z bash tools/ci/run_server.sh tramstation +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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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]FAIL /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 PASS /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 000000000000..a1a52cdb1a3f --- /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 000000000000..b151f1888e13 --- /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 sudo systemctl start mysql +2022-11-22T05:54:21.4012678Z mysql -u root -proot -e 'CREATE DATABASE tg_ci;' +2022-11-22T05:54:21.4013012Z mysql -u root -proot tg_ci < SQL/tgstation_schema.sql +2022-11-22T05:54:21.4013358Z mysql -u root -proot -e 'CREATE DATABASE tg_ci_prefixed;' +2022-11-22T05:54:21.4013736Z mysql -u root -proot tg_ci_prefixed < SQL/tgstation_schema_prefixed.sql +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 sudo dpkg --add-architecture i386 +2022-11-22T05:54:27.1574835Z sudo apt update || true +2022-11-22T05:54:27.1575275Z sudo apt install -o APT::Immediate-Configure=false libssl1.1:i386 +2022-11-22T05:54:27.1575591Z bash tools/ci/install_rust_g.sh +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 bash tools/ci/install_auxlua.sh +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 bash tools/ci/install_byond.sh +2022-11-22T05:54:48.2495386Z source $HOME/BYOND/byond/bin/byondsetup +2022-11-22T05:54:48.2495706Z tools/build/build --ci dm -DCIBUILDING -DANSICOLORS +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 source $HOME/BYOND/byond/bin/byondsetup +2022-11-22T05:55:50.7725050Z bash tools/ci/run_server.sh metastation +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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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]FAIL /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 PASS /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 000000000000..bedb411a9124 --- /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 000000000000..d3085a67260b --- /dev/null +++ b/tools/pull_request_hooks/rerunFlakyTests.js @@ -0,0 +1,298 @@ +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 }) { + 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:(?[^[]+).*delegate:(?.+?), source:/); + if (invalidTimerMatch) { + return { + title: `Flaky test ${failGroup}: Invalid timer: ${invalidTimerMatch.groups.proc.trim()} on ${invalidTimerMatch.groups.object.trim()}`, + failures, + }; + } + + return { + title: `Flaky test ${failGroup}: ${runtime}`, + failures, + }; + } + + const hardDelMatch = failure.headline.match(/^(?\/[\w/]+) hard deleted .* times out of a total del count of/); + if (hardDelMatch) { + return { + title: `Flaky hard delete: ${hardDelMatch.groups.object}`, + failures, + }; + } + + // Try to normalize the title and remove anything that might be variable + const normalizedError = failure.headline.replace(/\s*at .+?:[0-9]+.*/g, ""); // " at code.dm:123" + + return { + title: `Flaky test ${failGroup}: ${normalizedError}`, + failures, + }; +} + +async function getExistingIssueId(graphql, context, title) { + // Hope you never have more than 100 of these open! + const { + repository: { + issues: { nodes: openFlakyTestIssues }, + }, + } = await graphql( + ` + query ($owner: String!, $repo: String!, $label: String!) { + repository(owner: $owner, name: $repo) { + issues( + labels: [$label] + first: 100 + orderBy: { field: CREATED_AT, direction: DESC } + states: [OPEN] + ) { + nodes { + number + title + body + } + } + } + } + `, + { + owner: context.repo.owner, + repo: context.repo.repo, + label: LABEL, + } + ); + + const exactTitle = openFlakyTestIssues.find((issue) => issue.title === title); + if (exactTitle !== undefined) { + return exactTitle.number; + } + + const foundInBody = openFlakyTestIssues.find((issue) => + issue.body.includes(``) + ); + if (foundInBody !== undefined) { + return foundInBody.number; + } + + return undefined; +} + +function createBody({ title, failures }, runUrl) { + return ` + + + + Flaky tests were detected in [this test run](${runUrl}). This means that there was a failure that was cleared when the tests were simply restarted. + + Failures: + \`\`\` + ${failures + .map( + (failure) => + `${failure.group}: ${failure.headline}\n\t${failure.details.join("\n")}` + ) + .join("\n")} + \`\`\` + `.replace(/^\s*/gm, ""); +} + +export async function reportFlakyTests({ github, context }) { + const failedJobsFromLastRun = await getFailedJobsForRun( + github, + context, + context.payload.workflow_run.id, + context.payload.workflow_run.run_attempt - 1 + ); + + const filteredFailingJobs = failedJobsFromLastRun.filter((job) => { + console.log(`Failing job: ${job.name}`) + return CONSIDERED_JOBS.some((title) => job.name.startsWith(title)); + }); + + // This could one day be relaxed if we face serious enough flaky test problems, so we're going to loop anyway + if (filteredFailingJobs.length !== 1) { + console.log( + "Multiple jobs failing after retry, assuming maintainer rerun." + ); + + return; + } + + for (const job of filteredFailingJobs) { + const { data: log } = + await github.rest.actions.downloadJobLogsForWorkflowRun({ + owner: context.repo.owner, + repo: context.repo.repo, + job_id: job.id, + }); + + const details = extractDetails(log); + + const existingIssueId = await getExistingIssueId( + github.graphql, + context, + details.title + ); + + if (existingIssueId !== undefined) { + // Maybe in the future, if it's helpful, update the existing issue with new links + console.log(`Existing issue found: #${existingIssueId}`); + return; + } + + await github.rest.issues.create({ + owner: context.repo.owner, + repo: context.repo.repo, + title: details.title, + labels: [LABEL], + body: createBody( + details, + `https://github.com/${context.repo.owner}/${ + context.repo.repo + }/actions/runs/${context.payload.workflow_run.id}/attempts/${ + context.payload.workflow_run.run_attempt - 1 + }` + ), + }); + } +} diff --git a/tools/pull_request_hooks/rerunFlakyTests.test.js b/tools/pull_request_hooks/rerunFlakyTests.test.js new file mode 100644 index 000000000000..6a3300ff59be --- /dev/null +++ b/tools/pull_request_hooks/rerunFlakyTests.test.js @@ -0,0 +1,45 @@ +import { strict as assert } from "node:assert"; +import fs from "node:fs"; +import { extractDetails } from "./rerunFlakyTests.js"; + +function extractDetailsFromPayload(filename) { + return extractDetails( + fs.readFileSync(`tests/flakyTestPayloads/${filename}.txt`, { + encoding: "utf8", + }) + ); +} + +const chatClient = extractDetailsFromPayload("chat_client"); +assert.equal( + chatClient.title, + "Flaky hard delete: /datum/computer_file/program/chatclient" +); +assert.equal(chatClient.failures.length, 1); + +const monkeyBusiness = extractDetailsFromPayload("monkey_business"); +assert.equal( + monkeyBusiness.title, + "Flaky test monkey_business: Cannot execute null.resolve()." +); +assert.equal(monkeyBusiness.failures.length, 1); + +const shapeshift = extractDetailsFromPayload("shapeshift"); +assert.equal( + shapeshift.title, + "Multiple errors in flaky test shapeshift_spell" +); +assert.equal(shapeshift.failures.length, 16); + +const multipleFailures = extractDetailsFromPayload("multiple_failures"); +assert.equal( + multipleFailures.title, + "Multiple flaky test failures in more_shapeshift_spell, shapeshift_spell" +); +assert.equal(multipleFailures.failures.length, 2); + +const invalidTimer = extractDetailsFromPayload("invalid_timer"); +assert.equal( + invalidTimer.title, + "Flaky test monkey_business: Invalid timer: /datum/looping_sound/proc/start_sound_loop() on /datum/looping_sound/showering" +);